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

NA replacement using mean or median value? which will be better for my data?

我有以下数据集:

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 中,我尝试使用中位数进行同样的操作:

# 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. 由于异常值,使用 "mean" 进行插补并不是一个好主意。那么还有哪些替代方法呢?

谢谢。

对于第二点,您已经提出了方法。如果您担心异常值,则中位数插补比均值插补更合适。

至于第一点,对于给定的数据应该没有问题,因为中位数计算会丢弃大部分数据并关注中间的值。

这取决于数据的分布。如果有很多异常值,则使用中位数进行缺失值插补。

最好的就是做

数据是 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)

均值和中位数适用于最差插补方法中的大多数数据集。 (当然总是取决于数据集,也有这些没问题的数据集)

一般来说,为了获得最佳插补结果,您正在研究变量之间的相关性或一个变量在时间上的相关性。

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

如果您只想用均值或中位数进行估算,这里有一些快速方法

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

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