在scipy.stats.kruskal中使用类似于R cran kruskal.test的组

时间:2016-02-08 18:01:19

标签: python r scipy statistics

我试图用Python(scipy)替换Python脚本中的一些rpy2代码。在这种情况下,我需要用(Python:kruskal.test())替换Kruskal-Wallis测试(R:scipy.stats.kruskal)。

scipy.stats.kruskal仅在比较整数/浮点数时返回类似的H统计量和P值。但是,我在应用表示为字符串的组时遇到一些困难。

以下是数据的子样本:

y = [4.33917022422, 2.96541899883, 6.70475220836, 9.19889096119, 2.14087398016,
     5.39520023918, 1.58443224287, 3.59625224078, 4.01998599966, 2.58058624352]
x = ['High_O2', 'High_O2', 'High_O2', 'High_O2', 'Low_O2',
      'Low_O2',  'Low_O2',  'Low_O2',  'Mid_O2',  'Mid_O2']

在R中,只需键入:

kruskal.test(y,as.factor(x))

使用scipy(0.17)在Python(2.7)中做同样的事情:

from scipy import stats
stats.kruskal(y,x)

然而,当使用scipy时,我得到非常低的p值(p<e-07)和相当高的H统计量(26),这是不正确的。我尝试将x列表替换为{0,1,2}但没有任何改进。

如何告诉scipy在排名期间将x视为群组?

2 个答案:

答案 0 :(得分:2)

传递给public class myTableEntity { [Key, Column(Order=0)] public int foo {get; set;} [Key, Column(Order=1)] public int bar {get; set;} } 的每个非关键字参数都被视为一组独立的y值。通过将scipy.stats.kruskal作为参数之一传递,x会尝试将您的标签字符串视为第二组y值。字符串将被转换为NaN(应该引发kruskal)。

相反,您需要按标签对RuntimeWarning值进行分组,然后将它们作为单独的输入数组传递给y。例如:

kruskal

答案 1 :(得分:0)

旧帖子,但值得一个更简单的答案!

#!pip install pingouin

from pingouin import kruskal

kruskal(dataset, dv='y', between='x')