重回帰分析のやり方

いろいろな方法があるが、それぞれ見ていくことにする。ここではlog.mid.priceをmhw(mid rangeのhorse.power)とmid rangeのdisplacementで回帰することとする。

授業で習ったやり方

授業で習ったやり方はこんな感じ。cbindはベクトルを束ねて、行列にするような関数。

lsfit(cbind(mhw,mid.displacement),log.mid.price)

これを元に様々な情報を得ることが出来る。例えば、回帰係数を出したければ以下のようにする。interceptは切片項のことである。

lsfit(cbind(mhw,mid.displacement),log.mid.price)$coef
       Intercept              mhw mid.displacement 
       8.8390413        6.8435105        0.1805099 

残差を求めたければ、以下のようにする。

lsfit(cbind(mhw,mid.displacement),log.mid.price)$residuals
#lsfit(cbind(mhw,mid.displacement),log.mid.price)$resでのいける

回帰した係数の標準偏差を求めたければ、以下のコマンドを。

ls.diag(lsfit(cbind(mhw,mid.displacement),log.mid.price))$std.err

これまで説明した係数を求めるやつと係数の標準偏差より、各係数のt値を求めてみる。

lsfit(cbind(mhw,mid.displacement),log.mid.price)$coef/ls.diag(lsfit(cbind(mhw,mid.displacement),log.mid.price))$std.err
                      [,1]
Intercept        127.40636
mhw               13.02275
mid.displacement  12.12672

このようにして求めることができる。このやり方は何も間違っていないが、実際のデータか解析をやることを考えると結構面倒なのも、また事実である。ということでこれをやるための簡単なやり方が下のやり方。

簡単なやり方

lmという関数を使うともっと簡単にできる。「従属変数~説明変数1+説明変数2」という感じの書き方をする。cbindとかはいらない。線形で回帰したい場合は「+」のところをいじらないこと。lsfitでやっていたのと同じことをlmを使ってやってみる。

lm(log.mid.price~mhw+mid.displacement)

Call:
lm(formula = log.mid.price ~ mhw + mid.displacement)

Coefficients:
     (Intercept)               mhw  mid.displacement  
          8.8390            6.8435            0.1805  

lsfitでやったものと同じ係数を得ることができた。もっと詳細な情報を得たければ、summaryという関数を使う。

summary(lm(log.mid.price~mhw+mid.displacement))

Call:
lm(formula = log.mid.price ~ mhw + mid.displacement)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.02233 -0.17670 -0.01824  0.18200  0.87581 

Coefficients:
                 Estimate Std. Error t value Pr(>|t|)    
(Intercept)       8.83904    0.06938  127.41   <2e-16 ***
mhw               6.84351    0.52550   13.02   <2e-16 ***
mid.displacement  0.18051    0.01489   12.13   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

Residual standard error: 0.2704 on 259 degrees of freedom
Multiple R-Squared: 0.6593,	Adjusted R-squared: 0.6567 
F-statistic: 250.6 on 2 and 259 DF,  p-value: < 2.2e-16 

標準偏差、t値も出すことができた。また、このやり方だと決定係数も一度に知ることができて、解析を簡単にすることができる。ちなみに、見方が分からないと困るので一応書いておく。

Coefficients 係数
Estimated 推定された係数の値
Std. Erro 推定された係数の標準偏差
t value t値
Multiple R-Squared 決定係数
Adjusted R-squared 自由度修正済決定係数

また、lmした結果をplotすると様々な情報を見ることができるようである。

plot(lm(log.mid.price~mhw+mid.displacement))