suketani’s diary

個人的メモ用、どこも代表していない

Stataで異なるモデルで推定された係数間の差の検定

いくつかのモデルで推定した係数と係数の差の検定をしたい場合のStataのコードをまとめておく
 

特にサブサンプル間での係数比較が多いかな。シンプルなことなのに計算方法がわかっててもコードでやることがなかったので力技でやってしまっていた、、、
この脚注のサイト*1とStataのsuestのヘルプ*2がおおよそのソースです。
 

分析対象のサンプルをある属性にもとづいて2グループに分けたとする。グループごとに推定するモデルをModel1とModel2として、次のような同じモデルをふたつのグループについて推定するとする:

 Y=f(X_1, X_2, X_3)

注目する変数はX1であるとして、ふたつのグループで推定した係数の差が0であるかを検定(Chowテスト)するためには次のようなステップを踏む:

*Step1: Estimation
***Regressing model 1 and store the results on memory
reg Y X1 X2 X3 if group == 1
est store model1

***Regressing model 2 and store the results on memory
reg Y X1 X2 X3 if group == 2
est store model2


*Step 2: Combining estimation results
predict model12*, scores
suest model1 model2 , vce(cl id)

*Step3: Running Chow-test
test [model1]X1=[model2]X1

Step1では、サブサンプルごとにモデルを推定する。この時に標準誤差の調整等は含まないで推定しなければならない。
それぞれの結果を、est storeコマンドで保存しておく。

Step2では、このふたつの推定の結果を結合させる。使用するコマンドはsuestだが、このコマンドで推定される係数と標準誤差を保存する必要があるため、その前にpredict , scoreを加える必要がある。
また、標準誤差をクラスタリングする等する場合にはここでvce()を指定すればいい。なお、multi-way clusterには対応していないため注意が必要だ。

最後に、Step3でそれぞれのモデルのX1の係数の差の検定をするように指定する。
これでChowテストの結果としてχ二乗値とそのp値を返すことができる。


(※2020年12月9日追記)
固定効果をモデルに加える場合、reghefeを無理やり回していけるかと思っていたけどダメだったっぽい (ソースは下記リンクの6. Postestimation Syntaxの下の方) ので以下の方法は絶対に使わないように
代替的な方法について別記事で対応策を考えます。

scorreia.com


***以下は誤った認識の保存のために原文ママ。絶対に使用しないように!*********************

面倒なのは、モデルで固定効果を入れて推定するとき。固定効果を省くためにaregやreghdfe等を使うことがよくあると思うけど、これらを使っていると固定効果に係る係数の結果が保存されないためsuestでモデルを推定することができない。
固定効果の結果を報告せずに、メモリにのみ結果を保存する必要があるので次のようにする必要がある:

reghdfe Y X1 X2 X3 if group == 1, absorb(FE_FIRM1=i.firm FE_month1=i.month FE_YEAR1=i.year)
est store model1
reghdfe Y X1 X2 X3 if group == 2, absorb(FE_FIRM2=i.firm FE_month2=i.month FE_YEAR2=i.year)
est store model2

なお、multi-wayクラスタリング等まだまだ問題があるため、新しい方法を見つけ次第更新する。