使用lordif做DIF检验时出现resp.data行数与group长度不匹配报错
lordif 报错排查与解决方法
报错根因说明
两个报错的核心原因都是传入lordif()函数的作答矩阵行数与分组变量长度不匹配,以及参数传入格式不符合要求:
- 第一个报错
nrow of resp.data and length of group are non-conformable:多是因为你提取的分组变量di[,1]不是向量格式,而是单列矩阵/tibble,或者分组变量存在缺失值导致长度和作答矩阵行数不一致。 - 第二个报错
Error in table(group, resp) : all arguments must have the same length:你将包含性别列的完整数据di传给了仅接受作答数据的第一个参数,lordif会把性别列也当成题目处理,交叉计算时出现维度不匹配。
修复步骤
- 先确认数据结构,保证分组变量为向量格式:
如果你的数据是tibble类型,di[,1]提取结果为单列tibble而非向量,需要改用[[或者$提取:# 检查第一列类型,若输出为tbl_df/matrix则格式错误 class(di[,1]) # 正确提取分组变量(向量格式) sex <- di[[1]] # 提取仅包含35道题的作答数据 resp <- di[, 2:36, drop = TRUE] - 过滤缺失值,避免NA导致长度不匹配:
# 保留分组变量非缺失的行 valid_idx <- !is.na(sex) sex_clean <- sex[valid_idx] resp_clean <- resp[valid_idx, ] - 运行校正后的lordif代码:
genDif = lordif(resp_clean, sex_clean, criterion='Chisqr', alpha=0.01)
内容的提问来源于stack exchange,提问作者Cody
相关产品推荐
相关产品推荐

