import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from statsmodels.formula.api import ols
第8章のPythonコード
第8章 ランダム化実験
モジュールのインポート
8.1 授業の出席率と成績:セレクションバイアス
8.1.1 因果関係?単なる相関関係?
= pd.read_csv('class_attendance.csv') # データの読み込み
classdata
sns.set_theme()= 'D', y = 'Y', data = classdata)
sns.stripplot(x plt.show()
8.2 ランダム化実験
8.2.2 セレクションバイアスの除去
= ols('Y ~ D', data = classdata).fit()
result result.params
Intercept 50.733333
D 19.100000
dtype: float64
= sum(classdata.eval('D * Y')) / sum(classdata['D'])
Y1mean = sum(classdata.eval('(1 - D) * Y')) / sum(1 - classdata['D'])
Y0mean
# コントロールグループの平均値 = α
Y0mean - Y0mean # 平均値の差 = β Y1mean
19.099999999999994
= classdata[['D', 'Y']].groupby('D').mean().transpose()
meandata = meandata[1] - meandata[0]) meandata.assign(diff
D | 0 | 1 | diff |
---|---|---|---|
Y | 50.733333 | 69.833333 | 19.1 |
= ols('Y ~ D + motiv', data = classdata).fit()
result print(result.summary().tables[1])
==============================================================================
coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept 41.2033 2.801 14.712 0.000 35.595 46.811
D 1.2385 4.817 0.257 0.798 -8.407 10.884
motiv 0.9888 0.231 4.276 0.000 0.526 1.452
==============================================================================