使用yhat包calc.yhat做优势分析时报矩阵下标数量错误如何解决
R语言yhat包calc.yhat函数执行优势分析报错解决方案
报错原因
- 原始数据集为tibble格式:
calc.yhat源码使用传统R矩阵的二维下标赋值逻辑,tibble通过[,列号]取列时默认返回一维tibble而非向量,无法匹配赋值要求的维度,触发下标数量不匹配错误。 - 拟合回归后原始数据集被修改:在运行
lm()生成lm.out之后,若对Final_Dataset_mplus做过删列、筛选行、修改变量名等操作,calc.yhat从环境中调用原始数据集时会和回归模型记录的自变量列表匹配失败,出现维度错位。 - 数据集存在隐含缺失值:自变量列中存在未被
lm()自动剔除的隐藏缺失值,导致calc.yhat提取数据时生成的矩阵行列数不匹配。
解决方案
按优先级逐一尝试即可:
- 先将数据集强制转为基础data.frame类型,重新拟合回归后再运行优势分析:
# 强制转换为R基础data.frame格式 Final_Dataset_mplus <- as.data.frame(Final_Dataset_mplus) # 重新拟合线性回归模型 lm.out <- lm(formula = oWE ~ T1DF + T1DC + FA + PI + JC, data = Final_Dataset_mplus) # 执行优势分析 calc.yhat(lm.out, prec=3)
- 转换格式后仍报错的话,先清洗数据剔除缺失值再重新运行:
# 提取回归用到的所有变量,仅保留完整观测行 used_vars <- c("oWE", "T1DF", "T1DC", "FA", "PI", "JC") Final_Dataset_mplus <- na.omit(Final_Dataset_mplus[, used_vars]) # 重新拟合模型后运行优势分析 lm.out <- lm(oWE ~ ., data = Final_Dataset_mplus) calc.yhat(lm.out, prec=3)
- 若上述操作都无效,大概率是包冲突导致,重启R会话后仅加载yhat和回归分析需要的依赖包,再重新运行代码即可。
内容的提问来源于stack exchange,提问作者I R Beginner
相关产品推荐
相关产品推荐

