Как распаковать результаты от scipy ttest_1samp?
Ttest_1samp от Scipy возвращает кортеж со статистикой t и двусторонним p-значением.
Пример:
ttest_1samp([0,1,2], 0) = (array(1.7320508075688774), 0.22540333075851657)
Но меня интересует только значение t-критерия (t-статистика), которое я смог получить только с помощью [0].ravel()[0]
Пример:
ttest_1samp([0,1,2], 0)[0].ravel()[0] = 1.732
Тем не менее, я вполне уверен, что должен быть более питонический способ сделать это. Каков наилучший способ получить поплавок из этого вывода?
2 ответа
Чтобы разъяснить ответ @miradulo, если вы используете более новую версию scipy
(версия 0.14.0 или более поздняя), вы можете ссылаться на statistic
поле возвращенного namedtuple
, Ссылка на этот способ является Pythonic и упрощает код, так как нет необходимости запоминать конкретные индексы.
Код
res = ttest_1samp(range(3), 0)
print(res.statistic)
print(res.pvalue)
Выход
1.73205080757
0.225403330759
Из исходного кодаscipy.stats.ttest_1samp
не возвращает ничего, кроме namedtuple
Ttest_1sampResult
со статистикой и р-значением. Следовательно, вам не нужно использовать .ravel
- вы можете просто использовать
scipy.stats.ttest_1samp([0,1,2], 0)[0]
получить доступ к статистике.
Примечание. Из дальнейшего изучения исходного кода становится ясно, что этот именованный кортеж начал возвращаться только в выпуске 0.14.0. В версии 0.13.0 и более ранних версиях кажется, что возвращается массив с нулевым диммером (исходный код), который для всех намерений и целей может действовать как простое число, как упомянуто BrenBarn.
Вы можете получить результаты в желаемых форматах следующим образом:
print ("The t-statistic is %.3f and the p-value is %.3f." % stats.ttest_1samp([0,1,2], 0))
Выход:
T-статистика равна 1.732, а p-значение равно 0.225.