SEMinR反射性模型构建异常:estimate_pls成功但summary报错
错误诊断与解决方法
错误原因
- 代码调用失误:你通过
as.reflective(simple_mm)生成了反射型测量模型reflec_mm,但在estimate_pls()中仍使用原始的simple_mm,导致模型转换未实际生效。 - 单指标反射型构念的共线性问题:
ROLE、VALUES、TL均为单指标构念,设置为reflective时,构念得分直接等于指标值。若这些构念之间或与其他构念存在完全共线性(相关系数趋近于1),会导致构念相关矩阵成为奇异矩阵,summary()中对该矩阵求逆时就会触发solve.default错误;同时共线性还会引发sqrt(rho %*% t(rho))计算产生NaN。
解决步骤
1. 修正模型调用
确保使用转换后的反射型测量模型进行估计:
# 修正estimate_pls的参数,替换为reflec_mm TL_simple_model <- estimate_pls( data = TL_data.scaled, measurement_model = reflec_mm, # 此处改为转换后的反射型模型 structural_model = simple_sm, inner_weights = path_weighting)
2. 为单指标反射型构念添加测量误差
给单指标reflective构念手动指定微小的测量误差方差,避免完全共线性导致的矩阵奇异:
# 重新定义测量模型,为单指标构念设置error_variance reflec_mm <- constructs( composite("URBAN", multi_items("urban_", 1:2)), composite("EFFICACY_AGENCY", multi_items("efficacy.agency_", 1:2), weights = correlation_weights), # 给单指标反射型构念添加测量误差方差,取值可参考领域文献调整 composite("ROLE", single_item("Role", error_variance = 0.05), weights = correlation_weights), composite("VALUES", single_item("values_avg", error_variance = 0.05), weights = correlation_weights), composite("TL", single_item("TL.Score", error_variance = 0.05), weights = correlation_weights) ) # 转换为反射型模型 reflec_mm <- as.reflective(reflec_mm)
3. 排查并处理多重共线性
- 先提取构念得分,计算相关矩阵排查高度相关的构念:
# 提取构念得分并计算相关系数 scores <- TL_simple_model$construct_scores print(cor(scores))
- 若发现构念间相关系数接近1,可采取以下措施:
- 删除冗余构念;
- 检查数据是否存在变量重复、缩放错误等问题;
- 合并高度相关的构念为单一构念。
4. 更换内部权重计算模式
将inner_weights从path_weighting改为path_factoring,该模式对共线性的容忍度更高:
TL_simple_model <- estimate_pls( data = TL_data.scaled, measurement_model = reflec_mm, structural_model = simple_sm, inner_weights = path_factoring) # 更换权重计算模式
内容的提问来源于stack exchange,提问作者Xiaoyin
相关产品推荐
相关产品推荐

