基于R语言lme4的组间组内交互混合实验设计模型验证
模型规范验证与修正建议
研究设计与核心假设梳理
- 受试者:6名急诊医生、6名消化科医生,均接受相同治疗
- 测量方案:治疗前后分别通过3个不同
quality(诊断描述详细程度)的急诊病例,采集诊断评分(diag_diff_ge_pre为治疗前,diag_diff_ge_post为治疗后) - 核心假设:
- 急诊医生的绩效提升幅度(治疗后-治疗前)高于消化科医生,对应
group*time交互效应 - 随着病例
quality提升,急诊医生的绩效提升幅度比消化科医生更大,对应group*quality交互效应
- 急诊医生的绩效提升幅度(治疗后-治疗前)高于消化科医生,对应
当前模型的核心问题
- 数据结构不匹配:原数据为宽格式(pre/post分两列),但模型中调用了
time变量,实际数据中并无该字段,直接运行会报错。必须先将数据转换为包含time变量的长格式。 - 随机效应设定不合理:
(quality|id)的设定逻辑有误——quality是病例的固定属性,并非随个体变化的随机变量。正确的嵌套结构是病例嵌套在个体之下,应优先考虑个体和病例的随机截距。 - 样本量限制:仅12个个体,复杂的随机斜率模型(如
(quality|id))容易出现收敛问题,统计效力不足。
修正步骤与模型代码
步骤1:转换数据为长格式
生成time变量,将pre/post评分合并为一列:
library(tidyr) data_ex_long <- data_ex %>% pivot_longer(cols = c(diag_diff_ge_pre, diag_diff_ge_post), names_to = "time", values_to = "diag_diff_ge", names_prefix = "diag_diff_ge_") %>% mutate(time = factor(time, levels = c("pre", "post")))
步骤2:修正后的推荐模型(ANCOVA思路,统计效力更高)
该思路以治疗后评分为因变量,纳入治疗前评分控制基线差异,同时验证交互效应:
library(lme4) model_correct <- lmer(diag_diff_ge ~ time * group + quality * group + diag_diff_ge_pre + experience + autonomy + know_exp + attitude + (1|id) + (1|case), # 控制个体、病例的随机截距 data = data_ex_long) summary(model_correct)
time:group交互项:直接验证"急诊医生绩效提升幅度是否高于消化科医生"的核心假设quality:group交互项:验证"病例quality越高,急诊医生提升幅度优势越明显"的假设- 随机效应
(1|id)控制个体间的基线差异,(1|case)控制不同病例的固有评分差异
备选模型:直接建模绩效提升幅度
若更直观地关注"提升幅度",可先计算治疗前后的差值,再建模:
data_ex <- data_ex %>% mutate(diag_diff_change = diag_diff_ge_post - diag_diff_ge_pre) model_alternative <- lmer(diag_diff_change ~ group * quality + experience + autonomy + know_exp + attitude + (1|id) + (1|case), data = data_ex) summary(model_alternative)
- 因变量
diag_diff_change直接反映绩效提升,group:quality交互项验证第二个假设,group主效应验证第一个假设
额外说明
如果确实想检验个体对不同quality病例的响应差异,可将随机效应替换为(quality|id) + (1|case),但需注意:12个个体的样本量可能无法支撑该复杂模型,容易出现收敛警告,此时可简化为(0 + quality|id) + (1|id) + (1|case)(仅允许个体对quality的斜率变异,不包含截距交叉项)。
内容的提问来源于stack exchange,提问作者Ane
相关产品推荐
相关产品推荐

