首页 > 解决方案 > ttest 和 tukeyhsd 结果不一致

问题描述

我需要使用事后 Tukey 测试对重复测量执行方差分析。

由于我对 python 很陌生,我用下面的例子测试了我的代码。在这里,我只使用了两组,因此可以将结果与配对样本 t 检验进行比较(这些应该导致相同的 p 值和均值差异)。另外,我在 Matlab 中重复了 t 检验和 Tukey 检验(因为我在这里有经验)。

我正在使用方法:statsmodels.stats.multicomp.pairwise_tukeyhsd 和 scipy.stats.ttest_rel 我的原始数据是 pd.dataframe,因此我在示例中也使用了它。

就我而言,python之间存在分歧

  1. p 值:来自 ttest_rel 和 pairwise_tukeyhsd 的值不一致。由 ttest_rel 获得的结果与我在 Matlab 中使用 t-test 或 Tukey 测试获得的结果一致。
  2. meanDiffs: 在 ttest_rel 中是错误的(尽管我不太确定输出参数“统计”是否应该是差异的平均值 - 不过我还没有找到任何其他解释)。它接近平均差但不正确。

来自 ttest_rel 的结果“统计”和来自 pairwise_tukeyhsd 的“p-adj”是否需要额外的分析步骤来分别解释为均值差和 p 值?还是我在这里做错了什么?

我将不胜感激任何反馈!

马里昂

import numpy as np
import pandas as pd 

from scipy.stats import ttest_rel
from statsmodels.stats.multicomp import (MultiComparison, tukeyhsd, pairwise_tukeyhsd)

testData = [10, 12, 8, 9, 16, 13, 12, 13, 9, 15, 8, 14, 10, 13, 8, 15, 13, 12, 10, 11]
groups = [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2]
testList = []

for ne, e in enumerate(testData):
    row = []
    row.append(e)
    row.append(groups[ne])
    testList.append(row)

dfTest = pd.DataFrame(data = testList, 
        columns=["data", "groups"])

d1 = dfTest[dfTest.groups == 1].data.to_numpy()
d2 = dfTest[dfTest.groups == 2].data.to_numpy()
ttestRes = ttest_rel(d1,d2,alternative = 'two-sided')
print(ttestRes)

tukeyResTest = pairwise_tukeyhsd(endog=dfTest['data'], 
                                  groups=dfTest['groups'],alpha=0.05)

print(tukeyResTest)

标签: pythonscipy.stats

解决方案


推荐阅读