mice包中标准化变量无法插补的原因及解决方法
解决方案:解决
mice无法处理标准化矩阵列的问题 错误原因
scale()函数返回的是矩阵类对象,而mice包不支持处理数据框中类为矩阵的列,因此触发报错。
解决方法
方法1:将标准化结果转换为向量
直接用as.vector()把scale()返回的矩阵转为数值向量,即可让mice正常处理:
scale.work <- work %>% mutate(Scale_Cups = as.vector(scale(Coffee_Cups))) # 执行插补 imp.scale <- scale.work %>% mice(m=5)
也可以通过提取矩阵的第一列实现同样效果:
scale.work <- work %>% mutate(Scale_Cups = scale(Coffee_Cups)[, 1])
方法2:手动计算标准化值
绕过scale()函数,直接用均值和标准差手动计算标准化值,生成的是原生数值向量:
# 先计算均值和标准差(可保留用于后续还原数据) cups_mean <- mean(work$Coffee_Cups, na.rm = TRUE) cups_sd <- sd(work$Coffee_Cups, na.rm = TRUE) scale.work <- work %>% mutate(Scale_Cups = (Coffee_Cups - cups_mean) / cups_sd) # 执行插补 imp.scale <- scale.work %>% mice(m=5)
验证
执行上述任意一种方法后,查看Scale_Cups的类型:
class(scale.work$Scale_Cups)
返回"numeric"即说明转换成功,此时mice可以正常生成mids对象。
内容的提问来源于stack exchange,提问作者Shawn Hemelstrand
相关产品推荐
相关产品推荐

