如何用stata做稳健回归
发布网友
发布时间:2022-04-22 17:22
我来回答
共1个回答
热心网友
时间:2023-06-22 17:14
如何用stata做稳健回归
大量的线性回归模型是基于最小二乘法实现的,但其仍存在一些局限性。比如说,样本点出现许多异常点时,传统的最小二乘法将不再适用,此时则可以使用稳健回归(robust regression)代替最小二乘法。
操作
下面的稳健回归使用的是犯罪数据,该数据来自Alan Agresti和Barbara Finlay的《社会科学统计方法》。变量包括美国各州编号(sid)、州名(state)、每10万人犯罪案件数量(crime)、生活在贫困线以下人口的百分比(poverty)和单亲人口百分比(single)等。我们选择使用贫穷率和单状况来预测犯罪率。
获取数据
use https://stats.idre.ucla.e/stat/stata/dae/crime, clear
summarize crime poverty single
导入数据,并描述各个变量的统计结果,输出表格中包含样本容量、平均数、标准差、最小值和最大值。
OLS回归
在稳健回归之前,我们先进行OLS回归,输出结果如下。
regress crime poverty single
样本点分析
首先我们通过“lvr2plot”绘制残差杠杆图,通过识别离群点和高杠杆值点(杠杆点)进而识别强影响点。假如存在杠杆点的话,要确定哪些是bad leverage point,对于这些离群点我们要评估它对拟合模型的影响。
lvr2plot, mlabel(state)
由图中我们可以看出,dc、ms、fl三个点残差较大或者杠杆值比较高。库克距离是杠杆值与残差大小的综合效应,一般而言,库克距离大于1,则可认为该样本点为强影响点。接下来我们计算各点的库克距离(Cook’s Distance),并输出结果。
predict d1, cooksdclist state crime poverty single d1ifd1>4/51, noobs
由结果可以看出,dc点库克距离大于1,表明dc这一样本点对于回归结果会产生较强的影响,在之后的稳健回归中我们会对dc点进行特殊处理。
接下来我们分析数据的残差。使用rstandard这一命令,它表示标准化残差的绝对值。
predict r1, rstandardgen absr1 = abs(r1)gsort -absr1clist state absr1in1/10, noobs
稳健回归
我们使用“rreg”命令进行稳健回归,并输出结果如下。
rreg crime poverty single, gen(weight)
对比最开始的OLS回归,我们发现两者差异较大。并且稳健回归中的样本点数量是50,OLS回归中为51,这是因为经过前面的分析,由于dc这一异常值点对回归结果影响较强,因此在稳健回归中我们将其舍去。下面的操作表明在稳健回归中,dc样本点所占权重为零。
clist state weightifstate =="dc", noobs
下面的命令展示了其他权重较小的观察值,一般而言,残差较大的观察值权重较小,例如我们之前提到的ms点。在OLS回归中,所有样本点的权重都是1,因此稳健回归中越多的样本点权重是1,其回归结果与OLS结果越相近。
sort weightclist sid state weight absr1 d1in1/10, noobs
我们还可以通过绘制圆圈的方式形象地展现这一关系。下图中横坐标表示单亲率,纵坐标表示犯罪率,每一个圆圈表示一个样本点,圆心为该样本点在坐标中的位置,圆圈直径越大,表示该样本点权重越大。
twoway (scatter crime single [weight=weight], msymbol(oh))ifstate !="dc"
拓展
我们在稳健回归分析之后,可以使用许多后续估计命令,比如test、margin等。下面的操作是我们控制贫困率之后,在不同的单亲率下预测犯罪率。我们发现,随着单亲率的提高,犯罪率也相应地上升。
margins, at(single=(8(2)22)) vsquish