计量经济学总体介绍

知乎上有一位前辈总结的很不错,我就不详细介绍了:知乎:(逍遥温温)#课程体验#计量经济学学习体验

一、Single Linear Regression Model

Reference:

《计量经济学》Chapter 2

《高级计量经济学及Stata应用》 Chapter 3, 5, 6

《Quantitative Analysis》GARP Chapter 7

《R in Action》Chapter 8

《量化投资以 Python 为工具》Chapter 17

Stata Code:

1. 散点图

scatter y x

2. 相关系数

corr y x
pwcorr y x,sig

在Stata中,命令 corr 用于计算一组变量间的协方差或相关系数矩阵;命令 pwcorr 可用于计算一组变量中两两变量的相关系数,同时还可以对相关系数的显著性进行检验;命令 pcorr 用于计算一组变量中两两变量的偏相关系数并进行显著性检验。

3. 回归

reg y x

4. 预测

predict yy,xb (拟合值预测)
predict e,r (残差值预测)

5. 预测值的预测区间

predictnl 预测变量名=predict(xb),ci(lb1 ub1) l(95) (均值预测区间)
adjust x=22001,stdf ci(个别值预测区间)
reg y x
  1. 图中左上角
    • 图中左上角的是对于 regress 后得到的 model 的一个 “analysis-of-variance(ANOVA)” 表格。
    • 其每一列的头:SS , df , MS 分别对应:“sum of squares” , “degrees of freedom” 和 “mean square”。
    • 第一列:可以知道 Model 的 SS(15241773.7)/ Total 的 SS(17598834.8) = R-squared(0.8661) 即 R2。R2 的意思就是说,这个模型说明解释了这些变量中多少的 variance 。
    • 第二列:自由度,一共有 N 个 sample 这个数据集就有(N-1)个 df (因为要减去均值)。模型的自由度由模型有几个 predictor 决定。
    • 第三列: MS 一般是用于计算 F-statistic 的。
  2. 图中的右上角
    • 图中的右上角是另一些统计描述:
    • 第一行:Number of obs 一共有多少个 sample
    • 第二行:F(df of Model, df of Residual) = MS of Model(15241773.7)/MS of Residual(130947.839) = 116.40
    • The F statistic tests the hypothesis that all coefficients excluding the constant are zero.
    • 这个 F 值的 H0 假设是:所有的 predictor 都不对 y 产生影响,即所有 predictor 的 coef 都会是 0 ,所有的 predictor 都不 significant 。
    • 第三行:Prob > F 的值是上述的 H0 假设的成立的可能性。当其趋近于0的时候,说明至少会有一些 predictor 的 coef 不为 0 .( p-value )
    • 第四行:R-squared
    • 第五行:Adj R-squared 由于 R2 存在一个问题:无论什么 predictor 加到模型中,R2 都会变大。为了避免这个问题,Adj R-squared惩罚了模型的复杂度。
    • 第六行:root mean squared error 是 MS of Residual 的平方根(361.87 = 130947.839^0.5),其意义是回归模型的 residual 部分的 standard deviation 。
  3. 图中下面
    • 图中下面的部分就是 regression 的结果了。
    • 最后一行是模型的常数项
    • 第一列是模型的系数,根据系数我们就可以写出回归的线性模型了
    • 第二列是线性回归系数的 standard error , 这个系数是对前面 coef 的估计的可信度估计,越小越好。
    • 这是估计的标准误差,是残差均方开根号的值,残差均方等于残差平方和除以自由度,残差平方和等于总平方和减去回归平方和
    • 第三列是 t-statisitic , 正常 T-statistic 应该在0假设( null hypothesis )为真时,服从T分布(T-distribution).
    • 粗略地讲这个值大于 2 ,对应的 predictor 就是 significant 。
    • Coefficient 除以 standard error 等于 t-statistic
    • 第四列是这个 t-statistic 的 p-value ,一般来讲小于0.05就是 significant 的
    • 第五六列是 95% confidence interval of coef,系数的 95% 置信区间。

Summary:

*STATA没有清屏命令,我们用下面这个cheat它一下下
display _newline(200)

*****************************************
*OLS 估计
*****************************************
sysuse auto, clear /*sysuse 使用系统自带数据, clear清空当前数据集, STATA一次只能有一个数据集*/
*一般OLS估计
reg price mpg weight foreign
**【ADD】qui:reg Y X1 ... Xk if ...(条件) , options
*HSK robust se版本的OLS估计(一般用于大样本OLS)
reg price mpg weight foreign, r
**【ADD】实际上从这个输出来的系数与未robust一样,ss表可以参照上面的;robust倾向于不显著
*设置系数置信区间99%(默认95%)
reg price mpg weight foreign, level(99)
**【ADD】option可以叠
*使用标准化系数 (input数据为 X/sd(X)) 这时候比较系数大小看相对重要性才有意义。
reg price mpg weight foreign
reg price mpg weight foreign, beta
**【ADD】单位问题导致mpg的coef与weight的coef不一样,可以用su mpg weight看数据
*使用部分数据回归
reg price mpg weight length foreign in 1/30 /*使用数据集中前30个数据*/
reg price mpg weight length if foreign==0 /*使用国产车数据*/

*****************************************
*虚拟变量
*****************************************
*生成进口车虚拟变量,进口车 = 1
gen d1 = 1
replace d1 = 0 if foreign == 0
**【ADD】gen、replace生成虚拟变量
*进口车与国产车有一个lump sum价差
reg price d1 weight
test d1
**【ADD】我们有t检验、F检验,但stata统一在test命令下,有些表中得不到的假设检验可用这个来做(eg \beta_1=1)
*进口车与国产车每单位重量价格不一样
gen weightforeign = d1*weight
reg price weight weightforeign
**【ADD】实际上生成交叉项,不妨reg price weight weightforeign d1,做test {d1==0} {weightforeign==0},检验weightforeign是否为0
*截距斜率全都不一样,就是两个完全不同系数的回归
reg price d1 weight weightforeign
reg price weight if foreign==1
reg price weight if foreign==0
drop d1 weightforeign
**【ADD】第一个回归相当于对虚拟变量的两种取值做回归,即下面两条回归;((RSS_C-RSS_U)/(m))/RSS_U/(N-k-1),U为下面两个模型,C为y=b0+b1X for all

*****************************************
*OLS 回归后预测值的获得
*****************************************
*拟合值的获得
predict yhat, xb
*残差的获得
predict e, res
**【ADD】predict命令,xb与y在线性模型一样,非线性模型注意

*****************************************
*OLS 假设检验
*****************************************
use "D:\STATA example\wage1.dta", clear /*调用STATA格式的数据集*/
*OLS回归模型
reg lwage educ tenure exper
*检验教育年限和在当前单位工龄两者对工资的影响相同?
test educ=tenure
*检验总工龄没有影响
test exper
*检验 educ和 tenure的联合显著性
test (educ=0) (tenure=0)

*****************************************
*OLS 模型设定检验之异方差
*****************************************
use "d:\STATA example\wage1.dta", clear /*调用STATA格式的数据集*/
*OLS回归模型
reg lwage educ tenure exper

************异方差检定***********

*Eyeball test, 残差与拟合值的散点图
rvfplot /*理想状态是没有pattern的*/
**【ADD】fitted value
rvpplot tenure /*残差vs教育年限,理想状态是没有pattern的*/
**【ADD】作图时,图的坐标解释是变量的标签label;tenure是在这个岗位上干了多少年

*Berusch-Pagen test BP检验
**【ADD】estat 大部分的test
estat hettest,normal /*使用拟合值normal*/
estat hettest,rhs /*使用所有的X,与fitted value不同,允许系数没有关系,这个实际上没有图对应*/
estat hettest tenure /*爱放啥放啥,放上解释变量,注意这时候没有逗号*/

*White HSK test White检验
**【ADD】没有参数限制,但是效率低
estat imtest, white

*************异方差之下的处置办法***********

*异方差稳健标准差
reg lwage educ tenure exper, r

*广义最小二乘法(GLS): 前提Omega已知,加权实现
*假设异方差是随着tenure^2增加而增加的,但有时不知道是不是长这样,为了应付tenure=1,我们整体给tenure加1
gen weight = (1+tenure)^2
reg lwage educ tenure exper [aw=1/weight]
drop weight /*丢弃变量weight*/

*FGLS:当Omega未知,步骤与上课讲的略不同,为的是结果的稳健性
qui:reg lwage educ tenure exper
predict u, res /*对原方程用OLS进行估计,得到残差项的估计u*/
gen lnu = log(u^2) /*计算ln(u^2)*/
qui: reg lnu lwage educ tenure exper
predict ghat, xb /*用ln(u^2)对所有独立的解释变量进行回归,然后得到拟合值ghat*/
gen weight = exp(ghat) /*计算 h = exp(ghat)*/
reg lwage educ tenure exper [aw=1/weight] /*以 1/h 为权重做WLS*/
drop weight u lnu ghat

*****************************************
*OLS 模型设定检验之序列相关
*****************************************
use "D:\STATA example\wageprc.dta", clear /*调用STATA格式的数据集*/
keep price wage t lprice lwage /*丢弃keep后面变量之外的所有变量*/
tsset t /*指定哪个变量是时间变量*/

*OLS回归,使用工资增长率向前一期通胀率回归
reg d.lwage ld.lprice

***********序列相关的检定***********

*图形法,画出不同时间的残差之间的相关系数
predict e1,res
corrgram e1,lag(10)
drop e1

*Durbin-Watson统计量
estat dwatson
outreg2 using result1_2.tex, replace addstat(DW, r(dw))
*outreg2 using result1_2.doc, replace addstat(DW, r(dw)), outreg2的用法详见https://zhuanlan.zhihu.com/p/98393452


*B-G统计量
bgodfrey,lag(2) /*lag 指定自相关阶数*/

***********序列相关下的处置方法***********

*HAC robust SE
newey d.lwage ld.lprice, lag(4) /*HAC标准差,必须指定滞后阶数lag,即窗宽,并没有严格上给的窗宽*/

*Cocharne-Orcutt 一阶准差分
prais d.lwage ld.lprice, corc

*****************************************
*OLS 模型的设定检验 (谨慎接受结果)
*****************************************
use "D:\STATA example\wage1.dta", clear /*调用STATA格式的数据集*/

*Ramsey test:正确设定的模型,拟合值的平方,解释变量的平方不具解释能力
reg lwage educ exper tenure
estat ovtest /*使用拟合值平方*/
estat ovtest,rhs /*使用解释变量平方*/

*****************************************
*内生性与TSLS
*****************************************
use "D:\STATA example\grilic.dta", clear
/*
lw80(80年工资对数)
s80(80年时受教育年限)
expr80(80年时工龄)
tenure80(80年时在现单位工作年限)
iq(智商)
med(母亲的教育年限)
kww(在‘knowledge of the World of Work’测试中的成绩)
mrt(婚姻虚拟变量,已婚=1)
age(年龄)
*/
reg lw80 s80 expr80 tenure80
/*
对方程进行分析:
1。遗漏变量问题:认为方程遗漏了“能力”这个变量,加入iq(智商)作为“能力”的代理变量。
2。测量误差问题:iq(智商)对“能力”的测量存在误差。
3。变量内生性问题:s80可能与扰动项中除“能力”以外的其他因素相关,因此是内生变量。

解决方法:使用med,kww,mrt,age作为内生解释变量iq与s80的工具变量。
*/
*TSLS估计
ivregress 2sls lw80 expr80 tenure80 (s80 iq=med kww mrt age), first /*first 显示第一阶段结果*/
*Overidentification test H0: IV们外生
estat overid
*TSLS vs OLS Hausmen test
quietly reg lw80 s80 expr80 tenure80 iq
est store ols /*存储OLS结果,存成名字为ols*/
quietly ivregress 2sls lw80 expr80 tenure80 (s80 iq=med kww mrt age)
est store tsls /*存储TSLS结果,存成名字为tsls*/
hausman tsls ols
**【ADD】p=0.0047,拒绝原假设:ols和tsls差不多,即需要用tsls的模型回归
est clear /*清空所有已存储的结果*/

Datas:

  • https://accelerator086.github.io/accelerator086-Blogs-Books/grilic.dta
  • https://accelerator086.github.io/accelerator086-Blogs-Books/WAGE1.DTA
  • https://accelerator086.github.io/accelerator086-Blogs-Books/WAGEPRC.DTA

Python Code:

有的时候,借力打力更好一些.