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