如何在 R 中集成 (AUC) nls 模型和蒙特卡洛置信区间

How to integrate (AUC) nls model and Monte-Carlo confidence interval in R

我正在尝试对 R 中从 x= 0 到无穷大的非线性函数(从 nls())进行积分(求解面积)。但是,R 的积分函数调用函数 (f).

简而言之,我想做一些近似的事情:

integrate(my.nls, lower = 0L, upper = Inf)

但不幸的是,my.nls实际上是一个拟合模型对象,而不是一个函数。 我考虑过使用平滑样条进行插值,然后对结果函数进行积分。但我更愿意使用真正的 nls 函数而不是近似值。此外,鉴于积分的无限性,我必须非常小心地进行正向外推。

如果可能,理想的技术是能够整合 nls 和其他函数的结果,例如,根据传播包 predictNLS 函数。

我是 R 的新手,这只是我第二次 post 我想,如果这是一个微不足道或愚蠢的问题,或者我犯了其他错误,请原谅我。到目前为止,as.functionfunction(){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,外推中的小偏差解决了曲线下一些非常不同的值。

主要问题确实是 integrate 需要一个函数,而这不是您试图提供的。至少在这个例子中,另一个问题是积分在上升到 Inf.

时是发散的

将注意力限制在 [0, 10],对于第一种情况,我们有

integrate(function(p) 
  predict(my.nls, data.frame(x = p)),
  lower = 0, upper = 10)
# 102.0578 with absolute error < 1.1e-12

在第二个

integrate(function(p) 
  predictNLS(my.nls, newdata = data.frame(x = p), do.sim = FALSE)$summary$`Prop.97.5%`,
  lower = 0, upper = 10)
# 113.9549 with absolute error < 1.7e-06

我还添加了 do.sim = FALSE 不使用 Monte Carlo 因为这需要更长的时间,但是您当然可以调整参数(例如 Monte Carlo 的数量迭代 nsim).