线性回归的置信区间

时间:2018-06-11 20:11:26

标签: r statistics linear-regression confidence-interval

我需要使用R-lang创建线性回归的置信区间。我接受了一些教程,但结果却截然不同。就我而言,我应该得到两条线,一条在主线上方,一条在主线下方,如here所示。

不幸的是,我得到的是一些叠加的线,如here所示。

有人能帮助我理解我做错了什么吗?

以下是我的代码示例:

speed <- c(61,225,110,51,114,68,24,24,133,83,83,92,93,37,111,172,142,105,143,77,154,108,98,164,124,97,90,87,137,71,73,74,62,88,100,101,126,113,49)
length <- c(58,149,90,55,91,69,31,35,109,77,78,82,86,44,89,121,106,98,116,65,111,88,86,122,104,85,72,80,105,74,71,66,73,72,72,90,91,98,59);
cars <- data.frame(speed, length)

modelReg <- lm(length ~ speed, data = cars)

x <- cars$speed
conf_interval <- predict(modelReg, newdata =  data.frame(seq(from=min(x),to=max(x),by = 1)),interval = 'confidence')
lines(x,conf_interval[,2],lty=2)
lines(x,conf_interval[,3],lty=2)

1 个答案:

答案 0 :(得分:0)

在上面代码的前四行之后,使用Gosink的plot.add.ci函数:

# John Gosink's Intervals Plotter (from http://gosink.org/?page_id=120)
plot.add.ci <- function(x, y, interval='prediction', level=0.9, 
regressionColor='red', ...) {
    xOrder  <- order(x)
    x       <- x[xOrder]  
    y       <- y[xOrder]
    fit     <- lm(y ~ x, data=data.frame(x=x, y=y))
    newX    <- data.frame(x=jitter(x))
    fitPred <- predict.lm(fit,newdata=newX,interval=interval,level=level, ...)
    abline(lm(y ~ x), col=regressionColor)
    lines(newX$x, fitPred[,2], lty=2, ...)
    lines(newX$x, fitPred[,3], lty=2, ...)
}

plot(cars$speed,cars$length)
abline(modelReg,col="red")
plot.add.ci(speed, length, level=0.95, interval="confidence", lwd=3) 

这给出了这个图(如果你想要一个不同的置信水平,可以更改level,或者在预测间隔内删除interval=):

enter image description here