Open6

固定効果モデルを整理する

hanatahanata

固定効果モデルとは

パネルデータ分析で内生性に対処する方法の1つ。
被説明変数 y_it に対して、観測できない かつ 時間不変の個人の特徴 u_i が影響を与えている場合、この特徴は観測できないため、欠落変数バイアスが必ず生じてしまう。
固定効果モデルで推定することで、この個人の特徴を考慮して他の変数の係数を推定することができる。
何らか観測できる変数 X_{it}y_{it} に与える影響を知りたいケースを考える。

y_{it} = \beta X_{it} + \epsilon_{it}

このとき、E[ \epsilon_{it} | X_{it}] = 0 が成立していないと、係数 \beta の不偏性が満たされない。
パネルデータの場合、これが成立する可能性は低い。なぜならば、同一個体 i においてXは似たような値を取ることが想定されるからである。

観測不能な個人の影響を \alpha_i と置く。

hanatahanata

実装について

PythonとRでの実装について言及する。

Python

linearmodels というライブラリを用いるのが良い。ただし、最大2つまでの固定効果しか考慮することができないので注意。

linearmodels

https://bashtage.github.io/linearmodels/panel/panel/linearmodels.panel.model.PanelOLS.html

データセットの前処理として、考慮したい固定効果を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つ以上の固定効果に対応している。
クラスター標準誤差の指定は summaryse で指定することができる。

library(fixest)

model = feols(lwage ~  married +  union + expersq | nr + year, df)
summary(model, se = "twoway")
hanatahanata

非線形の固定効果モデルについて

参考記事
https://keita43a.hatenablog.com/entry/2018/04/07/080444

被説明変数が2値変数や離散整数値の場合、ロジスティック回帰やポアソン回帰を利用するのが望ましいケースがある。
こうした回帰で固定効果を考慮した推定を行うためには、条件付き最尤法を利用するのが望ましい。

Pythonであれば statsmodels.discrete.conditional_models.ConditionalLogit 、Rであれば survivalbife が利用できる。
https://www.statsmodels.org/dev/generated/statsmodels.discrete.conditional_models.ConditionalLogit.html

しかしこれらで考慮できる固定効果は1種類のみである。2種類以上の固定効果を考慮したい場合については自分でもよく分かっていない。。。

(無理やり線形モデルとして推定する、他の固定効果はダミー変数として投入して条件付き最尤法を実行する、等が考えられるが、これらの作法によって係数の推定値にどのような影響があるかは分からない。)