# 使用airquality数据集示例
library(mice)
data <- airquality
md.pattern(data)  # 查看缺失模式
 
imp <- mice(data, m = 5, maxit = 10, method = "pmm", seed = 123) #使用5个数据集
summary(imp)  # 查看插补摘要
complete(imp) %>% head()  # 查看完整数据集(默认返回第一个)
complete(imp, "long") %>% head() # 查看所有插补数据集
plot(imp)
 
# 检查变量间关系是否保持
stripplot(imp, pch = 20, cex = 1.2)
# 为不同变量指定不同插补方法
meth <- c("pmm", "pmm", "", "", "", "")  # 只为Ozone和Solar.R指定pmm方法
imp_custom <- mice(data, method = meth) 
 

缺失值模式查看

  1. 一共111个行无缺失值,35个行有1个缺失值, 太阳列有7个缺失值,一共44个缺失值

填充后的,注意无明显的偏离比较好

  1. 随机缺失(MAR)

    • 需要确保填充模型中包含所有能解释缺失机制的变量
    • 建议进行变量重要性分析,确保关键预测变量被包含
  2. 非随机缺失(MNAR)

    • 最具挑战性的情况
    • 随机森林可能无法完全校正系统性偏差
    • 建议考虑专门的MNAR处理方法或进行敏感性分析

样本量对填充效果的影响

小样本情况(n < 100)

  • 挑战:
    • 随机森林容易过拟合
    • 填充结果可能不稳定
  • 建议:
    • 减少树的数量(ntree=50-100)
    • 使用较简单的插补方法(如KNN)作为替代
    • 考虑多重插补(mice)来评估不确定性

中等样本量(100 ≤ n ≤ 1000)

  • 随机森林表现最佳的范围
  • 可以:
    • 使用默认参数(ntree=100-500)
    • 进行更精细的调参
    • 考虑变量重要性来优化填充模型
  1. 数据准备:

    # 检查缺失模式
    mice::md.pattern(your_data)
  2. 参数设置:

    # 推荐参数设置
    missForest::missForest(
      your_data,
      ntree = ifelse(nrow(your_data)<100, 50, 500), # 根据样本量调整
      maxiter = 10,
      variablewise = TRUE # 对每个变量单独评估
    )
  3. 验证方法:

    • 对完整数据部分进行人工缺失测试
    • 比较不同方法的填充结果
    • 对于关键变量,考虑多重插补评估不确定性
  4. 替代方案考虑:

    • 小样本:pmm(预测均值匹配
    • 高维数据:带有正则化的回归方法
    • 分类变量:多重logistic回归

对,标准 KNN 填补的逻辑是:

         S1   S2   S3   S4   S5   S6
蛋白A    10   NA   12   11   NA   13
         ↑
         要填这个缺失值

Step1: 找和 S2 最相似的其他样本(比如 S4、S6)
Step2: 用 S4、S6 在蛋白A上的值(11、13)取均值 → 填 12

ImpSeq 的转置思路解决了这个问题:

         S1   S2   S3   S4   S5   S6
蛋白A    10   NA   12   11   NA   13  ← 要填
蛋白B    10   9    12   11   10   13  ← 邻居
蛋白C    11   10   11   10   9    12  ← 邻居

Step1: 找和蛋白A最相似的其他蛋白质行(从40000行里找)
Step2: 用邻居蛋白在 S2 位置的值来填补蛋白A的 S2

邻居池是 40000 行,完全够用,这就是 ImpSeq 适合你数据的原因。

ImpSeq 的不足:

1. 假设蛋白质表达模式相似

ImpSeq 的前提是”相似蛋白质在所有样本中变化趋势一致”,但现实中:
但如果蛋白A的缺失不是随机的(MNAR):
蛋白A在S2缺失 → 恰恰是因为浓度太低检测不到
填补值却用邻居的正常值 → 严重高估


**这是最大的缺陷**:ImpSeq 假设缺失是随机的(MAR),但蛋白质组学的缺失大多是**非随机的(MNAR)**——低丰度蛋白更容易缺失。



问题严重程度
MNAR 缺失(低丰度检测限)⚠️ 高,蛋白组学通用问题
K 值选择⚠️ 中,建议测试 K=5/10/15
全局结构缺失低,6样本全局结构本来就简单

实际建议:先检查缺失模式——如果缺失值在低强度蛋白中集中出现,说明是 MNAR,这时候 MinDet 或 MinProb 反而比 ImpSeq 更合适,因为它们专门针对 MNAR 设计(用检测下限附近的小值填充)。

你的数据缺失主要集中在低丰度蛋白还是随机分布?