删除后:离群值接近最大值,残留在R波谱图中。

问题描述 投票:0回答:1

在R中创建了一个函数,该函数应该返回一个用NA代替一些数据的离群值的向量,我得到了最大附近剩余的离群值。

kill_outliers <- function(data, na.rm=TRUE){
  q <- quantile(data, probs=c(0.25, 0.75), na.rm=na.rm)
  killed <- data
  intq <- 1.5 * IQR(data, na.rm=na.rm)
  killed[x < (q[1]-intq)] <- NA
  killed[x > (q[2]+intq)] <- NA
  killed
}

在使用这个函数后 boxplot(killed)显示:

With deleted outliers

为什么会有一个离群值?我已经试过了。

killed[x > (q[2] + intq)] <- NA

假设是小于或等于的问题,但是没有任何改变。

(q[2] + intq) == 216.87 而删除后的排序数据集的最后一个值是 216.16此外,我不明白为什么我用了3次方差,却用了2次方差,这应该是合适的。(q[3] + intq),它根本没有排除任何外挂......

编辑

正如机器所指出的,问题是创建一个新的数据集与新的IQR的问题。因此,我的结论是,boxplot()为每个数据集创建了一个估计IQR的新图。附加问题:有没有办法将新的数据集拟合到之前由boxplot创建的图上,从而将数值拟合到之前的量子值?

r outliers
1个回答
0
投票

你的函数删除了离群值,因此,你得到了一个新的变量分布,并带有一个 新的 IQR。在新的IQR下,其他的值可能是离群值,而这些离群值与原始变量的IQR并不一致(因此不会被杀死)。因此,只要有离群值,你就需要一次又一次地重新运行你的函数。

这里有一段代码,只要有离群值就会运行。

kill_outliers <- function(data, na.rm=TRUE){
q <- quantile(data, probs=c(0.25, 0.75), na.rm=na.rm)
  intq <- 1.5*IQR(data, na.rm=na.rm)
intq_low <- q[1]-intq
intq_high <- q[1]+intq

killed <- data
while(any(killed < intq_low, na.rm=TRUE) | any(killed > intq_high, na.rm= TRUE)){ 
  killed[killed<intq_low] <- NA
  killed[killed>intq_high] <- NA

q <- quantile(killed, probs=c(0.25, 0.75), na.rm=na.rm)
  intq <- 1.5*IQR(killed, na.rm=na.rm)
intq_low <- q[1]-intq
intq_high <- q[1]+intq
}
killed
}

boxplot(kill_outliers(rnorm(9999)))

另外,在你的函数中,有一个未定义的objext。x 这可能在你的环境中也会造成问题。


0
投票

@machine 是对的,去除 "离群值 "会改变分布和它的参数。

我想补充的是,如果没有严重的原因,绝对不能删除离群值。事实上,一个点超过了boxplot中的胡须并不是这样的原因。少量的接近值是完全正常的,而大量的这样的点可以被认为是非正常分布的指标。在这种情况下,我更倾向于避免使用离群值这个词,而是用不同的方式来称呼它,例如极端值。

set.seed(765)
boxplot(rnorm(100))    # normal distribution
boxplot(rt(100, df=3)) # t distribution with long tails
boxplot(rlnorm(100))   # lognormal, skewed

所有这些例子都不符合去除离群值的条件。另一种情况是,当一些点是由一个独立的 "过程 "产生的,大于通常的方差或测量误差。

boxplot(c(rnorm(100), 7))

在这里,可以应用离群值测试,如 outlierTest 从包 汽车 用Bonferroni校正。

library(car)
outlierTest(lm(x ~ 1))

很明显,这样的测试不能重复应用。

搜索交叉验证,你会发现几篇关于离群值问题的好文章,例如 是否要删除被标记为离群值的案例......。 或者 它是作弊下降的离群值的基础上,boxplot ...

© www.soinside.com 2019 - 2024. All rights reserved.