如何将IRT(GRM)的EAP因子分数添加至R中原数据框?
解决IRT GRM分析中EAP分数匹配原数据框的问题
为啥会报错?
factor.scores(fit2act, method = "EAP")默认会把相同作答模式的记录合并,只返回独特模式对应的EAP分数,所以结果行数(1884)远少于原数据的13542行,直接赋值自然会触发行数不匹配的错误。
两种解决办法
方法一:手动匹配作答模式与分数
- 提取作答模式-分数映射表
从输出的scores里把独特作答模式和对应的z1分数提出来:
# 把Item1~Item5替换成你实际的5个量表条目列名 score_map <- scores$score.dat[, c("Item1", "Item2", "Item3", "Item4", "Item5", "z1")]
- 合并到原数据框
用merge()函数,以5个量表条目为匹配键,把z1分数对应到每个个体:
# 假设原数据框叫df,列名要和score_map里的一致 df_with_theta <- merge(df, score_map, by = c("Item1", "Item2", "Item3", "Item4", "Item5"), all.x = TRUE)
all.x = TRUE保证原数据的每一行都能保留,不会丢失数据
- 验证结果
检查合并后的数据行数和原数据是否一致:
nrow(df_with_theta) == nrow(df) # 正常应该返回TRUE
方法二:直接生成全量个体的EAP分数
如果用的是mirt包,直接给factor.scores()加full.scores = TRUE参数,就能直接得到和原数据行数一致的分数,省去手动匹配的步骤:
scores <- factor.scores(fit2act, method = "EAP", full.scores = TRUE) # 把z1分数直接加到原数据框里 df$theta <- scores$scores[, "z1"]
内容的提问来源于stack exchange,提问作者Madhuri Ram
相关产品推荐
相关产品推荐

