跟着开源项目学因果推断——FixedEffectModel 固定效应模型(十七)
Posted 悟乙己
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跟着开源项目学因果推断——FixedEffectModel 固定效应模型(十七)相关的知识,希望对你有一定的参考价值。
这个开源项目来源于快手,当然对于快手的开源项目是有前车之鉴的【生存分析——快手的基于深度学习框架的集成⽣存分析软件KwaiSurvival(一)】。KwaiSurvival让我觉得是实验代码,今天要接触的FixedEffectModel 稍好一些,但是仍然关联文档非常匮乏呀。
1 来源
启发源头来自一篇文章,来源地址:因果分析工具在快手的应用
2 说说固定效应模型
开发库的应该是计量经济方向的老师,FEM模型可是我们专业的论文利器,先来快速帮助自己回忆一下当年做这个模型的固定建模套路。
2.1 理论简述
曾经是版主的人大论坛有一些简单描述【[面板数据求助] 混合OLS模型、固定效应模型、随机效应模型的区别是什么?】:
- 1.混合估计模型就是各个截面估计方程的 截距和斜率项都一样,也就是说回归方程估计结果在截距项和斜率项上是一样的
- 2.随机效应模型和固定效应模型则认为回归方程估计结果在截距项和斜率项上是不一样的,所以你可以选择变截距模型,也可以选择变系数模型
固定效应模型可分为三类:
(1)个体固定效应模型:个体固定效应模型是对于不同的时间序列(个体)只有截距项不同的模型:
从时间和个体上看,面板数据回归模型的解释变量对被解释变量的边际影响均是相同的,而目除模型的解释变量之外,影响被解释变量的其他所有(未包括在回归模型或不可观测的)确定性变量的效应只是随个体变化而不随时间变化。
(2)时点固定效应模型:时点固定效应模型就是对于不同的截面(时点)有不同截距的模型。如果确知对于不同的截面,模型的截距显著不同,但是对于不同的时间序列(个体)截距是相同的,那么应该建立时点固定效应摸型:
(3)时点个体固定效应模型:时点个体固定效应模型就是对于不同的截面(时点)、不同的时间序列(个体)都有不同截距的模型。如果确知对于不同的截面、不同的时间序列(个体)模型的截距都显著不相同,那么应该建立时点个体固定效应模型:
2.2 用eviews实现固定效应模型
2.2.1 面板数据检验
单位根检验即平稳性检验。3种方法:相同根情形下的单位根LLC(Levin-Lin-Chu)检验,不同根情形下的单位根检验Fisher-ADF和Fisher-PP检验。
如果检验结果中三种检验中均存在单位根的原假设,则此面板数据是平稳的,反之则不平稳。
2.2.2 模型设定和检验结果分析
首先,根据Hausman检验,在选择固定效应模型或随机效应模型之间作出取舍。
原假设和备择假设是:
H0:个体效应与回归变量无关(个体随机效应回归模型);
H1:个体效应与回归变量相关(个体固定效应回归模型)。
在随机效应模型的回归结果中进行豪斯曼检验
拒绝原假设,说明解释变量与个体效应相关,因此不是随机效应模型而是固定效应模型。
其次,我们通过F检验来确定建立固定系数模型还是变系数模型。
原假设和备择假设是:
- 假设1:斜率在不同的横截面样本点上和时间上都相同,但截距不同。
- 假设2:截距和斜率在不同的横截面样本点上和时间上都相同。
判断规则:
- 拒绝H2,则为不变参数模型即模型③,相当于不用面板数据回归。
- 拒绝H2,接受H1,则为截距项不同的固定效应模型,即模型②;
- 拒绝H2,拒绝H1,则截距项和斜率都不同,即变参数模型①。
① 变系数模型
② 变截距模型
不变参数模型
经过上述的推断分析和经验过程,我们针对方程最终建立的是固定效应变系数模型。
固定系数效应模型估计结果如下表:
3 FixedEffectModel的使用
github:
https://github.com/ksecology/FixedEffectModel
安装:
pip install FixedEffectModel
涵盖的模型包括:
- Linear model
- Linear model with high dimensional fixed effects
- Difference-in-difference model with parallel checking plot
- Instrumental variable model
- Robust/white standard error
- Multi-way cluster standard error
- Instrumental variable model tests, including weak iv test (cragg-dolnald statistics+stock and yogo critical values), over-identification test (sargan/Basmann test), endogeneity test (durbin test)
For instrumental variable model, we now only provide two stage least square estimator and produce second stage regression result.
In our next release we will include GMM method and robust standard error based on GMM.
3.1 简单示例
import pandas
from FixedEffectModel.api import *
from utils.panel_dgp import gen_data
N = 100
T = 10
beta = [-3,-1.5,1,2,3,4,5]
ate = 1
exp_date = 2
df = gen_data(N, T, beta, ate, exp_date)
consist_input = ['x_1','x_2'] # independent variables
out_input = ['y']
category_input = ['id','time'] # 固定效应
cluster_input = ['id','time'] # 分类-输出结果分类
endo_input = ['x_3','x_4'] # 内生变量:endogenous independent variables
iv_input = ['x_5','x_6'] # 工具变量
result1 = ols_high_d_category(df,
consist_input,
out_input,
category_input,
cluster_input,
endo_input,
iv_input,
formula=None,
robust=False,
c_method = 'cgm',
epsilon = 1e-8,
max_iter = 1e6)
#show result
result1.summary()
从time可以看出来,生成的模拟数据是一个面板数据:
得到的模型结论:
High Dimensional Fixed Effect Regression Results
==================================================================================
Dep. Variable: y R-squared(proj model): -2.749e+05
No. Observations: 1000 Adj. R-squared(proj model): -3.096e+05
DoF of residual: 887.0 R-squared(full model): -2.416e+05
Residual std err: 3977.6992 Adj. R-squared(full model): -2.724e+05
Covariance Type: clustered F-statistic(proj model): 0.0017
Cluster Method: cgm Prob (F-statistic (proj model)): 1.0000
DoF of F-test (proj model): [4.0, 9]
F-statistic(full model): 2.543e-05
Prob (F-statistic (full model)): 1.0000
DoF of F-test (full model): [113, 887]
==========================================================================================
coef cluster std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------------------
const -250.73283 6005.79285 -0.0417 0.9667 -12037.9545 11536.4889
x_1 48.64828 1243.56217 0.0391 0.9688 -2392.0191 2489.3157
x_2 153.05847 3700.41112 0.0414 0.9670 -7109.5240 7415.6410
hat_x_3 -3904.29585 94284.66692 -0.0414 0.9670 -188951.3491 181142.7574
hat_x_4 755.68036 17806.23744 0.0424 0.9662 -34191.5902 35702.9510
==========================================================================================
=============================================
First-Stage F-stat P > F
---------------------------------------------
x_3 0.4130 0.7994
x_4 0.5341 0.7107
=============================================
#get fixed effects 固定效应
getfe(result1)
输出结果为:
dummy_name effect s.e t-value P>|t|
0 id1.0 -927.667109 22502.699068 -0.041225 0.967126
1 id2.0 507.346007 12430.347112 0.040815 0.967452
2 id3.0 -2671.189437 64333.241496 -0.041521 0.966890
3 id4.0 543.810098 13143.803153 0.041374 0.967007
4 id5.0 185.897042 4757.012648 0.039079 0.968837
.. ... ... ... ... ...
105 time6.0 -197.069938 4828.720590 -0.040812 0.967455
106 time7.0 398.671416 9713.998689 0.041041 0.967273
107 time8.0 268.889328 6491.382174 0.041423 0.966968
108 time9.0 -204.926493 4954.929115 -0.041358 0.967020
109 time10.0 -138.471971 3333.637133 -0.041538 0.966877
# IV检测
# Diagnostics and specification tests
# We provide specification test for iv models:
ivtest(result1)
输出结果为:
Weak IV test with critical values based on 2SLS size
================================================
Cragg-Donald Statistics: 0.000577
number of instrumental variables: 2
number of endogenous variables: 2
=============================================================================
5% 10% 20% 30%
-----------------------------------------------------------------------------
2SLS Size of nominal 5% Wald test 7.0300 4.5800 3.9500 3.6300
-----------------------------------------------------------------------------
H0: Instruments are weak
Over identification test - nonrobust
==============================================
test statistics p values
----------------------------------------------
Sargan Statistics: 0 0
Basmann Statistics: 0 0
----------------------------------------------
Tests of endogeneity
=============================================
test statistics p values
---------------------------------------------
Durbin Statistics: 974.8824 0
---------------------------------------------
H0: variables are exogenous
3.2 DID模型
from FixedEffectModel.api import *
from utils.panel_dgp import gen_data
N = 100
T = 10
beta = [-3,-1.5,1,2,3,4,5]
alpha = 0.9
ate = 1
exp_date = 2
#generate sample data
data_df = gen_data(N, T, beta, ate, exp_date)
#did wrt group effect
formula = 'y~0|id+time|0|0'
result = ols_high_d_category(data_df,
formula=formula,
treatment_input ={'treatment_col':'treatment',
'exp_date':5,
'effect':'group'})
result.summary()
#did wrt individual effect
formula = 'y~0|id+time|0|0'
result = ols_high_d_category(data_df,
formula=formula,
treatment_input ={'treatment_col':'treatment',
'exp_date':5,
'effect':'individual'})
result.summary()
其中formula的含义为:因变量 ~ 连续变量| 固定效应|分类
可以看到,这个treatment_input
是当要进行DID建模时候使用的
以上是关于跟着开源项目学因果推断——FixedEffectModel 固定效应模型(十七)的主要内容,如果未能解决你的问题,请参考以下文章
跟着开源项目学因果推断——FixedEffectModel 固定效应模型(十七)