我有这个计算 IQR 异常值的函数,需要添加一个箱线图作为副作用。到目前为止,我已经有了这个,并且它有效,但它也会打印出一堆关于箱线图的信息,这是我不想要的。
IQR.outliers <- function(x) {
if(any(is.na(x)))
stop("x is missing values")
if(!is.numeric(x))
stop("x is not numeric")
Q3<-quantile(x,0.75)
Q1<-quantile(x,0.25)
IQR<-(Q3-Q1)
left<-(Q1-(1.5*IQR))
right<-(Q3+(1.5*IQR))
list(IQR=IQR,left=x[x<left],right=x[x>right],boxplot(x))
}
您的代码有几个问题。首先,正如@rawr 指出的那样,boxplot
如果您不想返回其值,则不应将该语句放入列表中。此外,如果您想利用boxplot
其绘制绘图的副作用,那么您应该确保返回的统计数据与绘图中的统计数据相同。您计算 IQR 的方法和计算异常值的方法都与绘制绘图的方式不兼容:
看看这个答案,详细解释 whatquantile
和boxplot
will之间的区别。基于这种差异,不仅绘图上的 IQR 与返回的结果不同,而且异常值也可能不同,因为它们是根据 IQR 计算的。
因此,我建议使用函数 boxplot 绘制绘图并计算所需的统计量。像这样:
IQR.outliers <- function(x) {
y = boxplot(x)
list( IQR = diff(y$stats[c(2,4)]),
left = y$out[y$out < y$stats[1]],
right = y$out[y$out > y$stats[5]])
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句