【发布时间】:2012-06-11 04:10:58
【问题描述】:
我正在处理由异常值组成的大量数据。该代码适用于大多数数据集,但不适用于少数数据。
这个样本数据:
set.seed(100)
m=rnorm(200)
m[1]=100 #inserting outlier
m[2]=50
我的代码是:
library(outliers)
lg=outlier(m, logical=TRUE)
for(i in 1:length(lg)){
if(lg[i]==c("TRUE")){
m[i]=NA }}
这会将异常值替换为 NA。 现在在这种情况下,100 被删除,但 50 没有被删除。 我的数据集也发生了同样的事情。我不知道为什么。 我希望得到这方面的帮助。
感谢您的阅读。
【问题讨论】:
-
outlier是如何定义的?它不是基础 R,AFAIK。 -
它在异常值包中。查看?异常值
-
仅供参考:您的意思是 outliers 包,而不是 outlier。
-
@rockswap 我认为这是因为在您的示例中 m[40]=m[90]=m[67]=150 是平局。如果您尝试使用 m[40] = 150;米[90] = 200;米[67] = 250;我想你会发现只有 m[67] 被识别为异常值。也许编写您自己的异常值定义。也许在统计网站上询问定义异常值的 R 代码或异常值的“最佳”定义,也许这里有人可以帮助您编写该定义。
-
统计学家不建议简单地去除基于异常值检验的极值。相反,您应该仔细检查极值,因为它们可能是数据集中最有趣的信息。请参阅this question 的最佳答案。此外,如果您的数据容易出现异常值,则应使用稳健的统计方法而不是删除异常值。