[R语言]稳健回归

news/2024/11/6 13:42:25/

原文来自:稳健回归

INTRODUCTION

我们以线性回归中的一些概念开始关于稳健回归的讨论。

残差: 预测值(基于回归方程)与实际观察值之间的差。

离群值: 在线性回归中,离群值是具有大量残差的观察值。换句话说,鉴于其对预测变量的价值,这是一个因变量不寻常的观察结果。离群值可能表示样本特性,或者可能表示数据输入错误或其他问题。

杠杆: 对预测变量具有极高价值的观察点具有很高的杠杆作用。杠杆作用是对自变量偏离均值的程度的度量。高杠杆点可能会对回归系数的估计产生很大影响。

影响: 如果删除观察结果会显着改变回归系数的估计值,则认为该观察结果具有影响力。可以将影响视为杠杆和离群值的产物。

库克距离: 一种结合了杠杆作用和观测值残差信息的度量。

可以在使用最小二乘回归的任何情况下使用稳健回归。在拟合最小二乘回归时,我们可能会发现一些离群值或高杠杆点。我们已经确定这些数据点不是数据输入错误,也不是来自与我们大多数数据不同的总体。因此,我们没有令人信服的理由将它们排除在分析之外。稳健的回归可能是一个很好的策略,因为这是从完全排除这些异常点与包括所有数据点OLS回归的折中方案。稳健回归的想法是根据这些观察的表现如何对观察进行不同的加权。粗略地说,它是加权和最小二乘回归的一种形式。

在MASS包中,使用rlm在命令可以实现稳健回归的几个版本。在此,我们将展示使用 Huber 和 bisquare权重的M估计。M估计定义了权重函数,使估计方程变为 ∑ i = 1 n w i ( y i − x T b ) x T = 0 \sum_{i=1}^{n} w_i (y_i - x^Tb)x^T = 0 i=1nwi(yixTb)xT=0. 但是这一权重又取决于残差。这一方程使用迭代重加权最小平方法(Iteratively Reweighted Least Squares,IRLS)求解。例如,第j步迭代的稀疏矩阵为: B j = [ X T W j − 1 X ] − 1 X T W j − 1 Y B_j =[X^TW_{j-1}X]^{-1}X^TW_{j-1}Y Bj=[XTWj1X]1XTWj1Y. 迭代重复该过程一直持续到收敛为止。在Huber加权中,残差小的观测值的权重为1,而残差越大,权重就越小。这由权重函数的定义所决定的。如果使用bisquare加权,所有具有非零残差的情况,权重都有所降低。

示例数据说明

对于下面的数据分析,我们将使用 Alan Agresti 和Barbara Finlay(Prentice Hall,1997)在《社会科学统计方法》第三版中出现的犯罪数据集 。变量包括各州 ID(sid),州名(state),每10万人的暴力罪犯(crime),每1,000,000人中的谋杀罪犯(murder),居住在大都市区的比例(pctmetro),白人的比例(pctwhite),高中或以上学历的人口百分比(pcths),生活在贫困线以下的人口百分比(poverty)和单亲父母的人口百分比(single)。它有51个观测值。我们将使用povertysingle预测crime.

library(foreign)
library(MASS)cdata <- read.dta("https://stats.idre.ucla.edu/stat/data/crime.dta")
summary(cdata)

结果为

      sid          state               crime            murder          pctmetro         pctwhite    Min.   : 1.0   Length:51          Min.   :  82.0   Min.   : 1.600   Min.   : 24.00   Min.   :31.80  1st Qu.:13.5   Class :character   1st Qu.: 326.5   1st Qu.: 3.900   1st Qu.: 49.55   1st Qu.:79.35  Median :26.0   Mode  :character   Median : 515.0   Median : 6.800   Median : 69.80   Median :87.60  Mean   :26.0                      Mean   : 612.8   Mean   : 8.727   Mean   : 67.39   Mean   :84.12  3rd Qu.:38.5                      3rd Qu.: 773.0   3rd Qu.:10.350   3rd Qu.: 83.95   3rd Qu.:92.60  Max.   :51.0                      Max.   :2922.0   Max.   :78.500   Max.   :100.00   Max.   :98.50  pcths          poverty          single     Min.   :64.30   Min.   : 8.00   Min.   : 8.40  1st Qu.:73.50   1st Qu.:10.70   1st Qu.:10.05  Median :76.70   Median :13.10   Median :10.90  Mean   :76.22   Mean   :14.26   Mean   :11.33  3rd Qu.:80.10   3rd Qu.:17.40   3rd Qu.:12.05  Max.   :86.60   Max.   :26.40   Max.   :22.10  

使用普通最小二乘回归

summary(ols <- lm(crime ~ poverty + single, data = cdata))

结果为

Call:
lm(formula = crime ~ poverty + single, data = cdata)Residuals:Min      1Q  Median      3Q     Max 
-811.14 -114.27  -22.44  121.86  689.82 Coefficients:Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1368.189    187.205  -7.308 2.48e-09 ***
poverty         6.787      8.989   0.755    0.454    
single        166.373     19.423   8.566 3.12e-11 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1Residual standard error: 243.6 on 48 degrees of freedom
Multiple R-squared:  0.7072,	Adjusted R-squared:  0.695 
F-statistic: 57.96 on 2 and 48 DF,  p-value: 1.578e-13

我们来看一下普通最小二乘回归的诊断图

opar <- par(mfrow = c(2,2), oma = c(0, 0, 1.1, 0))
plot(ols, las = 1)

结果如下:
回归诊断从这些图中,我们可以确定观测值9、25和51对我们的模型可能存在问题。我们可以查看这些观察值,以了解它们所代表的状态。

par(opar)
cdata[c(9, 25, 51), 1:2]

结果为

   sid state
9    9    fl
25  25    ms
51  51    dc

哥伦比亚特区,佛罗里达州和密西西比州的杠杆率很高或残差很大。我们可以显示具有较大Cook值的观测值。常规的截止点是 n / 4 n/4 n/4 n n n是数据集中的观察数。我们将使用此条件来选择要显示的值。

d1 <- cooks.distance(ols)
r <- stdres(ols)
a <- cbind(cdata, d1, r)
a[d1 > 4/51, ]

结果为

   sid state crime murder pctmetro pctwhite pcths poverty single        d1         r
1    1    ak   761    9.0     41.8     75.2  86.6     9.1   14.3 0.1254750 -1.397418
9    9    fl  1206    8.9     93.0     83.5  74.4    17.8   10.6 0.1425891  2.902663
25  25    ms   434   13.5     30.7     63.3  64.3    24.7   14.7 0.6138721 -3.562990
51  51    dc  2922   78.5    100.0     31.8  73.1    26.4   22.1 2.6362519  2.616447

因为DC不是州,所以我们可能应该先删除DC。我们将其包括在分析中只是为了表明它具有大的Cook距离并演示如何使用rlm。现在我们来看一下残差。我们将生成一个名为的新变量absr1,它是残差的绝对值(因为残差的符号无关紧要)。然后,我们打印出具有最高绝对残差值的十个观测值。

rabs <- abs(r)
a <- cbind(cdata, d1, r, rabs)
asorted <- a[order(-rabs), ]
asorted[1:10, ]

结果为

   sid state crime murder pctmetro pctwhite pcths poverty single         d1         r     rabs
25  25    ms   434   13.5     30.7     63.3  64.3    24.7   14.7 0.61387212 -3.562990 3.562990
9    9    fl  1206    8.9     93.0     83.5  74.4    17.8   10.6 0.14258909  2.902663 2.902663
51  51    dc  2922   78.5    100.0     31.8  73.1    26.4   22.1 2.63625193  2.616447 2.616447
46  46    vt   114    3.6     27.0     98.4  80.8    10.0   11.0 0.04271548 -1.742409 1.742409
26  26    mt   178    3.0     24.0     92.6  81.0    14.9   10.8 0.01675501 -1.460885 1.460885
21  21    me   126    1.6     35.7     98.5  78.8    10.7   10.6 0.02233128 -1.426741 1.426741
1    1    ak   761    9.0     41.8     75.2  86.6     9.1   14.3 0.12547500 -1.397418 1.397418
31  31    nj   627    5.3    100.0     80.8  76.7    10.9    9.6 0.02229184  1.354149 1.354149
14  14    il   960   11.4     84.0     81.0  76.2    13.6   11.5 0.01265689  1.338192 1.338192
20  20    md   998   12.7     92.8     68.9  78.4     9.7   12.0 0.03569623  1.287087 1.287087

使用稳健回归

现在让我们运行第一个稳健的回归。通过迭代的重新加权最小二乘法(IRLS)进行稳健的回归。运行稳定回归的指令是rlm在MASS包。有几种加权功能可用于IRLS。在本示例中,我们将首先使用Huber权重。然后,我们将查看由IRLS流程创建的最终权重。这可能非常有用。

summary(rr.huber <- rlm(crime ~ poverty + single, data = cdata))

结果为

Call: rlm(formula = crime ~ poverty + single, data = cdata)
Residuals:Min      1Q  Median      3Q     Max 
-846.09 -125.80  -16.49  119.15  679.94 Coefficients:Value      Std. Error t value   
(Intercept) -1423.0373   167.5899    -8.4912
poverty         8.8677     8.0467     1.1020
single        168.9858    17.3878     9.7186Residual standard error: 181.8 on 48 degrees of freedom

我们来看一下各观测点的权重。

hweights <- data.frame(state = cdata$state, resid = rr.huber$resid, weight = rr.huber$w)
hweights2 <- hweights[order(rr.huber$w), ]
hweights2[1:15, ]

结果为

   state      resid    weight
25    ms -846.08536 0.2889618
9     fl  679.94327 0.3595480
46    vt -410.48310 0.5955740
51    dc  376.34468 0.6494131
26    mt -356.13760 0.6864625
21    me -337.09622 0.7252263
31    nj  331.11603 0.7383578
14    il  319.10036 0.7661169
1     ak -313.15532 0.7807432
20    md  307.19142 0.7958154
19    ma  291.20817 0.8395172
18    la -266.95752 0.9159411
2     al  105.40319 1.0000000
3     ar   30.53589 1.0000000
4     az  -43.25299 1.0000000

我们可以粗略地看到,随着绝对残差的减少,权重也会增加。换句话说,残差较大的情况倾向于权重降低。此输出向我们显示,密西西比州的观测值将被最大程度地降低权重。佛罗里达州的权重也将大大降低。上面未显示的所有观察值的权重均为1。在OLS回归中,所有情况的权重均为1。因此,稳健回归中权重接近1的案例越多,OLS和稳健回归的结果越接近。

接下来,让我们运行相同的模型,但是使用双向平方加权函数。同样,我们可以看一下权重。

rr.bisquare <- rlm(crime ~ poverty + single, data=cdata, psi = psi.bisquare)
summary(rr.bisquare)

结果为

Call: rlm(formula = crime ~ poverty + single, data = cdata, psi = psi.bisquare)
Residuals:Min      1Q  Median      3Q     Max 
-905.59 -140.97  -14.98  114.65  668.38 Coefficients:Value      Std. Error t value   
(Intercept) -1535.3338   164.5062    -9.3330
poverty        11.6903     7.8987     1.4800
single        175.9303    17.0678    10.3077Residual standard error: 202.3 on 48 degrees of freedom

我们来看一下各观测点的权重:

biweights <- data.frame(state = cdata$state, resid = rr.bisquare$resid, weight = rr.bisquare$w)
biweights2 <- biweights[order(rr.bisquare$w), ]
biweights2[1:15, ]

结果为

   state     resid      weight
25    ms -905.5931 0.007652565
9     fl  668.3844 0.252870542
46    vt -402.8031 0.671495418
26    mt -360.8997 0.731136908
31    nj  345.9780 0.751347695
18    la -332.6527 0.768938330
21    me -328.6143 0.774103322
1     ak -325.8519 0.777662383
14    il  313.1466 0.793658594
20    md  308.7737 0.799065530
19    ma  297.6068 0.812596833
51    dc  260.6489 0.854441716
50    wy -234.1952 0.881660897
5     ca  201.4407 0.911713981
10    ga -186.5799 0.924033113

我们可以看到,使用bisquare 加权函数比使用Huber 加权函数给密西西比州的加权显着更低,并且这两种不同加权方法的参数估计值也不同。在比较常规OLS回归和稳健回归的结果时,如果结果非常不同,最好使用稳健回归的结果。较大的差异表明模型参数受到异常值的高度影响。不同的权函数各有利弊。Huber权重可能会遇到严重的离群值,而Bisquare权重可能会难以收敛或可能产生多个解。

两次分析的结果有很大不同,尤其是在系数single和常数(intercept)方面。虽然通常我们对常量不感兴趣,但是如果将一个或两个预测变量居中,则该常量将很有用。另一方面,注意到这poverty两种分析在统计上都不显着,而single在两种分析中均显着。


http://www.ppmy.cn/news/166943.html

相关文章

R语言实现决策树

R语言实现决策树 提示&#xff1a;本文使用R语言实现决策树&#xff0c;并对决策树结构图进行美化 文章目录 R语言实现决策树数据介绍一、相关R包的下载二、实现过程1.数据读取2.训练集与验证集划分3.构建决策树并绘制图形4.测试模型 总结 数据介绍 group就是分类结果&#x…

R 语言数据处理入门-1

目录 1.加载数据 2. 查看数据 3. 数据类型转化 3.1 批量转化变量为因子型 3.2 插入缺失值 4. 重命名列变量 5. 创建新变量 6. 删除列变量 7. 列变量重排序 8. 行观测重排序 8.1升序排列 8.2 降序排列 8.3 缺失值排序 9. 数据筛选子集 9.1 筛选行数据 9.2 筛…

linux系统使用R语言,R语言-基础操作

今天本人来学习R语言,先来学习一些基础的操作。 (1)c() c()是用来创建一个向量,比如 (2)length() length()用来获取一个向量的长度。 (3)mode() 获取向量中数据的类型,比如 (4)rbind()和cbind() 这两个函数都是将多个向量合并为一个矩阵,或者将多个矩阵合并为一个矩阵,rbi…

R语言基础

第1章 R的安装、帮助、工作空间管理 一、R的简介 R定义&#xff1a;一个能够自由有效地用于统计计算和绘图的语言和环境&#xff0c;它提供了广泛的统计分析和绘图技术。 R优势&#xff1a; R是免费的开源软件全面的统计研究平台&#xff0c;提供了各种各样的数据分析技术R是一…

anaconda r 语言_anaconda 配置R语言

anaconda是python 和 R的集成开发环境 anaconda 的下载(此步不谈) 加速 清华现在好像不支持(不确定) 中大的 # 加速conda conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/ conda config --set show_channel_urls yes1 2 3 我认为不用新建虚拟环境…

戴尔 14R-7420安装黑苹果记录

戴尔 14R-7420安装黑苹果记录 最近在win下使用nodejs用的力不从心&#xff0c;而linux下的QQ太难受&#xff0c;所以决定给自己的电脑装一个黑苹果&#xff0c;经过远景论坛的各种爬文&#xff0c;修改&#xff0c;然后仿照了前人辛勤汗水造出的成果&#xff0c;终于吃上了黑苹…

数据处理基础-R语言

目录 数据的标准化 字符处理函数 ①计算字符数量 ②提取或替换一个字符向量中的子串 ③另一种方式替换字符向量中的字符 ④分割字符向量 ⑤连接字符串 ⑥大小写变换 ⑦将连续型变量转换成因子 ⑧绘图函数&#xff1a;将连续型变量X分割为n个区间 ⑨连接对象函数 z &…

戴尔Inspiron 灵越 14R(N4120)加装固态硬盘

1、利用U盘制作系统 直接win10官网&#xff0c;下载系统制作软件&#xff08;MediaCreationTool&#xff09;&#xff0c;提前准备一个8G以上的U盘&#xff0c;按照提示将系统制作到U盘 https://www.microsoft.com/zh-cn/software-download/windows10 2、安装固态 dell电脑…