【Python计量】两期面板数据分析
本文讨论两个时期的面板数据的分析方法。
【例1】伍德里奇《计量经济学导论:现代方法》的“第13章 跨时横截面的混合:简单面板数据处理方法”的例13.5,利用SLP75_87数据,研究睡眠与工作之间的替代关系。构建多元线性回归模型如下:
slpnapit=β0+δ0d81t+β1totwrkit+β2educit+β3marrit+β4yngkidit+β5gdhlthit+ai+uitslpnap_{it}=\beta_0+\delta_0d81_t+\beta_1totwrk_{it}+\beta_2educ_{it}+\beta_3marr_{it}+\beta_4yngkid_{it}+\beta_5gdhlth_{it}+a_i+u_{it} slpnapit=β0+δ0d81t+β1totwrkit+β2educit+β3marrit+β4yngkidit+β5gdhlthit+ai+uit
- slpnap:睡眠时长
- d81:1975年为0,1981年为1
- totwrk:每周工作分钟数
- educ:受教育的年数
- marr:已婚为1,否则为0
- yngkid:孩子小于3岁为1,否则为0
- gdhlth:健康为1,否则为0
- a:影响睡眠时间的固定因素
对于任意i,将1975年和1981年的两个方程相减得到的差分方程,我们称之为一阶差分方程。
Δslpnapi=δ0+δ1Δtotwrki+δ2Δeduci+δ3Δmarri+δ4Δyngkidi+δ5Δgdhlthi+Δui\Delta slpnap_i=\delta_0+\delta_1\Delta totwrk_i+\delta_2\Delta educ_i+\delta_3\Delta marr_i+\delta_4\Delta yngkid_i+\delta_5\Delta gdhlth_i+\Delta u_i Δslpnapi=δ0+δ1Δtotwrki+δ2Δeduci+δ3Δmarri+δ4Δyngkidi+δ5Δgdhlthi+Δui
该差分方程中的固定因素消失了,剩下的都是随时间变化的因素。
处理面板数据时需特别注意面板数据的编排方式,不同的编排方式有不同的处理方法。本例中,原始数据将每一个人的1975年和1981年的数据分别存储在同一行的两个字段中,比如eudc75和educ81。
代码如下:
import wooldridge as woo
import numpy as np
import pandas as pd
import statsmodels.formula.api as smfslp75_81 = woo.dataWoo('slp75_81')slp75_81['D_slpnap'] = slp75_81['slpnap81'] - slp75_81['slpnap75']
slp75_81['D_totwrk'] = slp75_81['totwrk81'] - slp75_81['totwrk75']
slp75_81['D_educ'] = slp75_81['educ81'] - slp75_81['educ75']
slp75_81['D_marr'] = slp75_81['marr81'] - slp75_81['marr75']
slp75_81['D_yngkid'] = slp75_81['yngkid81'] - slp75_81['yngkid75']
slp75_81['D_gdhlth'] = slp75_81['gdhlth81'] - slp75_81['gdhlth75']
reg = smf.ols('D_slpnap~D_totwrk+D_educ+D_marr+D_yngkid+D_gdhlth',data=slp75_81)
results = reg.fit()
print(results.summary())
结果为:
OLS Regression Results
==============================================================================
Dep. Variable: D_slpnap R-squared: 0.150
Model: OLS Adj. R-squared: 0.131
Method: Least Squares F-statistic: 8.191
Date: Tue, 09 Aug 2022 Prob (F-statistic): 3.83e-07
Time: 09:07:33 Log-Likelihood: -1864.4
No. Observations: 239 AIC: 3741.
Df Residuals: 233 BIC: 3762.
Df Model: 5
Covariance Type: nonrobust
==============================================================================coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept -92.6340 45.866 -2.020 0.045 -182.999 -2.269
D_totwrk -0.2267 0.036 -6.287 0.000 -0.298 -0.156
D_educ -0.0245 48.759 -0.001 1.000 -96.090 96.041
D_marr 104.2139 92.855 1.122 0.263 -78.729 287.157
D_yngkid 94.6654 87.653 1.080 0.281 -78.027 267.358
D_gdhlth 87.5778 76.599 1.143 0.254 -63.338 238.493
==============================================================================
Omnibus: 31.927 Durbin-Watson: 1.890
Prob(Omnibus): 0.000 Jarque-Bera (JB): 57.378
Skew: -0.719 Prob(JB): 3.47e-13
Kurtosis: 4.922 Cond. No. 2.72e+03
==============================================================================Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
[2] The condition number is large, 2.72e+03. This might indicate that there are
strong multicollinearity or other numerical problems.
【例2】伍德里奇《计量经济学导论:现代方法》的“第13章 跨时横截面的混合:简单面板数据处理方法”的“13.3 两时期面板数据分析”的案例,利用CRIME2数据,研究犯罪率与失业率的关系。用以描述1982年和1987年城市犯罪率的固定效应模型是:
crmrteit=β0+δ0d87t+β1unemit+ai+uitcrmrte_{it}=\beta_0+\delta_0d87_t+\beta_1unem_{it}+a_i+u_{it} crmrteit=β0+δ0d87t+β1unemit+ai+uit
- crmrte:犯罪率
- d87:1982年为0,1987年为1
- unem:失业率
- a:影响睡眠时间的固定因素
因为 aia_iai 是不随时间而变化的常数,所以我们可以取两个年份的数据之差。对横截面的第i个观测值,把两年的方程分别写成:
yi2=(β0+δ0)+β1xi2+ai+ui2yi1=β0+β1xi1+ai+ui2y_{i2}=(\beta_0+\delta_0)+\beta_1x_{i2}+a_i+u_{i2}\\ y_{i1}=\beta_0+\beta_1x_{i1}+a_i+u_{i2} yi2=(β0+δ0)+β1xi2+ai+ui2yi1=β0+β1xi1+ai+ui2
如果我们将第一个方程减去第二个方程,便得到
yi2−yi1=δ0+β1(xi2−xi1)+(ui2−ui1)y_{i2}-y_{i1}=\delta_0+\beta_1(x_{i2}-x_{i1})+(u_{i2}-u_{i1}) yi2−yi1=δ0+β1(xi2−xi1)+(ui2−ui1)
或:
Δy=δ0+Δxi+Δui\Delta y=\delta_0+\Delta x_i+\Delta u_i Δy=δ0+Δxi+Δui
固定效应 aia_iai 被差分掉,不再出现。我们称之为一阶差分方程。
处理面板数据时需特别注意面板数据的编排方式,不同的编排方式有不同的处理方法。本例中,原始数据索引为偶数的行存放着1982年数据,索引为奇数的行存放着1987年数据。
代码如下:
import wooldridge as woo
import numpy as np
import pandas as pd
import statsmodels.formula.api as smfcrime2 = woo.dataWoo('crime2')# 创建个体索引
id_tmp = np.linspace(1, 46, num=46)
crime2['id'] = np.sort(np.concatenate([id_tmp, id_tmp]))# 对每个个体的crmrte and unem进行一阶差分
crime2['crmrte_diff1'] = \crime2.sort_values(['id', 'year']).groupby('id')['crmrte'].diff()
crime2['unem_diff1'] = \crime2.sort_values(['id', 'year']).groupby('id')['unem'].diff()# statsmodels估计一阶差分模型:
reg_sm = smf.ols(formula='crmrte_diff1 ~ unem_diff1', data=crime2)
results_sm = reg_sm.fit()
print(results_sm.summary())
结果如下:
OLS Regression Results
==============================================================================
Dep. Variable: crmrte_diff1 R-squared: 0.127
Model: OLS Adj. R-squared: 0.107
Method: Least Squares F-statistic: 6.384
Date: Tue, 09 Aug 2022 Prob (F-statistic): 0.0152
Time: 10:13:43 Log-Likelihood: -202.17
No. Observations: 46 AIC: 408.3
Df Residuals: 44 BIC: 412.0
Df Model: 1
Covariance Type: nonrobust
==============================================================================coef std err t P>|t| [0.025 0.975]
------------------------------------------------------------------------------
Intercept 15.4022 4.702 3.276 0.002 5.926 24.879
unem_diff1 2.2180 0.878 2.527 0.015 0.449 3.987
==============================================================================
Omnibus: 2.636 Durbin-Watson: 1.146
Prob(Omnibus): 0.268 Jarque-Bera (JB): 2.255
Skew: 0.539 Prob(JB): 0.324
Kurtosis: 2.883 Cond. No. 8.70
==============================================================================Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
我们也可以调用linearmodels的FirstDifferenceOLS模块进行估计。
import wooldridge as woo
import numpy as np
import pandas as pd
import linearmodels as plmcrime2 = woo.dataWoo('crime2')
crime2['d87'] = (crime2['year'] == 87).astype(int) # False=0, True=1
# 创建个体索引
id_tmp = np.linspace(1, 46, num=46)
crime2['id'] = np.sort(np.concatenate([id_tmp, id_tmp]))crime2 = crime2.set_index(['id', 'year'])
reg_plm = plm.FirstDifferenceOLS.from_formula(formula='crmrte ~ d87 + unem',data=crime2)
results_plm = reg_plm.fit()
print(results_plm)
结果为:
FirstDifferenceOLS Estimation Summary
================================================================================
Dep. Variable: crmrte R-squared: 0.1961
Estimator: FirstDifferenceOLS R-squared (Between): 0.4064
No. Observations: 46 R-squared (Within): 0.1961
Date: Tue, Aug 09 2022 R-squared (Overall): 0.4041
Time: 10:27:37 Log-likelihood -202.17
Cov. Estimator: Unadjusted F-statistic: 5.3653
Entities: 46 P-value 0.0082
Avg Obs: 2.0000 Distribution: F(2,44)
Min Obs: 2.0000
Max Obs: 2.0000 F-statistic (robust): 5.3653P-value 0.0082
Time periods: 2 Distribution: F(2,44)
Avg Obs: 46.000
Min Obs: 46.000
Max Obs: 46.000 Parameter Estimates
==============================================================================Parameter Std. Err. T-stat P-value Lower CI Upper CI
------------------------------------------------------------------------------
d87 15.402 4.7021 3.2756 0.0021 5.9257 24.879
unem 2.2180 0.8779 2.5266 0.0152 0.4488 3.9872
==============================================================================
·
【Python计量】两期面板数据分析相关推荐
- Python 数据分析第六期--文本数据分析
Python 数据分析第六期–文本数据分析 1. Python 文本分析工具 NLTK NLTK (Natural Language Toolkit) NLP 领域最常用的一个 Python 库 , ...
- 面板数据分析及stata应用笔记
动态面板数据模型及估计方法 假说里面不要出现显著 文章目录 (一)面板数据基础知识 **一.面板数据的定义** **二.面板数据的分类** **三.面板数据的优缺点** **四.面板数据模型** ** ...
- 数据分析python有趣分享_Python有趣|数据分析三板斧
前言 天下武功中,哪个是最简单,最实用的了?那当然是程咬金的三板斧.传说中,程咬金晚上睡觉,梦见一老神仙,教了他三十六式板斧,这套功夫威力极大,而且招式简单,十分适合程咬金,但是程咬金醒来之后就只记住 ...
- R语言 面板数据分析 plm包实现(一) ——LSDV和固定效应模型
系列文章 R做面板数据分析:R语言 面板数据分析 plm包实现(一) --LSDV和固定效应模型 如果想看随机效应模型怎么做,参见这篇文章 R语言 面板数据分析 plm包实现(二)--随机效应模型 如 ...
- (附源码)Python云顶之弈数据分析系统 毕业设计451545
目 录 摘要 1 1 绪论 1 1.1研究背景 1 1.2开发意义 1 1.3系统开发技术的特色 1 1.4论文结构与章节安排 1 2 基于Python云顶之弈数据分析系统系统分析 3 2.1 可行性 ...
- 慕课面板数据分析与Stata应用—第一章总结
1.面板数据类型 短.长 平衡.非平衡 静.动态 2.估计方法 2.1 混合回归 特征:认为个体异质性不存在,所有的个体估计方程都一致 2.2固定效应 特征:认为个体异质性与解释变量相关 类别 单向: ...
- 产品策略研究期的数据分析与挖掘
在产品设计阶段,第一时期策略研究首先从宏观角度对外部环境和内部情况加以分析,重点关注市场.技术等方面的发展与变化趋势,然后辅以用户细分研究,以此从中明确产品未来开发的相关策略. 借助企业内部和外部资料 ...
- python与excel结合能做什么-Python网络爬虫与文本数据分析
原标题:Python网络爬虫与文本数据分析 课程介绍 在过去的两年间,Python一路高歌猛进,成功窜上"最火编程语言"的宝座.惊奇的是使用Python最多的人群其实不是程序员,而 ...
- 用html5交换两个变量的值,Python判断两个对象相等的原理 python交换两个变量的值为什么不用中间变量...
python语言设计一个类代表花,其中含2个对象属性,2class flower: def __init__ (self, name, shape): self.name = name self.sh ...
最新文章
- 人工智能考题可能性猜测
- 纠错——【Singleton array array(0.2) cannot be considered a valid collection.】
- listitem android,android-为contextmenu标识listitem的ID
- 在pycharm中使用conda虚拟环境(conda虚拟环境是已经创建好的),解决python安装包文件很费劲的问题
- Win10强制更新怎么关闭 彻底禁止Windows自动更新
- 特岗招聘计算机专业要求,咨询特岗教师招聘专业设置问题
- pycharm下打开、执行并调试scrapy爬虫程序
- 《TensorFlow 2.0深度学习算法实战教材》学习笔记(八、过拟合)
- Visual Studio 2008 Designer.cs不能更新/自动添加控件声明的解决办法
- 使用layer 实现点击 显示大图
- 今天给大家带来搜题公众号搭建教程(附赠搜题接口 还支持语音图片搜题)
- Python数据挖掘 之 数据处理(使用pandas对智联招聘上的北京地区python岗位进行数据清洗)
- 2011 imac 固态_iMac (21.5 英寸, 2011 年中) - 技术规格
- 计算机基础知识(基础入门小白专属)三
- 数组连接中的vstack()函数与hstack()函数
- swustOJ 1378 Best Grass
- 晚上几点睡觉算熬夜?没有睡够,“白天补觉”有效果?终于知道了
- r语言c(1 6),R语言(1)
- 第72届英国影艺学院电影奖9日公布入围名单
- Logstash:你喜欢 Grok 吗?