コマンド”test”のつかいかた

プログラミング

このブログでは、統計解析ソフトStataのプログラミングのTipsや便利コマンドを紹介しています.

Facebook groupでは、ちょっとした疑問や気づいたことなどを共有して貰うフォーラムになっています. ブログと合わせて個人の学習に役立てて貰えれば幸いです.

さて、今回の記事は、Stataに備わっているコマンドである”test/testparm”の使い方のコツを解説したいと思います.特に回帰モデル実行後に交互作用のP値を取り出したい場合に重宝すると思いますので、何かのお役に立てればと思います.

1.test/tesparmのコツ

test/testparmはlinearな関係性を示している時のWald testを行うコマンドです.non-linearの場合にはtestnl(non-linearってことでしょうね)を使うことになっています.

使うにはちょっとしたコツを押さえるだけですが、ここで強調したいのは、何の変哲もない“test”が多重補完後のデータでは生命線になる、ということです.

autoのデータを使って解説したいと思います.便利ですね、auto.

sysuse auto, clear
regress price weight foreign
test weight

まずはこれで説明変数weightのP値を取り出します.

ここまでは特に問題ないと思いますが、ここで交互作用項を作ってみます.

regress price c.weight##i.foreign

この交互作用の部分のP値は0.038なわけですが、これをtestで表現使用と思うと、

test 1.foreign#c.weight

となるのです.

何を入れればいいかを知りたい場合にはオプションの”coefl”をつければOKです.

regress price c.weight##i.foreign, coefl
test 1.foreign#c.weight

ここまではそんなに有難くないですね.しかし、これが複数のカテゴリ変数との交互作用の場合には次の様な結果になってしまいます.ただ一つのP値を取り出すにはどうしたらいいでしょうか?

gen weight3cat = 1*(weight<2500) + 2*(weight>=2500 & weight<3000) + 3*(weight>=3000)
    /* weightを3つのカテゴリにわける */
regress price i.weight3cat##i.foreign
  /* 3つ以上のカテゴリを持つ変数を含んだ交互作用項をまとめるにはどうしたら? */
regress price i.weight3cat##i.foreign, coefl
 
test 2.weight3cat#1.foreign 3.weight3cat#1.foreign
  /* 一つ目の方法として、testを使うときはリファレンスカテゴリ以外の組み合わせを列挙 */
testparm i.weight3cat#foreign
  /* testparmだと回帰式に入れる交互作用項をそのまま書くだけ */ 

ここではじめて出てきた”testparm”ですが、これは回帰式にでてくる項をそのまま書けばいいのでわかりやすいのですが、多重補完後のデータでは使えません

だから面倒なようでも”test”コマンドを知っておく必要があるのです.ちなみに多重補完後は、

.mi test

として同じように後ろに並べればよいだけです.何を並べればいいか迷ったら、もとの回帰式に“coefl”とつけるだけでわかります.

2.Likelihood ratio test(lrtest)を実行してP値を取り出す

P値を出すのはWald testだけではありません.Likelihood ratio testを実行すればいいのです.そのやり方は、

  1. 交互作用を含んだ回帰モデルを実行
  2. estimate storeで結果を格納 → ex) est store inter などとしてinterという変数に結果を入れておく
  3. 交互作用を含まない下記モデルを実行(同じ共変量とすること!)
  4. lrtestを実行
regress price c.weight##i.foreign
est store inter
regress price c.weight foreign
lrtest inter 

ということで、Wald testとほぼ同じ結果が得られることが確認できました.

まとめ

多重補完を見据えることによってtestコマンドの重要性が理解できたでしょうか.合わせてlrtestの使い方もマスターしておくと色々な場面で役に立つと思います.

なお、推定値を計算する”lincom”については項を改めて解説してみたいと思います.こちらもクセがあって理解しにくいのですが、使える場面はありますので.

コメント

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