サンプル1とサンプル2の平均、標準偏差、nがあります。サンプルはサンプル母集団から取得されますが、別のラボで測定されます。
nはサンプル1とサンプル2で異なります。加重(nを考慮に入れる)両側t検定を実行します。
scipy.stat モジュールを使用して、np.random.normal
で数値を作成してみました。これは、データのみを取得し、meanやstd devなどの統計値を取得しないためです(これらの値を直接使用する方法はありますか? )。しかし、データ配列は同じサイズでなければならないため、機能しませんでした。
P値を取得する方法についてのヘルプは、高く評価されます。
元のデータが配列a
およびb
である場合、引数scipy.stats.ttest_ind
で equal_var=False
を使用できます。
t, p = ttest_ind(a, b, equal_var=False)
2つのデータセットの要約統計しかない場合は、 scipy.stats.ttest_ind_from_stats
(バージョン0.16のscipyに追加)を使用して、または式( http ://en.wikipedia.org/wiki/Welch%27s_t_test )。
次のスクリプトは可能性を示しています。
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
Scipy 0.12.0の最近のバージョンを使用して、この機能が組み込まれています(実際、さまざまなサイズのサンプルで動作します)。 scipy.stats
では、フラグttest_ind
がFalse
に設定されている場合、関数 equal_var
がウェルチのt検定を実行します。
例えば:
>>> 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])