Подтвердить что ты не робот

Выполните 2 образца t-теста

У меня есть среднее значение, std dev и n образца 1 и образец 2 - образцы берутся из выборки, но измеряются в разных лабораториях.

n отличается для образца 1 и образца 2. Я хочу сделать взвешенный (учитывающий n) двухсторонний t-тест.

Я попытался использовать модуль scipy.stat, создав свои номера с помощью np.random.normal, так как он принимает только данные, а не значения статистики, такие как mean и std dev (есть ли способ использовать эти значения напрямую). Но это не сработало, так как массивы данных должны быть одинакового размера.

Любая помощь в том, как получить значение p, будет высоко оценена.

4b9b3361

Ответ 1

Если у вас есть исходные данные в виде массивов a и b, вы можете использовать scipy.stats.ttest_ind с аргументом equal_var=False:

t, p = ttest_ind(a, b, equal_var=False)

Если у вас есть только сводная статистика двух наборов данных, вы можете вычислить значение t, используя scipy.stats.ttest_ind_from_stats (добавленный в scipy в версии 0.16) или из формулу (http://en.wikipedia.org/wiki/Welch%27s_t_test).

Ниже показано script.

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))

Выход:

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

Ответ 2

Используя недавнюю версию Scipy 0.12.0, эта функциональность встроена (и фактически работает с образцами разных размеров). В scipy.stats функция ttest_ind выполняет t-тест equal_var когда флаг equal_var установлен в False.

Например:

>>> 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])

Ответ 3

Как я могу получить интервал предсказания с определенной уверенностью в том же примере (где у нас есть неравные независимые размеры выборок), я пытался использовать comparemeans с tconfit_diff но он не работает, если размер выборки отличается.