4講:R言語で重回帰分析をするには?

 しまうまのRでデータ分析入門【全6講】では、統計解析用のプログラミング言語Rで重回帰分析を行い、R MarkdownでPDF化するまでを解説します。

 この記事では、Rにて重回帰分析をします。とても簡単です。

1. 準備

 何も考えずに、次のコードを実行してください。

#データセットのパッケージwooldridgeを呼び出す
library(wooldridge)

#表の出力に便利なパッケージstargazerを呼び出す
library(stargazer)

 ただし、エラーが出ましたら、次のコードでパッケージをインストールしてください。

#wooldridgeのインストール
install.packages(wooldridge)

#stargazerのインストール
install.packages(stargazer)

2. 使用するデータ

 この記事では、wooldridgeにあるデータセットwage2を用います。データセットの確認は次のコードで出来ます。

#データセットの詳細を確認
?wage2

3. 重回帰分析

 重回帰分析とは、

$$YとX_1, X_2, …X_k$$

の間に

$$Y=\beta_0 +\beta_1 X_1 + \beta_2 X_2 + … + \beta_k X_k + U $$

という関係性(Uは誤差)があると仮定して、当てはまりが最もよくなるように

$$\beta_0 ,\beta_1, \beta_2, … \beta_k$$

を推定することです。詳しくは統計学か計量経済学の本を読んでください。

4. Rで重回帰分析

(1)コード

 Rで重回帰分析は次のコードで簡単にできます。

lm(目的変数 ~ 説明変数1 + 説明変数2 + ... + 説明変数k, data=データ)

(2)具体例

 データセットwage2にあるデータを用いて

$$(wage)$$

$$=\beta_0 +\beta_1 (educ)$$

$$ + \beta_2 (IQ) +\beta_3 (black)+U $$

というモデルで推定を行います。wageは月収(ドル)、educは教育年数、IQは知能指数、blackは「黒人なら1、その他なら0」というダミー変数です。

 次のコードを実行すると

lm(data=wage2, wage ~ educ  + IQ  + black)

 次の結果が表示されます。↓

 これは

$$(wage)$$

$$=4.137 +42.639 (educ) $$

$$+ 3.920 (IQ) -136.192 (black)+U $$

という式がデータとの最も当てはまりがよいと推計されたことを意味します。つまり、

  • 教育年数educが1年上がると、月収wageは43.6ドル上がる
  • IQが10上がると、月収wageは39.2ドル上がる
  • 黒人blackだと、月収wageは136ドル下がる

ということを意味します。

5. サマリーを読み解く

 とはいえ、これでは回帰分析の結果がどの程度意味あるものなのかがわかりません。そこでsummaryを使います。

#回帰分析をしてmodel0と名前をつける
model_0 <- lm(data=wage2, wage ~ educ   + IQ  + black)

#model_0の詳細をみる
summary(model_0)

 これを実行すると、次の結果が出力されます。

画像1:summary()で出せる回帰分析の結果

(2)summaryの解説

 それぞれの英語の意味は次の通りです。

  • Call:呼び出し
  • Residuals:残差。モデルの理論値と、実際の測定値の差
  • Coefficients:係数
  • Intercept:切片。β0のこと
  • Estimate:推定値。β0、β1、β2、β3のこと
  • Std. Error:標準誤差
  • t value:t値。推定値÷標準誤差
  • Pr(>|t|):P値
  • Signif. codes:「*」によるP値の表現
  • Residual standard error:残差の標準誤差
  • Multiple R-squared:決定係数
  • Adjusted R-squared:自由度調節済み決定係数
  • F-statistic:F値

6. 重回帰分析の結果を綺麗に出力する

 summaryで結果がわかっても、そのままレポートに載せるわけには行きません。そこでstargazerを使います。

(1)stargazerの出力

 先ほどのmodel_0を出力します。次のコードを打ち込みます。

stargazer(model_0, title = "Table1",out="model_1.html")

#model_0を表示
#タイトルをTable1にする
#出力結果の名前は、model_1.html。「.html」は必要

 そして、今使っている作業ディレクトリを見ると、次の「model_1.html」があります。それを開くと次の結果表が出力されています。

画像2:stargazerで出せる回帰分析の出力表

※作業ディレクトリがわからないとき

 もし作業しているディレクトリがわからなくなったら、次のコードを実行することで場所がわかります。↓

#ディレクトリの確認
getwd()

 これを実行すると、例えば次が出力されます。これは「デスクトップ(Desktop)」にある「Hello_R」というファイルが作業ディレクトリであることを意味します。↓

> getwd()
[1] "/Users/(ユーザー名)/Desktop/Hello_R"

(2)複数の回帰分析結果を表示する

 複数の回帰分析結果を載せることもできます。mode1_1からmodel_3までを作り、それを表にまとめます。

model_1 <- lm(data=wage2, wage ~ educ)
model_2 <- lm(data=wage2, wage ~ educ   + IQ )
model_3 <- lm(data=wage2, wage ~ educ   + IQ + black)


stargazer(model_1, model_2, model_3, title = "Table2",out="model_2.html", omit.stat = c("rsq", "f", "ser"))

#model_1から3までを表示
#omit.stat ~で、決定係数、F統計量、残差の標準偏差を除いた

 これで次の表が出力できます。

画像3:stargazeで出せる回帰分析の出力表(複数モデル併記)

7. さいごに

 少し長くなりましたが、回帰分析自体は下のコードで簡単に出来ます。

model <- lm(目的変数 ~ 説明変数1 + 説明変数2 + ... + 説明変数k, data=データ)
summary(model)

 次回は「5講:R Markdownでレポートを作成する

コメント欄 お気軽にコメントをお寄せください!

タイトルとURLをコピーしました