如何在Python中进行重复测量的方差分析

  • Post category:Python

重复测量的方差分析(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]