我有以下数据集:
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)]
我觉得这不是正确的估算方式。
有人可以帮助澄清我的怀疑:
感谢。
答案 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")