跟着开源项目学因果推断——FixedEffectModel 固定效应模型(十七)

这个开源项目来源于快手,当然对于快手的开源项目是有前车之鉴的【生存分析——快手的基于深度学习框架的集成⽣存分析软件KwaiSurvival(一)】。KwaiSurvival让我觉得是实验代码,今天要接触的FixedEffectModel 稍好一些,但是仍然关联文档非常匮乏呀。

1 来源

启发源头来自一篇文章,来源地址:因果分析工具在快手的应用

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2 说说固定效应模型

开发库的应该是计量经济方向的老师,FEM模型可是我们专业的论文利器,先来快速帮助自己回忆一下当年做这个模型的固定建模套路。

2.1 理论简述

曾经是版主的人大论坛有一些简单描述【[面板数据求助] 混合OLS模型、固定效应模型、随机效应模型的区别是什么?】:

  • 1.混合估计模型就是各个截面估计方程的 截距和斜率项都一样,也就是说回归方程估计结果在截距项和斜率项上是一样的
  • 2.随机效应模型和固定效应模型则认为回归方程估计结果在截距项和斜率项上是不一样的,所以你可以选择变截距模型,也可以选择变系数模型

固定效应模型可分为三类:
(1)个体固定效应模型:个体固定效应模型是对于不同的时间序列(个体)只有截距项不同的模型:
在这里插入图片描述
从时间和个体上看,面板数据回归模型的解释变量对被解释变量的边际影响均是相同的,而目除模型的解释变量之外,影响被解释变量的其他所有(未包括在回归模型或不可观测的)确定性变量的效应只是随个体变化而不随时间变化。

(2)时点固定效应模型:时点固定效应模型就是对于不同的截面(时点)有不同截距的模型。如果确知对于不同的截面,模型的截距显著不同,但是对于不同的时间序列(个体)截距是相同的,那么应该建立时点固定效应摸型:
在这里插入图片描述

(3)时点个体固定效应模型:时点个体固定效应模型就是对于不同的截面(时点)、不同的时间序列(个体)都有不同截距的模型。如果确知对于不同的截面、不同的时间序列(个体)模型的截距都显著不相同,那么应该建立时点个体固定效应模型:
在这里插入图片描述

2.2 固定效应如何被消除?

参考:笔记 | 杂谈控制固定效应这件事

固定效应的实现:控制了固定效应的模型是将模型的各变量减去控制的维度的均值,得到的模型是变换后的各变量为去除控制维度层面均值的数据。

举例,控制地区固定效应:将模型的各变量减去其地区均值(country-demeaned)。有一套数据,数据结构为50个城市*20年,共有1000个观测值,其中数据有一个不随时间改变的城市变量market。我们的模型是因变量为y,自变量为market,z1,z2为控制变量。当模型控制城市固定效应,模型的各变量会减去其所属地区的变量均值,即market-level就会减去所属地区的market的均值,这样market就会被吸收掉。

所以,如果是自变量和固定效应衡量是同一层级的变量,或者是低一层级的变量,就不应该同时出现在模型中了,会被吸收掉。

如当你控制城市固定效应,省级层面不随时间变化的变量会被吸收掉。

2.3 用eviews实现固定效应模型

[经验分享] 面板数据之固定效应模型的建立

2.3.1 面板数据检验

单位根检验即平稳性检验。3种方法:相同根情形下的单位根LLC(Levin-Lin-Chu)检验,不同根情形下的单位根检验Fisher-ADF和Fisher-PP检验。
如果检验结果中三种检验中均存在单位根的原假设,则此面板数据是平稳的,反之则不平稳。

2.3.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建模时候使用的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值