如何在R中集成(AUC)nls模型和蒙特卡罗置信区间
我试图将非线性函数(从如何在R中集成(AUC)nls模型和蒙特卡罗置信区间,r,confidence-interval,numerical-integration,nls,non-linear-regression,R,Confidence Interval,Numerical Integration,Nls,Non Linear Regression,我试图将非线性函数(从nls())从x=0到R中的无穷大进行积分(解析下的区域)。但是,R的积分函数调用函数(f) 简而言之,我想做一些近似的事情: integrate(my.nls, lower = 0L, upper = Inf) 但不幸的是,my.nls实际上是一个合适的模型对象,而不是一个函数。 我考虑使用平滑样条插值,然后对结果函数进行积分。但我更喜欢使用真正的nls函数,而不是近似值。此外,考虑到积分的无限性,我必须非常小心正向外推 如果可能,理想的技术是能够整合nls和其他函数的
nls()
)从x=0到R中的无穷大进行积分(解析下的区域)。但是,R的积分函数调用函数(f
)
简而言之,我想做一些近似的事情:
integrate(my.nls, lower = 0L, upper = Inf)
但不幸的是,my.nls
实际上是一个合适的模型对象,而不是一个函数。
我考虑使用平滑样条插值,然后对结果函数进行积分。但我更喜欢使用真正的nls函数,而不是近似值。此外,考虑到积分的无限性,我必须非常小心正向外推
如果可能,理想的技术是能够整合nls和其他函数的结果,例如,根据传播包的predictNLS
函数计算的模拟97.5%置信区间下的面积
我对R比较陌生,这只是我的第二篇文章,所以,我想,如果这是一个琐碎或愚蠢的问题,或者我犯了其他罪,请原谅我。到目前为止,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)
####组成一些数据
x主要的问题确实是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
集成(函数(p)
预测(my.nls,data.frame(x=p)),
下=0,上=10)
#102.0578,绝对误差<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
集成(函数(p)
predictNLS(my.nls,newdata=data.frame(x=p),do.sim=FALSE)$summary$`Prop.97.5%`,
下=0,上=10)
#113.9549,绝对误差<1.7e-06
其中,我还添加了do.sim=FALSE
以避免使用蒙特卡罗,因为这需要花费较长的时间,但您当然可以调整参数(例如,蒙特卡罗迭代次数nsim
)。非常有用,应该很容易适应我的“真实”问题。在我的实验中,我差点就从predict定义了一个函数,但语法不太正确。谢谢!