我有一个非常大的数据集,并且丢失了大约 5% 的随机值。这些变量相互关联。以下示例 R 数据集只是一个带有虚拟相关数据的玩具示例。
set.seed(123)
# matrix of X variable
xmat <- matrix(sample(-1:1, 2000000, replace = TRUE), ncol = 10000)
colnames(xmat) <- paste ("M", 1:10000, sep ="")
rownames(xmat) <- paste("sample", 1:200, sep = "")
#M variables are correlated
N <- 2000000*0.05 # 5% random missing values
inds <- round ( runif(N, 1, length(xmat)) )
xmat[inds] <- NA
> xmat[1:10,1:10]
M1 M2 M3 M4 M5 M6 M7 M8 M9 M10
sample1 -1 -1 1 NA 0 -1 1 -1 0 -1
sample2 1 1 -1 1 0 0 1 -1 -1 1
sample3 0 0 1 -1 -1 -1 0 -1 -1 -1
sample4 1 0 0 -1 -1 1 1 0 1 1
sample5 NA 0 0 -1 -1 1 0 NA 1 NA
sample6 -1 1 0 1 1 0 1 1 -1 -1
sample7 NA 0 1 -1 0 1 -1 0 1 NA
sample8 1 -1 -1 1 0 -1 -1 1 -1 0
sample9 0 -1 0 -1 1 -1 1 NA 0 1
sample10 0 -1 1 0 1 0 0 1 NA 0
在这种情况下是否有(最好的)方法来估算缺失值?随机森林算法有用吗?R 中的任何工作解决方案将不胜感激。
编辑:
(1) 缺失值随机分布在变量和样本之间。由于变量的数量非常大(示例中为 10000),而上述虚拟示例中的样本数量较少,约为 200。所以当我们查看所有变量(10000)的任何样本,由于大量变量,某些变量很可能会出现缺失值。因此,仅删除样本不是选项。
(2) 在插补过程中,变量既可以是定量的,也可以是定性的(二元)。唯一的判断是我们可以预测它有多好(准确性)。因此,像 0.98 而不是 1 这样的预测可能是可以接受的,而不是 0 vs 1 或 -1 vs 1。我可能需要在计算时间和准确性之间进行权衡。
(3) 我一直在思考过拟合如何影响结果的问题,因为与样本数量相比,变量的数量很大。
(4)由于缺失值的总量约为5%且是随机的(未集中在任何变量或样本中,已采取预防措施去除缺失值非常高的变量或样本)
(5) 使数据完整分析是第一目标,准确性是第二。所以对准确性不太敏感。