二项混合效应模型BIC:R与SPSS结果差异及调整问询
解决R与SPSS二项混合效应模型结果差异的问题
我之前在计算Bayes Factor时,碰到过一模一样的问题——R里拟合的二项混合效应模型BIC大概在2280左右,但SPSS里跑出的结果居然高达13973,不过线性模型的结果倒是完全一致。先把我当时用的代码和语法贴出来,方便对照:
R代码
# 空模型 memory.model = glmer(correct ~ (1|ps) + (1|item), data=memorystudy, family=binomial, glmerControl(optimize = "bobyqa")) # 主效应模型 memory.model2 = glmer (correct ~ encoding + retrieval + (1|ps) + (1|item), data=memorystudy, family=binomial, glmerControl(optimize = "bobyqa")) # 交互效应模型 memory.model3 = glmer (correct ~ encoding*retrieval + (1|ps) + (1|item), data=memorystudy, family=binomial, glmerControl(optimize = "bobyqa"))
原SPSS语法
# 主效应模型 GENLINMIXED /FIELDS TARGET = correct /DATA_STRUCTURE SUBJECTS = ps*item COVARIANCE_TYPE = VARIANCE_COMPONENTS /TARGET_OPTIONS DISTRIBUTION = BINOMIAL LINK = LOGIT REFERENCE = 0 /FIXED EFFECTS = encoding retrieval /RANDOM USE_INTERCEPT = TRUE SUBJECTS = ps*item. # 交互效应模型 GENLINMIXED /FIELDS TARGET = correct /DATA_STRUCTURE SUBJECTS = ps*item COVARIANCE_TYPE = VARIANCE_COMPONENTS /TARGET_OPTIONS DISTRIBUTION = BINOMIAL LINK = LOGIT REFERENCE = 0 /FIXED EFFECTS = encoding retrieval encoding*retrieval /RANDOM USE_INTERCEPT = TRUE SUBJECTS = ps*item.
问题核心原因
你会发现结果差异巨大,本质是随机效应结构的定义完全不一致:
- R里的
(1|ps) + (1|item)是定义了两个独立的随机截距,分别捕捉被试(ps)和项目(item)各自的变异; - 但SPSS原语法里的
SUBJECTS = ps*item是把被试和项目的交叉组合当成了一个单一的随机分组,这相当于创建了一个“被试-项目”的嵌套结构,和R的模型完全不是一回事,自然拟合结果天差地别。
调整后的SPSS语法
要让SPSS拟合和R完全一致的模型,需要分别定义被试和项目的随机截距,同时调整输出选项来获取足够的对比指标:
主效应模型(对应R的memory.model2)
GENLINMIXED /FIELDS TARGET = correct /DATA_STRUCTURE SUBJECTS = ps, item # 同时指定两个随机因子 /TARGET_OPTIONS DISTRIBUTION = BINOMIAL LINK = LOGIT REFERENCE = 0 /FIXED EFFECTS = encoding retrieval /RANDOM USE_INTERCEPT = TRUE SUBJECTS = ps # 被试的随机截距 /RANDOM USE_INTERCEPT = TRUE SUBJECTS = item # 项目的随机截距 /COVARIANCE_TYPE = VARIANCE_COMPONENTS # 和glmer默认的方差成分结构一致 /PRINT MODELFIT INFORMATION CRITERIA # 输出BIC等拟合指标 /PRINT PARAMETER ESTIMATES # 输出参数估计,方便和R对比 /CRITERIA CONVERGENCE = 1E-6 MAXITERATIONS = 1000. # 匹配R的收敛标准
交互效应模型(对应R的memory.model3)
GENLINMIXED /FIELDS TARGET = correct /DATA_STRUCTURE SUBJECTS = ps, item /TARGET_OPTIONS DISTRIBUTION = BINOMIAL LINK = LOGIT REFERENCE = 0 /FIXED EFFECTS = encoding retrieval encoding*retrieval /RANDOM USE_INTERCEPT = TRUE SUBJECTS = ps /RANDOM USE_INTERCEPT = TRUE SUBJECTS = item /COVARIANCE_TYPE = VARIANCE_COMPONENTS /PRINT MODELFIT INFORMATION CRITERIA /PRINT PARAMETER ESTIMATES /CRITERIA CONVERGENCE = 1E-6 MAXITERATIONS = 1000.
额外注意事项
- 收敛标准:R的
glmer默认收敛容差是1e-6,SPSS默认可能更宽松,手动指定CONVERGENCE = 1E-6能让模型拟合的收敛条件和R对齐; - 输出选项:原SPSS语法没有指定输出模型拟合指标,添加
/PRINT MODELFIT INFORMATION CRITERIA后就能得到BIC、AIC等指标,方便和R的结果对比; - 空模型对应:如果要拟合R里的
memory.model(空模型,只有随机截距),只需要把/FIXED EFFECTS部分去掉即可。
调整完这些设置后,SPSS的模型结构就和R完全一致了,BIC等拟合指标应该会和R的结果接近,参数估计也能对应上。
内容的提问来源于stack exchange,提问作者Agata
相关产品推荐
相关产品推荐

