Python 如何解释scipy.stats.ttest_ind的输出?
我有两组嘈杂的样本,我想确定它们是否有实质性的不同。我计划对他们的均值进行双侧t检验,并查看p值 以前的答案(例如)建议使用Python 如何解释scipy.stats.ttest_ind的输出?,python,scipy,Python,Scipy,我有两组嘈杂的样本,我想确定它们是否有实质性的不同。我计划对他们的均值进行双侧t检验,并查看p值 以前的答案(例如)建议使用scipy中的ttest\u ind-即。 但我不明白如何解释这些结果 如果您看到示例,随机值具有相同平均值的情况下的p值为0.78849443369564776 >>> rvs1 = stats.norm.rvs(loc=5,scale=10,size=500) >>> rvs2 = stats.norm.rvs(loc=5,scal
scipy
中的ttest\u ind
-即。
但我不明白如何解释这些结果
如果您看到示例,随机值具有相同平均值的情况下的p值为0.78849443369564776
>>> 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
>>> 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后,我想不出它是什么…您的样本rvs1
和rvs5
重叠了很多。看看他们的直方图:
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)
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>)
直方图:
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)
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值很快变小。比如说,
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值。例如,这里我将rvs1
和rvs5
的大小分别增加到2000和1000,p值约为4e-6:
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)
这些样本rvs直接来自scipy文档。您可能会认为他们会使用示例值来更好地说明函数的操作,但显然不是。如果我有时间,也许我会提交一份文件公关。。。