如何从Python的AnovaResults对象提取p值及验证重复测量ANOVA代码
问题解答
一、代码是否符合测试需求
你的代码基本符合单因素重复测量ANOVA的要求,数据结构完全满足AnovaRM的输入规范:
- 正确定义了
patient(重复测量的主体,5名患者)、group(重复测量的水平,即3天)、score(因变量)三个核心字段; - 每个患者对应3天的测量值,符合重复测量设计的逻辑。
可以做个小优化:把group列改名为day更直观,避免和“分组”概念混淆,优化后的DataFrame构建代码:
import pandas as pd import numpy as np from statsmodels.stats.anova import AnovaRM day1 = [1,2,3,4,5] day2 = [2,4,6,8,10] day3 = [1.5,2.5,3.5,4.5,5.5] df = pd.DataFrame({ 'patient': np.repeat(range(1, 6), 3), # 5名患者,每人对应3条记录 'day': np.tile([1,2,3], 5), # 3天的标签,重复5次匹配所有患者 'score': np.concatenate([[day1[i], day2[i], day3[i]] for i in range(5)]) })
二、提取AnovaResults中的p值
AnovaRM.fit()返回的AnovaResults对象自带anova_table属性,这是一个存储完整统计结果的DataFrame,直接从中提取p值即可:
# 拟合模型并保存结果 results = AnovaRM(data=df, depvar='score', subject='patient', within=['day']).fit() # 单因素场景下,结果只有一行,提取第一行的Pr > F列即为p值 p_value = results.anova_table['Pr > F'].iloc[0] print(f"重复测量ANOVA的p值: {p_value}")
如果需要查看完整的ANOVA统计表格,直接打印results.anova_table即可:
print(results.anova_table)
内容的提问来源于stack exchange,提问作者EAS
相关产品推荐
相关产品推荐

