Я пытаюсь интегрировать (разрешить область под) нелинейную функцию (от 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: Очень вероятно, что я иду к этому совершенно не в том направлении (хотя типы моделей, которым я должен соответствовать, на самом деле нелинейны (в отличие от модели, показанной выше), и я хотел бы получить область ниже mean и ее доверительные интервалы каким-либо образом), если у вас есть предложения по другим подходам, их тоже можно приветствовать. Проблема, с которой я сталкиваюсь со сплайнами, заключается в том, что мои настоящие модели становятся асимптотическими по мере приближения к y = 0, и, учитывая, что я перехожу к Inf, небольшие аберрации при экстраполяции позволяют разрешить некоторые действительно очень разные значения под кривой.