如何计算两个浮点数列表的P值?

17

我有一些浮点数列表,例如[1.33,2.555,3.2134,4.123123]等等,这些列表是某些东西的平均频率。我如何证明两个列表不同?我考虑计算p值。是否有函数可以做到这一点?我查阅了scipy文档,但无法确定要使用哪个函数。

有人能给些建议吗?


你的意思是像t-test吗?是的,在scipy中有这样一个函数。 - Cory Kramer
哦,谢谢你指引我正确的方向。我会尝试其中一个。 - YKY
1
我不确定p值是否是您要找的。不仅t检验,还有其他各种方法,例如scipy.stats.spearmanrscipy.stats.mannwhitneyu也提供p值。因此,当您在统计学中进行假设检验时,p值可以帮助您确定结果的显著性。 - Zero
请查看以下链接以了解如何使用NumPy计算统计t检验:https://dev59.com/KHE95IYBdhLWcg3wadKq - Sergio Martinez
1个回答

32

假设你有一个浮点数列表如下:

>>> data = {
...     'a': [0.9, 1.0, 1.1, 1.2],
...     'b': [0.8, 0.9, 1.0, 1.1],
...     'c': [4.9, 5.0, 5.1, 5.2],
... }

显然,ab非常相似,但两者都与c不同。

您可能想要进行两种比较。

  1. 成对比较: a是否类似于b? a是否类似于c? b是否类似于c?
  2. 组合比较: abc是否来自同一组?(这通常是一个更好的问题

前者可以使用独立的t检验来实现,如下所示:

>>> from itertools import combinations
>>> from scipy.stats import ttest_ind
>>> for list1, list2 in combinations(data.keys(), 2):
...     t, p = ttest_ind(data[list1], data[list2])
...     print list1, list2, p
...
a c 9.45895002589e-09
a b 0.315333596201
c b 8.15963804843e-09

这提供了相关的p值,并意味着ac不同,bc不同,但ab可能相似。
后者可以通过以下方式使用单因素方差分析来实现:
>>> from scipy.stats import f_oneway
>>> t, p =  f_oneway(*data.values())
>>> p
7.959305946160327e-12

p 值表明 abc 不太可能来自同一总体。


感谢您抽出时间向我解释。我进行了一些阅读,似乎我需要使用scipy.stats.chi2_contingency函数,因为我正在比较来自两个独立总体的均值。这是正确的吗? - YKY
1
不是使用 chi2 检验来测试数据集的频率计数是否相关吗?如果您的数组值是浮点数而不是整数,则绝对不要使用 chi2_contingency。您需要使用 ttest_ind。 - S Anand
谢谢。我会尝试一下。另外,为什么 chi2 函数不能处理浮点数? - YKY
2
@YKY chi2 用于比较期望频率和实际频率。频率始终为整数,而不是浮点数。这只是一个简单的测试,我们可以使用它来检查是否应用了错误的分析方法。如果我们将 chi2 应用于浮点数,则应用了错误的技术,因为频率不能是浮点数。 - S Anand

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接