我正在尝试使用代谢组学数据创建火山图。 P值是使用 scipy.statsrankums 函数获得的。看来 p 值是重复的或四舍五入的。 我的数据框包含 lo2fc 值,我正在尝试添加以这种方式计算的 pvalues:
from scipy.stats import ranksums
groupA = subset_filter.iloc[:,4:7].values
groupB = subset_filter.iloc[:,7:10].values
# #Wilcoxon test using ranksums function
test = ranksums(groupA1,groupB2, axis=1)
假设计算这些组上的所有行(12k+)。即使值不同,它也会给我重复的 pvalue 值。
ranksums(groupA1, groupB2, axis=1)
和
ranksums
是二维的,
groupA1
将对 groupB2
和 groupA1
的相应行执行 groupB2
测试。
import numpy as np
from scipy import stats
rng = np.random.default_rng(8542454925621)
x = rng.random(size=(4, 10))
y = rng.random(size=(4, 15))
res = stats.ranksums(x, y, axis=1).pvalue
ref = [stats.ranksums(xi, yi).pvalue for xi, yi in zip(x, y)]
np.testing.assert_allclose(res, ref) # passes
如果函数产生重复的 p 值,则不太可能是因为函数行为不当。请注意,ranksums 统计量基于观察值的等级,而不是值本身,因此如果样本只有几个观察值,则只有少数唯一的统计值,因此也只有少数唯一的 p 值。
x = rng.random(size=(1000, 10))
y = rng.random(size=(1000, 15))
p = stats.ranksums(x, y, axis=1).pvalue
len(np.unique(p)) # 54