#1解答例

とりあえずデータを読み込み、OLS推定を行いましょう。  “c:/documents/”のところはd01.csvが保存されているフォルダを指定してください。

> d01<-read.csv(“c:/documents/d01.csv”)
> o01<-lm(price~.-No,d01)
> summary(o01)  

Call:
lm(formula = price ~ . – No, data = d01)  

Residuals:
     Min       1Q   Median       3Q      Max
-37.5588  -7.0805  -0.2964   7.1464  39.7761  

Coefficients:
              Estimate Std. Error t value Pr(>|t|)   
(Intercept) -6.214e+03  2.615e+02 -23.765  < 2e-16 ***
areakyoto   -7.367e-02  8.357e-01  -0.088  0.92977   
areaosaka    7.763e-01  8.147e-01   0.953  0.34091   
dealer      -8.255e-01  6.675e-01  -1.237  0.21652   
modelyear    3.138e+00  1.306e-01  24.031  < 2e-16 ***
gradeGX      4.330e+00  9.242e-01   4.685 3.20e-06 ***
gradeS      -5.717e+00  9.413e-01  -6.074 1.79e-09 ***
gradeT      -1.236e+00  9.383e-01  -1.317  0.18798   
run         -2.206e-04  1.457e-05 -15.140  < 2e-16 ***
displ        2.572e-02  2.047e-03  12.565  < 2e-16 ***
AT           5.050e+00  1.546e+00   3.265  0.00113 **
audio        4.382e+00  7.837e-01   5.591 2.93e-08 ***
navi         1.122e+01  7.262e-01  15.444  < 2e-16 ***
colorbrack   1.263e+01  1.228e+00  10.284  < 2e-16 ***
colorred     1.775e+01  1.822e+00   9.743  < 2e-16 ***
colorsilver  1.015e+01  1.202e+00   8.451  < 2e-16 ***
colorwhite   6.784e+00  1.200e+00   5.653 2.06e-08 ***
damage      -5.402e+00  2.730e-01 -19.788  < 2e-16 ***
precord     -1.758e+01  1.525e+00 -11.531  < 2e-16 ***

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1  

Residual standard error: 10.47 on 981 degrees of freedom
Multiple R-squared: 0.6787,     Adjusted R-squared: 0.6728
F-statistic: 115.1 on 18 and 981 DF,  p-value: < 2.2e-16  

> AIC(o01)
[1] 7555.906  

項目変数「area」はダミー変数として扱われていおり、「areakyoto」「areaosaka」となっている。「areahyogo」がないのは、これを基準にしているから。それぞれの値は、「areahyogo」に対して「areakyoto」と「areaosaka」は推定係数だけ高いということになります。「grade」「color」も同様。
ただし変数「area」と「dealer」の係数が有意でないので、これを削除してみます。
もう一度、lm(price~.-No-area-dealer,d01)としてもよいが、updateという関数で、一度行った推定を修正することもできます。  

> o02<-update(o01,.~.-area-dealer)
> AIC(o02)
[1] 7552.933  

ほんのちょっとAICが改善した。gradeも抜いてみると  

> o03<-update(o02,.~.-grade)
> AIC(o03)
[1] 7654.08  

AICは悪化。runを自然対数をとってみると  

> o04<-update(o02,.~.-run+log(run))
> AIC(o04)
[1] 7473.465  

AICがかなり改善。結局、結果は、以下のようになる。  

> summary(o04)  

Call:
lm(formula = price ~ modelyear + grade + displ + AT + audio +
    navi + color + damage + precord + log(run), data = d01)  

Residuals:
      Min        1Q    Median        3Q       Max
-35.57573  -7.01326  -0.03811   6.72185  30.11925  

Coefficients:
              Estimate Std. Error t value Pr(>|t|)   
(Intercept) -6.192e+03  2.509e+02 -24.676  < 2e-16 ***
modelyear    3.154e+00  1.253e-01  25.177  < 2e-16 ***
gradeGX      4.118e+00  8.860e-01   4.648 3.81e-06 ***
gradeS      -5.741e+00  9.013e-01  -6.370 2.89e-10 ***
gradeT      -1.256e+00  9.008e-01  -1.395 0.163392   
displ        2.521e-02  1.966e-03  12.824  < 2e-16 ***
AT           4.951e+00  1.483e+00   3.338 0.000875 ***
audio        4.332e+00  7.510e-01   5.769 1.07e-08 ***
navi         1.149e+01  6.978e-01  16.462  < 2e-16 ***
colorbrack   1.246e+01  1.179e+00  10.565  < 2e-16 ***
colorred     1.786e+01  1.750e+00  10.203  < 2e-16 ***
colorsilver  9.646e+00  1.153e+00   8.365  < 2e-16 ***
colorwhite   6.334e+00  1.151e+00   5.503 4.76e-08 ***
damage      -5.322e+00  2.620e-01 -20.313  < 2e-16 ***
precord     -1.794e+01  1.460e+00 -12.285  < 2e-16 ***
log(run)    -6.122e+00  3.370e-01 -18.165  < 2e-16 ***

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1  

Residual standard error: 10.06 on 984 degrees of freedom
Multiple R-squared: 0.7024,     Adjusted R-squared: 0.6978
F-statistic: 154.8 on 15 and 984 DF,  p-value: < 2.2e-16  

新たな車を評価してみたい。新たな車のデータを(この場合1件だけだが)d01.csvと同じ形式で保存し、Rに読み込みます。
その後、predict関数を使って推定値を当てはめることができます。  

> o05<-predict(o04,d01)
> d02<-read.csv(“c:/home/doc/seminar/Rlesson/d02.csv”,T)
> o06<-predict(o04,d02)
> o06
       1
116.6253 

新たな車の期待値は116万円。100万円というのは、「どちらかといえば買いかな」程度の安さです。グラフに描いてみるとよくわかります。  

> plot(o05,d01$price,pch=20)
> abline(lm(d01$price~o05),col=4)
> points(o06,100,col=2,pch=19,cex=2)
> text(o06,100,”another car”,col=2,pos=4)  

prediction with OLS estimater
横軸が予測値、縦軸が実際の価格。another car は予測値に対してやや安め。

R Tips

いろんな変数を抜いたり足したりして最小のAICのモデルを探す(ステップワイズ法と言います)関数がRにはあります。stepという関数です。  

すべての変数で回帰した結果がo01に入っているとき、step(o01)でできます。  

> o04<-step(o01)  

Start:  AIC=4716.03
price ~ (No + area + dealer + modelyear + grade + run + displ +
    AT + audio + navi + color + damage + precord ) – No  

            Df Sum of Sq    RSS    AIC
– area       2       151 107709 4713.4
– dealer     1       168 107726 4715.6
<none>                   107558 4716.0
– AT         1      1169 108727 4724.8
– audio      1      3427 110985 4745.4
– grade      3     12393 119950 4819.1
– precord    1     14579 122136 4841.1
– color      4     17178 124736 4856.2
– displ      1     17311 124869 4863.3
– run        1     25130 132688 4924.0
– navi       1     26151 133709 4931.7
– damage     1     42933 150491 5049.9
– modelyear  1     63317 170875 5176.9  

Step:  AIC=4713.43
price ~ dealer + modelyear + grade + run + displ + AT + audio +
    navi + color + damage + precord  

            Df Sum of Sq    RSS    AIC
– dealer     1       175 107884 4713.1
<none>                   107709 4713.4
– AT         1      1192 108901 4722.4
– audio      1      3377 111086 4742.3
– grade      3     12292 120001 4815.5
– precord    1     14598 122307 4838.5
– color      4     17170 124880 4853.3
– displ      1     17334 125043 4860.7
– run        1     25105 132814 4920.9
– navi       1     26154 133863 4928.8
– damage     1     42791 150500 5046.0
– modelyear  1     63179 170888 5173.0  

Step:  AIC=4713.06
price ~ modelyear + grade + run + displ + AT + audio + navi +
    color + damage + precord  

            Df Sum of Sq    RSS    AIC
<none>                   107884 4713.1
– AT         1      1194 109078 4722.1
– audio      1      3328 111212 4741.4
– grade      3     12201 120085 4814.2
– precord    1     14435 122319 4836.6
– color      4     17224 125108 4853.2
– displ      1     17284 125168 4859.7
– run        1     25171 133055 4920.8
– navi       1     26255 134139 4928.9
– damage     1     42698 150582 5044.5
– modelyear  1     63035 170919 5171.2  

> summary(o04)  

Call:
lm(formula = price ~ modelyear + grade + run + displ + AT + audio +
    navi + color + damage + precord, data = d01)  

Residuals:
     Min       1Q   Median       3Q      Max
-37.5356  -7.0990  -0.1771   6.9833  39.7709  

Coefficients:
              Estimate Std. Error t value Pr(>|t|)   
(Intercept) -6.192e+03  2.611e+02 -23.712  < 2e-16 ***
modelyear    3.127e+00  1.304e-01  23.978  < 2e-16 ***
gradeGX      4.294e+00  9.218e-01   4.659 3.62e-06 ***
gradeS      -5.656e+00  9.383e-01  -6.028 2.35e-09 ***
gradeT      -1.222e+00  9.374e-01  -1.304  0.19259   
run         -2.207e-04  1.457e-05 -15.152  < 2e-16 ***
displ        2.568e-02  2.046e-03  12.556  < 2e-16 ***
AT           5.093e+00  1.543e+00   3.300  0.00100 **
audio        4.306e+00  7.815e-01   5.509 4.60e-08 ***
navi         1.123e+01  7.260e-01  15.475  < 2e-16 ***
colorbrack   1.261e+01  1.227e+00  10.273  < 2e-16 ***
colorred     1.768e+01  1.821e+00   9.704  < 2e-16 ***
colorsilver  1.011e+01  1.199e+00   8.432  < 2e-16 ***
colorwhite   6.668e+00  1.197e+00   5.568 3.32e-08 ***
damage      -5.379e+00  2.726e-01 -19.734  < 2e-16 ***
precord     -1.743e+01  1.519e+00 -11.474  < 2e-16 ***

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1  

Residual standard error: 10.47 on 984 degrees of freedom
Multiple R-squared: 0.6777,     Adjusted R-squared: 0.6728
F-statistic:   138 on 15 and 984 DF,  p-value: < 2.2e-16  

 結局、手動で求めたo02と同じモデルが得られました。しかしながら、特定の変数の対数をとるなどの工夫はやってくれませんので要注意。

おすすめ