使用均值或中值替换NA?哪个更适合我的数据?

时间:2017-03-28 05:21:09

标签: r math statistics imputation

我有以下数据集:

5   3   3   5   10  10  3   8   2   12  8   6   2   5   6   5   10  4   3   5   4   3   3   5   8   3   5   6   6   1   10  3   6   6   5   8   3   4   3   4   4   3   2.5 1   4   2   2   3   5   10  4   4   6   3   2   3   8   3   4   4   3   3   4   8   4   4   2   4   4   3   2   10  6   3   7   3   5   3   1   4   3   4   3   4   4   2   3   2   4   7   4   6   3.5 3.5 5   3   4   3   5   3   1.5 2.5 3   7   2   5   3   4   2   4   5   3   4   5   4.5 4   6   3   2   1   3   2   2   3   4   6   2   4   2   3   6   1.5 3   3   1   4   3   3   2   3   2   2   6   3   15  1   4   5   2   6   2   4   8   2   8   4   4   4   3   8   4   4   8.5 3   2   7   0.5 3   3   3   2   3   2   4   5   6   2   3.5 3   3   2   2   2.5 2   2   5   2   8   2   4   3   3   2   7   2   4   2   4   4   3   2.5 3   3   3   5 NA NA NA NA NA  NA NA NA NA NA NA NA NA NA NA

我想使用平均值或中值插补方法替换NA。

在这种情况下哪种方法适合,为什么?

请帮我学习。

感谢。

在R中,我正在尝试使用Median:

# replacing with Median
df$val[is.na(df$val)] <- with(df, 
                                  ave(val, FUN = function(x) 
                                            median(x, na.rm = TRUE)) [is.na(df$val)]

我觉得这不是正确的估算方式。

有人可以帮助澄清我的怀疑:

  1. 考虑到有一些高频率值和其他频率低的值,是否会对中位数估算产生任何影响。
  2. 由于异常值,用&#34;意味着&#34;不是一个好主意。那么可以采用哪种替代方法呢?
  3. 感谢。

3 个答案:

答案 0 :(得分:2)

这取决于数据的分布。如果有许多外来者使用中位数来进行缺失估算。

最好是做

数据是df $ val

df2$val=na.omit(df$val)

summary(df2$val)

hist(df2$val)

然后

以平均值替换

df$val=ifelse(is.na(df$val),mean(df$val,na.rm=T),df$val)

以中位数替换

df$val=ifelse(is.na(df$val),median(df$val,na.rm=T),df$val)

答案 1 :(得分:1)

对于你的第二点,你已经提出了这个方法。如果你担心异常值,中位数估算比平均估算更合适。

至于第一点,对于给出的数据来说不应该是一个问题,因为中位数计算会丢弃大部分数据并关注中间的值。

答案 2 :(得分:1)

最差插补方法中的大多数数据集的平均值和中位数。 (当然总是取决于数据集,也有数据集,这些都可以)

一般来说,为了获得最佳的估算结果,您需要研究变量之间的相关性或一个变量的相关性。

因此,查看整个数据框(看看是否存在相关性)会很有趣

如果你只是想用平均值或中位数来估算这里有一些快速的方法

#mean
library("imputeTS")
na.mean(df$val, option ="mean")

#median
library("imputeTS")
na.mean(df$val, option ="median")