R使用mclogit做混合效应条件logistic回归报维度不匹配错误如何解决
报错核心原因
- 公式写法不符合mclogit的语法规则:
mclogit左侧的cbind()结构仅用于传入汇总式二分类数据的「成功数、失败数」,而你将选择集标识Step.ID错误放入该位置,函数读取响应变量时出现维度匹配失败,直接触发你遇到的报错。 - 响应变量类型错误:你将表示是否选中的
Used设为因子类型,mclogit要求该变量为数值型(1代表选中,0代表未选中)。 - 示例数据中
Step.ID存在跨个体重复的情况(比如多个动物都有Step.ID=2),作为选择集标识建议和个体ID拼接生成唯一的选择集ID,避免不同个体的选择集被错误合并。
修复方法
首先修正变量类型和公式写法,选择集标识Step.ID需要放在公式右侧的竖线后,用来标记每个选择组:
library(mclogit) library(data.table) # 使用data.table需提前加载对应包 locations <- data.table( Animal.ID = as.factor(c(4001, 4001, 4001, 4001, 4001, 4001, 4002, 4002, 4002, 4003, 4003, 4003)), Used = c(1,0,0,1,0,0,1,0,0,1,0,0), # 改为数值型二分类变量 Step.ID = as.factor(c(2,2,2,3,3,3,2,2,2,2,2,2)), Roads_3 = c(0.21, 0.55, -0.13, 0.1, -0.63, 0.2, 0.3, 0.3,-0.44,0.92,-0.01, 0.15), Elevation = c(0.2391, 0.1937, 0.0533, 0.1978, -0.1656, 0.284, 0.247, -0.0623, 0.313, 0.432, -0.123, 0.111) ) # 生成唯一选择集ID,避免不同个体的同编号步被合并 locations[, UniqueStepID := as.factor(paste(Animal.ID, Step.ID, sep = "_"))] # 修正后的模型调用,选择集ID放在竖线后 m1 <- mclogit(Used ~ Elevation + Roads_3 | UniqueStepID, random = ~Roads_3|Animal.ID, data = locations) m2 <- mclogit(Used ~ Elevation + Roads_3 | UniqueStepID, random = ~Elevation|Animal.ID, data = locations) m3 <- mclogit(Used ~ Elevation | UniqueStepID, random = ~Roads_3|Animal.ID, data = locations)
额外说明
你提供的示例数据量极小(仅3个个体,每个个体最多2个步),运行时会出现收敛警告属于正常情况,替换为完整的实际数据即可正常得到估计结果。如果后续出现收敛问题,可先去掉random参数运行普通条件logit,验证数据结构和自变量无问题后再逐步添加随机效应项。
内容的提问来源于stack exchange,提问作者Charlie_J
相关产品推荐
相关产品推荐

