绘制 lm 对象的 95% 置信区间

Posted

技术标签:

【中文标题】绘制 lm 对象的 95% 置信区间【英文标题】:Plotting a 95% confidence interval for a lm object 【发布时间】:2018-03-09 15:14:30 【问题描述】:

如何计算和绘制 r 回归的置信区间?到目前为止,我有两个长度相等的数值向量(x,y)和一个回归对象(lm.out)。在给定 x 的情况下,我制作了 y 的散点图,并将回归线添加到该图中。我正在寻找一种将 lm.out 的 95% 预测置信带添加到图中的方法。我试过使用预测功能,但我什至不知道从哪里开始:/。这是我目前的代码:

x=c(1,2,3,4,5,6,7,8,9,0)
y=c(13,28,43,35,96,84,101,110,108,13)

lm.out <- lm(y ~ x)

plot(x,y)

regression.data = summary(lm.out) #save regression summary as variable
names(regression.data) #get names so we can index this data
a= regression.data$coefficients["(Intercept)","Estimate"] #grab values
b= regression.data$coefficients["x","Estimate"]
abline(a,b) #add the regression line

谢谢!

编辑:我已经查看了建议的副本,但不能完全了解它。

【问题讨论】:

***.com/questions/14069629/… Plotting Confidence Intervals的可能重复 我看了一下那个,它对我帮助不大。我不认为那张海报和我在寻找同样的东西。 【参考方案1】:

你已经对新的数据向量使用了预测,这里是newx

x=c(1,2,3,4,5,6,7,8,9,0)

y=c(13,28,43,35,96,84,101,110,108,13)

lm.out <- lm(y ~ x)
newx = seq(min(x),max(x),by = 0.05)
conf_interval <- predict(lm.out, newdata=data.frame(x=newx), interval="confidence",
                         level = 0.95)
plot(x, y, xlab="x", ylab="y", main="Regression")
abline(lm.out, col="lightblue")
lines(newx, conf_interval[,2], col="blue", lty=2)
lines(newx, conf_interval[,3], col="blue", lty=2)

编辑

正如 Ben 在评论中提到的,这可以通过 matlines 完成,如下所示:

plot(x, y, xlab="x", ylab="y", main="Regression")
abline(lm.out, col="lightblue")
matlines(newx, conf_interval[,2:3], col = "blue", lty=2)

【讨论】:

你可以很快通过matlines(newx, conf_interval[,2:3], ...) @Ben Bolker 你会怎么做,我从来没用过matlines @BenBolker TIL matpointsmatlinesmatplot 的简写/points/lines 的类似物,谢谢 :) matlines 我得到了:Error in matplot(x = x, y = y, type = type, lty = lty, lwd = lwd, pch = pch, : 'x' and 'y' must have same number of rows Lines 没问题,但在剧情中没有绘制任何东西【参考方案2】:

我要添加一个提示,在尝试@Alejandro Andrade 给出的方法时,它可以让我省去很多挫折:如果您的数据在数据框中,那么当您使用lm() 构建模型时,使用 data= 参数而不是 $ 表示法。例如,使用

lm.out <- lm(y ~ x, data = mydata)

而不是

lm.out <- lm(mydata$y ~ mydata$x)

如果你做后者,那么这个语句

predict(lm.out, newdata=data.frame(x=newx), interval="confidence", level = 0.95)

似乎要么忽略使用newdata= 传递的新值,要么出现无提示错误。无论哪种方式,输出都是来自原始数据的预测,而不是新数据。

另外,请确保您的 x 变量在新数据框中具有相同的名称 在原来的。这更容易弄清楚,因为您确实会遇到错误,但提前知道它可能会为您节省一轮调试时间。

注意:尝试将此添加为评论,但没有足够的声望点。

【讨论】:

预测也有同样的问题!

以上是关于绘制 lm 对象的 95% 置信区间的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的多元回归的 95% 置信区间被绘制为黄土线?

在 R 中以 95% 的置信区间绘制密度图

如何计算 R 中线性回归模型中斜率的 95% 置信区间

怎么理解置信区间

python实现PCA降维画分类散点图并标出95%的置信区间

置信区间,置信水平/置信度