R语言纵向数据场景下value变量的正态性检验方法咨询
纵向数据正态性检验的核心思路
- 不要直接对全体
value做检验:同一受试者的测量值存在组内相关性,违背普通正态检验要求的独立观测假设,得到的结果完全不可靠 - 优先检验模型残差的正态性:纵向分析通常会用到混合效应模型,这类模型的正态性假设针对的是模型残差、随机效应等衍生指标,而非原始观测值
- 可按分层维度分组检验:比如按「受试者+季节」分组后,组内是同一个体同一时段的重复测量,近似满足独立性要求,可对各组做常规正态检验后汇总结果
R语言实现步骤
1. 数据预处理
先将你的示例数据整理为标准R数据框:
df <- data.frame( Subject = rep(c(1,2), c(6,3)), Season = c("autumn","autumn","autumn","winter","winter","summer","winter","winter","spring"), date = c("01-09","02-09","05-09","06-12","09-01","27-06","16-12","25-01","12-06"), value = c(232,213,228,343,377,301,333,384,301), Treatment = rep(c("Medicine","Placebo"), c(6,3)) )
2. 分组正态检验
针对你提到的「同一受试者同季节多次测量」的结构,按受试者+季节分组后做Shapiro-Wilk检验:
library(dplyr) # 批量对每个分组做正态检验 df %>% group_by(Subject, Season) %>% group_map(~ shapiro.test(.x$value), .keep = T)
结果解读:如果绝大多数分组的p值大于0.05,可认为组内观测符合正态性要求。
3. 混合效应模型残差检验(最常用)
如果你后续要做纵向数据分析,会优先拟合混合效应模型,直接检验模型残差的正态性即可,同时自动考虑纵向数据的相关性:
library(lme4) library(DHARMa) # 拟合包含受试者随机截距的混合效应模型,固定效应可根据你的分析需求调整 lme_model <- lmer(value ~ Treatment + Season + (1|Subject), data = df) # 生成标准化模拟残差 sim_res <- simulateResiduals(lme_model) # 输出正态性统计检验结果 testNormal(sim_res) # 绘制QQ图可视化判断正态性 plotQQunif(sim_res)
结果解读:testNormal返回的p值大于0.05、QQ图上的散点基本贴合对角线,就说明残差符合正态性假设。
4. 可视化辅助判断
大样本下正态检验的p值对微小偏离非常敏感,建议配合可视化结果综合判断:
library(ggplot2) # 按受试者分组绘制value的QQ图 ggplot(df, aes(sample = value)) + geom_qq() + geom_qq_line() + facet_wrap(~Subject)
注意:如果检验目的是为了满足后续模型的假设,优先看残差的正态性结果,不需要纠结原始观测值的分布。
内容的提问来源于stack exchange,提问作者Bibi
相关产品推荐
相关产品推荐

