使用預測功能

一旦建立了模型,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 的列,我肯定會呼叫同名的新資料。

警告

讓我們看看幾個常見的陷阱:

  1. 不在新物件中使用 data.frame:

    predict(my_mdl, newdata)
    Error in eval(predvars, data, env) : 
       numeric 'envir' arg not of length one
    
  2. 在新資料框中不使用相同的名稱:

    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