欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

R语言 观测异常值并改进

程序员文章站 2022-03-22 23:09:09
...

全面的回归分析包括对异常值的分析:离群点、高杠杆值点、强影响点。

 

离群点:模型效果不佳的观测点。

 

使用car包中的outlierTest()函数,可以求得最大标准化残差绝对值Bonferroni调整后的p值,若不显著,则说明数据集中没有离群点,若显著,则必须删除该离群点。

 

> library(car)
> outlierTest(fit)

R语言 观测异常值并改进

可见,在这个回归模型中

R语言 观测异常值并改进

Nevada是离群点。

 

 

高杠杆值点:与其他预测变量有关的离群点,也就是由许多异常的变量值组合起来,与响应变量没有关系的变量。高杠杆值点可能成为强影响点,这主要取决于他们是不是离群点。

 

强影响点:对模型参数估计值影响有些比例失衡的点。(比如移动模型的一个观测点之后模型就会发生巨大的改变。)

 

综合:利用car包中的influencePlot()函数,可以将离群点、杠杆值和强影响点的信息整合到一幅图形中。

 

> library(car)
> influencePlot(fit,id.method="identify",main="Influence Plot",sub="Circle size is proportionl to Cook's distance")

R语言 观测异常值并改进

R语言 观测异常值并改进 

图中,

纵坐标超过+2或者小于-2的州可以认为是离群点;

水平轴超过0.2或者0.3的州有高杠杆值;

圆圈大小和影响成比例,圆圈很大的点可能是对模型参数的估计造成的不成比例影响的强影响点。

 

PS:

书里面的图:

R语言 观测异常值并改进

从这张图里面可以看出,

Nevada和Rhode Island是离群点,

New York、California、Hawaii和Washington有高杠杆值,

Nevada、Alaska和Hawaii为强影响点。

 

但是困惑的是为什么我绘制的图里面,这几个州的名字没有显示出来呢?有没有懂得小伙伴教教弟弟。

 

 

找到异常值之后,接下来谈到的便是改进措施

改进措施一:删除观测点

不断删除强影响点或者离群点,重复直到获得比较满意的拟合。但是如果不是因为数据错误而导致的异常值,那么这个数据就是一个有趣的点,可能包含我们之前没有意识到的其他信息,有助于更好地理解我们的主题,所以直接删除并不合适。

 

改进措施二:变量变换

模型不符合正态性、线性或者同方差性,一个或者多个变量的变换通常可以改善或者调整模型效果。

 R语言 观测异常值并改进

若模型违反正态假设,可以使用car包中的powerTransform() 

> library(car)
> summary(powerTransform(states$Murder))

R语言 观测异常值并改进 

结果表明可以用Murder^0.6 来正太化变量Murder,但是本例中无法拒绝λ(lambda)=1的假设,因为p=0.145 ,因此没有强有力的证据表明本例需要变量变换。

 

若模型违反了线性假设,则对预测变量进行变换比较有用。可以使用car包中的boxTidwell()函数来获得幂数。

 

> boxTidwell(Murder~Population+Illiteracy,data=states)

R语言 观测异常值并改进 

结果表示,使用Population^0.87和Illiteracy^1.36能够改善线性关系。

但是Population(p=0.75)和Illiteracy(p=0.54)的积分检验又表明变量不需要变化。