我们以伍德里奇《计量经济学导论:现代方法》的”第14章 高级面板数据方法“的案例14.1为例,使用jtrain中的数据来进行固定效应估计。
import wooldridge as woo
import pandas as pd
import statsmodels.formula.api as smf
from linearmodels.panel import PanelOLS
在使用面板数据分析工具之前,首先要改变一下数据结构,使数据集体现出面板数据的特征,表明每个观察个体的身份信息和时间信息。具体的方法是增加两个索引,也就是说通过这两个索引可以确定唯一的一条数据。
jtrain = woo.dataWoo('jtrain') print(jtrain) jtrain = jtrain.set_index(['fcode','year']) #pandas库的函数,用于将dataFrame的一列或多列作为索引,按照指定的列将数据重新排列,生成一个新的索引对象 # DataFrame.set_index(keys, *, drop=True, append=False, inplace=False, verify_integrity=False) # key:数据表中的某列 / 列标签列表 / 数组列表,需要设置为索引的列。 # drop:删除用作新索引的列,默认为True,删除。 # append:是否将列附加到现有索引,默认为False,否。 # inplace:表示当前操作是否对原数据重新,默认为False,否。 # verify_integrity:检查新索引的副本。否则,请将检查推迟到必要时进行。将其设置为False,将提高该方法的性能,默认为False。

根据fcode和year来进行索引
三、固定效应模型
固定效应,即面板数据中随个体变化但不随时间变化的一类变量方法。
消除固定效应的一种方法是去除时间均值法,即将每个变量的每条数据都减去该变量按照时间的均值,得到的差值称为去除时间均值数据,然后利用去除时间均值数据进行回归估计参数的方法。
本质上消除固定效应的目的就是减少个体特点对研究结果的影响。固定效应代表了每个观测单位(个人、公司等)特有的属性或特征,这些特征可能会对研究结果产生影响。通过消除固定效应,我们试图确保在控制了这些个体特点的情况下,更准确地研究解释变量对因变量的影响。因此,减少个人特点对研究结果的影响是消除固定效应的核心目标之一。

对每个i求方程在时间上的平均,即:

于是得到如下方程:

进而得到去除固定效应而又保留参数的方程:
这样处理虽然可以消除固定效应,但是把不随时间变化的解释变量也剔除了,如种族、性别等变量。
#求被解释变量、解释变量的去除时间均值
jtrain['lscrap_w'] = jtrain['lscrap'] - jtrain.groupby('fcode').mean()['lscrap']
jtrain['d88_w'] = jtrain['d88'] - jtrain.groupby('fcode').mean()['d88']
jtrain['d89_w'] = jtrain['d89'] - jtrain.groupby('fcode').mean()['d89']
jtrain['grant_w'] = jtrain['grant'] - jtrain.groupby('fcode').mean()['grant']
jtrain['grant_1_w'] = jtrain['grant_1'] - jtrain.groupby('fcode').mean()['grant_1']
#用OLS方程对去除时间均值进行估计
results_man = smf.ols(formula='lscrap_w ~ 0 + d88_w + d89_w + grant_w + grant_1_w', data=jtrain).fit()
print(results_man.summary())
结果如下:

模块提供PandelOLS进行固定效应模型。表示特定因素。
exog_vars = ['d88','d89','grant','grant_1'] exog = jtrain[exog_vars] reg_fe = PanelOLS(jtrain.lscrap,exog,entity_effects= True) # reg_fe = PanelOLS.from_formula(formula= 'lscrap ~ d88 + d89 + grant + grant_1+ EntityEffects',data=jtrain) results_fe = reg_fe.fit() print(results_fe)
根据固定效应方法的估计方程可以知道,固定效应方程是没有截距项的,所以在以上代码中不增加常数项。

