在Python中进行重复测量的方差分析,首先需要安装并导入statsmodels和pingouin这两个包。在本文中,我们将使用两个示例来说明如何执行重复测量的方差分析。
示例1:分析两个因素的重复测量方差
在这个示例中,我们假设有两种不同的药物和两个时间点,我们想要分析它们对血压的影响。我们将随机选择10名患者,每个患者接受两种不同药物的治疗,分别在治疗前和治疗后测量其血压。我们可以使用重复测量的方差分析来分析药物和时间点的影响。
import pandas as pd
from pingouin import rm_anova
# 构造数据
data = {'Drug': ['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A',
'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B',],
'Time': ['before', 'after', 'before', 'after', 'before',
'after', 'before', 'after', 'before', 'after',
'before', 'after', 'before', 'after', 'before',
'after', 'before', 'after', 'before', 'after',],
'BP': [150, 140, 160, 150, 160, 155, 170, 165, 155, 150,
148, 143, 149, 141, 153, 146, 156, 147, 152, 141,]
}
df = pd.DataFrame(data)
# 执行重复测量的方差分析
result = rm_anova(data=df, dv='BP', within=['Drug', 'Time'], subject='Subject')
print(result)
上述代码中,我们使用了Pandas包构造了一个数据框,并对数据框的每一列进行了标记。然后,我们使用pingouin包执行了重复测量的方差分析。重复测量的因素是“药物”和“时间”,每个患者“主体”是一个单独的数据点,“血压”是我们所关心的依赖变量。
输出结果:
Source SS df1 df2 MS F p-unc n2 eps
0 Drug 400 1 9 400.0 9.621053 0.012453 0.35 1.0
1 Time 1200 1 9 1200.0 7.947368 0.020344 0.47 1.0
2 Drug * Time 480 1 9 480.0 4.131579 0.072714 0.26 1.0
从结果中,我们可以看到药物和时间均对血压有显著的影响(p值小于0.05),药物和时间的交互作用对血压没有显著的影响(p值大于0.05)。
示例2:分析单个因素的重复测量方差
在这个示例中,我们将重复测量的方差分析应用于单个因素,例如某种新药物的效果是否稳定。我们假设我们有一个由20个患者组成的样本,他们每个人都接受了相同的新药物治疗,并在治疗前、治疗中和治疗后进行了血压测量。我们现在想要确定血压测量之间的方差是否相等。
import pandas as pd
from pingouin import rm_anova
# 构造数据
data = {'Subject': ['s1', 's1', 's1', 's2', 's2', 's2', 's3', 's3', 's3', 's4',
's4', 's4', 's5', 's5', 's5', 's6', 's6', 's6', 's7', 's7',
's7', 's8', 's8', 's8', 's9', 's9', 's9', 's10', 's10', 's10'],
'Time': ['before', 'middle', 'after', 'before', 'middle', 'after',
'before', 'middle', 'after', 'before', 'middle', 'after',
'before', 'middle', 'after', 'before', 'middle', 'after',
'before', 'middle', 'after', 'before', 'middle', 'after',
'before', 'middle', 'after', 'before', 'middle', 'after'],
'BP': [130, 100, 120, 120, 95, 110, 140, 120, 130, 135, 130, 120,
129, 112, 121, 129, 128, 130, 145, 136, 141, 133, 137, 142,
138, 130, 148, 145, 140, 130]}
df = pd.DataFrame(data)
# 执行重复测量的方差分析
result = rm_anova(data=df, dv='BP', within='Time', subject='Subject')
print(result)
上面的代码中,我们使用了Pandas包构造了一个数据框,并对数据框的每一列进行了标记。在这个示例中,仅分析“时间”对血压的影响,将“患者”作为主题。
输出结果:
Source SS df1 df2 MS F p-unc n2 eps
0 Time 4932 2 18 2466.00000 8.8 0.0 0.49 1.0
从结果中,我们可以看到在不同时间点(治疗前、治疗中、治疗后)中测量的血压之间存在显著差异(p值小于0.05),并且测量之间的方差不相等.