Я использую пакет pracma
, в частности алгоритм поиска корней Brent-Dekker, для поиска корней функции, задающей коэффициент вариации наблюдений (CV obs), равный симуляциям (CV сим).Интервалы Brent-Dekker (pracma)
В то время как на индивидуальной основе я могу обеспечить хорошую оценку первоначального интервала (например, [a, b] в brent(f, a, b)
) для алгоритма, я имею дело с большим количеством лет/регионов/и т. Д. для которого я нахожу корень, и диапазон интервалов не так прощает - он должен быть довольно узким, насколько я встречал. Вот общая суть моего кода:
library(pracma)
CV <- function(x){ #coefficient of variation
sd(x)/mean(x)
}
fb <- function(b){ #this is my function
CV(obs)-CV(sim^b)
}
for (i in ...) { #regions
for (j in ...) { #years... etc.
obs <- some.dataframe
sim <- some.df.2
z1 <- brent(fb, 0.5,2) #where z1$root is the solution
}
}
мне интересно, если есть связанные пакеты или методы для определения начального интервала в моем цикл, или, если есть изменения, так что я могу оставить этот интервал пустого (Я не использую Python, но здесь, например, https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.brent.html интервалы являются необязательными).
Я надеюсь, что это имеет смысл, с удовольствием предоставит больше контекста.
Бен, извините, у меня недостаточно репутации, чтобы поддержать ваш ответ, но это было очень хорошее решение. Это также было проблемой, когда мое резюме было NA для начала (например, для моделирования нуля), поэтому мне также пришлось добавить дополнительную инструкцию if с помощью. Is.na, чтобы обойти проблематичные значения, которые делали интервал недействительным. Спасибо. – suntwist