我试图用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
视为群组?
答案 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')