R语言 求简单线性回归置信区间的根

brccelvz  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(220)

我正在寻找简单线性回归的置信区间的根。WLOG,我们可以专注于较低的置信区间。
问题:如何求简单线性回归置信区间的根,或者R(或源)中有没有函数可以解决这个问题?
心想:
首先,我们可以认识到简单线性回归的置信区间是一个二次函数,这意味着两件事:
1.最多有两个复根
1.存在闭合解
考虑到这一点,我可以想到三种可能的解决方案:
1.使用uniroot来寻找解决方案。不幸的是,这需要很强的先验知识来定义interval参数。
1.使用封闭形式的解决方案。这对于这个问题来说是非常直接的,但是我倾向于通过优化来解决。(除非它已经在R中的某个地方实现了)
1.优化,总体思路如下:
步骤1.使用optim查找最小值/最大值
第2步:使用uniroot从最小值/最大值的左右两侧查找潜在根。
也许我可以结合一些信息从价值/梯度来加快这一进程?
示例:

fit <- lm(qsec~mpg,data=mtcars)

prediction <- function(newvalue,lm_model,name){
  
  predictdata <- data.frame(newvalue)
  names(predictdata) <- name
  
  pred <- predict(lm_model,newdata=predictdata,interval = "confidence")%>%
    as.data.frame
  return(pred$lwr)
}


uniroot(prediction,interval=c(-100,100),lm_model=fit,name="mpg")$root

[1] -59.30344
w8biq8rn

w8biq8rn1#

你需要多快的速度?你需要做这个过程几千次还是几百万次?在我的系统上运行你的代码大约需要0. 012秒,包括fit本身...
这里有另一种方法--在一个很大的范围内构造下置信区间(在这个例子中,我从平均值到低于平均值20 SD),然后使用线性近似来找到(近似)根。(这需要大约0.003秒;我还没有费心去做基准测试。)

r <- with(mtcars, mean(mpg) + c(0, -20*sd(mpg)))
rvec <- seq(r[1], r[2], length.out = 501)
p <- predict(fit, newdata = data.frame(mpg = rvec),
             interval = "confidence")
approx(p[, "lwr"], rvec, xout = 0)$y

-59.3034

相关问题