Я пытаюсь интегрировать (разрешить область под) нелинейную функцию (от nls()
) от x = 0 до бесконечности в R. Однако функция интегрирования R вызывает функцию (f
).
Короче говоря, я хотел бы сделать что-то приближенное:
integrate(my.nls, lower = 0L, upper = Inf)
Но, к сожалению, my.nls
на самом деле является подобранным объектом модели, а не функцией.Я решил использовать сглаживающий сплайн для интерполяции, а затем интегрировать полученную функцию.Но я бы предпочел использовать истинную функцию NLS вместо приближения.Кроме того, учитывая бесконечную природу интегрирования, я должен быть очень осторожен с экстраполяцией в положительном направлении.
Если возможно, идеальным методом было бы уметь интегрировать результаты nls и других функций.Например, площадь под симулированным доверительным интервалом 97,5%, рассчитанная по функции predictNLS
пакета распространения.
Я довольно новичок в R, и это только мой второй пост на SO, я думаю,поэтому, пожалуйста, прости меня, если это банальный или глупый вопрос или я совершил какой-то другой грех.Пока что неуместное использование as.function
или function(){predict(my.nls()}
никуда меня не привело, и я был бы очень признателен за любую помощь.
Ниже приведен краткий пример, который должен служить иллюстрацией моей проблемы:
### Make up some data
x <- seq(from = 10, to = 1, length.out = 15)+(rnorm(15)+2)
y <- seq(from = 1, to = 10, length.out = 15)+(rnorm(15)+2)
### Fit an nls model, in this case, just a plain linear one.
my.nls <- nls(y~m*x+b, start = c(m=-1, b=100))
### Get confidence intervals from propagate package, might take a couple
#seconds to run. Only serves to illustrate the type of values, the
#function of which, I'd like to integrate (see my.preds$summary)
library(propagate)
my.preds <- predictNLS(my.nls, newdata = data.frame("x" = x))
### Integrate (totally not right, just (hopefully) illustrating
#the idea of what I'd like to do)
#exact.fn.auc <- integrate(my.nls, lower = 0L, upper = Inf)
#upperCI.fn.auc <- integrate(predictNLS(my.nls)$summary$Sim.97.5%, lower = 0L, upper = Inf)
PS: я признаю, что синтаксис в последних двух строках очень неправильный, я просто пытаюсь показать, откуда будут взяты значения, представленные функцией, если бы они были вычислены отдельно.Если есть какие-либо вопросы относительно того, к чему я клоню, задайте их, и я попытаюсь перефразировать мою проблему.
PPS: Весьма вероятно, что я делаю это совершенно не в том направлении (хотятипы моделей, которые мне нужно подобрать, на самом деле являются нелинейными (в отличие от той, что проиллюстрирована выше), и я хотел бы получить область ниже средней функции и ее доверительные интервалы в некотором роде), если у вас есть какие-либо предложения относительно другихподходы, те приветствуются.Проблема, которую я имею со сплайнами, состоит в том, что мои истинные модели становятся асимптотическими при приближении к y = 0, и, учитывая, что я собираюсь перейти к Inf, небольшие аберрации в экстраполяции разрешают некоторые действительно очень разные значения под кривой.