將放有baseball.csv這個資料夾設為工作目錄

B = read.csv("baseball.csv")   
B$RD = B$RS - B$RA
M = subset(B, Year < 2002)     

為了示範線性回歸的特性,MIT的課程教我們從模型的係數算預測值:

mW = lm(W ~ RD, M)
(95 - 80.8814)/0.1058
## [1] 133.4461
(713-614)*0.1058 + 80.8814
## [1] 91.3556

不過,線性回歸其實是一個特例,其它的預測性模型都沒辦法用係數來算預測值,一般而言,我們要使用模型做預測是使用perdict()這一個指令,像這樣:

predict(mW, data.frame(RD=(713-614)) )
##        1 
## 91.35217
mRS = lm(RS ~ OBP + SLG, M)
mRA = lm(RA ~ OOBP + OSLG, M)

或這樣:

predict(mRS, data.frame(OBP=0.339, SLG=0.430))   # 805
##       1 
## 804.987
predict(mRA, data.frame(OOBP=0.307, OSLG=0.373)) # 621.9
##        1 
## 621.9258
predict(mW, data.frame(RD=(805-621.9)))          # 100.2
##        1 
## 100.2471

我們有很多筆資料需要預測時,會先做一個data.frame

player = data.frame(
  Name = c('Chaves', 'Giambi', 'Menechino', 'Myers', 'Pene'),
  OBP = c(0.338, 0.391, 0.369, 0.313, 0.361),
  SLG = c(0.540, 0.450, 0.374, 0.447, 0.500),
  Salary = c(1400, 1065, 295, 800, 300) ); player
##        Name   OBP   SLG Salary
## 1    Chaves 0.338 0.540   1400
## 2    Giambi 0.391 0.450   1065
## 3 Menechino 0.369 0.374    295
## 4     Myers 0.313 0.447    800
## 5      Pene 0.361 0.500    300

然後使用perdict()指令:

player$RS = predict(mRS, player)
player
##        Name   OBP   SLG Salary       RS
## 1    Chaves 0.338 0.540   1400 976.5892
## 2    Giambi 0.391 0.450   1065 979.0491
## 3 Menechino 0.369 0.374    295 798.3652
## 4     Myers 0.313 0.447    800 760.7485
## 5      Pene 0.361 0.500    300 976.1615

這樣才是使用模型做預測的正確作法。