我需要使用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)
答案 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=
):