R函数中的箱线图

克林格·冯·丘布尔斯勒

我有这个计算 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 的方法和计算异常值的方法都与绘制绘图的方式不兼容:

看看这个答案,详细解释 whatquantileboxplotwill之间的区别基于这种差异,不仅绘图上的 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章