Realizar 2 pruebas t de muestra

Tengo la media, el desarrollo estándar y la n de la muestra 1 y la muestra 2: las muestras se toman de la población de la muestra, pero se miden en diferentes laboratorios.

n es diferente para la muestra 1 y la muestra 2. Quiero hacer una prueba t de dos colas ponderada (teniendo en cuenta n).

Intenté usar el módulo scipy.stat creando mis números con np.random.normal , ya que solo toma datos y no valores estadísticos como mean y std dev (¿hay alguna forma de usar estos valores directamente)? Pero no funcionó, ya que las matrices de datos deben ser del mismo tamaño.

Cualquier ayuda sobre cómo obtener el valor de p sería muy apreciada.

Si tiene los datos originales como arrays a y b , puede usar scipy.stats.ttest_ind con el argumento equal_var=False :

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

Si solo tiene las estadísticas de resumen de los dos conjuntos de datos, puede calcular el valor de t utilizando scipy.stats.ttest_ind_from_stats (agregado a scipy en la versión 0.16) o de la fórmula ( http://en.wikipedia.org/wiki/ Welch% 27s_t_test ).

El siguiente script muestra las posibilidades.

 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 = %gp = %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 = %gp = %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 = %gp = %g" % (tf, pf)) 

La salida:

 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 

Utilizando una versión reciente de Scipy 0.12.0, esta funcionalidad está incorporada (y de hecho opera en muestras de diferentes tamaños). En scipy.stats la función ttest_ind realiza la prueba t de Welch cuando la bandera equal_var se establece en False .

Por ejemplo:

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