首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >R语言嵌套设计方差分析(代码+数据+可视化)

R语言嵌套设计方差分析(代码+数据+可视化)

作者头像
医学和生信笔记
发布2026-04-09 20:23:25
发布2026-04-09 20:23:25
1030
举报

在实际研究中,影响结果的因素往往不止一个。比如研究某种药物的疗效时,除了药物本身,患者的性别、年龄、用药剂量等都可能同时影响结果。如果我们对每个因素单独做方差分析,不仅效率低,还会遗漏一个重要信息——因素之间的交互作用。

多因素方差分析(Multi-way ANOVA)正是用来同时分析多个因素对结果变量影响的统计方法。它可以回答以下问题:

  • 主效应:每个因素单独对结果有没有影响?
  • 交互作用:多个因素联合起来,是否会产生”1+1≠2”的效果?

举个例子:A药和B药单独使用时效果一般,但联合使用时镇痛时间大幅延长——这就是典型的正交互作用。反之,两药合用反而效果下降,则为负交互作用。如果不考虑交互作用,单看主效应可能会得出错误的结论。

根据实验设计的不同,多因素方差分析有多种常见形式:

  • 析因设计:所有因素的水平两两组合,全面估计主效应和交互作用
  • 正交设计:因素和水平较多时,用正交表选取部分组合,减少实验次数
  • 嵌套设计:某一因素的水平嵌套在另一因素之内,两者不能交叉
  • 裂区设计:不同因素施加在不同层级的实验单位上,兼顾精度与可行性

前面已经介绍了析因设计的方差分析和正交设计的方差分析,本篇继续介绍嵌套设计的方差分析。

嵌套设计(也称系统分组设计)用于描述因素之间存在层级包含关系的情形——二级因素的水平并不是在所有一级因素水平下都相同,而是每个一级水平下各自拥有一套独立的二级水平。换言之,两个因素之间只有"包含"关系,没有"交叉"关系,因此不能估计交互作用,只能分别估计各层级因素的主效应。

本篇以催化剂(3种)与温度(各催化剂对应不同温度范围)对化合物转化率的影响为例,展示了嵌套结构数据的可视化方式,以及如何在aov()中用/运算符(factor1/factor2)正确指定嵌套关系来进行方差分析。这与析因设计中常见的*写法有本质区别,混淆二者会导致模型设定错误。

unsetunset嵌套设计资料的方差分析unsetunset

嵌套设计的方差分析也是要注意指定主效应和交互效应。

使用孙振球《医学统计学》第4版例11-6的数据。

试验甲、乙、丙3种催化剂在不同温度下对某化合物的转化作用。由于各催化剂所要求的温度范围不同,将催化剂作为一级实验因素(I=3),温度作为二级实验因素(J=3),采用嵌套设计,每个处理重复2次(n=2)。试做方差分析。

代码语言:javascript
复制
data11_6 <- data.frame(
  factor1 = factor(rep(c("A","B","C"),each=6)),
  factor2 = factor(rep(c(70,80,90,55,65,75,90,95,100),each=2)),
  y = c(82,84,91,88,85,83,65,61,62,59,56,60,71,67,75,78,85,89)
  )
str(data11_6)
## 'data.frame':    18 obs. of  3 variables:
##  $ factor1: Factor w/ 3 levels "A","B","C": 1 1 1 1 1 1 2 2 2 2 ...
##  $ factor2: Factor w/ 8 levels "55","65","70",..: 3 3 5 5 6 6 1 1 2 2 ...
##  $ y      : num  82 84 91 88 85 83 65 61 62 59 ...
head(data11_6)
##   factor1 factor2  y
## 1       A      70 82
## 2       A      70 84
## 3       A      80 91
## 4       A      80 88
## 5       A      90 85
## 6       A      90 83

factor1是一级实验因素(不同的催化剂),factor2是二级实验因素(不同的温度),y是因变量。

对这个数据做个简单的可视化,方便查看研究设计结构:

代码语言:javascript
复制
library(ggplot2)

ggplot(data11_6, aes(x = factor2, y = y)) +
  # 绘制原始数据点(轻微抖动避免重叠),按催化剂分色
  geom_jitter(aes(color = factor1), width = 0.1, size = 3) +
  facet_wrap(~factor1, labeller = label_both) +
  labs(title = "嵌套设计数据可视化 (催化剂与温度)",
       x = "温度",
       y = "转化率 (%)",
       color = "催化剂") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 0, hjust = 0.5),
        strip.background = element_rect(fill = "lightblue"))

进行嵌套实验设计的方差分析:

代码语言:javascript
复制
# “/”表示factor2嵌套在factor1里
f <- aov(y ~ factor1 / factor2, data = data11_6)
# 等价于以下写法:
#f <- aov(y ~ factor1 + factor1:factor2, data = data11_6)
summary(f)
##                 Df Sum Sq Mean Sq F value   Pr(>F)    
## factor1          2 1956.0   978.0  177.82 5.83e-08 ***
## factor1:factor2  6  401.0    66.8   12.15 0.000716 ***
## Residuals        9   49.5     5.5                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

结果和表11-26相同。

结论:催化剂(factor1)影响该化合物的转化率。对于同一催化剂,不同温度(factor2)对转化率亦有影响。

参考资料:

  • Crossed and Nested Factors
  • aov() error term in R: what’s the difference bw Error(id) and Error(id/timevar) specification?
  • Formulae in R
  • R and Analysis of Variance

医学和生信笔记,专注R语言在医学中的使用!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 医学和生信笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • unsetunset嵌套设计资料的方差分析unsetunset
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档