將放有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
這樣才是使用模型做預測的正確作法。