首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解释scipy.stats.ttest_ind的输出?

如何解释scipy.stats.ttest_ind的输出?
EN

Stack Overflow用户
提问于 2018-03-30 22:20:46
回答 1查看 9.3K关注 0票数 3

我有两组噪声样本--我想确定它们是否有本质上的不同。我计划对他们的均值进行双侧t检验,并查看p值。

以前的答案(例如How to calculate the statistics "t-test" with numpy)建议使用scipy提供的ttest_ind,即https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.ttest_ind.html

但我不明白如何解释这些结果。

如果您看到示例,则随机值具有相同均值的情况下的p值为0.78849443369564776

代码语言:javascript
复制
>>> rvs1 = stats.norm.rvs(loc=5,scale=10,size=500)
>>> rvs2 = stats.norm.rvs(loc=5,scale=10,size=500)
>>> stats.ttest_ind(rvs1,rvs2)
(0.26833823296239279, 0.78849443369564776)

对于随机值具有不同均值和标准差的情况,p值是0.34744170334794122

代码语言:javascript
复制
>>> rvs5 = stats.norm.rvs(loc=8, scale=20, size=100)
>>> stats.ttest_ind(rvs1, rvs5)
(-1.4679669854490653, 0.14263895620529152)
>>> stats.ttest_ind(rvs1, rvs5, equal_var = False)
(-0.94365973617132992, 0.34744170334794122)

似乎我们永远不会得到低于0.1的p值并拒绝接受假设,即使在rv明显来自具有不同均值的分布的情况下。

这里肯定有我遗漏了什么,但是经过这么多RTFMing,我不知道它是什么……

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-30 22:42:59

您的示例rvs1rvs5有很多重叠。看看他们的直方图:

代码语言:javascript
复制
In [83]: import numpy as np

In [84]: import matplotlib.pyplot as plt

In [85]: from scipy import stats

In [86]: np.random.seed(12345)

In [87]: rvs1 = stats.norm.rvs(loc=5, scale=10, size=500)

In [88]: rvs5 = stats.norm.rvs(loc=8, scale=20, size=100)

直方图:

代码语言:javascript
复制
In [91]: plt.hist(rvs1, bins=15, color='c', edgecolor='k', alpha=0.5)
Out[91]: 
(array([ 11.,   8.,  23.,  59.,  70.,  80.,  76.,  75.,  47.,  29.,  15.,
          3.,   1.,   2.,   1.]),
 array([-21.4440949 , -17.06280322, -12.68151153,  -8.30021984,
         -3.91892815,   0.46236353,   4.84365522,   9.22494691,
         13.6062386 ,  17.98753028,  22.36882197,  26.75011366,
         31.13140535,  35.51269703,  39.89398872,  44.27528041]),
 <a list of 15 Patch objects>)

In [92]: plt.hist(rvs5, bins=15, color='g', edgecolor='k', alpha=0.5)
Out[92]: 
(array([  1.,   0.,   0.,   2.,   5.,  10.,  15.,  11.,  16.,  18.,   9.,
          4.,   3.,   4.,   2.]),
 array([-50.98686996, -43.98675863, -36.98664729, -29.98653596,
        -22.98642462, -15.98631329,  -8.98620195,  -1.98609062,
          5.01402071,  12.01413205,  19.01424338,  26.01435472,
         33.01446605,  40.01457739,  47.01468872,  54.01480006]),
 <a list of 15 Patch objects>)

在这种情况下,p值约为0.16:

代码语言:javascript
复制
In [93]: stats.ttest_ind(rvs1, rvs5, equal_var=False)
Out[93]: Ttest_indResult(statistic=-1.4255662967967209, pvalue=0.15678343609588596)

如果你把比例变小,或者增加样本分布平均值的差值,你会发现p值很快就变小了。例如,

代码语言:javascript
复制
In [110]: np.random.seed(12345)

In [111]: rvsa = stats.norm.rvs(loc=5, scale=4, size=500)

In [112]: rvsb = stats.norm.rvs(loc=8, scale=6.5, size=100)

In [113]: stats.ttest_ind(rvsa, rvsb, equal_var=False)
Out[113]: Ttest_indResult(statistic=-4.6900889904607572, pvalue=7.3811906412170361e-06)

如果增加样本的大小,您还会看到较低的p值。例如,这里我将rvs1rvs5的大小分别增加到2000和1000,p值大约是4e-6:

代码语言:javascript
复制
In [120]: np.random.seed(12345)

In [121]: rvs1 = stats.norm.rvs(loc=5, scale=10, size=2000)

In [122]: rvs5 = stats.norm.rvs(loc=8, scale=20, size=1000)

In [123]: stats.ttest_ind(rvs1, rvs5, equal_var=False)
Out[123]: Ttest_indResult(statistic=-4.6093457457907219, pvalue=4.4518966751259737e-06)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49576153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档