首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >龙虾教你如何用car::Anova重复测量方差分析?

龙虾教你如何用car::Anova重复测量方差分析?

作者头像
医学和生信笔记
发布2026-04-09 20:18:55
发布2026-04-09 20:18:55
930
举报

之前给大家详细介绍过如何使用R自带的经典函数aov做重复测量方差分析,今天给大家介绍如何使用更加经典的car::Anova做重复测量方差分析。

关于重复测量方差分析前的球对称检验,大家可以参考之前的文章R语言球对称检验

数据还是使用孙振球《医学统计学》第4版的数据

unsetunset单因素重复测量unsetunset

孙振球《医学统计学》第4版表12-3的数据,这是一个只有1组的,而且是一个不符合球对称假设的数据。

先读取数据:8名受试者分别在4个时间点的血糖值。

代码语言:javascript
复制
data12_3b <- foreign::read.spss("./datasets/表12-3重复测量ANOVA.sav",
                         to.data.frame = T, reencode = "gbk")
## re-encoding from gbk

str(data12_3b)
## 'data.frame':    8 obs. of  4 variables:
##  $ t0  : num  5.32 5.32 5.94 5.49 5.71 6.27 5.88 5.32
##  $ t45 : num  5.32 5.26 5.88 5.43 5.49 6.27 5.77 5.15
##  $ t90 : num  4.98 4.93 5.43 5.32 5.43 5.66 5.43 5.04
##  $ t135: num  4.65 4.7 5.04 5.04 4.93 5.26 4.93 4.48
##  - attr(*, "variable.labels")= Named chr(0) 
##   ..- attr(*, "names")= chr(0) 
##  - attr(*, "codepage")= int 936
head(data12_3b)
##     t0  t45  t90 t135
## 1 5.32 5.32 4.98 4.65
## 2 5.32 5.26 4.93 4.70
## 3 5.94 5.88 5.43 5.04
## 4 5.49 5.43 5.32 5.04
## 5 5.71 5.49 5.43 4.93
## 6 6.27 6.27 5.66 5.26

car::Anova的实现方式如下(W = 0.06273):

代码语言:javascript
复制
suppressMessages(library(car))
# 建立多元线性模型
mlm_model <- lm(cbind(t0,t45,t90,t135)~1,data = data12_3b)
# 定义组内因子
time_info <- data.frame(Time=factor(c("t0","t45","t90","t135"),
                                    levels = c("t0","t45","t90","t135")))
# 使用Anova()进行重复测量方差分析,并启用球形检验
res <- Anova(mlm_model, idata = time_info, 
             idesign = ~Time, type = "III")

# 查看结果
summary(res, multivariate = FALSE)
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##             Sum Sq num Df Error SS den Df  F value    Pr(>F)    
## (Intercept) 914.53      1  2.53170      7 2528.623 3.221e-10 ***
## Time          2.96      3  0.26182     21   79.141 1.304e-11 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Mauchly Tests for Sphericity
## 
##      Test statistic   p-value
## Time        0.06273 0.0082069
## 
## 
## Greenhouse-Geisser and Huynh-Feldt Corrections
##  for Departure from Sphericity
## 
##       GG eps Pr(>F[GG])    
## Time 0.52827  5.368e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##         HF eps   Pr(>F[HF])
## Time 0.6573076 2.890609e-08

该函数会直接给出方差分析的结果以及球对称检验的结果。

Mauchly’s W = 0.06273,P<0.001,拒绝球对称假设。

此时你可以查看GG法或HF法校正的结果,Greenhouse-Geisser法校正后的球对称系数ε=0.52827,Huynh-Feldt法校正后的球对称系数ε=0.6573076,本次两个校正结果的P值均小于0.05,因此可认为不同时间点的血糖值有差别。

unsetunset两因素重复测量unsetunset

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

将手术要求基本相同的15名患者随机分3组,在手术过程中分别采用A、B、C三种麻醉诱导方法,在T0(诱导前)、T1、T2、T3、T4五个时相测量患者的收缩压,试进行方差分析。

代码语言:javascript
复制
data12_3 <- foreign::read.spss("./datasets/例12-03.sav",to.data.frame = T
                               ,reencode = "gbk")
## re-encoding from gbk

str(data12_3)
## 'data.frame':    15 obs. of  7 variables:
##  $ No   : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ group: Factor w/ 3 levels "A","B","C": 1 1 1 1 1 2 2 2 2 2 ...
##  $ t0   : num  120 118 119 121 127 121 122 128 117 118 ...
##  $ t1   : num  108 109 112 112 121 120 121 129 115 114 ...
##  $ t2   : num  112 115 119 119 127 118 119 126 111 116 ...
##  $ t3   : num  120 126 124 126 133 131 129 135 123 123 ...
##  $ t4   : num  117 123 118 120 126 137 133 142 131 133 ...
##  - attr(*, "variable.labels")= Named chr [1:7] "序号" "组别" "" "" ...
##   ..- attr(*, "names")= chr [1:7] "No" "group" "t0" "t1" ...
head(data12_3)
##   No group  t0  t1  t2  t3  t4
## 1  1     A 120 108 112 120 117
## 2  2     A 118 109 115 126 123
## 3  3     A 119 112 119 124 118
## 4  4     A 121 112 119 126 120
## 5  5     A 127 121 127 133 126
## 6  6     B 121 120 118 131 137

数据一共7列,第1列是患者编号,第2列是诱导方法(3种),第3-7列是5个时间点的血压。

car::Anova的实现方式如下(W = 0.29307):

代码语言:javascript
复制
# 建立多元线性模型
mlm_model <- lm(cbind(t0,t1,t2,t3,t4) ~ group, data = data12_3)
# 定义组内因子
time_info <- data.frame(Time=factor(c("t0", "t1", "t2", "t3", "t4"),
                                    levels = c("t0", "t1", "t2", "t3", "t4")))
# 使用Anova()进行重复测量方差分析,并启用球形检验
res <- Anova(mlm_model, idata = time_info, idesign = ~Time, type = "III")
# # 查看结果
summary(res, multivariate = FALSE)
## 
## Univariate Type III Repeated-Measures ANOVA Assuming Sphericity
## 
##             Sum Sq num Df Error SS den Df   F value    Pr(>F)    
## (Intercept) 358083      1   946.48     12 4539.9699 < 2.2e-16 ***
## group          912      2   946.48     12    5.7829   0.01743 *  
## Time           475      4   263.12     48   21.6832 2.875e-10 ***
## group:Time     838      8   263.12     48   19.1006 1.621e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Mauchly Tests for Sphericity
## 
##            Test statistic p-value
## Time              0.29307 0.17766
## group:Time        0.29307 0.17766
## 
## 
## Greenhouse-Geisser and Huynh-Feldt Corrections
##  for Departure from Sphericity
## 
##             GG eps Pr(>F[GG])    
## Time       0.67869  1.334e-07 ***
## group:Time 0.67869  4.263e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
##              HF eps   Pr(>F[HF])
## Time       0.896371 2.071291e-09
## group:Time 0.896371 2.041727e-11

Mauchly’s W = 0.29307,p=0.17766>0.05,符合球对称假设。

结论:

  • 不同麻醉诱导方法存在组间差别(F=5.783,P<0.05),
  • 患者的收缩压在不同的诱导方法下,不同诱导时相变化的趋势不同(F=19.101,p<0.01)

如果要进行重复测量数据的的多重检验,请参考R语言重复测量方差分析及多重检验


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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • unsetunset单因素重复测量unsetunset
  • unsetunset两因素重复测量unsetunset
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档