转自个人微信公粽号【易学统计】的统计学习笔记:R语言:两因素重复测量方差分析
01 研究问题
- 有研究将14名肥胖者随机分成2组,1组用A种减肥药,另一组用B种减肥药,坚持服药6个月,期间禁止使用任何影响体重的药物,其他情况跟之前保持一致。分别测得0周、8周、16周和24周的体重资料。
- 问题:1.新型减肥药A和现有减肥药B的效果是否不同?2.肥胖者在服药后不同时间体重的变化情况。3.控制因素和时间是否有交互作用?
02 方法说明
- 该研究是对同一观察对象的体重在几个不同的时间点上进行4次测量,由于同一个体的重复测量,其在不同时间点上的结果往往具有很强的相关性,违背了方差分析数据独立性的要求,因此不能采用单因素方差分析,T检验等方法,而要采用重复测量方差分析法。
- 重复测量方差分析要求各个时间点指标变量满足球形假设,根据检验结果判断重复测量设计资料之间是否存在较强的相关性。然后根据球形检验结果选择合适的统计方法和手段。通常用Mauchly方法检验是否满足球形假设,若P>0.05,认为满足,若P<0.05,则不满足。
- 当满足球形假设时,可进行一元方差分析,若不满足,说明重复测量资料之间有较强的相关性。这时候常常进行一元方差分析的校正,用校正后的统计量及P值解释统计结果。或者以多元方差分析为准,通过计算个体内(within-subject)的差异检验不同时间对观测指标的影响,用以分析时间因素对疗效有无效应,时间与研究因素之间有无交互作用。
03 加载数据
04 异常值检验
dt <- read.csv('weight.csv',stringsAsFactors=F)
boxplot(dt$weight~dt$time,boxwex = 0.25,col=c('lightblue'),xlab='time(周)',ylab='weight',main='箱线图')
- 方差分析时,对异常值非常敏感,因此需要检验异常值,采用箱线图对每个内因素各个水平进行检验,本研究数据中没有显著异常值,
05 正态检验
#组内正态检验
shapiro.test(dt$weight[dt$time=='0']) #p值0.2045
shapiro.test(dt$weight[dt$time=='8']) #p值0.2141
shapiro.test(dt$weight[dt$time=='16'])#p值0.051
shapiro.test(dt$weight[dt$time=='24'])#p值0.029
- 采用shapiro-wilk对内因素各水平进行正态检验,P值大于0.05,则数据符合正态分布,如果小于0.05,则不符合正态分布。本例数据基本都符合正态分布假设。
06 球形假设检验
#将dt从数据框转换为矩阵,dt的格式为7行×8列
#8列分别是2个组的4个时间点:
#A1,A2,A3,A4,B1,B2,B3,B4
dt$col <- paste(dt$type,dt$time,sep='.')
dt.dcast <- dcast(dt[,c(1,5,4)],subID~col)
dt.dcast <- as.matrix(dt.dcast)
#进行多元线性回归 (多个因变量)
mlmfit=lm(dt.dcast~1)
####定义数据的列结构
group=factor(rep(c("A","B"), c(4, 4)))
time=ordered(rep(1:4,2))
idata=data.frame(group,time)
#球形检验
mauchly.test(mlmfit,M=~group+time,data=idata)
# P < 0.001
- 本例中球形假设检验结果小于0.05,说明不满足球形假设,因此组内需要以多元方差分析为准,组间采用一元方差分析。
07 方差分析
fit <- aov(weight~time*type+Error(subID/time),data=dt)
summary(fit)
#Error: subID
#Df Sum Sq Mean Sq F value Pr(>F)
#type 1 49 48.7 0.069 0.797
#Residuals 12 8419 701.6
#Error: subID:time
#Df Sum Sq Mean Sq F value Pr(>F)
#time 1 76.13 76.13 9.144 0.0106 *
#time:type 1 1.49 1.49 0.179 0.6801
#Residuals 12 99.90 8.33
with(dt,interaction.plot(time,type,weight,type='b',col=c('red','blue'),pch=1:2))
- aov()函数中time*type表示有各自的主效应,以及二者交互效应。Error()表示误差项,subID代表组间误差,time表示组内误差。
- 返回值的上半部分表示type组间效应,P值大于0.05,说明不同类型的减肥药的减肥效果效果没有显著差异。
-
返回值的下半部分表示time的组内效应,其中time小于0.05,而time*group大于0.05,提示各个时间点的指标变量体重存在差异,即肥胖者在服药后不同时间点体重具有差异,而控制因素对指标变量的影响不会随着时间的变化而变化,二者之间不存在交互作用。可通过下图来看。
以上就是本次分享的内容了。后面还有更多高分统计方法分享,请持续关注哦~
如果您觉得有用,请点赞,转发哦~
更多统计小知识,请关看 公粽号 易学统计
更多阅读
R语言|基于Cox模型pec包深度验证
R语言|中位生存时间列线图绘制
R语言|Cox模型校准度曲线绘制
R语言|中位生存时间列线图绘制
基于Lasso回归筛选变量构建Cox模型并绘制Nomogram
R语言Logistic回归模型验证及Nomogram绘制
如何进行高维变量筛选和特征选择(一)?Lasso回归