登录
首页精彩阅读如何用stata做稳健回归
如何用stata做稳健回归
2018-03-26
收藏

如何用stata做稳健回归

大量的线性回归模型是基于最小二乘法实现的,但其仍存在一些局限性。比如说,样本点出现许多异常点时,传统的最小二乘法将不再适用,此时则可以使用稳健回归(robust regression)代替最小二乘法。

操作

下面的稳健回归使用的是犯罪数据,该数据来自Alan Agresti和Barbara Finlay的《社会科学统计方法》。变量包括美国各州编号(sid)、州名(state)、每10万人犯罪案件数量(crime)、生活在贫困线以下人口的百分比(poverty)和单亲人口百分比(single)等。我们选择使用贫穷率和单状况来预测犯罪率。

  1. 获取数据

    use https://stats.idre.ucla.edu/stat/stata/dae/crime, clear
    summarize crime poverty single

    导入数据,并描述各个变量的统计结果,输出表格中包含样本容量、平均数、标准差、最小值和最大值。


  2. OLS回归
    在稳健回归之前,我们先进行OLS回归,输出结果如下。

    regress crime poverty single

  3. 样本点分析
    首先我们通过“lvr2plot”绘制残差杠杆图,通过识别离群点和高杠杆值点(杠杆点)进而识别强影响点。假如存在杠杆点的话,要确定哪些是bad leverage point,对于这些离群点我们要评估它对拟合模型的影响。

    lvr2plot, mlabel(state)


    由图中我们可以看出,dc、ms、fl三个点残差较大或者杠杆值比较高。库克距离是杠杆值与残差大小的综合效应,一般而言,库克距离大于1,则可认为该样本点为强影响点。接下来我们计算各点的库克距离(Cook’s Distance),并输出结果。

    predict d1, cooksd clist state crime poverty single d1ifd1>4/51, noobs


    由结果可以看出,dc点库克距离大于1,表明dc这一样本点对于回归结果会产生较强的影响,在之后的稳健回归中我们会对dc点进行特殊处理。
    接下来我们分析数据的残差。使用rstandard这一命令,它表示标准化残差的绝对值。

    predict r1, rstandard gen absr1 = abs(r1) gsort -absr1 clist state absr1in1/10, noobs

  4. 稳健回归
    我们使用“rreg”命令进行稳健回归,并输出结果如下。

    rreg crime poverty single, gen(weight)


    对比最开始的OLS回归,我们发现两者差异较大。并且稳健回归中的样本点数量是50,OLS回归中为51,这是因为经过前面的分析,由于dc这一异常值点对回归结果影响较强,因此在稳健回归中我们将其舍去。下面的操作表明在稳健回归中,dc样本点所占权重为零。

    clist state weightifstate =="dc", noobs


    下面的命令展示了其他权重较小的观察值,一般而言,残差较大的观察值权重较小,例如我们之前提到的ms点。在OLS回归中,所有样本点的权重都是1,因此稳健回归中越多的样本点权重是1,其回归结果与OLS结果越相近。

    sort weight clist sid state weight absr1 d1in1/10, noobs


    我们还可以通过绘制圆圈的方式形象地展现这一关系。下图中横坐标表示单亲率,纵坐标表示犯罪率,每一个圆圈表示一个样本点,圆心为该样本点在坐标中的位置,圆圈直径越大,表示该样本点权重越大。

    twoway  (scatter crime single [weight=weight], msymbol(oh))ifstate !="dc"

  5. 拓展
    我们在稳健回归分析之后,可以使用许多后续估计命令,比如test、margin等。下面的操作是我们控制贫困率之后,在不同的单亲率下预测犯罪率。我们发现,随着单亲率的提高,犯罪率也相应地上升。

    margins, at(single=(8(2)22)) vsquish

数据分析咨询请扫描二维码

客服在线
立即咨询