使用预测功能
一旦建立了模型,predict
就是用新数据进行测试的主要功能。我们的示例将使用 mtcars
内置数据集来回归每加仑英里数以抵消位移:
my_mdl <- lm(mpg ~ disp, data=mtcars)
my_mdl
Call:
lm(formula = mpg ~ disp, data = mtcars)
Coefficients:
(Intercept) disp
29.59985 -0.04122
如果我有一个带位移的新数据源,我可以看到每加仑估算的里程数。
set.seed(1234)
newdata <- sample(mtcars$disp, 5)
newdata
[1] 258.0 71.1 75.7 145.0 400.0
newdf <- data.frame(disp=newdata)
predict(my_mdl, newdf)
1 2 3 4 5
18.96635 26.66946 26.47987 23.62366 13.11381
该过程最重要的部分是创建一个与原始数据具有相同列名的新数据框。在这种情况下,原始数据有一个标记为 disp
的列,我肯定会调用同名的新数据。
警告
让我们看看几个常见的陷阱:
-
不在新对象中使用 data.frame:
predict(my_mdl, newdata) Error in eval(predvars, data, env) : numeric 'envir' arg not of length one
-
在新数据框中不使用相同的名称:
newdf2 <- data.frame(newdata) predict(my_mdl, newdf2) Error in eval(expr, envir, enclos) : object 'disp' not found
准确性
要检查预测的准确性,你需要新数据的实际 y 值。在这个例子中,newdf
需要一个’mpg’和’disp’列。
newdf <- data.frame(mpg=mtcars$mpg[1:10], disp=mtcars$disp[1:10])
# mpg disp
# 1 21.0 160.0
# 2 21.0 160.0
# 3 22.8 108.0
# 4 21.4 258.0
# 5 18.7 360.0
# 6 18.1 225.0
# 7 14.3 360.0
# 8 24.4 146.7
# 9 22.8 140.8
# 10 19.2 167.6
p <- predict(my_mdl, newdf)
#root mean square error
sqrt(mean((p - newdf$mpg)^2, na.rm=TRUE))
[1] 2.325148