ロジスティック回帰のメモ
※2013/10/26 語句修正; 2013/11/07 グループごとの回帰追加; 2013/12/23 目次追加,(1)に
factor variablesの確認法,(2)にcontrastコマンド追記;
記事の目次
必要だけどつい忘れがちになるポイントのメモです。バージョンはStata 13.0,
使用データセットは,マニュアルのlogisticでexapmle
として使っているHosmer & Lemeshow dataです。インターネットにつながった状態で,
と打つと読み込まれます。
アウトカムは低体重出生かどうかの2値データ
low
説明変数は人種で3区分のカテゴリデータ
race
として単純にロジスティック回帰分析を実行すると
となり,以下のように
といった結果が出てきます。
i.というのを説明変数の頭につけることで,その変数(ここではrace)を
カテゴリ変数(factor variables)として扱ってくれます。
自動的に複数の2区分変数(ダミー変数)を作成して投入してるイメージです。
デフォルトでは最も低い値がリファレンスになります。
(追記:2013/12/23)
factor variablesがどのように作られているか確認
変数として作成されてはいませんが,このように内部的に
2区分変数(ダミー変数)が作られていることが分かります。
(1)カテゴリ変数のreferenceも結果に出力する方法
デフォルトではオッズ比を出す際にリファレンスとなるカテゴリは出力
されないのですが,オプションにallbaselevelsをつけると,
となり,隠れていたwhiteがでてきました。当然のごとく,
オッズ比は1となっています。
また,ラベルをとってどの値と対応しているか確認する場合はnofvlabelを追加します
つまり,値1に対する値2,3のオッズ比が算出されているということがわかります。
リファレンスを変えたい場合は,i.raceの項を
詳しくは
(2)1つのカテゴリ変数全体の検定を行ってカイ二乗値とp値を出す
それぞれの2区分変数(ダミー変数)の統計量zが出てきますが,論文には
カテゴリ変数全体としてのカイ二乗値を書いてあるのをよく見かけます。
これを出すには,logisticコマンドを実行した後に,さらにtestコマンドを使って,
下記のように結果でパラメータが示されている2区分変数の値を変数の頭につけて,
logistic low i.race
test 2.race 3.race
とします。そうすると,下のような結果が出てきます。
つまり,カテゴリ変数raceの全体のワルド検定の結果は
χ2=4.92, df=2, p=0.0853
という情報が分かります。
(追記:2013/12/23)
testコマンドよりもっと簡単に全体の検定結果を表示できる
ものがありました。
(3)グループごとの回帰(層別)
男女別など,グループ別にロジスティック回帰を行いたい時の方法です。
同じデータを例に,今度は喫煙が低体重出生におよぼす影響を
人種別に解析してみます。まず基本の解析は以下の通りです。
人種別に同じ解析をするには,logisticコマンドの前に以下のような
コマンドを付け加えます。raceの部分を他のカテゴリ変数に変えれば
その変数のカテゴリごとに結果が出ます
factor variablesの確認法,(2)にcontrastコマンド追記;
記事の目次
(1)カテゴリ変数のreferenceも結果に出力する方法
(2)1つのカテゴリ変数全体の検定を行ってカイ二乗値とp値を出す
(3)グループごとの回帰(層別)
(2)1つのカテゴリ変数全体の検定を行ってカイ二乗値とp値を出す
(3)グループごとの回帰(層別)
必要だけどつい忘れがちになるポイントのメモです。バージョンはStata 13.0,
使用データセットは,マニュアルのlogisticでexapmle
として使っているHosmer & Lemeshow dataです。インターネットにつながった状態で,
webuse lbw
と打つと読み込まれます。
アウトカムは低体重出生かどうかの2値データ
low
1:birthweight<2500g
0:birthweight>=2500g
説明変数は人種で3区分のカテゴリデータ
race
1:white
2:black
3:other
2:black
3:other
として単純にロジスティック回帰分析を実行すると
logistic low i.race
となり,以下のように
low Odds Ratio Std. Err. z P>z [95% Conf. Interval]
race
black 2.327536 1.078613 1.82 0.068 .9385072 5.772385
other 1.889234 .6571342 1.83 0.067 .9554577 3.735597
_cons .3150685 .0753382 -4.83 0.000 .1971825 .503433
といった結果が出てきます。
i.というのを説明変数の頭につけることで,その変数(ここではrace)を
カテゴリ変数(factor variables)として扱ってくれます。
自動的に複数の2区分変数(ダミー変数)を作成して投入してるイメージです。
デフォルトでは最も低い値がリファレンスになります。
(追記:2013/12/23)
factor variablesがどのように作られているか確認
list race i.race in 1/5
+-----------------------------------+
| 1b. 2. 3. |
| race race race race |
|-------------------------------------|
1. | black 0 1 0 |
2. | other 0 0 1 |
3. | white 0 0 0 |
4. | white 0 0 0 |
5. | white 0 0 0 |
+-----------------------------------+
変数として作成されてはいませんが,このように内部的に
2区分変数(ダミー変数)が作られていることが分かります。
(1)カテゴリ変数のreferenceも結果に出力する方法
デフォルトではオッズ比を出す際にリファレンスとなるカテゴリは出力
されないのですが,オプションにallbaselevelsをつけると,
logistic low i.race, allbaselevels
low Odds Ratio Std. Err. z P>z [95% Conf. Interval]
race
white 1 (base)
black 2.327536 1.078613 1.82 0.068 .9385072 5.772385
other 1.889234 .6571342 1.83 0.067 .9554577 3.735597
_cons .3150685 .0753382 -4.83 0.000 .1971825 .503433
となり,隠れていたwhiteがでてきました。当然のごとく,
オッズ比は1となっています。
また,ラベルをとってどの値と対応しているか確認する場合はnofvlabelを追加します
logistic low i.race, allbaselevels nofvlabel
low Odds Ratio Std. Err. z P>z [95% Conf. Interval]
race
1 1 (base)
2 2.327536 1.078613 1.82 0.068 .9385072 5.772385
3 1.889234 .6571342 1.83 0.067 .9554577 3.735597
_cons .3150685 .0753382 -4.83 0.000 .1971825 .503433
つまり,値1に対する値2,3のオッズ比が算出されているということがわかります。
リファレンスを変えたい場合は,i.raceの項を
ib2.race
ib(last).race
にするとそれぞれ変わります。デフォルトはib(first).raceという意味になっています。ib(last).race
詳しくは
help factor variables
(2)1つのカテゴリ変数全体の検定を行ってカイ二乗値とp値を出す
それぞれの2区分変数(ダミー変数)の統計量zが出てきますが,論文には
カテゴリ変数全体としてのカイ二乗値を書いてあるのをよく見かけます。
これを出すには,logisticコマンドを実行した後に,さらにtestコマンドを使って,
下記のように結果でパラメータが示されている2区分変数の値を変数の頭につけて,
logistic low i.race
test 2.race 3.race
とします。そうすると,下のような結果が出てきます。
( 1) [low]2.race = 0
( 2) [low]3.race = 0
chi2( 2) = 4.92
Prob > chi2 = 0.0853
つまり,カテゴリ変数raceの全体のワルド検定の結果は
χ2=4.92, df=2, p=0.0853
という情報が分かります。
(追記:2013/12/23)
testコマンドよりもっと簡単に全体の検定結果を表示できる
ものがありました。
logistic low i.race
contrast race
contrast race
Contrasts of marginal linear predictions
Margins : asbalanced
------------------------------------------------
| df chi2 P>chi2
-------------+----------------------------------
race | 2 4.92 0.0853
------------------------------------------------
(3)グループごとの回帰(層別)
男女別など,グループ別にロジスティック回帰を行いたい時の方法です。
同じデータを例に,今度は喫煙が低体重出生におよぼす影響を
人種別に解析してみます。まず基本の解析は以下の通りです。
logistic low i.smoke
low Odds Ratio Std. Err. z P>z [95% Conf. Interval]
smoke
smoker 2.021944 .6462989 2.20 0.028 1.08066 3.783112
_cons .3372093 .0724103 -5.06 0.000 .2213694 .5136667
人種別に同じ解析をするには,logisticコマンドの前に以下のような
コマンドを付け加えます。raceの部分を他のカテゴリ変数に変えれば
その変数のカテゴリごとに結果が出ます
by race, sort : logistic low i.smoke
-> race = white
low Odds Ratio Std. Err. z P>z [95% Conf. Interval]
smoke
smoker 5.757576 3.444621 2.93 0.003 1.782321 18.59916
_cons .1 .0524404 -4.39 0.000 .0357788 .2794949
-> race = black
low Odds Ratio Std. Err. z P>z [95% Conf. Interval]
smoke
smoker 3.3 2.775878 1.42 0.156 .6346062 17.16025
_cons .4545455 .2451636 -1.46 0.144 .1579332 1.308222
-> race = other
low Odds Ratio Std. Err. z P>z [95% Conf. Interval]
smoke
smoker 1.25 .8114691 0.34 0.731 .350212 4.461584
_cons .5714286 .1601748 -2.00 0.046 .3298869 .9898259