Rでの単純回帰分析結果の見方
実習
回帰分析のやり方
head(faithful)
Rで組み込みデータのfaithfulを読み込んでhead()
関数で確認しよう。
データだけ見ても二変数間の線形関係があるかの確認は難しいので、図を描いて確認しよう。
win.graph(6,3)
par(mfrow=c(1,2))
plot(faithful, main ="faithful",asp=T)
plot(faithful, main ="faithful")
points(head(faithful),col='red',pch=19)
左側は縦横の比が一定に保たれているが、正確なグラフだが見にくい。右側は見やすいように比を調整したグラフで、その中で赤い点はhead()
関数で確認した最初の6番目までのデータだ。
点が打たれている様子を見ると、二変数が線形関係にあると推測できるので、単純回帰分析を通して確認しよう。回帰分析をするためには、lm()
関数に線形モデルを入力しなければならないが、例の場合はeruptions
でwaiting
を分析するため、下記のように入力する。
out1<-lm(waiting~eruptions,data=faithful); summary(out1)
結果解釈
summary()
関数を使うと、回帰分析結果の要約が出力される。
四角で強調されていない部分は相対的に重要ではなく、特に単純回帰分析ではさらに注意を要しない。
- (1) 残差Residuals: 知らなくてもいい。残差分析のために回帰分析の仮定が満たされているかを確認するために必要だが、単純回帰分析では重要ではない。
- (2) 推定値Estimate: これがまさに回帰係数で、(Intercept)は回帰直線の $y$ 切片、eruptionsは傾きを表す。式で表すと、 $$ \text{(waiting)} = 33.4744 + 10.7296 \cdot \text{(eruptions)} + \varepsilon $$
- (3) 標準誤差Std. Error: 知らなくてもいい。推定値の標準誤差で、これを使用して回帰係数の信頼区間を求めることができる。
- (4) t値: 知らなくてもいい。推定値を標準誤差で割った値で、自由度 $n-2$ のt分布に従う検定統計量になる。これにより、回帰係数が統計学的に有意かどうかの仮説検定を行うことができる。
- (5) p値pr(>|t|): この値が小さいということは、回帰係数が有意であり、相関関係があることを示したい場合は、値が小さいほど良い。この値の小さい程度により、下にあるSignif. codesに従って点が打たれることになる。通常、有意水準は5%とされるので、点が一つでも打たれていれば相関関係があると見なせる。この値が大きく、回帰関係がないことが判明した場合は、回帰係数がどのように求められたとしても統計学的には意味がない。このp値はt分布から出たものなので、pr(>|t|)という表現が適切であることがわかる。
- (6) 説明力Multiple R-squared: この分析がデータをどれだけよく説明しているかを示す尺度で、高ければ高いほど良い。この場合、全体のデータの81%を説明していると考えても問題ない。
可視化
それでは、回帰直線を自分で描いて、回帰分析が本当にうまく行われたか目で確認しよう。
win.graph(6,3)
par(mfrow=c(1,2))
plot(faithful, main ="faithful",asp=T)
abline(out1,col='#47C83E',lwd=2)
plot(faithful, main ="faithful")
abline(out1,col='#47C83E',lwd=2)
上のグラフで緑は回帰直線で、データを適切に通っていることを確認できる。
コード
以下は完全な例示コードだ。
head(faithful)
win.graph(6,3)
par(mfrow=c(1,2))
plot(faithful, main ="faithful",asp=T)
plot(faithful, main ="faithful")
points(head(faithful),col='red',pch=19)
out1<-lm(waiting~eruptions,data=faithful); summary(out1)
win.graph(6,3)
par(mfrow=c(1,2))
plot(faithful, main ="faithful",asp=T)
abline(out1,col='#47C83E',lwd=2)
plot(faithful, main ="faithful")
abline(out1,col='#47C83E',lwd=2)