固定効果モデルを整理する
参考
固定効果モデルとは
パネルデータ分析で内生性に対処する方法の1つ。
被説明変数
固定効果モデルで推定することで、この個人の特徴を考慮して他の変数の係数を推定することができる。
何らか観測できる変数
このとき、
パネルデータの場合、これが成立する可能性は低い。なぜならば、同一個体
観測不能な個人の影響を
クラスター標準誤差について
2つ以上の固定効果モデルについて書く
実装について
PythonとRでの実装について言及する。
Python
linearmodels というライブラリを用いるのが良い。ただし、最大2つまでの固定効果しか考慮することができないので注意。
linearmodels
データセットの前処理として、考慮したい固定効果をindexにしておく必要がある。
また、基本的にクラスター標準誤差を使うことになると思うので、cluster_entity=True, cluster_time=True を指定している。
from linearmodels.panel import PanelOLS
df = df.set_index(['nr', 'year'])
y = df[['lwage']]
X = df[['married', 'union', 'expersq']]
model_fe = PanelOLS(y, X, entity_effects=True, time_effects=True)
res_fe = model_fe.fit(cov_type='clustered', cluster_entity=True, cluster_time=True)
res_fe.summary
statsmodels
statsmodelsでも同様の推定を行うことができる。
ここでは考慮したい固定効果をダミー変数として持ってOLS推定し、結果の表示の際に statsmodels.regression.linear_model.RegressionResults.get_robustcov_results を用いることでクラスター標準誤差を表示する。
残念ながら、このライブラリでも考慮できる固定効果は2つまでである。
y = data['lwage']
X = pd.concat(
[
data[['married', 'union', 'expersq']]
, pd.get_dummies(data['nr'], drop_first=True)
, pd.get_dummies(data['year'], drop_first=False)
]
, axis=1
)
model_dummy = sm.OLS(y, X)
res_dummy = model_dummy.fit()
res_dummy.get_robustcov_results(
cov_type='cluster'
, groups=data[['nr', 'year']]
).summary()
R
Rの場合は fixest を使うのが良さそうである。こちらは3つ以上の固定効果に対応している。
クラスター標準誤差の指定は summary の se で指定することができる。
library(fixest)
model = feols(lwage ~ married + union + expersq | nr + year, df)
summary(model, se = "twoway")
非線形の固定効果モデルについて
参考記事
被説明変数が2値変数や離散整数値の場合、ロジスティック回帰やポアソン回帰を利用するのが望ましいケースがある。
こうした回帰で固定効果を考慮した推定を行うためには、条件付き最尤法を利用するのが望ましい。
Pythonであれば statsmodels.discrete.conditional_models.ConditionalLogit 、Rであれば survival や bife が利用できる。
しかしこれらで考慮できる固定効果は1種類のみである。2種類以上の固定効果を考慮したい場合については自分でもよく分かっていない。。。
(無理やり線形モデルとして推定する、他の固定効果はダミー変数として投入して条件付き最尤法を実行する、等が考えられるが、これらの作法によって係数の推定値にどのような影響があるかは分からない。)