You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R高维数据模拟缺失数据集生成及ampute函数报错问题咨询

R高维数据缺失模拟ampute报错修复方案

报错核心原因

你触发的错误是ampute默认配置和高维场景不匹配导致的:默认缺失模式为每个模式仅缺失1个变量,同时你设置了bycases=FALSE按单元格计算缺失率,100样本、120维变量的前提下,40%的单元格缺失率在默认模式下无法实现,因此触发报错。

可行的参数调整方案

通过自定义缺失模式矩阵和权重矩阵即可适配三种缺失机制的需求,参考代码如下:

library(mice)
# 构造自定义缺失模式矩阵:1表示变量不缺失,0表示变量缺失
# 示例设置10种随机缺失模式,每种模式缺失30%的变量,可按需调整
n_pattern <- 10
p <- ncol(X)
patterns <- matrix(1, nrow = n_pattern, ncol = p)
for (i in 1:n_pattern) {
  miss_cols <- sample(1:p, size = round(0.3*p))
  patterns[i, miss_cols] <- 0
}

# --------------------------
# 1. MCAR缺失机制生成代码
# --------------------------
# MCAR权重规则:所有变量权重一致,缺失概率和任何变量无关
weights_mcar <- matrix(1, nrow = n_pattern, ncol = p)
result_mcar_5p <- ampute(X, prop = 0.05, mech = "MCAR", patterns = patterns, weights = weights_mcar, bycases = TRUE)
result_mcar_25p <- ampute(X, prop = 0.25, mech = "MCAR", patterns = patterns, weights = weights_mcar, bycases = TRUE)
result_mcar_40p <- ampute(X, prop = 0.4, mech = "MCAR", patterns = patterns, weights = weights_mcar, bycases = TRUE)

# --------------------------
# 2. MAR缺失机制生成代码
# --------------------------
# MAR权重规则:仅非缺失变量有权重,缺失概率和观测到的变量值相关
weights_mar <- matrix(0, nrow = n_pattern, ncol = p)
for (i in 1:n_pattern) {
  obs_cols <- which(patterns[i,] == 1)
  weights_mar[i, obs_cols] <- runif(length(obs_cols), 0.5, 2)
}
result_mar_5p <- ampute(X, prop = 0.05, mech = "MAR", patterns = patterns, weights = weights_mar, bycases = TRUE)
result_mar_25p <- ampute(X, prop = 0.25, mech = "MAR", patterns = patterns, weights = weights_mar, bycases = TRUE)
result_mar_40p <- ampute(X, prop = 0.4, mech = "MAR", patterns = patterns, weights = weights_mar, bycases = TRUE)

# --------------------------
# 3. MNAR缺失机制生成代码
# --------------------------
# MNAR权重规则:仅待缺失变量有权重,缺失概率和变量自身未观测到的值相关
weights_mnar <- matrix(0, nrow = n_pattern, ncol = p)
for (i in 1:n_pattern) {
  miss_cols <- which(patterns[i,] == 0)
  weights_mnar[i, miss_cols] <- runif(length(miss_cols), 0.5, 2)
}
result_mnar_5p <- ampute(X, prop = 0.05, mech = "MNAR", patterns = patterns, weights = weights_mnar, bycases = TRUE)
result_mnar_25p <- ampute(X, prop = 0.25, mech = "MNAR", patterns = patterns, weights = weights_mnar, bycases = TRUE)
result_mnar_40p <- ampute(X, prop = 0.4, mech = "MNAR", patterns = patterns, weights = weights_mnar, bycases = TRUE)

注:如果需要按单元格计算缺失率,将bycases改为FALSE,同时适当调低prop的数值即可。

变量选择建议

做插补方法对比的场景下,推荐使用全部120个变量生成缺失,更贴合高维数据的测试场景,能更准确验证不同插补方法在p>n场景下的性能。如果担心计算量过大,也可以仅在前50个变量中生成缺失,剩余变量作为辅助变量参与插补过程。

是否需要更换其他函数

不需要更换其他函数,ampute是R生态中专门为缺失机制模拟设计的标准化工具,上述参数调整方案完全可以满足你三种缺失机制、多梯度缺失率的模拟需求。如果有非常个性化的缺失规则需求,也可以自行编写逻辑生成缺失,但标准化程度和可复现性不如ampute。

内容的提问来源于stack exchange,提问作者Bugra Varol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 19:36:03