R的异常值处理

时间:2017-07-14 12:24:12

标签: r

我对编程语言R很陌生。请原谅我非常基本的问题,这对很多专业人士来说可能有些奇怪。

我的数据集有3个参数Lead_TimeGrossStay_days。使用箱形图我无法得到明确的异常值。 我用过这个命令

outlier1 <- boxplot.stats(var_name)$out
var_name2 <- ifelse(var_name %in% outlier1, NA, var_name)

现在上面的命令用NAs替换了Outlier值。我的问题是基于这个命令选择异常值的基础?

2)我有一个NAs,我想用平均值或中位数替换所有的NA。

我应该使用var_name2的均值或中位数(意味着减去异常值) 如果是,我该怎么做?

我用过这个

m1<-mean(var_name2, na.rm= T)
var_name3<-ifelse(is.na(var_name2)==TRUE, m1,var_name2)

但是,当我看到var_name3var_name2的摘要时 - 结果相同

1 个答案:

答案 0 :(得分:0)

首先,我怀疑你手术的统计性。你为什么要用手段或中位数取代“异常值”,这意味着什么呢?请看下面的例子。

set.seed(3212)
var_name <- rnorm(1e3)
bp <- boxplot(var_name)
length(bp$out)
[1] 9

所以你看到我们有非常好的高斯数字,但是箱线图显示了9个异常值。没关系。如果您重复实验足够多次,则会显示“常规”之外的值。 至于你的第一个问题,请注意我已将函数boxplot的值保存在名为bp的变量中。如果您看到boxplot的帮助页面,您会看到返回值是一个名为out的命名列表。这些是异常值。

2)var_name2var_name3的摘要值不一样,至少不是我创建的数据示例。

outlier1 <- boxplot.stats(var_name)$out
var_name2 <- ifelse(var_name %in% outlier1, NA, var_name)
m1<-mean(var_name2, na.rm= T)
var_name3<-ifelse(is.na(var_name2)==TRUE, m1,var_name2)

summary(var_name2)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max.     NA's 
-2.70820 -0.71652 -0.04224 -0.04739  0.59690  2.58625        9 
summary(var_name3)
    Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
-2.70820 -0.71250 -0.04739 -0.04739  0.58591  2.58625