我使用下面的函数使用 3*sd 查找异常值,但在结果中我得到了异常值和 NA 值。异常值中不应该有 NA 值,对吗?
我如何解决它?
findingoutlier<- function (data, cutoff=3, na.rm=TRUE){
sd <- sd(data, na.rm=TRUE)
mean <- mean(data, na.rm=TRUE)
outliers <- (data[data < mean - cutoff * sd | data > mean + cutoff * sd])
return (outliers)
}
这是一个相当微妙的结果NA
比较在 R 中处理。
假设你有一个NA
值在data
。那么你的标准
data < mean - cutoff * sd | data > mean + cutoff * sd
评估为NA
(即,我们不知道不可用的数据点是否是异常值......)
如果我们提出要求,我们会得到什么data[NA]
? From ?"["
:
提取时,数字、逻辑或字符“NA”索引
选择一个未知元素,因此在相应的元素中返回“NA”
逻辑、整数、数字、复数或字符的元素
结果 ...
(这是一种技术性的说法“NA
in, NA
out").
所以你应该要么放弃NA
来自您输入的值(例如na.omit()
, or use
!is.na(data) & (data < mean - cutoff * sd | data > mean + cutoff * sd)
作为你的标准。
我想不出你最终会遇到的任何其他原因NA
在输出中(并且因为您没有给出可重现的例子 https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example我无法猜测它们会是什么......)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)