見出し画像

【統計ソフトR】重回帰分析

とある変数(目的変数)を他の複数の変数(説明変数)によって分析するのが重回帰分析です。今回はこれをRでやっていきます。
なお、説明変数が1つの場合には重回帰分析ではなく単回帰分析を行ないます。単回帰分析についてはこちらの記事を参照してください。


0. データの読み込み

今回は「MASS」パッケージに入っている「Boston」というデータセットを使ってみます。このデータはアメリカのボストン市の住宅データです。サンプルサイズは506で、次の14変数から成ります。
crim:町別の犯罪率
zn:25000平方フィートを超える住宅地の割合
indus:町別の非小売業の割合
chas:住宅地が川に面しているかどうか(面していれば1、そうでなければ0)
nox:一酸化窒素の濃度
rm:住宅1戸当たりの平均部屋数
age:1940年より前に建てられた家の割合
dis:家からボストン雇用センターまでの距離
rad:高速道路へのアクセス性
tax:10000ドル当たりの固定資産税率
ptratio:町別の教師と学生の比率
b:町別の黒人の割合を示す指数
lstat:低所得者人口の割合
medv:住宅価格の中央値

まずは「MASS」パッケージをインストールし、「Boston」データを読み込んでください。

install.packages("MASS") #パッケージをインストール
library(MASS) #パッケージを呼び出す
data(Boston) #データを読み込む


1. 重回帰分析の実行

ここでは「medv」(住宅の価格)を目的変数に、その他の13変数を説明変数にして重回帰分析を行ないます。

lm.Boston<-lm(medv~.,data=Boston)
summary(lm.Boston)

次のような結果が返ってきます。

画像1

表は左から順に回帰係数の推定値、標準偏差、t値、p値を意味しています。p値の横のアスタリスクが多いほど説明変数に強さがあります。
また、自由度調整済み決定係数は「Adjusted R-squared: 0.7338」とあります。一般に自由度調整済み決定係数が0.5より大きいと回帰式が成立していると言えるので、この回帰式はまあまあ上手く「medv」を説明しています。


2. 回帰係数のプロット

回帰係数の推定値「Estimate」が数値で並んでいると結果が少し見づらいですね。図示します。
回帰係数の図示化には「coefplot」パッケージに入っている「coefplot」関数を使います。

install.packages("coefplot") #パッケージのインストール
library(coefplot) #パッケージの呼び出し
coefplot(lm.Boston)

画像2

「nox」の寄与がかなり大きいですね。「rm」や「chas」も「medv」に大きな影響を与えていそうです。
一方で、「age」や「indus」、「zn」はあまり「medv」を説明していないように見えます。
では、13ある変数のうちのどれを回帰式に組み込むべきなのでしょうか。見た目だけで「age」「indus」「zn」を回帰式から削除するのは乱暴な気がしますが…


3. 最適な変数を抽出しての重回帰分析

こんな時は、「step」関数を用いることで説明力の低い変数を削除して重回帰分析をするという方法があります。

lm.Boston.step<-step(lm.Boston)
summary(lm.Boston.step)

次のような結果が返ってきます。

画像3

「lm(formula=…」を見ると、「age」と「indus」を除いた11個の変数で重回帰分析が行なわれたことがわかります。この2つは「medv」の説明には不要だったのですね。


4. 多重共変性

重回帰分析をする時は、説明変数が多ければ多いほど決定係数が高くなりがちです。そのため、ついついたくさんの説明変数を回帰式に入れたくなりますが、そうすると多重共変性の問題が生じます。
多重共変性は、説明変数間の相関が強いという問題で、正しい回帰分析ができなくなります。よって、説明変数間の相関もしっかりチェックしておかないといけません。
「car」パッケージの「vif」関数を用いて多重共変性の問題を検証します。

install.packages("car")
library(car)
vif(lm.Boston)

画像4

vifが5以上であると問題がある可能性を示唆します。「rad」と「tax」に多重共変性がみられます。より適切な回帰式算出のためにはこの2つのうち片方だけを説明変数に入れた方がよさそうですね。


以上、重回帰分析でした。今回はここまで。
別の記事で基本統計量の算出、相関と検定、図グラフの作り方、分散分析なども解説しています。

この記事が気に入ったらサポートをしてみませんか?