Uniroot в симуляциях

Я пытаюсь найти значение, генерирующее совокупную сумму функции, равную 0 (или ближайшему к 0 значению). У меня простая формула: x - y(1-z), где z - ключевая переменная. Проблема в том, что x и y моделируются, поэтому они не остаются постоянными. Вот воспроизводимый пример:

      set.seed(96)
#Create a dataframe with x and y. x = price_b;  y = price_a
month <- 1:120 #10 years
price_a <- runif(120, min = 9500, max = 12000) #random values for price_a
price_b <- runif(120, min = 4500, max = 6500) #random values for price_b
data <- data.frame(month, price_a, price_b)

#Function to calculate the stabilization cost
cumsum_cost <- function(z) {
  cost <- price_b - price_a*(1-z)
  cumsum <- cumsum(cost)
}

#Use function with z= 0.5 and create a column with the results
cumulative_cost <- cumsum_cost(0.5)
data$stabilization_cost <- cumulative_cost

#Try to use uniroot to find which value of z generates the last value of cumulative_cost to be 0.
uniroot(cumsum_cost, lower =0, upper = 1)

Я знаю, что, поскольку значения x и y функции постоянно меняются, uniroot не найдет решения. Кто-нибудь знает, что я могу сделать в этом случае? Заранее спасибо!

1 ответ

Возможно, я неправильно понял, но вы не можете найти ответ прямо?

      z_zero <- 1-sum(price_b)/sum(price_a)
x <- cumsum_cost(z_zero)
tail(x,1)
#> [1] 6.093615e-11
Другие вопросы по тегам