第5回(11月12日) Task Check and Weekly Assignment

回帰分析

To Do

□ 単回帰分析をやってみる □ 重回帰分析をやってみる

Assignment

■ 投手のデータ(base_pitch.csv)で年俸を予測する最も適切で良いモデルを作ってください。

まずはデータセットを読み込んでください。これはプロ野球選手のデータで, 2013年の成績,年俸などが含まれているデータセットです。出典はこちら。>>http://baseball-data.com/

batter <- read.csv("base_bat.csv", na.strings = "NA")
summary(batter)
##      money            year            age           hight    
##  Min.   : 8600   Min.   : 1.00   Min.   :24.0   Min.   :169  
##  1st Qu.:11375   1st Qu.: 7.75   1st Qu.:30.0   1st Qu.:177  
##  Median :16000   Median :12.00   Median :32.5   Median :180  
##  Mean   :17488   Mean   :11.12   Mean   :33.4   Mean   :181  
##  3rd Qu.:20000   3rd Qu.:15.25   3rd Qu.:37.0   3rd Qu.:184  
##  Max.   :57000   Max.   :25.00   Max.   :42.0   Max.   :196  
##  NA's   :5       NA's   :5       NA's   :5      NA's   :5    
##      weight          daritu          shiai         daseki        dasuu    
##  Min.   : 67.0   Min.   :0.185   Min.   :  9   Min.   : 10   Min.   : 10  
##  1st Qu.: 80.8   1st Qu.:0.230   1st Qu.: 69   1st Qu.:238   1st Qu.:212  
##  Median : 87.5   Median :0.266   Median :108   Median :424   Median :374  
##  Mean   : 88.4   Mean   :0.262   Mean   :102   Mean   :395   Mean   :347  
##  3rd Qu.: 94.0   3rd Qu.:0.290   3rd Qu.:141   3rd Qu.:581   3rd Qu.:508  
##  Max.   :130.0   Max.   :0.333   Max.   :144   Max.   :658   Max.   :590  
##  NA's   :5                                                                
##       anda           HR         datgen          steal      
##  Min.   :  2   Min.   : 0   Min.   :  1.0   Min.   : 0.00  
##  1st Qu.: 50   1st Qu.: 2   1st Qu.: 17.0   1st Qu.: 0.00  
##  Median : 88   Median : 6   Median : 40.0   Median : 1.00  
##  Mean   : 95   Mean   :10   Mean   : 45.7   Mean   : 5.65  
##  3rd Qu.:147   3rd Qu.:16   3rd Qu.: 67.0   3rd Qu.: 6.00  
##  Max.   :180   Max.   :41   Max.   :136.0   Max.   :47.00  
##                                                            
##       four            dead             K              gida      
##  Min.   :  0.0   Min.   : 0.00   Min.   :  3.0   Min.   : 0.00  
##  1st Qu.: 16.0   1st Qu.: 1.00   1st Qu.: 38.0   1st Qu.: 0.00  
##  Median : 33.0   Median : 2.00   Median : 54.0   Median : 1.00  
##  Mean   : 38.8   Mean   : 3.63   Mean   : 62.6   Mean   : 3.19  
##  3rd Qu.: 54.0   3rd Qu.: 5.00   3rd Qu.: 81.0   3rd Qu.: 5.00  
##  Max.   :105.0   Max.   :15.00   Max.   :164.0   Max.   :19.00  
## 

「グラウンドには銭が埋まっている」とかいいますが,ホームラン一本打ったらどれぐらい年俸が上がるのでしょうか。 ホームランはHR13,年俸はmoney13という変数に入っていますので,まずこの2変数間に相関があるかどうか調べましょう。

cor(batter$HR, batter$money, use = "complete.obs")
## [1] 0.3807
plot(batter$HR, batter$money)

plot of chunk unnamed-chunk-2

相関係数は0.38と,そこそこ関係がああるようです。しかし,相関があることはわかっても,一本のホームランがいくらになるかはわかりません。これを明らかにするには,回帰分析という方法を使います。 回帰分析は次のようにして行います。

reg <- lm(money ~ HR, data = batter)
reg
## 
## Call:
## lm(formula = money ~ HR, data = batter)
## 
## Coefficients:
## (Intercept)           HR  
##       14059          328

これは直線の関数,すなわち一次関数y=ax+bをデータに当てはめたことを意味します。 結果から,年俸=328.4×本塁打+14058.7という関係が分かります。

直線の関数ですから,散布図この線を書き足すと,次のようになります。

plot(batter$HR, batter$money)
abline(reg, col = "red")

plot of chunk unnamed-chunk-4

回帰分析のレポートには,当てはまりのよさ(適合度)を入れる必要があります。 当てはまりの良さは重相関係数の二乗(Multiple R-squared)で表現します。

summary(reg)
## 
## Call:
## lm(formula = money ~ HR, data = batter)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -13255  -4733   -601   2949  32431 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    14059       1606    8.75  1.2e-11 ***
## HR               328        113    2.91   0.0054 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7870 on 50 degrees of freedom
##   (5 observations deleted due to missingness)
## Multiple R-squared:  0.145,  Adjusted R-squared:  0.128 
## F-statistic: 8.47 on 1 and 50 DF,  p-value: 0.00537

これを見ると0.1449であり,年俸の分散の14%しか本塁打が説明していないことがわかります(86%は別の要因)。

ホームランだけでは説明できないようで,説明する変数を増やしたいと思います。 複数の変数で説明するのが重回帰分析といい,モデルの書き方は次の通りです。

reg2 <- lm(money ~ HR + hight + weight, data = batter)
reg2
## 
## Call:
## lm(formula = money ~ HR + hight + weight, data = batter)
## 
## Coefficients:
## (Intercept)           HR        hight       weight  
##       82680          296         -511          273
summary(reg2)
## 
## Call:
## lm(formula = money ~ HR + hight + weight, data = batter)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -13497  -4340   -988   3777  30309 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)    82680      46449    1.78    0.081 .
## HR               296        125    2.36    0.022 *
## hight           -511        294   -1.74    0.089 .
## weight           273        134    2.04    0.047 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7680 on 48 degrees of freedom
##   (5 observations deleted due to missingness)
## Multiple R-squared:  0.218,  Adjusted R-squared:  0.169 
## F-statistic: 4.47 on 3 and 48 DF,  p-value: 0.0076

しかしこれでは,もし単位が違ったら,大きさを過大・過小評価してしまいます。 そこで,データの標準化を考えます。

head(batter)
##   money year age hight weight daritu shiai daseki dasuu anda HR datgen
## 1 13000   19  37   181     90  0.245    73    216   184   45  5     24
## 2 25000    1  36   185    101  0.243   143    604   478  116 26     94
## 3    NA   NA  NA    NA     NA  0.265    62    201   185   49 11     33
## 4 20000    5  32   188    102  0.333   134    558   483  161 41    136
## 5 14000    2  31   191    118  0.233    55    171   150   35  1     16
## 6  9300    2  35   175     88  0.319   144    623   518  165  4     55
##   steal four dead   K gida
## 1     0   27    0  42    1
## 2     4  105   15 164    0
## 3     0   10    2  45    0
## 4     1   62    9 118    0
## 5     0   15    5  52    0
## 6    40   85    7  87    8
batter.z <- scale(batter)
batter.z <- data.frame(batter.z)
head(batter.z)
##     money   year     age    hight   weight   daritu   shiai  daseki
## 1 -0.5324  1.306  0.8604  0.01485  0.13479 -0.44883 -0.7315 -0.9188
## 2  0.8910 -1.675  0.6249  0.78727  1.08666 -0.50147  1.0194  1.0699
## 3      NA     NA      NA       NA       NA  0.07758 -1.0067 -0.9957
## 4  0.2979 -1.013 -0.3170  1.36658  1.17320  1.86735  0.7943  0.8341
## 5 -0.4138 -1.510 -0.5525  1.94589  2.55774 -0.76467 -1.1818 -1.1494
## 6 -0.9713 -1.510  0.3894 -1.14377 -0.03827  1.49887  1.0444  1.1672
##     dasuu    anda      HR  datgen   steal    four    dead       K    gida
## 1 -0.9555 -0.9385 -0.5232 -0.7096 -0.5578 -0.4492 -0.8973 -0.5943 -0.4825
## 2  0.7705  0.3928  1.6743  1.5811 -0.1628  2.5098  2.8090  2.9260 -0.7025
## 3 -0.9496 -0.8635  0.1046 -0.4151 -0.5578 -1.0942 -0.4031 -0.5077 -0.7025
## 4  0.7998  1.2365  3.2440  2.9556 -0.4591  0.8785  1.3265  1.5987 -0.7025
## 5 -1.1551 -1.1260 -0.9418 -0.9714 -0.5578 -0.9045  0.3381 -0.3058 -0.7025
## 6  1.0053  1.3115 -0.6279  0.3049  3.3921  1.7511  0.8323  0.7042  1.0576
summary(batter.z)
##      money             year             age             hight       
##  Min.   :-1.054   Min.   :-1.675   Min.   :-2.201   Min.   :-2.302  
##  1st Qu.:-0.725   1st Qu.:-0.557   1st Qu.:-0.788   1st Qu.:-0.758  
##  Median :-0.177   Median : 0.147   Median :-0.199   Median :-0.178  
##  Mean   : 0.000   Mean   : 0.000   Mean   : 0.000   Mean   : 0.000  
##  3rd Qu.: 0.298   3rd Qu.: 0.685   3rd Qu.: 0.860   3rd Qu.: 0.498  
##  Max.   : 4.687   Max.   : 2.300   Max.   : 2.038   Max.   : 2.911  
##  NA's   :5        NA's   :5        NA's   :5        NA's   :5       
##      weight           daritu           shiai            daseki      
##  Min.   :-1.855   Min.   :-2.028   Min.   :-2.332   Min.   :-1.975  
##  1st Qu.:-0.666   1st Qu.:-0.844   1st Qu.:-0.832   1st Qu.:-0.806  
##  Median :-0.082   Median : 0.104   Median : 0.144   Median : 0.147  
##  Mean   : 0.000   Mean   : 0.000   Mean   : 0.000   Mean   : 0.000  
##  3rd Qu.: 0.481   3rd Qu.: 0.736   3rd Qu.: 0.969   3rd Qu.: 0.952  
##  Max.   : 3.596   Max.   : 1.867   Max.   : 1.044   Max.   : 1.347  
##  NA's   :5                                                          
##      dasuu             anda              HR             datgen      
##  Min.   :-1.977   Min.   :-1.745   Min.   :-1.046   Min.   :-1.462  
##  1st Qu.:-0.791   1st Qu.:-0.845   1st Qu.:-0.837   1st Qu.:-0.939  
##  Median : 0.160   Median :-0.132   Median :-0.419   Median :-0.186  
##  Mean   : 0.000   Mean   : 0.000   Mean   : 0.000   Mean   : 0.000  
##  3rd Qu.: 0.947   3rd Qu.: 0.974   3rd Qu.: 0.628   3rd Qu.: 0.698  
##  Max.   : 1.428   Max.   : 1.593   Max.   : 3.244   Max.   : 2.956  
##                                                                     
##      steal             four             dead              K         
##  Min.   :-0.558   Min.   :-1.474   Min.   :-0.897   Min.   :-1.720  
##  1st Qu.:-0.558   1st Qu.:-0.867   1st Qu.:-0.650   1st Qu.:-0.710  
##  Median :-0.459   Median :-0.222   Median :-0.403   Median :-0.248  
##  Mean   : 0.000   Mean   : 0.000   Mean   : 0.000   Mean   : 0.000  
##  3rd Qu.: 0.035   3rd Qu.: 0.575   3rd Qu.: 0.338   3rd Qu.: 0.531  
##  Max.   : 4.083   Max.   : 2.510   Max.   : 2.809   Max.   : 2.926  
##                                                                     
##       gida       
##  Min.   :-0.703  
##  1st Qu.:-0.703  
##  Median :-0.482  
##  Mean   : 0.000  
##  3rd Qu.: 0.398  
##  Max.   : 3.478  
## 

ということで,あらためて。

reg3 <- lm(money ~ HR + hight + weight, data = batter.z)
reg3
## 
## Call:
## lm(formula = money ~ HR + hight + weight, data = batter.z)
## 
## Coefficients:
## (Intercept)           HR        hight       weight  
##     -0.0156       0.3360      -0.3139       0.3748
summary(reg3)
## 
## Call:
## lm(formula = money ~ HR + hight + weight, data = batter.z)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -1.601 -0.515 -0.117  0.448  3.595 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  -0.0156     0.1266   -0.12    0.903  
## HR            0.3360     0.1421    2.36    0.022 *
## hight        -0.3139     0.1808   -1.74    0.089 .
## weight        0.3748     0.1838    2.04    0.047 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.911 on 48 degrees of freedom
##   (5 observations deleted due to missingness)
## Multiple R-squared:  0.218,  Adjusted R-squared:  0.169 
## F-statistic: 4.47 on 3 and 48 DF,  p-value: 0.0076

こうして得られる標準化された回帰係数のことを特に,標準偏回帰係数と言います。 身長や体重のデータはほとんど年俸に影響していなかったことが明らかです。

変数が増えていくと,どの変数とどの変数を入れて分析しようか迷うことがあります。そんな時は統計的な当てはまりの良さの基準から,自動的に変数を選択してくれる変数選択法を使いましょう。

少し乱暴ですが,今回のデータですべての変数を説明変数にしたモデルを作ります。 その上で,ステップワイズ法による変数選択を行います。

reg.all <- lm(money ~ ., data = batter.z)
summary(reg.all)
## 
## Call:
## lm(formula = money ~ ., data = batter.z)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -1.597 -0.412 -0.186  0.374  2.189 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  -0.0280     0.1220   -0.23    0.820  
## year         -0.0262     0.2269   -0.12    0.909  
## age           0.0787     0.2076    0.38    0.707  
## hight        -0.1909     0.2057   -0.93    0.360  
## weight        0.3252     0.2363    1.38    0.177  
## daritu       -0.2035     0.3785   -0.54    0.594  
## shiai         0.0636     0.6095    0.10    0.917  
## daseki        4.0325    14.6744    0.27    0.785  
## dasuu        -2.8102    12.9760   -0.22    0.830  
## anda         -0.5087     1.8583   -0.27    0.786  
## HR            0.5498     0.4673    1.18    0.247  
## datgen       -0.2993     0.8109   -0.37    0.714  
## steal        -0.0138     0.2207   -0.06    0.951  
## four         -0.0624     1.9425   -0.03    0.975  
## dead          0.0867     0.3772    0.23    0.819  
## K            -0.6777     0.3147   -2.15    0.038 *
## gida         -0.1532     0.3611   -0.42    0.674  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.864 on 35 degrees of freedom
##   (5 observations deleted due to missingness)
## Multiple R-squared:  0.487,  Adjusted R-squared:  0.253 
## F-statistic: 2.08 on 16 and 35 DF,  p-value: 0.0349
result.step <- step(reg.all)
## Start:  AIC=-1.76
## money ~ year + age + hight + weight + daritu + shiai + daseki + 
##     dasuu + anda + HR + datgen + steal + four + dead + K + gida
## 
##          Df Sum of Sq  RSS   AIC
## - four    1      0.00 26.1 -3.76
## - steal   1      0.00 26.1 -3.75
## - shiai   1      0.01 26.1 -3.74
## - year    1      0.01 26.1 -3.74
## - dasuu   1      0.04 26.2 -3.69
## - dead    1      0.04 26.2 -3.68
## - anda    1      0.06 26.2 -3.65
## - daseki  1      0.06 26.2 -3.65
## - datgen  1      0.10 26.2 -3.56
## - age     1      0.11 26.2 -3.54
## - gida    1      0.13 26.3 -3.49
## - daritu  1      0.22 26.4 -3.33
## - hight   1      0.64 26.8 -2.49
## <none>                26.1 -1.76
## - HR      1      1.03 27.2 -1.74
## - weight  1      1.41 27.6 -1.02
## - K       1      3.46 29.6  2.71
## 
## Step:  AIC=-3.76
## money ~ year + age + hight + weight + daritu + shiai + daseki + 
##     dasuu + anda + HR + datgen + steal + dead + K + gida
## 
##          Df Sum of Sq  RSS   AIC
## - steal   1      0.00 26.1 -5.75
## - shiai   1      0.01 26.1 -5.74
## - year    1      0.01 26.1 -5.74
## - anda    1      0.06 26.2 -5.65
## - datgen  1      0.11 26.2 -5.55
## - age     1      0.11 26.2 -5.54
## - dead    1      0.21 26.4 -5.33
## - daritu  1      0.22 26.4 -5.33
## - gida    1      0.56 26.7 -4.66
## - dasuu   1      0.66 26.8 -4.47
## - hight   1      0.70 26.8 -4.38
## <none>                26.1 -3.76
## - HR      1      1.20 27.3 -3.43
## - weight  1      1.56 27.7 -2.73
## - daseki  1      2.84 29.0 -0.39
## - K       1      3.47 29.6  0.73
## 
## Step:  AIC=-5.75
## money ~ year + age + hight + weight + daritu + shiai + daseki + 
##     dasuu + anda + HR + datgen + dead + K + gida
## 
##          Df Sum of Sq  RSS   AIC
## - shiai   1      0.01 26.2 -7.73
## - year    1      0.01 26.2 -7.73
## - anda    1      0.10 26.2 -7.55
## - age     1      0.11 26.3 -7.53
## - datgen  1      0.12 26.3 -7.51
## - daritu  1      0.22 26.4 -7.31
## - dead    1      0.22 26.4 -7.31
## - gida    1      0.59 26.7 -6.59
## - hight   1      0.74 26.9 -6.29
## - dasuu   1      0.84 27.0 -6.11
## <none>                26.1 -5.75
## - HR      1      1.22 27.4 -5.38
## - weight  1      1.63 27.8 -4.60
## - daseki  1      3.35 29.5 -1.48
## - K       1      5.18 31.3  1.65
## 
## Step:  AIC=-7.73
## money ~ year + age + hight + weight + daritu + daseki + dasuu + 
##     anda + HR + datgen + dead + K + gida
## 
##          Df Sum of Sq  RSS   AIC
## - year    1      0.01 26.2 -9.71
## - anda    1      0.11 26.3 -9.52
## - datgen  1      0.12 26.3 -9.50
## - age     1      0.16 26.3 -9.42
## - daritu  1      0.21 26.4 -9.31
## - dead    1      0.21 26.4 -9.30
## - gida    1      0.58 26.7 -8.59
## - hight   1      0.75 26.9 -8.26
## - dasuu   1      0.83 27.0 -8.11
## <none>                26.2 -7.73
## - HR      1      1.22 27.4 -7.35
## - weight  1      1.62 27.8 -6.60
## - daseki  1      3.83 30.0 -2.63
## - K       1      5.18 31.3 -0.33
## 
## Step:  AIC=-9.71
## money ~ age + hight + weight + daritu + daseki + dasuu + anda + 
##     HR + datgen + dead + K + gida
## 
##          Df Sum of Sq  RSS    AIC
## - anda    1      0.11 26.3 -11.50
## - datgen  1      0.12 26.3 -11.48
## - age     1      0.19 26.4 -11.35
## - daritu  1      0.21 26.4 -11.31
## - dead    1      0.22 26.4 -11.28
## - gida    1      0.58 26.7 -10.58
## - hight   1      0.76 26.9 -10.23
## - dasuu   1      0.83 27.0 -10.09
## <none>                26.2  -9.71
## - HR      1      1.22 27.4  -9.35
## - weight  1      1.98 28.1  -7.92
## - daseki  1      3.83 30.0  -4.61
## - K       1      5.75 31.9  -1.38
## 
## Step:  AIC=-11.5
## money ~ age + hight + weight + daritu + daseki + dasuu + HR + 
##     datgen + dead + K + gida
## 
##          Df Sum of Sq  RSS    AIC
## - dead    1      0.16 26.4 -13.18
## - datgen  1      0.23 26.5 -13.04
## - age     1      0.34 26.6 -12.83
## - gida    1      0.50 26.8 -12.52
## - hight   1      0.72 27.0 -12.10
## <none>                26.3 -11.50
## - HR      1      1.55 27.8 -10.52
## - daritu  1      1.67 27.9 -10.30
## - weight  1      1.87 28.1  -9.92
## - dasuu   1      2.81 29.1  -8.22
## - daseki  1      4.26 30.5  -5.68
## - K       1      6.12 32.4  -2.61
## 
## Step:  AIC=-13.18
## money ~ age + hight + weight + daritu + daseki + dasuu + HR + 
##     datgen + K + gida
## 
##          Df Sum of Sq  RSS    AIC
## - datgen  1      0.20 26.6 -14.79
## - age     1      0.36 26.8 -14.47
## - gida    1      0.43 26.9 -14.35
## - hight   1      0.80 27.2 -13.63
## <none>                26.4 -13.18
## - daritu  1      1.60 28.0 -12.13
## - HR      1      1.64 28.1 -12.06
## - weight  1      1.99 28.4 -11.41
## - dasuu   1      3.95 30.4  -7.94
## - daseki  1      5.73 32.2  -4.97
## - K       1      5.99 32.4  -4.55
## 
## Step:  AIC=-14.79
## money ~ age + hight + weight + daritu + daseki + dasuu + HR + 
##     K + gida
## 
##          Df Sum of Sq  RSS    AIC
## - age     1      0.28 26.9 -16.24
## - gida    1      0.38 27.0 -16.06
## - hight   1      0.79 27.4 -15.28
## <none>                26.6 -14.79
## - weight  1      1.79 28.4 -13.41
## - daritu  1      2.46 29.1 -12.19
## - HR      1      2.63 29.3 -11.89
## - dasuu   1      4.04 30.7  -9.44
## - daseki  1      5.55 32.2  -6.94
## - K       1      6.19 32.8  -5.91
## 
## Step:  AIC=-16.24
## money ~ hight + weight + daritu + daseki + dasuu + HR + K + gida
## 
##          Df Sum of Sq  RSS    AIC
## - gida    1      0.53 27.5 -17.22
## - hight   1      1.03 28.0 -16.28
## <none>                26.9 -16.24
## - weight  1      1.89 28.8 -14.71
## - HR      1      2.75 29.7 -13.19
## - daritu  1      2.80 29.7 -13.08
## - dasuu   1      4.60 31.5 -10.03
## - daseki  1      6.16 33.1  -7.52
## - K       1      6.70 33.6  -6.67
## 
## Step:  AIC=-17.22
## money ~ hight + weight + daritu + daseki + dasuu + HR + K
## 
##          Df Sum of Sq  RSS    AIC
## - hight   1      0.93 28.4 -17.48
## <none>                27.5 -17.22
## - weight  1      2.48 29.9 -14.72
## - daritu  1      3.19 30.6 -13.50
## - HR      1      4.11 31.6 -11.97
## - dasuu   1      4.39 31.8 -11.51
## - daseki  1      5.88 33.3  -9.13
## - K       1      6.99 34.4  -7.42
## 
## Step:  AIC=-17.48
## money ~ weight + daritu + daseki + dasuu + HR + K
## 
##          Df Sum of Sq  RSS    AIC
## <none>                28.4 -17.48
## - weight  1      1.55 29.9 -16.72
## - daritu  1      2.70 31.1 -14.75
## - HR      1      3.80 32.2 -12.96
## - dasuu   1      5.48 33.9 -10.30
## - daseki  1      7.08 35.5  -7.91
## - K       1      8.15 36.5  -6.36

最終的に残ったモデルがこちら。

summary(result.step)
## 
## Call:
## lm(formula = money ~ weight + daritu + daseki + dasuu + HR + 
##     K, data = batter.z)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -1.667 -0.456 -0.152  0.431  2.380 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -0.0268     0.1112   -0.24   0.8103    
## weight        0.2179     0.1390    1.57   0.1239    
## daritu       -0.3381     0.1633   -2.07   0.0442 *  
## daseki        4.2068     1.2559    3.35   0.0016 ** 
## dasuu        -3.5720     1.2118   -2.95   0.0051 ** 
## HR            0.4755     0.1938    2.45   0.0181 *  
## K            -0.7133     0.1984   -3.59   0.0008 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.794 on 45 degrees of freedom
##   (5 observations deleted due to missingness)
## Multiple R-squared:  0.443,  Adjusted R-squared:  0.369 
## F-statistic: 5.98 on 6 and 45 DF,  p-value: 0.000118

これでスッキリ説明できました,と思いきや,ひとつ問題があります。 重回帰分析の場合は,独立変数同士が無相関でなければなりません。 独立変数同士が相関すると,回帰係数が正確な値として推定されないからです。 これを検証するのがVIFと呼ばれる指標で,carパッケージのvif関数を使います。

library(car)
vif(result.step)
##  weight  daritu  daseki   dasuu      HR       K 
##   1.561   2.179 114.116 106.515   3.176   3.101

この数値が2.0より小さいと問題なし,10を超えるとよろしくないと言われています。 今回は打席(daseki)と安打(dasuu)が10をはるかに超えるインフレをおこしていますので,これらの変数を除外して正しく求めることにします。

reg.model <- lm(money ~ weight + HR + K, data = batter)
vif(reg.model)
## weight     HR      K 
##  1.268  2.153  1.823
result.step.last <- step(reg.model)
## Start:  AIC=932.7
## money ~ weight + HR + K
## 
##          Df Sum of Sq      RSS AIC
## - weight  1  6.44e+07 2.81e+09 932
## <none>                2.75e+09 933
## - K       1  2.64e+08 3.01e+09 935
## - HR      1  5.21e+08 3.27e+09 940
## 
## Step:  AIC=931.9
## money ~ HR + K
## 
##        Df Sum of Sq      RSS AIC
## <none>              2.81e+09 932
## - K     1  2.88e+08 3.10e+09 935
## - HR    1  8.06e+08 3.62e+09 943
summary(result.step.last)
## 
## Call:
## lm(formula = money ~ HR + K, data = batter)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -12588  -4986  -1574   4016  27121 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  17876.2     2301.0    7.77  4.3e-10 ***
## HR             547.4      146.1    3.75  0.00047 ***
## K              -93.5       41.7   -2.24  0.02969 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7580 on 49 degrees of freedom
##   (5 observations deleted due to missingness)
## Multiple R-squared:  0.224,  Adjusted R-squared:  0.193 
## F-statistic: 7.08 on 2 and 49 DF,  p-value: 0.00198

最後には非標準化係数で示しましたが,これを見ると年俸は本塁打一本ごとに547万円上がり,三振一回で93万円下がることがわかりますね。

回帰分析は色々なシーンで使えますので,試してみてください。