重复测量的方差分析(Repeated Measures ANOVA)是分析在相同被试下进行多次测量数据的一种方法,其主要用于确定不同测量时间点之间的统计显著性和差异。在Python中进行重复测量的方差分析需要借助相关的统计库和函数,下面是该分析过程的完整攻略:
Step1:导入必要的库和数据
import pandas as pd
import pingouin as pg #统计工具包
from statsmodels.stats.anova import AnovaRM #数据分析包
#读入数据
data = pd.read_csv('data.csv')
Step2:数据预处理
对数据进行必要的整理,比如去除缺失值,设置主体因素和时间因素等,顺序一定不能错。
#去除缺失值
data = data.dropna()
#设置主体因素和时间因素
sub = 'subject'
time = 'time'
#将数据从长格式变为宽格式
data_wide = data.set_index([sub, time]).unstack(time)
Step3:进行方差分析
使用pingouin库和AnovaRM函数进行数据分析。其中,dv表示依变量的名称,subject表示主体因素,within表示时间因素,effect_size为效果量,返回结果包括F值、p值、df值和效果量等。
#pingouin库方法
pg.rm_anova(data=data, dv='score', subject=sub, within=time, effect_size='eta-squared')
#statsmodels库方法
aovrm = AnovaRM(data=data_wide, depvar='score', subject=sub, within=[time])
res = aovrm.fit()
print(res.summary())
Step4:进行后续分析
进行方差分析后,可以根据需要进行差异检验、方差分析的结果可视化等操作,以得到更全面的结果和结论。
#差异检验
pairwise = pg.pairwise_ttests(data=data, dv='score', subject=sub, within=time)
#结果可视化
pg.plot_rm(data=data, dv='score', subject=sub, within=time, kind='line',
figsize=(8,4), legend=False, ylim=(0,10))
示例1:重复测量方差分析
假设一个研究团队想要评估不同治疗方法对脑卒中患者恢复的影响。研究设计是在治疗前、治疗后1周、治疗后1个月和治疗后3个月对每位患者进行评估,得到以下数据。
subject time score
1 pre 5.0
1 week1 6.0
1 month1 8.0
1 month3 9.0
2 pre 5.5
2 week1 6.5
2 month1 7.0
2 month3 8.0
3 pre 4.0
3 week1 4.5
3 month1 6.0
3 month3 7.0
使用以上攻略即可实现该数据的重复测量方差分析,据此得到结果和结论。
示例2:Repeated Measures ANOVA的检验
利用pingouin.repeated_measures.anova
函数进行检验如下所示,可以得到对应的统计结果和相关信息。
pg.rm_anova(data=data, dv='pain', within=['Congruency', 'Stimulus_Type'], subject='Subject', detailed=True)
可以得到类似如下的结果输出:
Source ddof1 ddof2 F p-unc ... np2 sphericity W-GG-corr np2_G
0 Congruency 1 14 3.5249 0.079022 ... 0.2003 0.6554 1.000000 0.225435
1 Stimulus_Type 1 14 13.8820 0.002489 ... 0.4979 0.6554 0.863563 0.531411
2 Congruency * Stimulus 1 14 2.1316 0.162539 ... 0.1322 0.6554 0.502222 0.187626
3 Within Error 14 196 NaN NaN ... NaN NaN NaN NaN
4 Subject(Error) 15 NaN NaN NaN ... NaN NaN NaN NaN
5 Congruency * Stimulus * Subject(Error) 15 NaN NaN NaN ... NaN NaN NaN NaN
[6 rows x 10 columns]