如何运行含交叉独立随机效应的广义线性混合模型(GLMM)?
建模方案与代码实现
核心思路
你的数据属于比例计数数据:每个观测是受试者在特定条件下给某搭档的捐赠数(donations),相对于该会话的总捐赠数(total_donations),适合用**二项式广义线性混合模型(GLMM)**分析。这类模型能同时处理固定效应(closeness_score、condition)和随机效应(受试者个体差异),匹配你的研究需求。
代码实现
1. 基础主效应模型
先拟合包含closeness_score、condition主效应,以及受试者随机截距的模型:
# 加载依赖包 library(lme4) library(lmerTest) # 用于输出固定效应的p值 # 构建二项式GLMM:响应变量为cbind(成功数, 失败数) base_model <- glmer( cbind(donations, total_donations - donations) ~ closeness_score + condition + (1 | subject), data = df, family = binomial(link = "logit") ) # 查看模型结果 summary(base_model)
2. 含交互项的模型
如果理论上认为closeness_score对捐赠比例的影响会随condition变化,可加入交互项:
interaction_model <- glmer( cbind(donations, total_donations - donations) ~ closeness_score * condition + (1 | subject), data = df, family = binomial(link = "logit") ) summary(interaction_model)
3. 模型比较与效应检验
用方差分析判断交互项是否有必要纳入模型:
anova(base_model, interaction_model)
用卡方检验检验固定效应的显著性:
library(car) Anova(interaction_model, type = "III")
关键说明与注意事项
- 响应变量结构:
cbind(donations, total_donations - donations)表示「给该搭档的捐赠数(成功)」和「给其他搭档的捐赠数(失败)」,完全符合二项分布的建模要求。 - 随机效应选择:仅加入
(1 | subject)是因为你的样本量极小(仅3名受试者),若额外加入(1 | partner)会导致模型难以收敛。 - 结果解读:模型输出的系数是对数优势比,若要转换为实际概率,可使用
plogis()函数,例如plogis(fixef(interaction_model)[1])可得到截距对应的基准概率。 - 样本量问题:3名受试者的样本量远低于混合效应模型的常规要求,结果的统计效力极低,建议尽快扩充样本量以提升结论可靠性。
- 模型诊断:用DHARMa包检查拟合质量,避免模型假设违背:
library(DHARMa) sim_res <- simulateResiduals(base_model) plot(sim_res)
内容的提问来源于stack exchange,提问作者Matthew Babb
相关产品推荐
相关产品推荐

