今日も因果推論についての記事を書いていきます。www.iwanami.co.jp本記事ではその中でも、1章にある交絡因子がある場合の因果効果を、回帰モデルを利用して分析していきます。必要なパッケージ変数は基本的にnumpyで処理し、図の作成にはmatplotlibを使用することにします。重回帰係数を求めるためにscikit-learnのlinear_modelを用います。そのため、以下の3つのパッケージをインポートしておきます。matplotlibのスタイルはお好みで変更してください。linear_modelplt.style.use('ggplot')そもそも交絡因子とはなにか交絡因子については過去のこの記事を参考にしてください。・因果と相関の違い・層別解析の実装についても書いています。本記事とかなり近い内容ですので、因果推論に興味がある方は是非読んでいただけると嬉しいです。あり、それぞれ原因変数と結果変数であるとします。説明変数として、以下のような回帰モデルを構成したとします。結果変数と原因変数の関係の強さを表すことは言うまでもありません。ある場合を考えていきます。以下のような重回帰モデルを考えてきます。説明すると、交絡因子が存在する問題点は、結果変数が変化した際に、1原因変数が変化したためなのか2交絡因子が変化したため、原因変数と結果変数が変化したのかの区別がつかないことです。値を固定してしまえば良いわけです。これが、交絡因子がある中での回帰モデルでの因果効果推定の考え方の肝です。変化量を表しています。これが、交絡因子がある中での回帰モデルでの因果効果推定の方法です。ここでは重回帰モデルと仮定しましたが、ポアソン回帰などの一般化線形モデルでも同様に因果効果の大きさを推定できます。因果効果を推定していきます。正規乱数として、次のように生成。pythonでのデータの生成方法は以下のようにやりました。生成方法については、記事上部に掲載した層別解析の記事を御覧ください。乱数を利用しているので、ご自身で試される場合、値は少しブレると思います。関係を図示してみます。8)plt.xlabel('X')plt.ylabel('Y')plt.show()きれいな相関が見られますね。交絡因子を考慮せず、このまま線形回帰した場合の因果効果を計算してみます。大きく因果効果を推定してしまっていることがわかります。ここまでは層別解析のときと同じですね。因果効果を計算していきます。同じアレイに統合します。xとzを統合そして、scikit-learnで重回帰し、各変数の傾きパラメータを出力していきます。推定されたことがわかります。とかなり近い値が推定されました。したがって、このように回帰モデルを用いることで、交絡因子の影響を排除して因果効果を正しく推定できることがわかります。この例で、ここまで正しく因果効果を推定することができたのは、データを生成したモデルが重回帰モデルであることがわかっていたためです。仮に、用いたモデルがデータを生成したモデルと異なっている場合、因果効果は正しく推定することができません。した場合には、層別解析等、他の手法も試すとうまくいくこともあります。Vol.3を参考に回帰モデルを利用して因果効果を分析してみました。うまく結果が出て一安心です。最近は競技プログラミングにはまってます。本ブログでは、日々学んだことををアウトプットしていきます。SaversをPythonで解いてみた月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。