如上所述,这对于多维模型来说有点棘手。
获取一些数据(您忽略了包含可重现的示例:请参阅http://tinyurl.com/reproducible-000 ...)
library(foreign)
dat <- read.arff(url("http://www.cs.umb.edu/~rickb/files/UCI/autos.arff"))
拆分为训练和测试数据集:
train <- dat[1:150,]
test <- dat[151:nrow(dat),]
变量名称对于 R 来说有点尴尬(破折号被解释为减号运算符,因此我们必须使用反引号来保护名称):
fit <- lm(`city-mpg` ~ `peak-rpm`+horsepower+`wheel-base`,data=train)
temp_test <- predict(fit,test)
绘制预测与峰值 RPM:
par(las=1,bty="l") ## cosmetic
plot(test[["peak-rpm"]],temp_test,xlab="peak rpm",ylab="predicted")
为了添加这条线,我们必须根据其他参数的一些基线值调整截距:我们将使用平均值(另一种选择是在拟合模型之前将所有预测变量居中):
cf <- coef(fit)
abline(a=cf["(Intercept)"]+
mean(test$horsepower)*cf["horsepower"]+
mean(test$`wheel-base`)*cf["`wheel-base`"],
b=coef(fit)["`peak-rpm`"])
另一种方法是使用predict()
:
newdat <- with(test,
data.frame(horsepower=mean(horsepower),
"wheel-base"=mean(`wheel-base`),
"peak-rpm"=seq(min(`peak-rpm`),
max(`peak-rpm`),
length=41),
check.names=FALSE))
newdat["city-mpg"] <- predict(fit,newdat)
with(newdat,lines(`peak-rpm`,`city-mpg`,col=4))
(对于一条直线来说 41 点是愚蠢的——我们本来可以只使用 2 点——但如果你想绘制一些曲线,比如置信区间或非线性拟合,它会很好用。)
或者,您可以只拟合边缘模型,但实际拟合线有些不同(只有在所有预测变量相互正交时才会相同):
fit2 <- lm(`city-mpg` ~ `peak-rpm`,data=train)
abline(fit2,col="red")