前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跟着开源项目学因果推断——FixedEffectModel 固定效应模型(十七)

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

作者头像
悟乙己
发布2021-12-07 16:47:12
1.2K0
发布2021-12-07 16:47:12
举报
文章被收录于专栏:素质云笔记素质云笔记

这个开源项目来源于快手,当然对于快手的开源项目是有前车之鉴的【生存分析——快手的基于深度学习框架的集成⽣存分析软件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

安装:

代码语言:javascript
复制
 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 简单示例

代码语言:javascript
复制
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可以看出来,生成的模拟数据是一个面板数据:

得到的模型结论:

代码语言:javascript
复制
                 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   
=============================================
代码语言:javascript
复制
#get fixed effects 固定效应
getfe(result1)

输出结果为:

代码语言:javascript
复制
    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
代码语言:javascript
复制
# IV检测
# Diagnostics and specification tests
# We provide specification test for iv models:
ivtest(result1)

输出结果为:

代码语言:javascript
复制
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模型

代码语言:javascript
复制
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建模时候使用的

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-10-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 来源
  • 2 说说固定效应模型
    • 2.1 理论简述
      • 2.2 固定效应如何被消除?
        • 2.3 用eviews实现固定效应模型
          • 2.3.1 面板数据检验
          • 2.3.2 模型设定和检验结果分析
      • 3 FixedEffectModel的使用
        • 3.1 简单示例
          • 3.2 DID模型
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档