使用mice插补聚类数据cluster变量时maxit>0出现NaN/NA异常
mice包2lonly.pmm插补迭代异常问题
问题背景
我有一组聚类数据:
cluster变量存在21%的缺失值,该变量由缺失率相近的date变量衍生而来;- 仅需插补
cluster变量,其余约20个变量无缺失,变量类型涵盖数值型、逻辑型、因子型和日期型; - 因
cluster为连续型但非正态分布,选择2lonly.pmm方法插补,避免引入超出值域的值。
异常表现
- 当设置
maxit=0时,mice运行无报错,插补结果正常; - 若将
maxit设为大于0的任意值,无报错日志,但cluster插补值全为NA,其余非插补变量值全为NaN。
已尝试的调试操作
- 查阅多篇mice多水平插补教程,未找到对应解法;
- 添加
ridge=0.001、threshold=1.1增强模型鲁棒性,无效; - 调整预测矩阵中
date变量的设置,无效; - 将预测矩阵中
date设为0时,预运行正常,但迭代时触发报错:
Error in .imputation.level2(y = y, ry = ry, x = x, type = type, wy = wy, : No class variable
不确定此处的class variable是否指cluster变量。
环境信息
- R版本:4.2.2
- mice包版本:3.16.0
解决方案思路
- 补全多水平模型的分组变量设置
2lonly.pmm是专为多水平数据设计的插补方法,要求必须指定分组变量(即定义聚类层级的ID变量,比如个体所属组的标识),报错中的No class variable就是指缺少该变量的正确配置:
- 检查预测矩阵:将分组变量对应的
type设为2(表示水平2变量),cluster变量的type设为-2(表示仅在水平2层面插补的变量),其余协变量根据类型设为1(水平1变量)或对应值。
- 正确处理日期型变量
datedate作为cluster的衍生变量,无法直接用于多水平插补模型:
- 先将
date转换为数值型(比如计算距某起始日期的天数),再加入预测矩阵; - 若
date属于分组层级的变量,将其type设为2,否则设为1。
- 简化模型定位问题
- 先仅保留
cluster、分组变量、转换后的date这几个核心变量进行插补测试,排除其他变量的干扰; - 临时将插补方法换成普通
pmm,验证迭代是否正常,以此区分是多水平设置问题还是变量本身的问题。
- 验证聚类结构的有效性
确保数据存在明确的多水平嵌套结构(比如存在重复测量的组ID),若聚类结构模糊,2lonly.pmm无法正常完成迭代。
内容的提问来源于stack exchange,提问作者august2020
相关产品推荐
相关产品推荐

