Created
March 19, 2020 07:20
-
-
Save kiwamizamurai/7b59f2b051b8740431c1b95c3fe46f8f to your computer and use it in GitHub Desktop.
DoublyRobust-AIPTW.ipynb
丁寧な紹介記事ありがとうございます!
model_linear
にはXだけではなく、Zも説明変数に入れる必要があるのではないでしょうか?
X_and_z = np.hstack([X, z[:, None]])
model_linear = LinearRegression().fit(X_and_z, y)
その上で、m_1とm_0は別個に
df_ps_m['m_1'] = model_linear.predict(np.hstack([X, np.repeat([1], X.shape[0])[:, None]])).flatten()
df_ps_m['m_0'] = model_linear.predict(np.hstack([X, np.repeat([0], X.shape[0])[:, None]])).flatten()
と計算し、
delta_dr_first_iptw = np.sum(df_ps_m["outcome"] * w1)
delta_dr_first_augmentation = np.sum(w1*df_ps_m["m_1"]) - np.sum(df_ps_m["m_1"])
delta_dr_first = (delta_dr_first_iptw - delta_dr_first_augmentation) / size
delta_dr_second_iptw = np.sum(df_ps_m["outcome"] * w0)
delta_dr_second_augmentation = np.sum(w0*df_ps_m["m_0"]) - np.sum(df_ps_m["m_0"])
delta_dr_second = (delta_dr_second_iptw - delta_dr_second_augmentation) / size
delta_dr = delta_dr_first - delta_dr_second
print('caucal effect ', delta_dr)
とすると、 delta_dr ~ 0.203となりました。
PythonでAIPWやっている例はあまりない(Rが多い)ので助かりました。
この辺、z
を説明変数に入れたり、z
毎に異なる線形モデルを立てたりいろいろ流儀があるみたいでややこしいですよね。。
@tohtsky ですね!ここらへんは少しややこしいですね。僕がやってたときもrがほとんどでしたね、そもそも因果推論も全然少なかった気がします。いまはやっとCFMLが少しずつ人気が出ていますね。
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
基本的にAIPTWはIPTWよりも精度は良いはずですがなぜでしょうか、、、