首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行2样本t检验

执行2样本t检验
EN

Stack Overflow用户
提问于 2014-03-24 21:55:19
回答 2查看 93.6K关注 0票数 28

我有一个样本1和样本2的平均值,标准差dev和n-样本取自样本总体,但由不同的实验室测量。

样本1和样本2的n是不同的。我想做一个加权(考虑n)双尾t检验。

我尝试通过使用np.random.normal创建我的数字来使用scipy.stat模块,因为它只接受数据,而不是像mean和std dev这样的stat值(有什么方法可以直接使用这些值)。但它不起作用,因为数据数组必须具有相同的大小。

任何关于如何获得p值的帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-24 23:15:01

如果原始数据是数组ab,则可以使用带有参数equal_var=Falsescipy.stats.ttest_ind

代码语言:javascript
复制
t, p = ttest_ind(a, b, equal_var=False)

如果您只有两个数据集的汇总统计信息,则可以使用scipy.stats.ttest_ind_from_stats (在版本0.16中添加到scipy中)或通过公式(http://en.wikipedia.org/wiki/Welch%27s_t_test)计算t值。

下面的脚本显示了这些可能性。

代码语言:javascript
复制
from __future__ import print_function

import numpy as np
from scipy.stats import ttest_ind, ttest_ind_from_stats
from scipy.special import stdtr

np.random.seed(1)

# Create sample data.
a = np.random.randn(40)
b = 4*np.random.randn(50)

# Use scipy.stats.ttest_ind.
t, p = ttest_ind(a, b, equal_var=False)
print("ttest_ind:            t = %g  p = %g" % (t, p))

# Compute the descriptive statistics of a and b.
abar = a.mean()
avar = a.var(ddof=1)
na = a.size
adof = na - 1

bbar = b.mean()
bvar = b.var(ddof=1)
nb = b.size
bdof = nb - 1

# Use scipy.stats.ttest_ind_from_stats.
t2, p2 = ttest_ind_from_stats(abar, np.sqrt(avar), na,
                              bbar, np.sqrt(bvar), nb,
                              equal_var=False)
print("ttest_ind_from_stats: t = %g  p = %g" % (t2, p2))

# Use the formulas directly.
tf = (abar - bbar) / np.sqrt(avar/na + bvar/nb)
dof = (avar/na + bvar/nb)**2 / (avar**2/(na**2*adof) + bvar**2/(nb**2*bdof))
pf = 2*stdtr(dof, -np.abs(tf))

print("formula:              t = %g  p = %g" % (tf, pf))

输出:

代码语言:javascript
复制
ttest_ind:            t = -1.5827  p = 0.118873
ttest_ind_from_stats: t = -1.5827  p = 0.118873
formula:              t = -1.5827  p = 0.118873
票数 71
EN

Stack Overflow用户

发布于 2014-03-24 22:58:49

使用Scipy 0.12.0的最新版本,此功能是内置的(并且实际上可以在不同大小的样本上运行)。在scipy.stats中,当标志equal_var设置为False时,ttest_ind函数执行韦尔奇的t检验。

例如:

代码语言:javascript
复制
>>> import scipy.stats as stats
>>> sample1 = np.random.randn(10, 1)
>>> sample2 = 1 + np.random.randn(15, 1)
>>> t_stat, p_val = stats.ttest_ind(sample1, sample2, equal_var=False)
>>> t_stat
array([-3.94339083])
>>> p_val
array([ 0.00070813])
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22611446

复制
相关文章

相似问题

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