许文立,xuweny87@163.com
许坤,中国人民大学,kunxu2014@126.com
线性回归-Python:AJR(2001,AER)
概述
线性回归是分析两个或更多变量之间关系的标准工具
本讲中,我们将利用Python的statsmodels包来估计、理解和可视化线性回归模型
我们讨论一下主题
一元和多元回归
可视化
内生性和遗漏变量偏误
二阶段最小二乘
作为示例,我们会重复Acemoglu,Johnson and Robinson(2001,AER)的经典文章的结果
该论文可以从这里下载(https://economics.mit.edu/files/4123)
(1)在这篇文章中,作者强调制度对经济发展对的影响
(2)主要的贡献是利用殖民死亡率作为制度差异的外生变化的来源
(3)这种变化决定制度是否引起了更多的经济增长,而不是别的方式
预备知识
本讲稿需要大家熟悉计量基础
一元线性回归
AJR(2001)希望判断制度差异是否能解释观察到的经济结果
我们如何测量制度差异和经济结果呢?
在他们的论文中,
经济产出以1995年人均GDP来近似,且用汇率调整
制度差异以1985-95年掠夺风险的法律保护均值来近似,该指数由Political Risk Serivces Group(https://www.prsgroup.com/)构建
这些变量和其他数据可以在Acemoglu的主页下载(https://economics.mit.edu/faculty/acemoglu/data/ajr2001)
我们将利用pandas的.read_stata()函数来读取.dta中的数据
importpandasaspd
df1=pd.read_stata('https://github.com/QuantEcon/QuantEcon.lectures.code/raw/
master/ols/maketable1.dta')
df1.head()
我们用散点图来看看人均GDP和掠夺风险保护指数之间是否存在明显的关系
importmatplotlib.pyplotasplt
plt.style.use('seaborn')
df1.plot(x='avexpr',y='logpgp95',kind='scatter')
plt.show()
这幅图显示出了法律保护与人均GDP对数之间存在很强的正向关系
特别地,如果更严格的法律保护是制度质量的一个指标,那么,更好的制度可能与更好经济结果正向关
给定这幅散点图,选择一个线性模型来描述这个关系
我们把模型写成
logpgp95i=β0+β1avexpri+ui
其中,
β0是线性回归线与y轴的截距
β1线性回归线的斜率,表示法律保护对人均GDP的边际效应
ui是随机误差项(由于遗漏因素而引起的线性趋势的偏离)
直观上看,线性模型就是要选择一条直线来最好地拟合数据(例如AJR2001中的图2)
估计beta最常用的技术是OLS
OLS模型就是要找到参数使得残差平方和最小化:
其中,ui是因变量的观测值与预测值之差
为了估计常数项beta0,我们需要在数据集中增加一列1的数据
现在,我们可以利用OLS函数在statsmodels中来构建我们的模型
至此,我们创建了模型
我们需要用.fit()来获得beta0和beta1的参数估计值
我们现在把拟合回归模型储存在results
为了看看OLS的回归结果,我们调用.summary()方法
注意,一个观测值从原文的数据中删除了,因此,系数稍微有点差异
从我们的结果可以看到
截距beta0=4.63
斜率beta1=0.53
Beta1的估计值为正意味着制度质量对经济结果有正向关系
Beta1的p值为0.000说明制度对GDP的效应是显著的
R2的值0.611说明,人均GDP对数方差的61%能被发了保护所解释
利用我们的估计参数,我们可以把回归关系写成
logpgp95ˆi=4.63+0.53avexpri
这个方程描述的是对数据最优拟合的直线
我们也能利用给定的法律保护水平来预测人均GDP对数值
例如,对一个国家来说,其制度值为7.07,我们就能预测得出1995年的人均GDP对数为8.38
获得上述预测结果的一种更加方面的方式是利用.predict(),并设立constant=1c
o
n
s
t
a
n
t
=
1 andavexpri=mean_expr
我们能调用来获得每一个avexpri对应的logpgp95i预测值
观测值与预测值能作出图来进行比较
多远回归
上面只解释了影响经济绩效的制度因素,但是可以肯定的是还有许多影响经济的因素
影响loggdp95i的其它变量会引起遗漏变量偏误
我们能把一元回归扩展到多元回归
AJR(2001)考虑的其它因素有
气候对经济结果的影响;维度被用来作为近似指标
同时影响经济绩效和制度的差异,例如文化差异,历史差异等等;这些利用哑变量(虚拟变量)来控制
我们用数据maketable2.dta来估计多远回归的结果,正如论文中表2
我们得到拟合的模型,然后用summary_col来把结果展示在一张表中(正如论文中一样)
内生性
正如AJR(2001)讨论的,OLS模型会遇到内生性问题,这会导致估计偏误和非一致性。
也就是说,制度和经济结果之间有双边关系:
越富有的国家可能会更偏好更好的制度
影响收入的变量可能与制度差异有关
指标的构建可能存在偏误;分析师可能会出现偏误,收入越高,制度越好
为了处理内生性,我们能用二阶导最小二乘(2SLS)回归,它是OLS的一种扩展
该方法要求用一个变量来代替内生变量avexpri,
该变量
与avexpri相关
不与误差项相关
新的回归因子成为工具或工具变量,它们旨在消除制度差异的内生性
AJR(2001)的主要贡献是殖民地死亡率来作为制度差异的工具变量
他们假设,殖民地死亡率越高,那么,更加具有掠夺性制度就会建立(越少的法律保护),而且这些制度至今仍存在
如果17世纪-19世纪的死亡率直接影响目前的GDP,那么,第二个条件就不满足
例如,殖民死亡率可能与目前的疾病环境有关,其又影响经济绩效
AJR(2001)认为这是不可能的,因为:
死亡率是由于疟疾和黄热病引起的,不太可能影响当地居民
非洲或者印度居民的疾病负担可能不会高于平均水平,这是由于相对更高的人口密度导致的
因此,我么有一个有效的工具变量,我们能用2SLS回归哎获得一致无偏的参数估计
一阶段
一阶段就是内生变量对工具变量的回归
工具变量是一些列外生变量的集合
例如,我们的工具变量是常数和殖民死亡率logem4i
因此,我估计一阶段回归为
avexpri=δ0+δ1logem4i+vi
所需数据在maketable4.dta中,
二阶段
我们用.predict()来得到avexpri预测值
然后,用预测值取代内生变量avexpri
第二阶段的回归为
第二阶段的回归结果才给我们提供了一个无偏、一致的估计
这个结果说明,工具变量回归结果比OSL结果更强列支持制度对经济发展的正向效应
我们能用linearmodel(https://github.com/bashtage/linearmodels)包一步估计出2SLS回归
要安装这个包,你需要在命令行运行pipinstalllinearmodels
注意,当用IV2SLS时,外生和工具变量已经分离
假定我们现在得到一致、无偏估计,我们就能推断制度差异能解释国家之间的收入差异
AJR(2001)用0.94的边际效应来计算智利和尼日尼亚之间的制度差异所引起的7倍收入差异,强调制度在经济发展中的重要性。
总结
我们已经展示了statsmodels和linearmodels中的基本OLS和2SLS回归
如果你熟悉R,你也刻意用formula interface(http://www.statsmodels.org/dev/example_formulas.html)来调用statsmodels,或者考虑用r2py(https://rpy2.bitbucket.io/)来调用R