【定量分析、量化金融与统计学】R语言方差分析的outliers陷阱

【定量分析、量化金融与统计学】R语言ANOVA方差分析关于outliers(异常值)的处理中,我们提到了异常值的问题,也说了如何使用R来处理这些异常值,但是R语言对于方差分析,不论ANOVA还是MANOVA是存在异常值陷阱的。

今天我就把我的教训分享出来:

目录

一、各种陷阱

1.循环陷阱

2.重复陷阱

3.复合陷阱


一、各种陷阱

1.循环陷阱

这个我们之前提过一次,就是当你去掉一次outliers后再查看outliers,发现去掉异常值的数据集又会出现新的异常值,这会让人很困惑。

但其实,每次实验你只需要进行一次异常值处理,不然就会陷入循环陷阱,你会一直发现新的异常值,然后一直去掉异常值,最终数据集会变得越来越小,因为你把值都删掉了。

 

 

2.重复陷阱

当你对不同的列进行异常值检测的时候,可能会出现一下这种情况:

data_set=read.csv(file.choose(),header=TRUE)
library("dplyr")
head(data_set,10)
outliers = boxplot(data_set$Dry.weight~data_set$Temperature,data=data_set,
                   ylab="Dry.weight",xlab="Temperature",col="steelblue",border ="black")
print(outliers$out)
outliers2 = boxplot(data_set$Optical.density~data_set$Temperature,data=data_set,
                   ylab="Optical.density",xlab="Temperature",col="steelblue",border ="black")
print(outliers2$out)
outliers3 = boxplot(data_set$Product.yield~data_set$Temperature,data=data_set,
                   ylab="Product.yield",xlab="Temperature",col="steelblue",border ="black")
print(outliers3$out)

 

 所以你以为总共的outliers的个数是2个,于是十分的兴奋的去搜索这两个异常值,准备把他们干掉。但是你找来找去就只能找到1个。当你打开数据集查看时才发现,原来这两个异常值是一个行的不同列。

 所以R语言的outliers检测是对列名敏感的,并不会自动检测这个值是不是重复的。这就是重复陷阱。

3.复合陷阱

当你分析不同要素的交互时,当然你也是要做ANOVA或者MANOVA的,那么当你检测outliers时,你可能会遇到这种情况:

outliers = boxplot(data_set$weight_loss~data_set$gender*data_set$diet,data=data_set,
        ylab="weight_loss",xlab="group:gender",col="steelblue",border ="black")

你检测联合因素性别和饮食,你会发现:

 仿佛,有四个outliers等着你去删除,但是当你取删除时:

print(outliers2)
out1 = data_set[(data_set$gender==0&data_set$Diet == 1) & data_set$weight_loss==-8.5,]
print(out1)
out2 = data_set[(data_set$gender==1&data_set$Diet == 1) & data_set$weight_loss==-9.0,]
print(out2)
ex3 = data_set[(data_set$gender==1&data_set$Diet == 2),]

out3 = data_set[(data_set$gender==1&data_set$Diet == 2)& data_set$weight6weeks==1.4 ,]
print(out3)
ex4 =  data_set[(data_set$gender==0&data_set$Diet == 3),]
out4 = data_set[(data_set$gender==0&data_set$Diet == 3) & data_set$weight6weeks==-0.9,]

outAll<- rbind(out1,out2, out3, out4)
print(outAll)
data_set<-data_set[-which(data_set$Person %in% outAll$Person),]

你却发现,你只删掉两个,这就很奇怪,明明有四个。

但是当你将两个因素分开分析时:

 

嘿,还真只有两个,那为什么联合的时候会有四个呢?

其实这也是R语言对列名敏感的表现,当你联合时,你的列名就发生了变化,是不同列的排列组合,所以R会站在这个角度去看,他就看到了4个,但是当你拆开,回归本质,就是2个。所以当多因素出现,请拆开单个要素,逐步分析outliers,不要联合分析。

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旋转跳跃我闭着眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值