混合效应模型纵向数据¶
一句话概述:混合效应模型(Mixed-Effects Model)同时包含固定效应(所有个体共享)和随机效应(个体特异),是分析纵向(多时间点)和分层数据的标准方法,在微生物组纵向研究和临床试验中必不可少。
核心知识点速查表¶
| 概念 | 说明 |
|---|---|
| 固定效应 | 所有个体共有的效应(如治疗组的平均效果) |
| 随机效应 | 个体特异的偏差(如每个人的基线差异) |
| 混合模型 | 固定+随机效应的组合(白话:既看群体趋势,又考虑个体差异) |
| 纵向数据 | 同一个体多次测量(如Day0, Day7, Day30的微生物组) |
| 嵌套结构 | 数据有层级关系(如患者嵌套在医院中) |
| ICC | 组内相关系数,衡量组内相似度 |
| lme4/nlme | R语言混合模型主要包 |
一、R语言实操¶
# === 线性混合效应模型 ===
library(lme4)
library(lmerTest) # 提供p值
# 示例数据: 微生物组纵向研究
# subject: 受试者ID(多次测量)
# timepoint: 时间点(Day0, Day7, Day30)
# treatment: 治疗组/对照组
# diversity: Shannon多样性指数
# 拟合混合模型
model <- lmer(
diversity ~ treatment * timepoint + # 固定效应: 治疗、时间及其交互
(1 | subject), # 随机效应: 每个受试者有不同截距
data = longitudinal_data
)
summary(model) # 查看结果
anova(model) # 方差分析表
# 随机斜率模型(允许每个个体时间趋势不同)
model2 <- lmer(
diversity ~ treatment * timepoint +
(1 + timepoint | subject), # 随机截距 + 随机斜率
data = longitudinal_data
)
# 可视化
library(ggplot2)
ggplot(longitudinal_data, aes(x=timepoint, y=diversity,
color=treatment, group=subject)) +
geom_line(alpha=0.3) + # 个体轨迹
geom_smooth(aes(group=treatment), method="lm") + # 组平均趋势
theme_minimal()
# === 广义线性混合模型(非正态数据) ===
# 用于计数数据(如微生物reads数)
library(lme4)
# 负二项混合模型(微生物丰度)
library(glmmTMB)
model_nb <- glmmTMB(
abundance ~ treatment * timepoint + (1 | subject),
family = nbinom2, # 负二项分布
data = microbiome_data
)
summary(model_nb)
二、面试高频考点¶
Q1: 为什么纵向数据不能用普通回归?¶
- 同一个体的多次测量不独立(违反独立性假设)
- 忽略重复测量会低估标准误,假阳性率升高
- 混合模型通过随机效应建模个体内相关性
- 白话:把同一个人的3次成绩当成3个人的成绩,就会高估样本量
Q2: 随机截距 vs 随机斜率?¶
- 随机截距(1|subject):每个人起始值不同,变化速率相同
- 随机斜率(1+time|subject):每个人起始值和变化速率都不同
- 白话:随机截距=起跑线不同但速度相同;随机斜率=起跑线和速度都不同
速查表¶
# === 混合模型速查 ===
library(lme4); library(lmerTest)
# 线性混合模型
lmer(y ~ treatment*time + (1|subject), data=df)
# 随机斜率
lmer(y ~ treatment*time + (1+time|subject), data=df)
# 广义线性混合模型
glmer(count ~ treatment + (1|subject), family=poisson, data=df)
# 可视化
library(ggeffects)
plot(ggpredict(model, terms=c("time", "treatment")))