将statmodels Tukey hsd保存到Python pandas数据框中。

6
我正在寻找一种将 Tukeyhsd 的结果保存到 pandas 数据框中的方法。请参见以下内容:
import matplotlib.pyplot as plt
import statsmodels.formula.api as smf
import statsmodels.stats.multicomp as multi 

 mcDate = multi.MultiComparison(df['Glucose'], df['Date'])
 Results = mcDate.tukeyhsd()
  print(Results)

    Multiple Comparison of Means - Tukey HSD,FWER=0.05
=============================================
group1 group2 meandiff  lower   upper  reject
---------------------------------------------
  A      B     20.35    7.388   33.312  True 
  A      C     -3.85   -16.812  9.112  False 
  B      C     -24.2   -37.162 -11.238  True 
---------------------------------------------
2个回答

15

我没有访问您的数据,因此无法复制结果。我使用随机数据来展示这个方法是可行的。您只需要在代码中添加Pandas库导入语句和创建数据框的最后一行即可。

import matplotlib.pyplot as plt
import statsmodels.formula.api as smf
import statsmodels.stats.multicomp as multi
import pandas as pd
import numpy as np

# Random Data.
np.random.seed(0)
x = np.random.choice(['A','B','C'], 50)
y = np.random.rand(50)

# DataFrame.
mcDate = multi.MultiComparison(y,x)
Results = mcDate.tukeyhsd()
print(Results)

生成以下表格:

============================================
group1 group2 meandiff  lower  upper  reject
--------------------------------------------
  A      B     0.1506   -0.07  0.3712 False 
  A      C     0.1105  -0.1278 0.3487 False 
  B      C    -0.0401  -0.2865 0.2063 False 
--------------------------------------------

而这就是如何获取数据框:

df = pd.DataFrame(data=Results._results_table.data[1:], columns=Results._results_table.data[0])

print(df)

group1 group2  meandiff   lower   upper  reject
0      A      B    0.1506 -0.0700  0.3712   False
1      A      C    0.1105 -0.1278  0.3487   False
2      B      C   -0.0401 -0.2865  0.2063   False

我自己曾经也为此苦苦挣扎,后来通过审查对象的方法最终找到了解决方案,就像这样:

dir(Results)

这对我不起作用。我收到一个错误消息:“'SimpleTable'对象没有'_results_table'属性”。有没有绕过这个问题的方法? - thentangler

1
作为对@vander答案的更新,以及回应@thentangler的评论,在statsmodels 0.12.1中,表格数据可通过Results.data访问,而不是Results._results_table.data
然后将Results转换为数据框:
df = pd.DataFrame(data=Results.data[1:], columns=Results.data[0])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接