Pruebe 80,000+ conjuntos de observaciones simuladas con distribución normal en contra de una hipótesis nula.
Necesito generar una muestra aleatoria de tamaño 200 (n=200) a partir de una distribución normal con una varianza de 1 y un mu verdadero (promedio) que especifico; luego, pruebo la muestra contra una hipótesis: mu <= 1. Necesito hacer esto para cada uno de los 400 theta verdaderos posibles, y para cada theta verdadero necesito replicarlo 200 veces.
Ya hice esto para n=1, pero me doy cuenta de que mi enfoque no es replicable. Para cada uno de los 400 thetas, ejecuté lo siguiente:
sample_r200n1_t1=normal(loc=-1, scale=1, size=200)
sample_r200n1_t2=normal(loc=-0.99, scale=1, size=200)
sample_r200n1_t3=normal(loc=-0.98, scale=1, size=200)
sample_r200n1_t4=normal(loc=-0.97, scale=1, size=200)
sample_r200n1_t5=normal(loc=-0.96, scale=1, size=200)
... y así sucesivamente hasta loc = 3
Luego, probé cada elemento en el arreglo generado por separado. Sin embargo, ese enfoque requeriría que generara decenas de miles de muestras, generara el promedio asociado a cada una y luego probara ese promedio contra mis criterios. Esto tendría que hacerse 80,000 veces (y además, necesito hacer esto para varios tamaños diferentes de n). Claramente, este no es el enfoque correcto a tomar.
¿Cómo puedo lograr los resultados que estoy buscando? ¿Existe alguna manera, por ejemplo, de generar un arreglo de promedios de muestras y colocar esos promedios en un arreglo, uno por cada theta? Luego podría probar como antes. ¿O existe otra forma?
davy.ai
Sí, hay un enfoque mejor para lograr el resultado deseado. En lugar de generar muestras individuales para cada theta, podemos generar una matriz de medias para cada theta, que luego podemos probar con nuestro criterio. Aquí hay una posible forma de implementar este enfoque usando Python:
np.random.normal
:Esto genera una matriz de tamaño (400, 200), donde cada fila corresponde a un valor diferente de
mu_true
. Reshapeamos el arreglo unidimensionalmu_true
a un vector de columna de forma (400, 1) para transmitirlo a través de las filas de la matriz.np.mean
:Esto genera una matriz de tamaño (400,), donde cada elemento corresponde a la media de las 200 muestras generadas para un valor dado de
mu_true
.mu <= 1
utilizando una prueba t unilateral con un nivel de significancia de 0.05:Esto genera una matriz booleana de tamaño (400,), donde cada elemento corresponde al rechazo (o aceptación) de la hipótesis nula para un valor dado de
mu_true
. Utilizamosscipy.stats.ttest_1samp
para calcular la estadística t y el valor p para cada media de muestra con respecto a la hipótesis nulamu = 1
.La ventaja de este enfoque es que genera todas las muestras y calcula sus medias en un solo paso, lo cual es más eficiente que generar cada muestra por separado. Además, nos permite probar las medias contra la hipótesis de una manera vectorizada, lo cual también es más eficiente que probar cada muestra individualmente.