我想在我的数据集中使用单向重复测量方差分析来测试5名患者的值在测量的3天内是否不同。
我从statmodels .stats.anova使用AnovaRM,结果是一个' anovareresults '对象。我可以看到print()
函数的p值,但我不知道如何将它从这个对象中分离出来。
你知道吗?我的代码是否正确,我想测试什么?
Thanks in advance
day1 = [1,2,3,4,5]
day2 = [2,4,6,8,10]
day3 = [1.5,2.5,3.5,4.5,5.5]
days_list = [day1,day2,day3]
df = pd.DataFrame({'patient': np.repeat(range(1, len(days_list[0])+1), len(days_list)),
'group': np.tile(range(1, len(days_list)+1), len(days_list[0])),
'score': [x[y] for y in range(len(days_list[0])) for x in days_list]})
print(AnovaRM(data=df, depvar='score', subject='patient', within=['group']).fit())
我假设您正在寻找的p
值是当您在问题中运行代码时Pr > F
列中显示的数字。如果您将测试结果分配给一个变量,则可以通过anova_table
属性访问底层数据框:
results = AnovaRM(data=df, depvar='score', subject='patient', within=['group']).fit()
print(results.anova_table)
给了:
F Value Num DF Den DF Pr > F
group 15.5 2.0 8.0 0.00177
只要访问Pr > F
列的第0个成员,就可以了:
print(results.anova_table["Pr > F"][0])
得到答案:
0.0017705227840260451
我想我找到办法了!
a=AnovaRM(data=df, depvar='score', subject='patient', within=['group']).fit().summary().as_html()
pd.read_html(a, header=0, index_col=0)[0]['Pr > F'][0]
希望能帮到别人!