使用lavaan进行多层结构方程模型:集群缺失及列表删除排查咨询
多层SEM中被剔除集群与案例的排查方法
针对你用lavaan运行多层SEM时32个国家集群只剩29个的问题,可通过以下步骤排查:
一、找出被剔除的集群(国家)
- 提取模型实际使用的清洗后数据集
# 获取模型运行时用到的有效数据集 used_data <- lavInspect(fit.3b, "data") - 对比原数据与清洗数据的国家列表
# 提取原数据和有效数据中的唯一国家 original_countries <- unique(data_merge$country) used_countries <- unique(used_data$country) # 找出被剔除的国家 dropped_countries <- setdiff(original_countries, used_countries) cat("被剔除的国家:", dropped_countries, "\n")
这些国家被剔除的核心原因:其所有案例都因**列表删除(listwise deletion)**被移除(比如模型涉及的变量、权重变量WEIGHT存在缺失),导致集群无有效案例。
二、定位列表删除的具体案例
直接通过模型对象提取保留案例的索引,对比原数据找出被删除的案例:
# 获取模型保留的原数据行索引 used_indices <- lavInspect(fit.3b, "case.idx") # 找出被删除的行索引及对应案例 dropped_indices <- setdiff(1:nrow(data_merge), used_indices) dropped_cases <- data_merge[dropped_indices, ] # 查看被删除的案例详情 print(dropped_cases)
你可以进一步检查这些案例的缺失情况,确认是哪些变量的缺失导致它们被listwise删除。
补充说明
你的代码中,lavaan的listwise删除规则是:只要某一行在**模型公式mod3涉及的变量、抽样权重WEIGHT、集群变量country**中存在任意缺失,就会被直接剔除。即便你提前移除了外生变量缺失的国家,若这些国家的剩余案例存在其他变量缺失,仍会被全部删除,最终导致集群数量减少。
内容的提问来源于stack exchange,提问作者yana
相关产品推荐
相关产品推荐

