install.packages("wooldridge")
回帰分析
ここでは,母親の喫煙が新生児の出生時体重に与える影響を分析しながら,回帰分析を行う際の手順を概観する。分析に用いるのは,Jeffrey Wooldridgeの”Introductory Econometrics: A Modern Approach”で用いられているbwght
というデータである。Wooldridgeの教科書は,具体的な分析例が多く非常にわかりやすい,計量経済学の最高の入門書である。教科書のなかで用いられているデータは,Rにwooldridge
パッケージを追加することで,簡単に利用することができる。まず,wooldridge
パッケージをインストールしよう。
利用するパッケージは,tidyverse
とstargazer
とwooldridge
の3つ。
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.4 ✔ readr 2.1.5
✔ forcats 1.0.0 ✔ stringr 1.5.1
✔ ggplot2 3.5.2 ✔ tibble 3.2.1
✔ lubridate 1.9.4 ✔ tidyr 1.3.1
✔ purrr 1.0.4
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(stargazer)
Please cite as:
Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
library(wooldridge)
データの整理と要約
データの読込みと要約統計量
まず,データbwght
を読み込む。その後,データがどのようなものかを知るために,glimpse()
関数でデータの概要を表示させてみよう。
data(bwght)
glimpse(bwght)
Rows: 1,388
Columns: 14
$ faminc <dbl> 13.5, 7.5, 0.5, 15.5, 27.5, 7.5, 65.0, 27.5, 27.5, 37.5, 27.5…
$ cigtax <dbl> 16.5, 16.5, 16.5, 16.5, 16.5, 16.5, 16.5, 16.5, 16.5, 16.5, 1…
$ cigprice <dbl> 122.3, 122.3, 122.3, 122.3, 122.3, 122.3, 122.3, 122.3, 122.3…
$ bwght <int> 109, 133, 129, 126, 134, 118, 140, 86, 121, 129, 101, 133, 61…
$ fatheduc <int> 12, 6, NA, 12, 14, 12, 16, 12, 12, 16, 12, 16, NA, 12, 7, 13,…
$ motheduc <int> 12, 12, 12, 12, 12, 14, 14, 14, 17, 18, 16, 15, 12, 12, 12, 1…
$ parity <int> 1, 2, 2, 2, 2, 6, 2, 2, 2, 2, 2, 1, 3, 1, 1, 1, 1, 1, 1, 2, 1…
$ male <int> 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0…
$ white <int> 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1…
$ cigs <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ lbwght <dbl> 4.691348, 4.890349, 4.859812, 4.836282, 4.897840, 4.770685, 4…
$ bwghtlbs <dbl> 6.8125, 8.3125, 8.0625, 7.8750, 8.3750, 7.3750, 8.7500, 5.375…
$ packs <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0…
$ lfaminc <dbl> 2.6026897, 2.0149031, -0.6931472, 2.7408400, 3.3141861, 2.014…
データには,faminc
からlfaminc
まで14の変数が含まれており,サンプルサイズは1,388であることがわかる。つまり,1,388件の新生児の出生について,14項目のデータが記録されたデータである。各変数の内容は以下の通りである。
変数名 | 内容 |
---|---|
faminc |
家計収入(単位:1000ドル) |
cigtax |
居住州のたばこ税 |
cigprice |
居住州のたばこ価格 |
bwght |
出生時体重(単位:オンス) |
fatheduc |
父親の教育水準(修学年数) |
motheduc |
母親の教育水準(修学年数) |
parity |
子どもの出生順位 |
male |
男児ダミー |
white |
白人ダミー |
cigs |
母親の妊娠中の一日当たり喫煙量(本数) |
lbwght |
bwghtの対数値 |
packs |
母親の妊娠中の一日当たり喫煙量(箱数) |
lfaminc |
famincの対数値 |
次に,データの要約統計量を見ておこう。どのようなデータを分析する場合にも,まず要約統計量を確認することが重要である。もし変数に欠損値があったり,異常なデータが紛れ込んだりしている場合,要約統計量を確認することでそのことに気がつくことも多い。
summary(bwght)
faminc cigtax cigprice bwght
Min. : 0.50 Min. : 2.00 Min. :103.8 Min. : 23.0
1st Qu.:14.50 1st Qu.:15.00 1st Qu.:122.8 1st Qu.:107.0
Median :27.50 Median :20.00 Median :130.8 Median :120.0
Mean :29.03 Mean :19.55 Mean :130.6 Mean :118.7
3rd Qu.:37.50 3rd Qu.:26.00 3rd Qu.:137.0 3rd Qu.:132.0
Max. :65.00 Max. :38.00 Max. :152.5 Max. :271.0
fatheduc motheduc parity male
Min. : 1.00 Min. : 2.00 Min. :1.000 Min. :0.0000
1st Qu.:12.00 1st Qu.:12.00 1st Qu.:1.000 1st Qu.:0.0000
Median :12.00 Median :12.00 Median :1.000 Median :1.0000
Mean :13.19 Mean :12.94 Mean :1.633 Mean :0.5209
3rd Qu.:16.00 3rd Qu.:14.00 3rd Qu.:2.000 3rd Qu.:1.0000
Max. :18.00 Max. :18.00 Max. :6.000 Max. :1.0000
NA's :196 NA's :1
white cigs lbwght bwghtlbs
Min. :0.0000 Min. : 0.000 Min. :3.135 Min. : 1.438
1st Qu.:1.0000 1st Qu.: 0.000 1st Qu.:4.673 1st Qu.: 6.688
Median :1.0000 Median : 0.000 Median :4.787 Median : 7.500
Mean :0.7846 Mean : 2.087 Mean :4.760 Mean : 7.419
3rd Qu.:1.0000 3rd Qu.: 0.000 3rd Qu.:4.883 3rd Qu.: 8.250
Max. :1.0000 Max. :50.000 Max. :5.602 Max. :16.938
packs lfaminc
Min. :0.0000 Min. :-0.6931
1st Qu.:0.0000 1st Qu.: 2.6741
Median :0.0000 Median : 3.3142
Mean :0.1044 Mean : 3.0713
3rd Qu.:0.0000 3rd Qu.: 3.6243
Max. :2.5000 Max. : 4.1744
新しい変数の追加
このデータでは,新生児の出生時体重はオンスという単位で記録されている。しかし,オンスという単位にはあまり馴染みがないと思うので,これをグラムに変換しておこう。1オンスは28.3495グラムなので,以下のように新しい変数bwghtgram
を作成する。
<- bwght |>
bwght mutate(bwghtgram = bwght * 28.3495)
mutate()
関数は,新しい変数を追加したデータフレームを返す関数である。第1引数には変数を追加するデータフレーム,第2引数以降には追加したい変数を,変数名 = 定義式
の形で指定する (ここでは1つの新しい変数を作成したが,引数を追加することで同時に複数の新しい変数を作成することも可能)。すでに存在する変数名を指定した場合には,その変数の値が上書きされる。ここでは,bwght
に新しくbwghtgram
という変数を追加したデータフレームを,bwght
に上書きすることで変数を追加している。
分析する変数の分布を確認
次に,新生児の出生時体重はどのような分布になっているかを見ておこう。新しく作成したbwghtgram
のヒストグラムを作成する。
|>
bwght ggplot(aes(x = bwghtgram)) +
geom_histogram(
binwidth = 200,
color = "black",
fill = "blue"
+
) labs(
x = "出生時体重 (グラム)",
y = ""
)
ここでわれわれが分析したいのは,母親の妊娠中の喫煙数 (本数)が新生児の出生時体重に与える影響である。そこで,母親の妊娠中の喫煙量 (たばこの本数)の分布も見ておこう。
|>
bwght ggplot(aes(x = cigs)) +
geom_histogram(
binwidth = 1,
color = "black",
fill = "blue"
+
) labs(
x = "喫煙量",
y = ""
)
1,388人中1,200人に近い母親は,妊娠中に喫煙していなかったことがわかる。一方で,妊娠中に喫煙していた母親も一定数いるため,喫煙の有無と新生児の出生時体重との関係を分析することには意味がありそうだ。
そこで,母親の妊娠中の喫煙数 (本数)と新生児の出生時体重との関係を散布図で見てみよう。
|>
bwght ggplot(
aes(
x = cigs,
y = bwghtgram
)+
) geom_point() +
labs(
x = "喫煙量",
y = "出生時体重"
)
それほど明確にわかるわけではないが,母親の喫煙量が多いほど新生児の出生体重は低くなっているように見える。そこで,この2つの変数の相関係数を求めてみよう。
|>
bwght select(bwght, cigs) |>
cor()
bwght cigs
bwght 1.0000000 -0.1507618
cigs -0.1507618 1.0000000
相関係数は-0.15であり,母親の喫煙量と新生児の出生時体重には負の相関があることがわかる。
回帰分析
単回帰分析
相関係数は2変数間の線形関係の強さを表しているが,相関係数を見ても母親の喫煙量が1本増加すると平均的に新生児の出生時体重がどれだけ減少するかということを知ることはできない。そこで,さきほどの散布図に,母親の喫煙量と新生児の出生時体重の関係を近似する直線(回帰直線)を追加してみよう。
\(cigs\)の値が与えられたとき,\(bwghtgram\)の予測値\(\widehat{bwghtgram}\)を以下のような一次式で表す。 \[ \widehat{bwghtgram_i} = \hat{\beta_0} + \hat{\beta_1} cigs_i \] この近似式による新生児の出生時体重の予測値\(\widehat{bwghtgram}\)は,散布図のすべての点が一直線上に並んでいない限り,実際の\(bwghtgram\)の値とすべて一致することはない。そこで,以下の損失関数が最も小さくなるような係数\(\hat{\beta_0},\hat{\beta_1}\)を求めるのが,最小二乗法である。 \[ L(\hat{\beta_0},\hat{\beta_1}) = \sum_{i=1}^n (bwghtgram_i-\widehat{bwghtgram_i})^2 \]
ざっくりいえば,散布図上のすべての点を通る直線は引くことができないので,できるだけ当てはまりの良い直線を見つけるというのが回帰分析である。当てはまりの良さの尺度はさまざまなものが考えられるが,最小二乗法では予測値と実際の値の差(残差)の二乗の和が最も小さくなるような直線で,2変数の関係を近似する。
散布図上に回帰直線を描くだけであれば,以下のようにstat_smooth()
を追加すれば良い。
|>
bwght ggplot(
aes(
x = cigs,
y = bwghtgram
)+
) geom_point() +
stat_smooth(
method = "lm",
color = "red",
size = 1
+ # 回帰直線を描く
) labs(
x = "喫煙量",
y = "出生時体重"
)
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
ℹ Please use `linewidth` instead.
`geom_smooth()` using formula = 'y ~ x'
描かれた回帰直線は右下がりであり,母親の喫煙量が増加すれば新生児の出生時体重が減少することを示唆している。
この回帰直線の式は,lm()
関数により求めることができる。lm()
関数には,引数として回帰式とデータを渡す。回帰式はbwghtgram ~ cigs
のように,~
の左に被説明変数を,右に説明変数を書く。回帰式の計算結果はsimple_regression
というオブジェクトを作成してそこに格納し,stargazer()
関数を使って結果を表示させる。
<- lm(
simple_regression ~ cigs,
bwghtgram data = bwght
)stargazer(simple_regression, type = "text")
===============================================
Dependent variable:
---------------------------
bwghtgram
-----------------------------------------------
cigs -14.565***
(2.565)
Constant 3,395.473***
(16.226)
-----------------------------------------------
Observations 1,388
R2 0.023
Adjusted R2 0.022
Residual Std. Error 570.635 (df = 1386)
F Statistic 32.235*** (df = 1; 1386)
===============================================
Note: *p<0.1; **p<0.05; ***p<0.01
この結果は,\(\hat{\beta_0}\)が3,395.4,\(\hat{\beta_1}\)が-14.6であることを意味している。\(\hat{\beta_0}\)は定数項(Constant)や切片といわれ,\(cigs\)がゼロのときの\(\widehat{bwghtgram}\)である。\(\hat{\beta_1}\)は傾きで,\(cigs\)が1本増加したときにどれだけ\(\widehat{bwghtgram}\)が変化するかを表している。この場合,\(\hat{\beta_1}\)は-14.6であるから,母親の喫煙量が1本増加すれば,新生児の体重が14.6グラム減少するという解釈となる。
\(\hat{\beta_0}, \hat{\beta_1}\)の下の括弧内の数値は標準誤差である。係数についている*印は,係数の統計的有意性を表している。
重回帰分析
新生児の出生時体重に影響を与える要因は母親の喫煙だけではない。たとえば,家計収入は妊娠中の環境や栄養状態を通じて,新生児の出生時体重に影響を与えると考えられる。問題なのは,家計収入が低い家計の母親ほど喫煙量が多いとすれば,母親の喫煙量と新生児の出生時体重に相関があったとしても,実際に新生児の出生時体重に影響を与えているのは家計収入であって母親の喫煙量ではないかもしれないということである。そのため,家計収入が同じで母親の喫煙量が異なる場合に,新生児の出生時体重がどのように異なるかを分析することが必要である。
そこで以下のような回帰式を考えよう。 \[ \widehat{bwghtgram_i} = \hat{\beta_0} + \hat{\beta_1} cigs_i + \hat{\beta_2} faminc \] 説明変数が複数ある場合にも,最小二乗法を用いて\(\hat{\beta_0}, \hat{\beta_1}, \hat{\beta_2}\)を求めることができる。このとき,\(\hat{\beta_1}\)は,\(faminc\)を一定として\(cigs\)が1本増加したときにどれだけ\(\widehat{bwghtgram}\)が変化するかを表している。同様に,\(\hat{\beta_2}\)は\(cigs\)を一定として,\(faminc\)が1,000ドル増加したときにどれだけ\(\widehat{bwghtgram}\)が変化するかを表している。つまり重回帰分析を使えば,ほかの説明変数を一定として (計量経済学では「コントロールして」という),着目する説明変数が変化したときに被説明変数がどのように変化するかを分析することができる。
説明変数が複数ある場合には,lm()
関数の回帰式の右辺に説明変数を+
で結んで書く。たとえば,被説明変数がbwghtgram
,説明変数がcigs
とfaminc
の回帰式は,bwghtgram ~ cigs + faminic
と表す。
<- lm(
multiple_regression ~ cigs + faminc,
bwghtgram data = bwght
)stargazer(multiple_regression, type = "text")
===============================================
Dependent variable:
---------------------------
bwghtgram
-----------------------------------------------
cigs -13.137***
(2.596)
faminc 2.630***
(0.827)
Constant 3,316.158***
(29.738)
-----------------------------------------------
Observations 1,388
R2 0.030
Adjusted R2 0.028
Residual Std. Error 568.771 (df = 1385)
F Statistic 21.274*** (df = 2; 1385)
===============================================
Note: *p<0.1; **p<0.05; ***p<0.01
famincを説明変数に加えた結果,cigsの係数は単回帰の場合に比べて絶対値で少し小さくなった。すなわち,母親の喫煙量と新生児の出生時体重との相関の一部は家計収入の影響によるものである。しかし,家計収入が同じであっても,やはり母親の喫煙量が1本増加すれば新生児の出生時体重が13.1グラムは減少するということもわかる。また,母親の喫煙量が同じであれば,家計収入が1,000ドル増加すれば新生児の出生時体重が2.6グラム増加する。
もちろん,新生児の出生時体重に影響を与えるすべての要因を回帰式に含めることはできない。すべての要因がデータに記録されているわけではないからである。回帰式に含めることができない要因が説明変数と相関していれば,最小二乗法によって求めた係数にはバイアスが生じる。これを欠落変数バイアスという。
欠落変数バイアスの問題を解決することは難しいが,どのようなバイアスが生じているかを考えることが重要である。また,少なくてもデータに記録されている要因はできるだけ説明変数に加えて回帰式を推定することが望ましい。
このデータセットには,新生児の性別や出生順位,両親の教育水準,人種が記録されている。そこで,これらの情報を用いて重回帰分析を行おう。
まず,分析に利用する変数だけを含むデータフレームdataset
を作成する。
<- select(
dataset
bwght,
bwghtgram,
cigs,
lfaminc,
parity,
male,
white )
レポートや論文を書くときには,分析に利用した変数の要約統計量を示す必要がある。レポートや論文に掲載する要約統計表を作成するには,stargazer
パッケージが便利だ。
stargazer(
dataset,type = "text",
title = "要約統計表",
digits = 2,
summary.stat = c(
"n",
"mean",
"sd",
"min",
"p25",
"median",
"p75",
"max"
) )
要約統計表
============================================================================
Statistic N Mean St. Dev. Min Pctl(25) Median Pctl(75) Max
----------------------------------------------------------------------------
bwghtgram 1,388 3,365.07 577.02 652.04 3,033.40 3,401.94 3,742.13 7,682.71
cigs 1,388 2.09 5.97 0 0 0 0 50
lfaminc 1,388 3.07 0.92 -0.69 2.67 3.31 3.62 4.17
parity 1,388 1.63 0.89 1 1 1 2 6
male 1,388 0.52 0.50 0 0 1 1 1
white 1,388 0.78 0.41 0 1 1 1 1
----------------------------------------------------------------------------
次に,すべての変数を説明変数として重回帰分析を行う。
<- lm(
regression ~ cigs + lfaminc + parity + male + white,
bwghtgram data = bwght
)
stargazer(regression, type = "text")
===============================================
Dependent variable:
---------------------------
bwghtgram
-----------------------------------------------
cigs -14.056***
(2.572)
lfaminc 32.790*
(17.905)
parity 50.981***
(17.024)
male 90.104***
(30.280)
white 159.457***
(39.404)
Constant 3,038.433***
(66.918)
-----------------------------------------------
Observations 1,388
R2 0.052
Adjusted R2 0.048
Residual Std. Error 562.887 (df = 1382)
F Statistic 15.110*** (df = 5; 1382)
===============================================
Note: *p<0.1; **p<0.05; ***p<0.01
この結果の解釈は以下のようになる。
- 他の要因を一定として,母親の1日の喫煙量が1本増加すれば,新生児の出生時体重は14グラム減少する
- 他の要因を一定として,家計収入が1,000ドル増加すれば,新生児の出生時体重は33グラム増加する
- 他の要因を一定として,出生順位が1つ増加すれば,新生児の出生時体重は51グラム増加する
- 他の要因を一定として,男児の出生時体重は女児よりも90グラム重い
- 他の要因を一定として,白人の出生時体重は他の人種よりも159グラム重い
ダミー変数
上の重回帰分析で,male
やwhite
という説明変数を用いた。male
には新生児が男児であれば1,女児であれば0が記録されており,white
には新生児が白人であれば1,それ以外の人種であれば0が記録されている。このように,数値では表すことができないカテゴリ情報を0と1によって表した変数をダミー変数という。ダミー変数を説明変数に用いた場合,その係数はどのように解釈できるだろうか。
いま,単純化のために以下のような回帰式を考えよう。 \[ \widehat{bwghtgram} = \hat{\beta}_0 + \hat{\beta}_1 cigs + \hat{\beta}_2 male \] もし新生児が男児であれば,male=1であるため,この回帰式は, \[ \widehat{bwghtgram} = \hat{\beta}_0 + \hat{\beta}_1 cigs + \hat{\beta}_2 \] となる。一方で,もし新生児が女児であれば,male=0であるため,この回帰式は, \[ \widehat{bwghtgram} = \hat{\beta}_0 + \hat{\beta}_1 cigs \] となる。すなわち,新生児が男児の場合と女児の場合では,出生時体重の予測値が\(\hat{\beta}_2\)だけ異なる。したがって,maleの係数の推定値\(\hat{\beta}_2\)は,他の要因を一定として (この場合は母親の喫煙量が同じであるとして)女児に比べて男児の出生時体重がどれだけ重いかということを表している。
カテゴリが3つ以上の場合には,カテゴリ数-1だけのダミー変数を作成して説明変数に用いる。たとえば,地域として北海道,本州,四国,九州・沖縄の4つのうちのどれかが記録されている変数があるとする。この場合には,本州を基準として,北海道ダミー,四国ダミー,九州・沖縄ダミーの3つのダミー変数を作成して説明変数として用いれば良い。
このデータでは,もともと性別や人種はダミー変数 (0か1の値をとる)として記録されているが,通常は性別であれば”male”か”female”というように記録されていることが多い。その場合,変数がファクターになっていれば,そのまま回帰式に含めてやれば自動的にダミー変数に変換されて回帰分析が行われる。カテゴリが3つ以上の場合も同様で,ファクター型に変換して使用すれば,いちいちダミー変数を作成する必要はない。