|||
SPSS 中异常值的筛查可疑通过箱线图来查看,原理是超出上下箱体 1.5 倍的四分位间距为异常值,超出 3 倍则为极端值。R 语言中有专门的 outliers 这个包用来检验异常值,但感觉不太方便。所以动手编写了一个函数 outlier.IQR。相较于 SPSS 中的同样功能,outlier.IQR() 还对异常值进行了替换,替换值自己设定,可以为 NA、平均值、中位数等等。
以下为函数代码:
outlier.IQR <- function(x, multiple = 1.5, replace = FALSE, revalue = NA) {
q <- quantile(x, na.rm = TRUE) #四分位间距3倍间距以外的认为是离群值
IQR <- q[4] - q[2]
x1 <- which(x < q[2] - multiple * IQR | x > q[4] + multiple * IQR)
x2 <- x[x1]
if (length(x2) > 0) outlier <- data.frame(location = x1, value = x2)
else outlier <- data.frame(location = 0, value = 0)
if (replace == TRUE) {
x[x1] <- revalue
}
return(list(new.value = x, outlier = outlier))
}
结果输出为列表,分别为 outlier.IQR()$new.value 和 outlier.IQR()$outlier。前者为异常值替换后的新向量,后者为原向量中异常值及其所在位置。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-23 05:46
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社