绘制 lm 对象的 95% 置信区间
Plotting a 95% confidence interval for a lm object
如何计算和绘制 r 回归的置信区间?到目前为止,我有两个等长的数值向量 (x,y) 和一个回归对象 (lm.out)。我已经在给定 x 的情况下绘制了 y 的散点图,并将回归线添加到该图中。我正在寻找一种方法来为绘图添加 lm.out 的 95% 预测置信区间。我试过使用 predict 函数,但我什至不知道从哪里开始:/。这是我目前的代码:
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
谢谢!
编辑:我已经查看了建议的副本,但无法深入了解。
您在此处 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)
我要添加一个提示,在尝试@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 变量在新数据框中具有相同的名称
在原来的。这更容易弄清楚,因为您确实会遇到错误,但提前知道它可能会为您节省一轮调试时间。
注意:试图将其添加为评论,但没有足够的信誉点数。
如何计算和绘制 r 回归的置信区间?到目前为止,我有两个等长的数值向量 (x,y) 和一个回归对象 (lm.out)。我已经在给定 x 的情况下绘制了 y 的散点图,并将回归线添加到该图中。我正在寻找一种方法来为绘图添加 lm.out 的 95% 预测置信区间。我试过使用 predict 函数,但我什至不知道从哪里开始:/。这是我目前的代码:
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
谢谢!
编辑:我已经查看了建议的副本,但无法深入了解。
您在此处 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)
我要添加一个提示,在尝试@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 变量在新数据框中具有相同的名称 在原来的。这更容易弄清楚,因为您确实会遇到错误,但提前知道它可能会为您节省一轮调试时间。
注意:试图将其添加为评论,但没有足够的信誉点数。