話を簡単にするため、変数には性別のみを考えCM0、CM1の男女の分布を見てみます。sex=1が男性ですが、見た所男性の方がCMをみていない割合が多そうです。ゲームプレイ時間は男性の方が長いので、性別は交絡因子となります。effectを求めていきます。CM1or0になる確率を求めます。ここで注意点ですが傾向スコアはCM1になる確率でした。IPWで使われる確率はCM1or0になる確率です。その人が受けた条件となる確率とも言えます。ややこしいですが、とりあえずは納得して頂いて実際に求めてみます。0.386ここから、女性だった場合にCMを見る確率は46.5%、見ない確率は53.5%、男性も同様に...です。2.59CMを見た女性は2.15倍、見ていない女性は1.87倍に、男性も同様にすると、男女の人数の分布は以下のようになります。何と、男女の分布が同じになりました。このようにして、各サンプルに重みをつけて分布を同じにする手法がIPWです。人数を増やすと言うのは直感的な理解で、実際に求める際は重み付け最小二乗法で求めます。IPWを使ってCMの効果を求めてみましょう。0.16CMの効果は-492と、Standardizationで求めた結果と同じになりました。補足:StandardizationとIPWの違い実はIPWとStandardizationは同じ理論で成り立っており、パラメトリックなモデルを仮定しなかった場合は、この二つは同じ結果になります。effectを推定できます。何らかのモデルを仮定して仮にモデルが不十分であった場合は、それぞれが異なる結果となります。これはStandardizationとIPWがモデルを作る際に何をアウトカムとするのかに起因し、Standardizationでは推定したい結果(今回はゲームプレイ時間)をモデルのアウトカムとするのに対して、IPWでは傾向スコアを求める際に要因側(今回はCM)をアウトカムにします。これ以上はあまり詳しく書きませんが、この違いによって結果が異なってしまい、もしStandardizationとIPWで結果が大きく異なる場合はモデルが不十分である可能性があるとだけ覚えておきましょう。詳しく知りたい方は参考文献(ハーバード)をご参照ください。傾向スコアを使ったIPWの実践さて、調整したい分布は性別だけではありません。年齢、テレビの視聴時間、子供の有無...などなどCM0とCM1を純粋に比較するために分布を同じにしたい変数はたくさんあります。そこで、先ほどは性別だけを変数としましたが、今度は調整したい全ての変数を使って傾向スコアを求めてみましょう。www.medi-08-data-06.work使用する変数は上述した変数を使用します。傾向スコアからそれぞれの介入条件に割り当てられる確率を求め、その逆数からIPWを計算します。適当に選んだ5人の結果をみてみましょう。1.63左からCMの変数、傾向スコア(ps)、介入条件に割り当てられる確率(p)、その逆数(ipw)となっています。このipwで重み付けをしてゲームプレイ時間に対するCMの効果を推定してみます。IPWはこのようにして集団全体へ介入をした場合の効果を推定することができます。補足:岩波データサイエンスとの用語対応ここで、本記事で参考にさせて頂いている成書と、使用している用語が多少異なりますので、整理しておきます。effectの値になります。effectに統一しました。weights)などと言われる手法を使います。名前は違えど、傾向スコアを使って重みをつけるという考え方に違いはありません。イメージとしては、IPWが全体を仮想的に増加させるのに対して、SMRWは、介入群はそのままで、非介入群のみ介入群と分布が同じになるように増加させます。結果の解釈としては、"介入群が受けた介入の効果"となります。ちなみに傾向スコアマッチングの推定値もATTに近くなります。これらの手法の違いについては、参考文献(論文)をご参照ください。Rでの実践ここからRでIPWを実践していきます。傾向スコアを求めるところまでは前回と同じですので、コードのみを記載しています。dat)さて、ここで求めた傾向スコアを使って介入条件に割り当てられる確率(p)、その逆数(ipw)を計算します。1/p)#逆数にするipwが計算できたらあとはglm{stats}の引数weightにipwを指定して、回帰分析を行うだけです。1うまく計算できました。本文では触れていませんでしたが、標準誤差が大きいため、今回の結果ではCMがゲームプレイ時間に与える影響はほとんどない可能性もあることに注意しましょう。Pythonでの実戦ここからはPythonでもIPWを実践してみましょう。傾向スコアを求めるところまでは前回と同じですので、コードのみを記載しています。res.predict(dat)さて、ここで求めた傾向スコアを使って介入条件となる確率(p)、その逆数(ipw)を計算します。1/p最後にstatsmodelsのWLSを使って重み付きの推定値を求めます。0.516うまくいきました!ただし本文では触れていませんでしたが、標準誤差が大きいため、今回の結果ではCMがゲームプレイ時間に与える影響はほとんどない可能性もあることに注意しましょう。まとめ全2回に分けて、傾向スコアを使った解析手法を紹介してきました。強調しておきたいのは、どのモデルが一番正しいということはなく、検証したい仮説とデータの背景からどの解析手法を使うのか適切なのかを選択しなければならないと言うことです。傾向スコアは因果推論においてはかなり重宝するテクニックですので、結果の解釈やモデルの使い方はしっかりと確認しておきたいですね。※本記事は筆者が個人的に学んだことをまとめた記事なります。数学の記法や詳細な理論、用語等で誤りがあった際はご指摘頂けると幸いです。今回のデータはこちらの書籍のものになります。傾向スコアやIPWなど因果推論に関する基本的なスキルはこれ一冊で事足りるのでは?と思うぐらいまとまっております。見るピンク本と呼ばれるこちらの書籍、理論的な背景までしっかりとまとまっていますので、詳しい理論が知りたい方にはオススメです。見るハバード大学が無料で公開している因果推論に関するテキストです。RやPythonのコードもあり、これが無料で読めるとは本当にすごいです。本記事の内容もこちらを参考にしています。https://www.hsph.harvard.edu/miguel-hernan/causal-inference-book/因果推論に関して、おそらく日本で一分かりやすく、しかも丁寧に解説されているブログです。参考にさせて頂いてます。Unboundedly因果推論手法の比較を行なっている論文です。それぞれのモデルに必要な前提条件や結果の解釈など、勉強になります。Academic傾向スコアを使った解析手法の特徴がグラフィカルに書かれており、とても参考になるスライドです。本記事を書く上で、一番参考にさせて頂きました。10:40集団全体への介入効果を推定するStandardizationとIPWの実力〜RとPythonにて〜Tweet関連記事2019-07-20facebookの時系列予測パッケージ{prophet}を使って、ブログアクセス数を予測する。はてなブログPro大学院で疫学統計を学んでいます。データサイエンティストを目指して、初心者目線から統計学、機械学習など学んだことをまとめていきます。パッケージ{prophet}を使って、ブログアクセス数を予測する。medi_data0826スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。