[英]R plot confidence interval lines with a robust linear regression model (rlm)
我需要为稳健的线性回归 (rlm) 模型绘制带有置信区间的散点图,我发现的所有示例仅适用于 LM。
这是我的代码:
model1 <- rlm(weightsE$brain ~ weightsE$body)
newx <- seq(min(weightsE$body), max(weightsE$body), length.out=70)
newx<-as.data.frame(newx)
colnames(newx)<-"brain"
conf_interval <- predict(model1, newdata = data.frame(x=newx), interval = 'confidence',
level=0.95)
#create scatterplot of values with regression line
plot(weightsE$body, weightsE$body)
abline(model1)
#add dashed lines (lty=2) for the 95% confidence interval
lines(newx, conf_interval[,2], col="blue", lty=2)
lines(newx, conf_interval[,3], col="blue", lty=2)
但是predict的结果并没有为上下层产生一条直线,它们更像是随机预测。
你有几个问题需要在这里解决。
rlm(weightsE$brain ~ weightsE$body)
,而是使用rlm(brain ~ body, data = weightsE)
。 否则,模型无法获取新数据进行预测。 您获得的任何预测都将由原始weightsE$body
值产生,而不是由您传递给predict
的新数据产生newx
已经是一个数据框,但由于某种原因,当您执行newdata = data.frame(x=newx)
时,您将其包装在另一个数据框中。 只需通过newx
。plot(weightsE$body, weightsE$body)
绘图,它应该是plot(weightsE$body, weightsE$brain)
将所有这些放在一起,并使用与您自己的名称相同的虚拟数据集(见下文),我们得到:
library(MASS)
model1 <- rlm(brain ~ body, data = weightsE)
newx <- data.frame(body = seq(min(weightsE$body),
max(weightsE$body), length.out=70))
conf_interval <- predict(model1, newdata = data.frame(x=newx),
interval = 'confidence',
level=0.95)
#create scatterplot of values with regression line
plot(weightsE$body, weightsE$brain)
abline(model1)
#add dashed lines (lty=2) for the 95% confidence interval
lines(newx$body, conf_interval[, 2], col = "blue", lty = 2)
lines(newx$body, conf_interval[, 3], col = "blue", lty = 2)
顺便说一句,您可以用更少的代码在 ggplot 中完成所有工作:
library(ggplot2)
ggplot(weightsE, aes(body, brain)) +
geom_point() +
geom_smooth(method = MASS::rlm)
可重现的虚拟数据
data(mtcars)
weightsE <- setNames(mtcars[c(1, 6)], c("brain", "body"))
weightsE$body <- 10 - weightsE$body
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.