Python計算雙重差分模型DID及其對應P值使用詳解

1. DID(Differences-in-Differences)定義

雙重差分法,其主要被用於社會學中的政策效果評估。這種方法需要兩個「差異」數據。一個是幹預前後的「差異」,這個是自身實驗前後的差異。另外一個是幹預組與對照組的「差異」。DID利用這兩個「差異」的差異來推算幹預的效果。因此,顧名思義叫做雙重差分法。

其原理是基於一個反事實的框架來評估政策發生和不發生這兩種情況下被觀測因素y的變化。如果一個外生的政策沖擊將樣本分為兩組:受政策幹預的Treat組和未受政策幹預的Control組(在政策沖擊前,Treat組和Control組的y沒有顯著差異)。那麼,可以將Control組在政策發生前後y的變化看作Treat組未受政策沖擊時的狀況(反事實的結果)。通過比較Treat組y的變化(D1)以及Control組y的變化(D2),就可以得到政策沖擊的實際效果(DD=D1-D2)。

註意:隻有在滿足“政策沖擊前Treat組和Control組的y沒有顯著差異”(即平行性假定)的條件下,得到的雙重差分估計量才是無偏的。

如下圖所示:

幹預組實驗前為A1,實驗後為A2。對照組實驗前為B1,實驗後為B2。對於幹預組實驗前後差異為A2-A1,對於對照組實驗後為B2-B1。兩者之差(A2-A1)-(B2-B1)即為DID結果,因果效應/處理效應。如下圖處理效應所代表的部分。

2. DID模型形式

為分組虛擬變量(處理組=1,控制組=0);

[公式] 為分期虛擬變量(政策實施後=1,政策實施前=0);

交互項 [公式] 表示處理組在政策實施後的效應,其系數即為雙重差分模型重點考察的處理效應。

3. OLS多項式擬合

根據DID公式,我們可以通過使用多項式擬合的方法來求得DID及其P值。以下為Pyhton方法:使用statsmodels庫中ols方法,需要根據上述公式準備數據,t代表時間(幹預前=0,幹預後=1)、g代表分組(幹預組=1,對照組=0)、還有一個是交叉項tg(計算其t*g即可)。

代碼如下:

import statsmodels.formula.api as smf
import pandas as pd
v1 =[0.367730,0.377147,0.352539,0.341864,0.29276,0.393443,0.374697,0.346989,0.385783,0.307801]
t1 = [0,0,0,0,1,0,0,0,0,1]
g1 =[1,1,1,1,1,0,0,0,0,0]
tg1 = [0,0,0,0,1,0,0,0,0,0]
aa = pd.DataFrame({'t1':t1,'g1':g1,'tg1':tg1,'v1':v1})
X = aa[['t1', 'g1','tg1']]
y = aa['v1']
est = smf.ols(formula='v1 ~ t1 + g1 + tg1', data=aa).fit() 
y_pred = est.predict(X)
aa['v1_pred'] = y_pred
print(aa)
print(est.summary()) 
print(est.params) 

準備數據格式如下:

OLS結果Summary如下:

交叉項的系數就是DID結果,處理效應。P>| t |為其P值,小於0.05表示差異顯著。

參考資料:

1. 雙重差分法(DID)入門必看 – 知乎

2. 什麼是雙重差分模型(:difference-in-differences model)? – 知乎

3. Python 普通最小二乘法(OLS)進行多項式擬合的方法

以上就是Python計算DID及其對應P值使用詳解的詳細內容,更多關於Python計算DID及對應P值的資料請關註WalkonNet其它相關文章!

推薦閱讀: