8 votos

Generando números aleatorios de una distribución t.

¿Cómo puedo generar números aleatorios que sigan una distribución de estudiante-t?

De varias fuentes entiendo que esto se puede hacer usando una muestra aleatoria de tamaño $n$ extraída de una población distribuida normalmente, de la siguiente manera:

$$ t = \frac {(x - m)} {(s/\sqrt n)} $$

Donde $x$ es la media de la muestra, $m$ es la media de la distribución normal (¿se puede simplemente usar la distribución normal estándar, así que $m=0$?), y $s$ es la desviación estándar de la muestra.

Los grados de libertad de la distribución de estudiante-t serán entonces $n-1$.

¿Entiendo correctamente que para generar un valor aleatorio de estudiante-t con $f$ grados de libertad, primero debo generar $f+1$ valores distribuidos normalmente (es decir, normal estándar), y luego calcular la media ($x$) y la desviación estándar ($s$) de estos y aplicar la fórmula anterior? ¿Y si repito esto muchas veces, los valores aleatorios resultantes se aproximarán a una distribución de estudiante-t con $f$ grados de libertad?

Intenté esto en Excel usando una macro que usa la fórmula anterior y otra macro que genera Gaussianas aleatorias (que funciona, lo probé) pero los valores aleatorios resultantes no parecen estar completamente distribuidos de forma estudiante-t. Por ejemplo, con 6 grados de libertad, la varianza de 10,000 valores aleatorios es aproximadamente $1.7$, mientras que debería ser $6/(6-2) = 1.5$.

9voto

Patrick Puntos 183

Dado un generador de variables aleatorias gaussianas estándar i.i.d., se pueden generar variables aleatorias distribuidas $t_k$ (con cualquier grado de libertad entero positivo $k$) utilizando la relación:

$$Y=\frac{X_{k+1}}{\sqrt{k^{-1}\sum_{i=1}^k X_i^2}}$$

donde $Y\sim t_k$ y $X_i\sim\text{i.i.d. }\mathcal{N}(0,1),i=1,\ldots,k+1.$

7voto

f1r3br4nd Puntos 762

Tengo una respuesta a la parte práctica de tu pregunta, aunque no exactamente a la teórica.

Existe una función llamada TINV que hace esto directamente. Excepto que solo devuelve números aleatorios t positivos. Puedes superar esa limitación con la siguiente fórmula:

=TINV(RAND(),6)*(RANDBETWEEN(0,1)*2-1)

...puedes reemplazar 6 con el valor que desees para los grados de libertad (DF), y el rand() puede ser reemplazado con cualquier número entre 0 y 1. El resto simplemente garantiza una probabilidad igual de valores negativos y positivos.

6voto

bheklilr Puntos 113

Una forma rápida de generar una variante t, más rápida que el enfoque solo gaussiano para todos, excepto para los grados de libertad más pequeños, es usar el hecho de que una distribución t es una mezcla de Normales, con la distribución de mezcla siendo una distribución gamma invertida en la varianza. Aquí hay un ejemplo en R, donde generamos 1,000,000 variantes t(10) de esta manera y comparamos con la distribución teórica usando la prueba de Kolmogorov-Smirnov ("prueba" por experimento grande!):

> df <- 10
> s2 <- 1/rgamma(1000000, df/2, df/2)
> tv <- rnorm(1000000,0,sqrt(s2))
> 
> ks.test(tv, pt, df=df)

    Prueba Kolmogorov-Smirnov de una muestra

datos:  tv 
D = 6e-04, valor p = 0.8826
hipótesis alternativa: dos lados

Este enfoque también funciona para grados de libertad no enteros, lo cual no lo hace el enfoque solo gaussiano.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X