Untitled

PS001
Stata 11 コマンド解説書
【基盤機能編】
目 次
機能区分
コマンド
whitepaper タイトル
一般
−
データ管理
推定機能
検定機能
テーブル作成
ページ
mwp 番号
推定機能
4
mwp-027
−
因子変数
23
mwp-028
−
日付/時間情報の入力
41
mwp-001
−
プログラミング機能
51
mwp-078
−
サーベイデータの扱い
62
mwp-079
functions
関数群
72
mwp-076
insheet
スプレッドシートの読込み
89
mwp-030
recode
コードの変換
94
mwp-033
reshape
wide/long 形式変換
100
mwp-036
ivregress
操作変数法による回帰
110
mwp-082
logistic/logit
ロジスティック回帰
127
mwp-039
logistic/logit
推定後機能
137
mwp-040
margins
マージン分析機能
151
mwp-029
mlogit
多項ロジスティック回帰
167
mwp-090
ologit
順序ロジスティック回帰
184
mwp-088
poisson
ポアソン回帰
199
mwp-087
regress
線形回帰
217
mwp-037
regress
推定後機能
235
mwp-038
anova/oneway
分散分析
247
mwp-042
2
sdtest
χ 検定、F 検定
272
mwp-043
ttest
t 検定
279
mwp-041
table
要約統計量のテーブル化
286
mwp-070
tabstat
要約統計量のテーブル化
294
mwp-071
tabulate
一元度数分布表
299
mwp-072
tabulate
二元度数分布表
305
mwp-073
本解説書は StataCorp 社の許諾のもとに作成したものです。
一部
c 2011 Math 工房
⃝
c 2011 StataCorp LP
⃝
Math 工房
web:
email:
www.math-koubou.jp
[email protected]
Stata11 whitepapers
mwp-076
functions - 関数群
Stata には数多くの関数が用意されており、generate コマンドや数式記述の中で利用されます。詳細は
[D] functions を参照いただくとして、ここでは代表的な関数に限定した形でその用法を紹介します。なお、
[D] egen (mwp-077 ) についても併せてご参照ください。
1. 乱数の発生
1.1 一様乱数
1.2 正規乱数
2. 数学関数
2.1 整数値への変換
2.2 Running sum
3. 統計分布関数
3.1 t 検定の実行
3.2 t 分布のグラフ化
3.3 面積の算出
3.4 限界値の算出
4. プログラミング関数
4.1 コード化関数
5. 文字列関数
6. 日付/時間関数
7. 行列操作関数
補足1
c Copyright Math 工房;
⃝
c Copyright StataCorp LP (used with permission)
一部 ⃝
4
Stata11 whitepapers
1. 乱数の発生
統計解析を行う上で擬似乱数を発生させたいといったニーズが生ずる場合があります。Stata には種々の分布
に従って乱数を発生させる関数が用意されていますが、本セクションでは一様分布と正規分布のケースを例に
とってその用例を紹介します。詳細については [D] functions のセクション“Random-number functions”
をご参照ください。
1.1 一様乱数
関数 runiform() は [0, 1) 上で一様に分布する擬似乱数を発生させます。例えば観測データ (observations)
数を 10 に設定した上で、変数 x1 中に一様乱数を発生させてみます。なお、repeatability を確保する意味で
最初に擬似乱数発生用の seed を設定しておきます。
. set obs 10
obs was 0, now 10
. set seed 2
. generate x1 = runiform()
. list
*1
*2
x1
1.
2.
3.
4.
5.
.850512
.0515642
.6303533
.6991696
.518447
6.
7.
8.
9.
10.
.3360431
.1747266
.9104601
.3874338
.409848
区間 [a, a + b) 上での一様乱数を発生させたい場合には
a + b*runiform()
という数式を用いれば良いわけです。例えば区間 [10, 20) 上での一様乱数を変数 x2 中に発生させるには次の
ように操作します。
*1
*2
メニュー操作: Data ◃ Create or change data ◃ Create new variable
メニュー操作: Data ◃ Describe data ◃ List data
5
Stata11 whitepapers
. generate x2 = 10 + 10*runiform()
. list x2
x2
1.
2.
3.
4.
5.
19.59647
11.52971
16.53234
14.25097
14.2031
6.
7.
8.
9.
10.
17.27702
14.25147
18.96779
10.89719
12.13104
整数値が欲しい場合には数学関数 round()(四捨五入)、または floor()(切捨て)を使用します。
. generate x3 = round(x2)
. list x2 x3
x2
x3
1.
2.
3.
4.
5.
19.59647
11.52971
16.53234
14.25097
14.2031
20
12
17
14
14
6.
7.
8.
9.
10.
17.27702
14.25147
18.96779
10.89719
12.13104
17
14
19
11
12
この round() や floor() を runiform() と組み合わせて使用することもできます。
. generate x4 = round(10 + 10*runiform())
. list x4
x4
1.
2.
3.
4.
5.
16
14
20
20
15
6.
7.
8.
9.
10.
18
15
16
18
13
6
Stata11 whitepapers
1.2 正規乱数
評価版では割愛しています。
2. 数学関数
Stata には数多くの数学関数が用意されています。全体像については [D] functions のセクション“Mathematical functions”を参照いただくとして、ここでは注意を要する事項についてのみ記載しておきます。
2.1 整数値への変換
実数値から整数値への変換という操作はしばしば必要となります。具体的には
◦ round() – 四捨五入
◦ floor() – 切捨て
◦ ceil() – 切上げ
といった関数が用いられるわけですが、これ以外に
◦ int() – 0 方向への切捨て
という関数もあるので説明を補足しておきます。
(1) x が正の実数値の場合
round(x)
floor(x)
ceil(x)
int(x)
x = 4.8
5
4
5
4
x = 5.2
5
5
6
5
この場合、int() の挙動は floor() と等しくなります。
(2) x が負の実数値の場合
round(x)
floor(x)
ceil(x)
int(x)
x = −4.8
−5
−5
−4
−4
x = −5.2
−5
−6
−5
−5
この場合、int() の挙動は ceil() と等しくなります。
7
Stata11 whitepapers
2.2 Running sum
数学関数の中に sum() という関数がありますが、これは running sum を算出する機能を提供します。例えば
1, 2, . . . , 10 という値を持つ変数 x を生成してみましょう。
. clear
. set obs 10
. generate x = n
*3
この変数 x に対して running sum を計算すると次のようになります。
. generate y1 = sum(x)
. list
x
y1
1.
2.
3.
4.
5.
1
2
3
4
5
1
3
6
10
15
6.
7.
8.
9.
10.
6
7
8
9
10
21
28
36
45
55
変数 y1 には
Pi
xj (i = 1, 2, . . . , 10) という形の和がセットされていることがわかります。これに対して
P10
egen の total() 関数を使用すると総和の値 j=1 xj が算出されます。
j=1
. egen y2 = total(x)
*4
. list
x
y1
y2
1.
2.
3.
4.
5.
1
2
3
4
5
1
3
6
10
15
55
55
55
55
55
6.
7.
8.
9.
10.
6
7
8
9
10
21
28
36
45
55
55
55
55
55
55
*3
*4
n というシステム変数については [U] 13.4 System variables をご参照ください。
メニュー操作: Data ◃ Create or change data ◃ Create new variable (extended)
8
Stata11 whitepapers
3. 統計分布関数
Stata には各種統計分布に関連した関数が一式用意されています。具体的には正規分布とか二項分布といった
統計分布ごとに
◦ 確率密度関数
◦ 累積分布関数
◦ 逆関数
等の値を算出する関数が提供されています。詳細については [D] functions のセクション“Probability
distributions and density functions”をご参照ください。ここでは Student の t 分布を例にとってその用例を
紹介します。
3.1 t 検定の実行
最初に Example データセット fuel.dta を用いて t 検定を実行してみます。
. use http://www.stata-press.com/data/r11/fuel, clear
*5
このデータセット中にはある燃料添加剤を加えたときと加えなかったときでの 1 ガロン当りの走行距離が、12
台の車に関し wide 形式で記録されています。変数 mpg1 は燃料添加剤を加えなかったときのデータに、mpg2
は燃料添加剤を加えたときのデータに対応しています。
. list, separator(0)
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
mpg1
mpg2
20
23
21
25
18
17
18
24
20
24
23
19
24
25
21
22
23
18
17
28
24
27
21
23
ここで mpg1 = mpg2 と言えるかどうかについて t 検定を実行してみましょう。ただし有意水準はデフォルト
の 5% を用います。
*5
メニュー操作:File ◃ Example Datasets ◃ Stata 11 manual datasets と操作、Base Reference Manual [R] の ttest の項よ
りダウンロードする。
9
Stata11 whitepapers
. ttest mpg1 == mpg2
*6
. ttest mpg1 == mpg2
Paired t test
Variable
Obs
Mean
Std. Err.
Std. Dev.
[95% Conf. Interval]
mpg1
mpg2
12
12
21
22.75
.7881701
.9384465
2.730301
3.250874
19.26525
20.68449
22.73475
24.81551
diff
12
-1.75
.7797144
2.70101
-3.46614
-.0338602
mean(diff) = mean(mpg1 - mpg2)
Ho: mean(diff) = 0
Ha: mean(diff) < 0
Pr(T < t) = 0.0232
t =
degrees of freedom =
Ha: mean(diff) != 0
Pr(|T| > |t|) = 0.0463
-2.2444
11
Ha: mean(diff) > 0
Pr(T > t) = 0.9768
この場合、mpg1 と mpg2 の間には 1.75 の差があり、検定統計量である t 値が −2.2444、自由度 11、両側検定
時の p 値が 0.0463 とレポートされています。なお、ttest コマンドについては [R] ttest (mwp-041 ) をご
参照ください。
3.2 t 分布のグラフ化
関数 tden(n, t) を用いると t 分布の確率密度関数の値を算出できますが、ここではこの関数を用いてグラフを
作成してみます。なお、t 分布の関数式は自由度 n に依存するわけですが、今の場合、n の値としては 11 を
指定します。
. twoway (function tden(11, x), range(-4 4)), ytitle("") xtitle(t)
> title(t(11) distribution)
*6
*7
*7
メニュー操作: Statistics ◃ Summaries, tables and tests ◃ Classical tests of hypotheses ◃ Mean-comparison test, paired
data
メニュー操作: Graphics ◃ Twoway graph (scatter, line, etc.)
10
詳細については補足1を参照。
Stata11 whitepapers
ttest 出力の主張するところは、|t| > 2.2444 の部分における曲線下の面積が双方足して 0.0463 であるとい
うことです。
3.3 面積の算出
評価版では割愛しています。
3.4 限界値の算出
評価版では割愛しています。
4. プログラミング関数
Stata にはプログラミングを支援するための関数が多数用意されています。詳細は [D] functions のセク
ション“Programming functions”を参照いただくとして、ここでは有用性の高いコード化に関連した関数につ
いてその用例を紹介します。
4.1 コード化関数
ある連続変数(もしくはそれに準ずる離散変数)が与えられたときに、その値に応じてデータを区分化/
コード化したいというニーズはしばしば起ります。ここでは年齢に関するデータを例にとって関連する関数
recode(), autocode(), irecode() の用法を説明します。使用するデータセットは age01.dta です。
. use http://www.math-koubou.jp/stata/data11/age01.dta
データセットの内容は次のとおりです。
11
Stata11 whitepapers
. list, separator(0)
age
1.
2.
3.
4.
5.
6.
7.
8.
18
21
36
44
58
65
73
82
(1) recode() の用例
関数 recode() は (x, x1 , x2 , . . . , xn ) という引数を取ります。x1 , x2 , . . . , xn が変数 x に関する境界を意味す
ることになります。例えば
. generate code1a = recode(age, 20, 30, 40, 50, 60, 70, 80, 90)
と入力すると次のような結果が得られます。
. list age code1a, separator(0)
1.
2.
3.
4.
5.
6.
7.
8.
age
code1a
18
21
36
44
58
65
73
82
20
30
40
50
60
70
80
90
境界値 x1 , x2 , . . . , xn は等間隔である必要はなく、また x > xn となるようなデータがあっても構いません。
. generate code1b = recode(age, 25, 40, 60)
. list age code1b, separator(0)
1.
2.
3.
4.
5.
6.
7.
8.
age
code1b
18
21
36
44
58
65
73
82
25
25
40
60
60
60
60
60
x > xn となるようなデータに対しては値 xn がセットされている点に注意してください。
12
Stata11 whitepapers
(2) autocode() の用例
評価版では割愛しています。
(3) irecode() の用例
評価版では割愛しています。
5. 文字列関数
Stata には文字列を操作する関数が多数用意されています。全容は [D] functions のセクション“String
functions”を参照いただくとして、ここでは和暦を西暦に変換する操作を一例として紹介します。
評価版では割愛しています。
6. 日付/時間関数
Data Editor 上で 10/15/2011 や 01jan2011 ような日付データを入力した場合、これらは文字列データとし
て認識されてしまうため、このままでは時系列分析等で利用することができません。このため最初に数値デー
タ、具体的には 01jan1960 を起点とした整数値に変換してやる必要があります。そのために用いられるのが
daily() とか monthly() といった関数です。詳細については [D] functions のセクション“Date and time
functions”を、用例については mwp-001 をご参照ください。
7. 行列操作関数
Stata には行列演算に関連した関数も多数用意されています。詳細は [D] functions のセクション“Matrix
functions returning a matrix ”、及び“Matrix functions returning a scalar ”をご参照いただくとして、ここ
では一部の用例のみを紹介します。最初に次のような行列

1
A = 1
1
1
2
2

1
2
3
を定義します。
. matrix input A = (1,1,1\1,2,2\1,2,3)
. matrix list A
symmetric A[3,3]
c1 c2 c3
r1
1
r2
1
2
r3
1
2
3
この場合、A は対称行列のため、下三角要素しか表示されていない点に注意してください。A の逆行列を求め
るには関数 inv() を使用します。
13
Stata11 whitepapers
. matrix B = inv(A)
. matrix list B
symmetric B[3,3]
r1 r2 r3
c1
2
c2 -1
2
c3
0 -1
1

すなわち
A−1
2
= −1
0

−1 0
2 −1
−1 1
と求まったわけです。
次に A を Cholesky 分解してみます。使用するのは関数 cholesky() です。
. matrix C = cholesky(A)
. matrix list C
C[3,3]
c1
r1
1
r2
1
r3
1
c2
0
1
1
c3
0
0
1
実際、CC T を計算してみると
. matrix D = C*C’
. matrix list D
symmetric D[3,3]
r1 r2 r3
r1
1
r2
1
2
r3
1
2
3
より
A = CC T
となっていることが確認できます。
補足1 – グラフ作成コマンド操作
評価版では割愛しています。
¥
14
Stata11 whitepapers
mwp-082
ivregress - 操作変数法による回帰
説明変数が誤差項と相関を持つ場合、OLS 推定量には不偏性も一致性も期待できなくなります。そのような
場合には操作変数を用いた推定が必要となります。
1. OLS の前提条件
2. OLS 推定量の性質
3. 確率的説明変数
4. 操作変数法
5. 2 段階最小 2 乗法
6. ivregress の用例
6.1 データセット
6.2 2SLS 推定法
6.3 LIML 推定法
6.4 GMM 推定法
7. ivregress postestimation の用例
7.1 estat endogenous
7.2 estat firststage
7.3 estat overid
1. OLS の前提条件
ここでは煩雑さを避ける意味で、単回帰モデル
yi = β0 + β1 xi + ui ,
i = 1, 2, . . . , n
(M1)
を対象に議論を進めて行くことにします。通常、β0 と β1 の推定には最小 2 乗法 (OLS: ordinary least
squares) が使用されますが、その推定が適切に行われるためには次の 4 条件が前提となる点に注意する必要
があります。
c Copyright Math 工房;
⃝
c Copyright StataCorp LP (used with permission)
一部 ⃝
15
Stata11 whitepapers
前提1:
説明変数 x は確率変数ではなく固定変数 (fixed variable) である。
前提2:
誤差項 u は確率変数で、期待値は 0 である。
E(ui ) = 0,
前提3:
i = 1, 2, . . . , n
誤差項の分散は均一である。
V (ui ) = E(u2i ) = σ 2 ,
前提4:
(M2)
i = 1, 2, . . . , n
(M3)
異なった誤差項は無相関である。
Cov(ui , uj ) = E(ui uj ) = 0,
i ̸= j, i, j = 1, 2, . . . , n
(M4)
これらの前提のもとで OLS 推定法は残差 2 乗和 (RSS: residual sum of squares)、すなわち
n
n
X
X
2
(yi − β̂0 − β̂1 xi )2
(yi − ŷi ) =
RSS =
(M5)
i=1
i=1
を最小化する推定量 β̂0 , β̂1 を求めます。具体的には
∂RSS
∂ β̂0
∂RSS
∂ β̂1
= −2
n
X
(yi − β̂0 − β̂1 xi ) = 0
(M6a)
i=1
= −2
n
X
(yi − β̂0 − β̂1 xi )xi = 0
(M6b)
i=1
を連立させて解けばよく、β̂0 , β̂1 は次式で与えられることになります。
β̂1 =
Pn
µ Pn
¶
(x − x̄)(yi − ȳ)
i=1
i=1 (xi − x̄)yi
Pn i
P
=
n
2
2
i=1 (xi − x̄)
i=1 (xi − x̄)
β̂0 = ȳ − β̂1 x̄
(M7a)
(M7b)
2. OLS 推定量の性質
(1) 不偏性 (unbiasedness)
ある母集団パラメータを θ 、その推定量を θ̂ とします。何度も標本抽出と推定を繰り返したとき、θ̂ の期待値
である E(θ̂) が真の値 θ に一致するとき、すなわち
E(θ̂) = θ
(M8)
が成り立つとき、θ̂ は不偏推定量 (unbiased estimator) であると言います。
前提条件 1 から 4 のもとで得られる OLS 推定量 β̂0 , β̂1 は不偏推定量です。またそれらは線形不偏推定量の中
で最も分散の小さな推定量、すなわち最良線形不偏推定量 (BLUE: best linear unbiased estimator) でもあ
ります [ Gauss-Markov の定理 ]。
16
Stata11 whitepapers
(2) 一致性 (consistency)
標本数 n を ∞ にしたとき、推定量の値 θ̂ が θ に収束する、すなわち任意の ϵ > 0 について
lim P (|θ̂ − θ| ≥ ϵ) = 0
n→∞
が成立するとき、θ̂ は θ の一致推定量 (consistent estimator) であると言います。また θ̂ が θ の一致推定量で
あることを θ̂ が θ に確率収束すると言い、
plim θ̂ = θ
(M9)
のように書きます。
OLS 推定量 β̂0 , β̂1 は一致推定量でもあります。
3. 確率的説明変数
説明変数が非確率変数であることを主張する前提 1 が崩れた場合、推定量の重要な資質である不偏性と一致性
は共に失われることになります。
(1) 不偏性
今、説明変数 x が確率変数であることに注意して (M7a) 式を変形します。yi − ȳ = β1 (xi − x̄) + (ui − ū) と
書けることから
Pn
(x − x̄)(yi − ȳ)
Pn i
β̂1 = i=1
2
i=1 (xi − x̄)
Pn
(x − x̄)(ui − ū)
Pn i
= β1 + i=1
2
i=1 (xi − x̄)
従ってその期待値は
E[β̂1 ] = β1 + E
· Pn
¸
(x − x̄)(ui − ū)
i=1
Pn i
2
i=1 (xi − x̄)
(M10)
(M11)
で与えられることになります。この第 2 項は変数 x が誤差項 u と統計的に独立であれば 0 となりますが、一
般的には x と u の間の相関によって 0 とはならず、β̂1 は β1 の不偏推定量とは言えなくなります。
(2) 一致性
今、
"
plim(V (xi )) = plim
n
X
i=1
#
2
(xi − x̄) /n = σx2
"
#
n
X
plim(Cov(xi , ui )) = plim
(xi − x̄)(ui − ū)/n = σxu
i=1
17
Stata11 whitepapers
であるとします。このとき (M10) より
Pn
·
¸
(xi − x̄)(ui − ū)
i=1
Pn
plim(β̂1 ) = plim β1 +
2
i=1 (xi − x̄)
¸
· Pn
(xi − x̄)(ui − ū)/n
i=1
Pn
= β1 + plim
2
i=1 (xi − x̄) /n
Pn
plim [ i=1 (xi − x̄)(ui − ū)/n]
Pn
= β1 +
plim [ i=1 (xi − x̄)2 /n]
σxu
= β1 + 2
σx
(M12)
となるため、σxu ̸= 0 の場合、すなわち x と u の間に相関がある場合には、β̂1 は β1 の一致推定量とは言えな
くなります。
(3) 観測誤差を伴うモデル
今、2 つの物理量 ξ と η の間の関係が
ηi = β0 + β1 ξi + ϵi ,
i = 1, 2, . . . , n
という単回帰モデルで表現できるものとします。これらの物理量を観測するに際し、η については誤差のない
値が観測できるが、ξ については観測誤差を伴うものとします。この場合、観測値 xi と yi の間の関係式を
yi = β0 + β1 xi + ui ,
i = 1, 2, . . . , n
と書いた場合、xi は実際には ξi + vi(vi は観測誤差)と表現されるため、ui = ϵi − β1 vi であることになりま
す。従って
Cov(xi , ui ) = Cov(ξi + vi , ϵi − β1 vi ) = β1 σv2 ̸= 0
すなわち、説明変数 x と誤差項 u の間には相関が生じ、OLS 推定量は不偏性も一致性も持たないことになり
ます。
(4) 同時方程式モデル
Y は所得、C は消費、I は投資を表す変数としたとき、次のようなマクロ経済モデルを考えることにします。
(
Yi = Ci + Ii
Ci = β0 + β1 Yi + ui
ただし I は外生変数 (exogenous variable) であるとします。このとき
Yi =
β0
1
1
+
Ii +
ui
1 − β1
1 − β1
1 − β1
Ci =
β0
β1
1
+
Ii +
ui
1 − β1
1 − β1
1 − β1
と表現できることから、所得 Y は確率変数であることがわかります。
18
Stata11 whitepapers
回帰式において Y と u の相関をチェックすると次のようになります。
·
¸
u2i
σ2
Cov(Yi , ui ) = E
̸= 0
=
1 − β1
1 − β1
このことから、内生変数 (endogenous variable) が説明変数となる場合にも、OLS 推定量は不偏性も一致性
も持たないことがわかります。
4. 操作変数法
評価版では割愛しています。
5. 2 段階最小 2 乗法
評価版では割愛しています。
6. ivregress の用例
評価版では割愛しています。
7. ivregress postestimation の用例
評価版では割愛しています。
¥
19
Stata11 whitepapers
mwp-037
regress - 機能概要と用例
regress は線形回帰モデルのフィットを行います。
1. 結果の解釈
1.1 シミュレーションモデル
1.2 良好なフィット
1.3 小標本時のフィット
2. ベータ係数
3. 定数項の抑止
4. 重み付き回帰
5. ロバスト推定
補足1
1. 結果の解釈
regress は回帰分析系のコマンドの中で最も頻繁に使用されるコマンドです。このコマンドを実行すると例
えば次のような推定結果が得られます。
. regress mpg weight foreign
Source
SS
df
MS
Model
Residual
1619.2877
824.171761
2
71
809.643849
11.608053
Total
2443.45946
73
33.4720474
mpg
Coef.
weight
foreign
_cons
-.0065879
-1.650029
41.6797
c Copyright Math 工房;
⃝
Std. Err.
.0006371
1.075994
2.165547
t
-10.34
-1.53
19.25
Number of obs
F( 2,
71)
Prob > F
R-squared
Adj R-squared
Root MSE
P>|t|
0.000
0.130
0.000
74
69.75
0.0000
0.6627
0.6532
3.4071
[95% Conf. Interval]
-.0078583
-3.7955
37.36172
c Copyright StataCorp LP (used with permission)
一部 ⃝
20
=
=
=
=
=
=
-.0053175
.4954422
45.99768
Stata11 whitepapers
ここに示した結果は Stata の Example データセット auto.dta に対し
mpg = β0 + β1 · weight + β2 · foreign + ϵ
という線形モデルをフィットさせたときの出力を示しています。Stata のマニュアルを見ればコマンドの使い
方は細かくわかるわけですが、残念ながら得られた結果をどう解釈・評価したら良いかに関する記述は十分で
はありません。結果の評価は使用するデータやモデルに深く依存するため、一般的に言えることは表面的な側
面に限られてしまうという事情があるからです。
ここではやや変則的なアプローチですが、人為的に用意されたデータを用いてモデルフィットを行い、十分な
サンプルがある場合とそうでない場合とでフィット結果がどう変化するかを見てみることにします。regress
のアウトプットを評価する上でどこに注意しなくてはならないかは、このプロセスによって自ずと明白になる
ものと期待されます。
1.1 シミュレーションモデル
データセット regress1.dta には 1,000 件のデータが含まれています。
use http://www.math-koubou.jp/stata/data11/regress1.dta
先頭の 5 個のデータをリスト出力しておくと次のようになります。
. list in 1/5
1.
2.
3.
4.
5.
*1
y
x1
x2
x3
25.4
35.8
36.2
11.6
16.8
49
54
73
26
45
3
7
9
2
8
3
10
6
3
3
この変数 y の値は
. generate y = 0.5*x1 + 2*x2 - 10 + rnormal(0, 10)
のような形で変数 x1 と x2 の値をベースに生成したものです。rnormal(m, s) というのは正規分布に従う乱
数発生関数であり、m は平均値を、s は標準偏差を意味します([D] functions 参照)。すなわち
y = 0.5x1 + 2.0x2 − 10
(1)
という線形の関係を基調に据えて乱数を発生させているわけです。なお、データセット中には x1 , x2 とは全く
無関係の変数 x3 も含めてあります。y に対する線形フィットを実行するに際し、説明変数に x3 も加えたとき
にどのような現象が生ずるかを確認するためです。
*1
メニュー操作: Data ◃ Describe data ◃ List data
21
Stata11 whitepapers
1.2 良好なフィット
まずデータが 1,000 件ある状態で regress コマンドを実行してみます。
• Statistics ◃ Linear models and related ◃ Linear regression と操作
• Model タブ: Dependent variable: y
Independent variables: x1 x2 x3
図 1 regress ダイアログ - Model タブ
. regress y x1 x2 x3
Source
SS
df
MS
Model
Residual
63294.2507
97526.2879
3
996
21098.0836
97.9179598
Total
160820.539
999
160.98152
y
Coef.
x1
x2
x3
_cons
.476147
1.974713
.0072188
-8.906289
Std. Err.
.0303301
.1090362
.1083894
1.697041
t
15.70
18.11
0.07
-5.25
Number of obs
F( 3,
996)
Prob > F
R-squared
Adj R-squared
Root MSE
P>|t|
0.000
0.000
0.947
0.000
=
=
=
=
=
=
1000
215.47
0.0000
0.3936
0.3917
9.8954
[95% Conf. Interval]
.4166288
1.760746
-.205479
-12.23647
.5356652
2.18868
.2199165
-5.576103
(1) 診断プロット
regress の出力結果に関する考察を始める前に、フィットの状況を視覚化しておきましょう。これが単回帰で
あれば散布図とフィット直線の組合せで視覚化は容易に行えるのですが、重回帰の場合にはそのような直接的
なアプローチは取れません。n(n ≥ 3) 次元空間中における平面のフィット状況を何らかの形で 2 次元のグラ
フに焼き直す必要があるわけですが、ここでは rvfplot コマンドを用いてグラフ化を行ってみます。
22
Stata11 whitepapers
. rvfplot, yline(0)
*2
モデルをフィットさせると、それぞれの観測点 (x1i , x2i , . . .) ごとにモデルによる推定値 ybi が算出されます。
その場合、実際の観測値 yi との差 yi − ybi が残差となるわけですが、rvfplot (residual-versus-fitted plot)
はこの残差の値をフィット値 ybi に対向させる形でプロットしたものです。標準偏差 10 の正規分布を前提に乱
数を発生させているために、それなりにバラツキを持った分布となっていることがわかります。
(2) 決定係数 R2
それでは regress のアウトプットについて見て行くことにしましょう。regress 出力の上半分には ANOVA
表が掲載されています。これは変数 y の変動(バラツキ)に関する情報を集約したもので、SS は平方和 (sum
of squares) を意味します。ここで yi (i = 1, . . . , n) の平均値を ȳ 、最小 2 乗法による yi の推定値を ybi と書く
ことにしたとき、y の変動は
X
(yi − ȳ)2 =
X
(yi − ybi )2 +
X
(b
yi − ȳ)2
(2)
のように分解することができます。今、
P
(yi − ȳ)2 を TSS (total sum of squares)
P
(b
yi − ȳ)2 を MSS (model sum of squares)
P
(yi − ybi )2 を RSS (residual sum of squares)
と書くことにすれば、上の例の場合、TSS は 160820.539、MSS は 63294.2507、RSS は 97526.2879 という
ことになります。
*2
メニュー操作: Statistics ◃ Linear models and related ◃ Regression diagnostics ◃ Residual-versus-fitted plot
23
Stata11 whitepapers
モデルフィットの良し悪しを判断する上で良く用いられる決定係数 (coefficient of determination) は
R2 =
MSS
RSS
=1−
TSS
TSS
(3)
として定義されます。上の例では 63294.2507/160820.539 = 0.3936 となるわけですが、この値は ANOVA
表の右側に R-squared としてレポートされています。すなわち全変動のうち 39% がフィットされたモデルに
よって表現されたことをこの数値は示しているわけです。
(3) モデル全体に対する p 値
R-squared という出力の 1 つ上に p 値が Prob > F という形で示されています。これは分散分析 (ANOVA:
analysis of variance) の結果に基づく F 検定の結果を示しているわけですが、その場合の帰無仮説 H0 は
H0 : β1 = β2 = · · · = 0
とするものです(β0 は含まれません)。全く無意味な説明変数を設定しない限り、この帰無仮説は棄却される
のが普通です。
(4) 係数推定値
ANOVA 表の下には係数表が示されています。Coef. (coefficients) と書かれた列に係数の推定値が示されて
いるわけですが、ここでの例の場合、
βb1 = 0.48
βb2 = 1.97
βb3 = 0.01
βb0 = −8.91
という結果が得られています。背景にあるモデル式 (1) と比べて十分良好な点推定値が得られていることがわ
かります。
(5) 係数に対する p 値
それぞれの係数推定値に対しても p 値が示されています。その場合の帰無仮説は βj = 0 とするもので、そ
れに対する t 検定の結果が p 値として示されているわけです。ここで特筆すべきは変数 x3 に対する p 値が
0.947 となっている点です。すなわち β3 = 0 という帰無仮説が全く棄却できないことをこれは示しています。
実際、β3 に関する 95% 信頼区間(CI: confidence interval) は [−0.21, 0.22] とレポートされており、0 とい
う値がその中に含まれている点に注意してください。変数 x3 は有意ではないと判断せざるを得ません。
これに対し変数 x1 , x2 、及び定数項の場合、p 値はそれらの係数値が 0 とは言えないと主張しているだけなの
で、regress が出力してきた p 値は余り参考にはならないでしょう。もし仮に理論モデル等により x1 の係数
値としては 0.5 が予想されるとしたとき、postestimation 機能の 1 つである test コマンドを使用すればその
仮説を次のようにして検定することができます。
• Statistics ◃ Postestimation ◃ Tests ◃ Test linear hypotheses と操作
• Main タブ: Test type for specification 1: Linear expressions are equal
Specification 1, linear expression: x1 = 0.5
24
Stata11 whitepapers
図 2 test ダイアログ - Main タブ
. test (x1 = 0.5)
( 1)
x1 = .5
F(
1,
996) =
Prob > F =
0.62
0.4318
(6) 標準誤差
Coef. の隣には標準誤差 (standard error) の値が Std. Err. として示されています。標準誤差とは標本平均の
標準偏差 (standard deviation) を意味するもので、信頼区間を規定する上での重要な統計量であると言えま
す。実際、変数 x1 の場合について与えられた標準誤差の値から 95% CI を算出してみましょう。残差の自由
度 (degrees of freedom) が 996 とレポートされていることに注意して t 分布の逆関数
invttail(n, p) を使用すると([D] functions 参照)、
. display invttail(996, 0.025)
*3
1.9623486
という値が求められます。これが 95% の面積に対応した棄却限界値 (critical value) であるわけですから、信
頼区間は点推定値と標準誤差の値から
. display 0.476147 - 1.9623486*0.0303301
.41662877
. display 0.476147 + 1.9623486*0.0303301
.53566523
のように算出することができるわけです。係数表において x1 に対する 95% CI は [0.4166288, 0.5356652] と
レポートされているわけですが、その内容がこれによって検証できたことになります。
*3
メニュー操作: Data ◃ Other utilities ◃ Hand calculator
25
Stata11 whitepapers
いずれにせよ、得られた係数推定値の信頼度はこれら標準誤差と信頼区間の値から判断することになります。
ここでの例の場合、x1 , x2 に対する信頼区間は十分狭いものとなっていますが、定数項についてはやや幅の
広いものとなっています。データ生成のプロセスを勘案するなら、これ以上は期待できないことは明らかで
しょう。
1.3 小標本時のフィット
セクション 1.2 では 1,000 件のデータに対してフィットを行いましたが、今度は標本サイズを 1/10 に減らし
て同じ操作を行ってみます。この resampling にはランダムなプロセスが伴うため、ここでは再現性を期して
最初に seed の設定を行います。繰り返すごとに異なる結果が出ても構わないということであれば seed の設定
は不要です。
. set seed 111
*4
次にランダムに 100 件のデータを抽出します。
. sample 100, count
*5
(900 observations deleted)
これでメモリ上のデータは 100 件のみとなったわけです。この状態で regress を実行してみます。
. regress y x1 x2 x3
. regress y x1 x2 x3
Source
SS
df
MS
Model
Residual
5157.47143
10693.3387
3
96
1719.15714
111.388945
Total
15850.8101
99
160.109193
y
Coef.
x1
x2
x3
_cons
.583658
1.565079
-.1063396
-12.28143
Std. Err.
.1117937
.3726188
.3448411
6.422559
t
5.22
4.20
-0.31
-1.91
Number of obs
F( 3,
96)
Prob > F
R-squared
Adj R-squared
Root MSE
P>|t|
0.000
0.000
0.758
0.059
=
=
=
=
=
=
100
15.43
0.0000
0.3254
0.3043
10.554
[95% Conf. Interval]
.3617492
.8254362
-.7908438
-25.03011
.8055668
2.304721
.5781646
.4672456
R2 値にはそれほど大きな変化はありません。また今回も変数 x3 は有意ではないと判定されています。一方、
係数の推定値は微妙に変化していますが、その要因は標準誤差の値がセクション 1.2 の場合に比べて 3 ∼ 4 倍
に増えている点にあります。結果的に信頼区間の幅がそれだけ広くなってしまっています。例えば x1 の係数
値としては 0.37 とか 0.8 といった値も有意水準 5% では否定できないことになります。実際、test コマンド
を用いて検定を行ってみましょう。
*4
*5
[R] set seed 参照
メニュー操作: Statistics ◃ Resampling ◃ Draw random sample
26
Stata11 whitepapers
. test (x1 = 0.37)
. test (x1 = 0.37)
( 1)
x1 = .37
F(
1,
96) =
Prob > F =
3.65
0.0590
. test (x1 = 0.8)
. test (x1 = 0.8)
( 1)
x1 = .8
F(
1,
96) =
Prob > F =
3.74
0.0559
共に p 値が 0.05 よりも大きいため、仮説を棄却することはできないわけです。
有意水準 (significance level) としては 5% という値がデフォルトとして仮定されますが、それは
Reporting タブ上の Confidence level の設定によって調整できます(図 3 参照)。
2. ベータ係数
今度は Stata の Example データセット auto.dta を用いて線形回帰モデルのフィットを行ってみます。
. sysuse auto.dta
*6
(1978 Automobile Data)
このデータセット中には 1978 年に米国で販売された 74 車種のデータが収納されていますが、ここでは走行
燃費性能を表す mpg (miles per gallon) を車重 weight とその 2 乗 weight2 とによって説明する線形回帰モ
デルを考えます。2 乗項については交互作用演算子を用いて c.weight#c.weight と記述する方法もあります
が(mwp-028 参照)、ここでは従来通り、新たな変数を生成するアプローチで対応することにします。
. generate weightsq = weight^2
*7
まずデータの内容を確認しておきます。
*6
*7
メニュー操作: File ◃ Example datasets ◃ Example datasets installed with Stata と操作しダウンロードする。
メニュー操作:Data ◃ Create or change data ◃ Create new variable
27
Stata11 whitepapers
. format weightsq %10.0g
*8
. list mpg weight weightsq in 1/5
1.
2.
3.
4.
5.
mpg
weight
weightsq
22
17
22
20
15
2,930
3,350
2,640
3,250
4,080
8584900
11222500
6969600
10562500
16646400
*9
このデータの場合、説明変数の桁数に大きな違いがある点に注意する必要があります。あらかじめ weight の
単位を K ポンドにでもしておけば、その 2 乗項も 2 桁程度の数値でおさまり扱いやすくなるわけですが、こ
こでは敢えて現状のままフィットを行ってみます。
. regress mpg weight weightsq
*10
. regress mpg weight weightsq
Source
SS
df
MS
Model
Residual
1642.52197
800.937487
2
71
821.260986
11.2808097
Total
2443.45946
73
33.4720474
mpg
Coef.
weight
weightsq
_cons
-.0141581
1.32e-06
51.18308
この場合、
Std. Err.
.0038835
6.26e-07
5.767884
t
-3.65
2.12
8.87
Number of obs
F( 2,
71)
Prob > F
R-squared
Adj R-squared
Root MSE
P>|t|
0.001
0.038
0.000
=
=
=
=
=
=
74
72.80
0.0000
0.6722
0.6630
3.3587
[95% Conf. Interval]
-.0219016
7.67e-08
39.68225
-.0064145
2.57e-06
62.68392
md
pg = −1.42e-2 · weight + 1.32e-6 · weight2 + 51.18
というモデル式が得られたわけです。係数値だけを見れば、md
pg に対する影響の大きさは weight の方が
weight2 より 104 倍も大きいように見えるわけですが、これは正しい解釈とは言えません。weight2 の変数
値自体が 106 とか 107 といった大きな値を取るからです。
説明変数が及ぼす効果を相対的に比較・評価したいといった場合に良く利用されるのがベータ係数です。これ
はすべての変数値を規格化 (normalize)、すなわち平均が 0、標準偏差が 1 となるように標準化した上で求め
た係数値であり、被説明変数に対する効果を相対的に比較する上で有用な尺度であると言えます。このベータ
係数は beta オプションを指定することで算出することができます。
*8
メニュー操作: Variables ウィンドウ内で weightsq を右クリック、Format ’weightsq’ を選択
メニュー操作: Data ◃ Describe data ◃ List data
*10 メニュー操作: Statistics ◃ Linear models and related ◃ Linear regression
*9
28
Stata11 whitepapers
• regress ダイアログ: Reporting タブ: Standardized beta coefficients: X
図 3 regress ダイアログ - Reporting タブ
. regress mpg weight weightsq, beta
Source
SS
df
MS
Model
Residual
1642.52197
800.937487
2
71
821.260986
11.2808097
Total
2443.45946
73
33.4720474
mpg
Coef.
weight
weightsq
_cons
-.0141581
1.32e-06
51.18308
Std. Err.
.0038835
6.26e-07
5.767884
t
-3.65
2.12
8.87
Number of obs
F( 2,
71)
Prob > F
R-squared
Adj R-squared
Root MSE
=
=
=
=
=
=
74
72.80
0.0000
0.6722
0.6630
3.3587
P>|t|
Beta
0.001
0.038
0.000
-1.901918
1.104148
.
beta オプションが指定された場合には信頼区間に関する情報に代ってベータ係数の推定値が出力されます。
ここでの例で言えば、weight の効果は weight2 の効果の約 1.7 倍であることがわかります。
ベータ係数が意味を持つのは連続変数の場合に限られます。
29
Stata11 whitepapers
3. 定数項の抑止
引続き同じ auto.dta を使用しますが、今度は車重 weight を車長 length の線形関数として表現したいとし
ます。この場合、特別な指定を行わなければ定数項 β0(切片)を含んだ形のモデル式がフィットされます。す
なわち length = 0 のときに β0 という重量の残るモデルとなるわけです。これに対し β0 = 0、すなわち原点
を通る直線をフィットさせたいという場合には noconstant オプションを指定します。
• Statistics ◃ Linear models and related ◃ Linear regression と操作
• Model タブ: Dependent variable: weight
Independent variables: length
Suppress constant term: X
. regress weight length, noconstant
Source
SS
df
MS
Model
Residual
703869302
14892897.8
1
73
703869302
204012.299
Total
718762200
74
9713002.7
weight
Coef.
length
16.29829
Std. Err.
.2774752
t
58.74
Number of obs
F( 1,
73)
Prob > F
R-squared
Adj R-squared
Root MSE
=
74
= 3450.13
= 0.0000
= 0.9793
= 0.9790
= 451.68
P>|t|
[95% Conf. Interval]
0.000
15.74528
16.8513
車長が 1 インチ増加するごとに車重は 16.3 ポンド増加するというモデル式が誘導されたことになります。
4. 重み付き回帰
本セクションでは Example データセット census9.dta を使用することにします。
. use http://www.stata-press.com/data/r11/census9, clear
*11
(1980 Census data by state)
このデータセット中には米国における 1980 年国勢調査の結果が州別に記録されています。次に示すのは先頭
5 州のデータです。
*11
メニュー操作:File ◃ Example Datasets ◃ Stata 11 manual datasets と操作、Base Reference Manual [R] の regress の項
よりダウンロードする。
30
Stata11 whitepapers
. list state drate pop medage region in 1/5, nolabel
state
1.
2.
3.
4.
5.
drate
pop
medage
91
40
78
99
79
3,893,888
401,851
2,718,215
2,286,435
23,667,902
29.30
26.10
29.20
30.60
29.90
Alabama
Alaska
Arizona
Arkansas
California
*12
region
3
4
4
3
4
ここでは死亡率 (drate) のデータを州別の年齢中央値 (medage) と地域区分 (region) とによって説明し
ようとする線形回帰モデルをフィットさせます。ただし region はカテゴリ変数であり、Northeast, North
Central, South, West という米国内地域区分がそれぞれ 1, 2, 3, 4 というコードによって表現されています。
このフィットに際して注意すべきは、drate も medage も共に平均化された値であるという点です。そのため
州の人口を表す変数 pop を重みとして用いた形のフィットがより適切であると判断されます。その際、重み
の選択には注意を払う必要があります(mwp-027 参照)
。
図 4 regress ダイアログ - Weights タブ
今の場合、Analytic weights が正しい選択です。間違えて Frequency weights を選択した場合、例えば Alabama
州であれば州人口の 3, 893, 888 人すべてが 29.3 才という扱いとなってしまうので、極めて奇妙な結果が導か
れてしまう結果となります。
*12
変数 region には値ラベルが設定されていますが、ここでは数値コードを表示させています。
31
Stata11 whitepapers
• Statistics ◃ Linear models and related ◃ Linear regression と操作
• Model タブ: Dependent variable: drate
Independent variables: medage i.region
*13
• Weights タブ: Analytic weights: pop
. regress drate medage i.region [aweight = pop]
(sum of wgt is
2.2591e+08)
SS
Source
df
MS
Model
Residual
4096.6093
1238.40987
4
45
1024.15232
27.5202192
Total
5335.01916
49
108.877942
drate
Coef.
Std. Err.
medage
4.283183
.5393329
region
2
3
4
.3138738
-1.438452
-10.90629
_cons
-39.14727
t
Number of obs
F( 4,
45)
Prob > F
R-squared
Adj R-squared
Root MSE
=
=
=
=
=
=
50
37.21
0.0000
0.7679
0.7472
5.246
P>|t|
[95% Conf. Interval]
7.94
0.000
3.196911
5.369455
2.456431
2.320244
2.681349
0.13
-0.62
-4.07
0.899
0.538
0.000
-4.633632
-6.111663
-16.30681
5.26138
3.234758
-5.505777
17.23613
-2.27
0.028
-73.86262
-4.431915
コマンド構文上は [aweight = pop] という指定が追加されている点に注意してください。
5. ロバスト推定
特に何も指定しなかった場合、regress は最小 2 乗法 (OLS: ordinary least squares) による回帰を実行しま
す。しかし OLS の場合には分散の均一性 (homoskedasticity) が一つの前提となっている点に注意する必要
があります。例えば Example データセット auto.dta に対して次のようなフィットを行ってみます。
. sysuse auto, clear
(1978 Automobile Data)
. replace weight = weight/1000
*13
*14
*14
i. 演算子については mwp-028 を参照。
メニュー操作: Data ◃ Create or change data ◃ Change contents of variable
適正な係数値を得るため、車重の単位をポンドから K ポンドに変更します。
32
Stata11 whitepapers
. regress mpg weight
. regress mpg weight
Source
SS
df
MS
Model
Residual
1591.99024
851.469221
1
72
1591.99024
11.8259614
Total
2443.45946
73
33.4720474
mpg
Coef.
weight
_cons
-6.008687
39.44028
Std. Err.
.5178782
1.614003
t
-11.60
24.44
Number of obs
F( 1,
72)
Prob > F
R-squared
Adj R-squared
Root MSE
P>|t|
0.000
0.000
=
=
=
=
=
=
74
134.62
0.0000
0.6515
0.6467
3.4389
[95% Conf. Interval]
-7.041058
36.22283
-4.976316
42.65774
このモデルは単回帰であるため、フィットの様子を直接視覚化することが可能です。
. twoway (scatter mpg weight) (lfit mpg weight), ytitle(mpg)
*15
フィットされた直線周囲のデータ点のバラツキは余り均等とは言えないように見えます。この点は診断プロッ
トの 1 つである rvpplot (residual-versus-predictor plot) を使うとより鮮明なものにできます。
. rvpplot weight, yline(0)
*15
*16
*16
メニュー操作: Graphics ◃ Twoway graph (scatter, line, etc.) 詳細については補足1を参照。
メニュー操作: Statistics ◃ Linear models and related ◃ Regression diagnostics ◃ Residual-versus-predictor plot
33
Stata11 whitepapers
rvpplot は残差を特定の説明変数(今の場合、weight)と対向させた形でプロットする機能を提供します。
この分散不均一性(heteroskedasticity) はフォーマルな検定によっても確かめることができます。
• Statistics ◃ Postestimation ◃ Reports and statistics と操作
• estat ダイアログ: Reports and statistics: Tests for heteroskedasticity (hettest)
図 5 estat ダイアログ
34
Stata11 whitepapers
. estat hettest
Breusch-Pagan / Cook-Weisberg test for heteroskedasticity
Ho: Constant variance
Variables: fitted values of mpg
chi2(1)
Prob > chi2
=
=
11.05
0.0009
estat hettest の出力に示されているように、均一な分散を仮定した帰無仮説 H0 に対する p 値が 0.0009 で
すから、H0 は棄却せざるを得ないわけです。
このように今回設定したモデルについては分散の均一性が主張できないため、OLS の結果を疑ってかかる必
要がありそうです。OLS に代る推定法を選択するには regress ダイアログの SE/Robust タブを利用します
(SE は標準誤差 (standard error) の略です)
。
• Statistics ◃ Linear models and related ◃ Linear regression と操作
• Model タブ: Dependent variable: mpg
Independent variables: weight
• SE/Robust タブ: Robust
図 6 regress ダイアログ - SE/Robust タブ
35
Stata11 whitepapers
. regress mpg weight, vce(robust)
Linear regression
Number of obs =
F( 1,
72) =
Prob > F
=
R-squared
=
Root MSE
=
mpg
Coef.
weight
_cons
-6.008687
39.44028
Robust
Std. Err.
t
.5840839
1.98832
-10.29
19.84
P>|t|
0.000
0.000
74
105.83
0.0000
0.6515
3.4389
[95% Conf. Interval]
-7.173037
35.47664
-4.844337
43.40393
vce(robust) オプションを指定した場合には分散不均一性を許容する推定法が用いられます。OLS の場合と
比べ点推定値に変化は生じませんが、標準誤差や信頼区間の推定値が変わってきます。たまたま今回の例では
次の表に見られるように 95% CI に大きな違いは見られませんでした。
OLS
Robust
weight
[−7.04, −4.98]
[−7.17, −4.84]
cons
[36.22, 42.66]
[35.48, 43.40]
SE/Robust タブ上で Clustered robust を選択した場合には、グループ(クラスタ)内での相関を許
容した推定法が実行されます。
36
Stata11 whitepapers
補足1 – グラフ作成コマンド操作
セクション 5 では散布図にフィット直線を重ね合わせる形でグラフを作成しましたが、その操作の詳細を記し
ておきます。
• Graphics ◃ Twoway graph (scatter, line, etc.) と操作
• Plots タブ上で Create ボタンをクリック、表示される Plot 1 ダイアログ上で次の設定を行う。
◦ Choose a plot category and type: Basic plots (デフォルト)
◦ Basic plots: Scatter
◦ Y variable: mpg
◦ X variable: weight
• Plots タブ上で再度 Create ボタンをクリック、表示される Plot 2 ダイアログ上で次の設定を行う。
◦ Choose a plot category and type: Fit plots
◦ Fit plots: Linear prediction (デフォルト)
◦ Y variable: mpg
◦ X variable: weight
• Y axis タブ: Title: mpg
. twoway (scatter mpg weight) (lfit mpg weight), ytitle(mpg)
¥
37
Stata11 whitepapers
mwp-042
anova/oneway - 機能概要と用例
anova は分散分析の機能を提供する汎用的なコマンドです。これに対し oneway は一元配置 ANOVA に特化
し、多重比較機能も包含するなど、より使いやすさを追求したコマンドです。
1. 分散分析と多重比較
2. 分散分析の前提条件
3. 一元配置 ANOVA – oneway
4. 一元配置 ANOVA – anova
5. 線形回帰モデル
6. 二元配置 ANOVA
7. 二元配置 ANOVA 後の多重比較
8. 反復測定 ANOVA
補足1
補足2
補足3
1. 分散分析と多重比較
平均値が等しいと言えるかどうかを検定する場合、対象とする標本の数が 2 つ以下の場合には通常 t 検定が用
いられます(mwp-041 参照)
。それでは 3 つの標本 A, B, C が与えられたとき、t 検定を繰返し使用したら何
が悪いのでしょうか?今、検定の有意水準 α を 5% とすると
(1) A-B 間の比較で有意差が検出されない確率 = 0.95
(2) A-C 間の比較で有意差が検出されない確率 = 0.95
(3) B-C 間の比較で有意差が検出されない確率 = 0.95
ですから、3 回の検定を通じて有意差が検出されない確率は 0.953 = 0.86 となります。逆に言えば (1), (2),
(3) のいずれかで有意差が検出される確率は 1 − 0.86 = 0.14 となり、正しい帰無仮説を棄却してしまう過誤
(第 1 種過誤)の確率が本来の 5% よりも大きく増大するといった問題が生じます。
c Copyright Math 工房;
⃝
c Copyright StataCorp LP (used with permission)
一部 ⃝
38
Stata11 whitepapers
このため標本数が 3 以上の場合には分散分析 (ANOVA: analysis of variance) という手法が用いられます。
これはすべての平均値間に差がないことを F 検定によって確認しようとするものです。しかしこの仮説が棄
却された場合に、どの平均とどの平均の間に有意差が認められるかについて、分散分析自体は何ら情報をもた
らしません。このため、有意確率の補正を伴う多重比較 (multiple comparison) 検定を併用することが通常行
われます。
2. 分散分析の前提条件
分散分析の実行に際しては次の要件が満たされていることが前提となります。
(1) 従属変数(応答変数)は量的(区間尺度)データであること
(2) 従属変数(応答変数)は正規分布に従うこと
(3) 観測データは互いに独立であること
(4) 各グループの分散は均一であること
反復測定 (repeated-measures) ANOVA の場合には独立性に関する前提条件が成り立たなくなり
ます。
3. 一元配置 ANOVA – oneway
要因として想定する因子 (factor) の数が 1 つの場合を一元配置 ANOVA (one-way ANOVA) と言います。一
元配置 ANOVA に対しては anova, oneway コマンド双方を使用することができますが、本セクションでは
oneway を用いて分析を行ってみます。使用するデータセットは anova1.dta です。
. use http://www.math-koubou.jp/stata/data11/anova1.dta, clear
全部で 24 個の血圧 (blood pressure) データが記録されていますが、ここではその一部のデータをリスト表示
しておきます。
. list if n <= 3 | n >= 22, separator(3)
bp
drug
1.
2.
3.
126
121
115
1
1
1
22.
23.
24.
137
139
123
4
4
4
*1
変数 drug は薬剤の種別を表すカテゴリ変数で 1, 2, 3, 4 という 4 つの値を取ります。この drug の値ごとに
データを整理し、平均値を算出すると次のようになります*2 。
*1
*2
メニュー操作: Data ◃ Describe data ◃ List data
Stata の機能を用いてテーブルを作成する場合の操作方法については補足1を参照ください。
39
Stata11 whitepapers
drug
bp
平均値
1
126
121
115
123
125
113
120.5
2
112
123
115
129
106
108
115.5
3
123
112
133
124
130
121
123.8
4
122
132
125
137
139
123
129.7
薬剤の種類によって平均値は微妙に異なるわけですが、これらの差が統計的に有意と言えるかどうかを oneway
を使って検定してみます。なお、有意水準 α の値としてはデフォルトの 5% を用いることにします。また要
約統計量を示す表の作成と多重比較検定の実行に関するオプションも指定することにします。
• Statistics ◃ Linear models and related ◃ ANOVA/MANOVA ◃ One-way ANOVA と操作
• Main タブ: Response variable: bp
Factor variable: drug
Multiple-comparison tests: Bonferroni
Output: Produce summary table: X
図 1 oneway ダイアログ- Main タブ
40
Stata11 whitepapers
. oneway bp drug, bonferroni tabulate
Summary of bp
Std. Dev.
drug
Mean
Freq.
1
2
3
4
120.5
115.5
123.83333
129.66667
5.3572381
8.9162773
7.3598007
7.3665913
6
6
6
6
Total
122.375
8.6467511
24
Analysis of Variance
SS
df
MS
Source
Between groups
Within groups
636.458333
1083.16667
3
20
212.152778
54.1583333
1719.625
23
74.7663043
Total
F
3.92
Bartlett's test for equal variances: chi2(3) =
1.1493
Comparison of bp by drug
(Bonferroni)
Row MeanCol Mean
1
2
3
2
-5
1.000
3
3.33333
1.000
8.33333
0.383
4
9.16667
0.260
14.1667
0.020
Prob > F
0.0237
Prob>chi2 = 0.765
5.83333
1.000
(1) ANOVA 表の解釈
ここでの操作では tabulate オプションを指定しているので、最初にまず因子水準ごとに要約統計量を整理し
た表が出力されています。この例では度数 (frequency) がいずれも 6 ということでバランスの取れたデータと
なっていますが、oneway にしろ anova にしろ、バランスの取れていないデータ (unbalanced data) も扱う
ことができます。
要約統計量の表に続く形で出力されているのが ANOVA 表です。
Source
Between groups
Within groups
Total
Analysis of Variance
SS
df
MS
636.458333
1083.16667
3
20
212.152778
54.1583333
1719.625
23
74.7663043
Bartlett's test for equal variances:
chi2(3) =
41
F
Prob > F
3.92
1.1493
0.0237
Prob>chi2 = 0.765
Stata11 whitepapers
SS は平方和 (sum of squares) を意味します。regress の項(mwp-037 参照)では y の変動を
X
(yi − ȳ)2 =
X
(yi − ybi )2 +
X
(b
yi − ȳ)2
のように分解し
P
(yi − ȳ)2 を TSS (total sum of squares)
P
(b
yi − ȳ)2 を MSS (model sum of squares)
P
(yi − ybi )2 を RSS (residual sum of squares)
と表現しましたが、今の場合、MSS に相当するのが群間変動 (between groups) 636.46、RSS に相当するの
が群内変動 (within groups) 1083.17、TSS に相当するのが全変動(total) 1719.63 です。このとき、それぞれ
の変動を自由度 (df: degrees of freedom) で割ることによって MS (mean square) すなわち平均平方が各々
212.15, 54.16 と算出されます。これらの比を取ったものが F 値で 212.15/54.16 = 3.92 という値になります。
この F 値を使った F 検定の結果が p 値 0.0237 と示されているわけですが、この場合の帰無仮説はすべての
平均値が等しいとするものです。今の場合、p 値は < 0.05 ですから帰無仮説は棄却されることになります。
なお、ANOVA 表の末尾に Bartlett 検定の結果が表示されていますが、これは等分散性に関するものです。
等分散性は ANOVA の前提条件の一つであるわけですが、今の場合 p 値は ≫ 0.05 ですから、この前提条件
に関する問題はないと言えます。
(2) 多重比較
上記 ANOVA 表からは µ1 = µ2 = µ3 = µ4 が主張できないということはわかったわけですが、どのペア間に
有意差があるかを見るためには多重比較検定のプロセスが必要となります。上記操作では bonferroni とい
うオプションを指定しているので、Bonferroni 補正を施した形の多重比較検定の結果が ANOVA 表に引き続
く形で出力されています。
Comparison of bp by drug
(Bonferroni)
Row MeanCol Mean
1
2
2
-5
1.000
3
3.33333
1.000
8.33333
0.383
4
9.16667
0.260
14.1667
0.020
3
5.83333
1.000
表示されている行列要素を Mij と表記することにすれば、Mij には µi − µj の値とそれが 0 と言えるか否か
に関する Bonferroni 補正後の p 値が示されています。この結果からすると µ4 –µ2 間の差のみ有意と判定され
ています。多重比較補正の手法としては Bonferroni の他に Scheffe, Šidák が選択できます。
42
Stata11 whitepapers
4. 一元配置 ANOVA – anova
評価版では割愛しています。
5. 線形回帰モデル
評価版では割愛しています。
6. 二元配置 ANOVA
評価版では割愛しています。
7. 二元配置 ANOVA 後の多重比較
評価版では割愛しています。
8. 反復測定 ANOVA
評価版では割愛しています。
補足1 – 表の作成
評価版では割愛しています。
補足2 – 繰返しのない二元配置 ANOVA
評価版では割愛しています。
補足3 – 二元配置データのグラフ化
評価版では割愛しています。
¥
43
Stata11 whitepapers
mwp-070
table - 要約統計情報のテーブル化
table コマンドはカテゴリ変数の組合せごとに要約統計情報を算出し、結果をテーブル形式で出力します。要
約統計情報の種類としては数多くのものが用意されています。Superrows, supercolumns を用いたテーブル
構成にも対応しています。
1. table コマンド
2. 一元表
3. 二元表
4. 三元表
1. table コマンド
table コマンドを使用する場合にキーとなるのはカテゴリ変数です。その数が n 個の場合には n 元の表
(n-way table) が作成されます(ただし n ≤ 7)。一方、カテゴリ変数の値の組合せに対して個々のテーブルセ
ルが対応することになるわけですが、そこに表示できる要約統計情報としては次のようなものが用意されてい
ます。
◦ 度数 (frequency)
◦ 平均値 (mean)
◦ 標準偏差 (standard deviation)
◦ 最大値 (maximum)
◦ 最小値 (minimum)
◦ 中央値 (median)
◦ 四分位範囲 (interquantile range)
◦ パーセンタイル (percentile)
それぞれのセルに複数の統計情報を出力させることもできます。
c Copyright Math 工房;
⃝
c Copyright StataCorp LP (used with permission)
一部 ⃝
44
Stata11 whitepapers
2. 一元表
最初に一元の場合についてその用例を示します。使用する Example データセットは auto.dta です。
. sysuse auto.dta
*1
(1978 Automobile Data)
こ の デ ー タ セ ッ ト 中 に は 1978 年 に 米 国 で 販 売 さ れ た 74 車 種 の デ ー タ が 収 納 さ れ て い ま す 。変 数
displacement は排気量を表す連続変数ですが単位が立方インチでわかりにくいので、最初にそれをリッター
に変換します。
. generate disp1 = 16.4*displacement/1000
*2
変数 disp1 の最大値と最小値をチェックしておくと
. summarize disp1
*3
. summarize disp1
Variable
Obs
Mean
disp1
74
3.235676
Std. Dev.
1.50613
Min
Max
1.2956
6.97
より、排気量の値は 1.3l から 7.0l までの範囲に及ぶことがわかります。この変数 disp1 から次のようなカテ
ゴリ変数 class を生成してみます。
class
排気量区分
0
disp1 ≤ 2.0
1
2.0 < disp1 ≤ 3.0
2
3.0 < disp1 ≤ 4.0
3
4.0 < disp1
. generate class = irecode(disp1, 2.0, 3.0, 4.0)
*4
参考までに先頭から 5 台の車種について disp1 と class の値をリスト出力しておきます。
. list make disp1 class in 1/5
make
1.
2.
3.
4.
5.
AMC Concord
AMC Pacer
AMC Spirit
Buick Century
Buick Electra
disp1
class
1.9844
4.2312
1.9844
3.2144
5.74
0
3
0
2
3
*1
メニュー操作: File ◃ Example datasets ◃ Example datasets installed with Stata と操作しダウンロードする。
メニュー操作:Data ◃ Create or change data ◃ Create new variable
*3 メニュー操作: Statistics ◃ Summaries, tables and tests ◃ Summary and descriptive statistics ◃ Summary statistics
*4 関数 irecode() については [D] functions を参照
*2
45
Stata11 whitepapers
このカテゴリ変数 class を用いて一元の表を作成してみましょう。その際、変数 mpg (miles per gallon) に
関する要約統計情報をいくつか出力させることにします。
• Statistics ◃ Summaries, tables, and tests ◃ Tables ◃ Table of summary statistics (table) と操作
• Main タブ: Row variable: class
Statistics 1: Count nonmissing
mpg
Statistics 2: Mean mpg
Statistics 3: Standard deviation mpg
図 1 table ダイアログ- Main タブ
. table class, contents(count mpg mean mpg sd mpg )
class
N(mpg)
mean(mpg)
sd(mpg)
0
1
2
3
23
13
19
19
27.2609
20.6154
19.4211
16.4211
5.100957
3.819652
2.734873
3.48514
定義された排気量クラスごとに変数 mpg の度数、平均値、標準偏差が出力されていることがわかります。な
お、変数 class に対し値ラベルを設定してやればよりわかりやすい出力とすることができます*5 。
*5
値ラベルの設定は Variables Manager を用いることによって対話的に行えます。
46
Stata11 whitepapers
. label define class 0 "<2000cc" 1 "2000-3000cc" 2 "3000-4000cc" 3 ">4000cc"
. label values class class
. table class, contents(count mpg mean mpg sd mpg )
. table class, contents(count mpg mean mpg sd mpg )
class
N(mpg)
mean(mpg)
sd(mpg)
<2000cc
2000-3000cc
3000-4000cc
>4000cc
23
13
19
19
27.2609
20.6154
19.4211
16.4211
5.100957
3.819652
2.734873
3.48514
さらに table ダイアログの Options タブ上で表示書式を明示してやれば数値の表示様式も調整できます。
• Options タブ: Override display format for numbers in cells: %9.2f
図 2 table ダイアログ- Options タブ
. table class, contents(count mpg mean mpg sd mpg ) format(%9.2f)
class
N(mpg)
mean(mpg)
sd(mpg)
<2000cc
2000-3000cc
3000-4000cc
>4000cc
23
13
19
19
27.26
20.62
19.42
16.42
5.10
3.82
2.73
3.49
47
Stata11 whitepapers
3. 二元表
評価版では割愛しています。
4. 三元表
評価版では割愛しています。
¥
48