Estoy interesado en encontrar un método para generar datos correlacionados, no normales. Entonces, idealmente, algún tipo de distribución que tome una matriz de covarianza (o correlación) como parámetro y genere datos que la aproximen. Pero aquí está el truco: el método que estoy tratando de encontrar debería tener la flexibilidad para controlar también su asimetría y / o curtosis multivariante.
Conozco el método de Fleishman y el uso del método de la potencia de las variaciones normales, pero creo que la mayoría de esas extensiones solo permiten al usuario ciertas combinaciones de asimetría marginal y curtosis, dejando la asimetría / curtosis multivariada por ahí. Lo que me preguntaba es si hay un método que ayude a especificar la asimetría multivariada y / o la curtosis, junto con alguna estructura de correlación / covarianza.
Hace aproximadamente un año, tomé un seminario sobre distribuciones de cópula y recuerdo que el profesor mencionó casualmente que mediante el uso de cópulas de vid, uno podría generar datos que son, por ejemplo, simétricos en cada uno de sus marginales 1-D pero sesgados y viceversa. -versa. O, aún más, que cualquier margen de dimensiones inferiores podría tener cierta asimetría o curtosis mientras se mantienen simétricas (o no) las dimensiones más altas. Me sorprendió la idea de que tal flexibilidad pudiera existir. He estado tratando de encontrar algún tipo de artículo o documento de conferencia que describa dicho método, pero no he tenido éxito :(. No tiene que ser a través del uso de cópulas, Estoy abierto a todo lo que funcione.
Editar: he agregado un código R para intentar mostrar lo que quiero decir. Hasta ahora solo conozco bien la definición de Mardia de asimetría y curtosis multivariante. Cuando abordé por primera vez mi problema, ingenuamente pensé que si usaba una cópula simétrica (gaussiana en este caso) con marginales sesgados (beta, en este ejemplo), las pruebas univariadas en los marginales tendrían importancia, pero la prueba de Mardia para la asimetría / curtosis multivarita sería no ser significativo Lo intenté y no salió como esperaba:
library(copula)
library(psych)
set.seed(101)
cop1 <- {mvdc(normalCopula(c(0.5), dim=2, dispstr="un"),
c("beta", "beta"),list(list(shape1=0.5, shape2=5),
list(shape1=0.5, shape2=5)))}
Q1 <- rmvdc(cop1, 1000)
x1 <- Q1[,1]
y1 <- Q1[,2]
cop2 <- {mvdc(normalCopula(c(0.5), dim=2, dispstr="un"),
c("norm", "norm"),list(list(mean=0, sd=1),
list(mean = 0, sd=1)))}
Q2 <- rmvdc(cop2, 1000)
x2 <- Q2[,1]
y2 <- Q2[,2]
mardia(Q1)
Call: mardia(x = Q1)
Mardia tests of multivariate skew and kurtosis
Use describe(x) the to get univariate tests
n.obs = 1000 num.vars = 2
b1p = 10.33 skew = 1720.98 with probability = 0
small sample skew = 1729.6 with probability = 0
b2p = 22.59 kurtosis = 57.68 with probability = 0
mardia(Q2)
Call: mardia(x = Q2)
Mardia tests of multivariate skew and kurtosis
Use describe(x) the to get univariate tests
n.obs = 1000 num.vars = 2
b1p = 0.01 skew = 0.92 with probability = 0.92
small sample skew = 0.92 with probability = 0.92
b2p = 7.8 kurtosis = -0.79 with probability = 0.43
Al inspeccionar los contornos para 'cop1' VS 'cop2', así como los gráficos de densidad bivariados empíricos, también puedo ver que ninguno de ellos parece simétrico en absoluto. Fue entonces cuando me di cuenta de que esto es probablemente un poco más complicado de lo que pensaba.
Sé que Mardia no es la única definición de asimetría / curtosis multivariada, por lo que no me estoy limitando a encontrar un método que solo satisfaga las definiciones de Mardia.
¡gracias!
Respuestas:
Después de mucho buscar, saltar en foros en línea, consultar con profesores y hacer MUCHAS revisiones de literatura, he llegado a la conclusión de que probablemente LA ÚNICA manera de abordar este problema es a través del uso de cópulas de vid. Le da cierto control sobre la asimetría y la curtosis en pares (o cualquier momento superior), para un vector aleatorio con variante p y la libertad de especificar un par de cópulas p-1 y el p * restante (p-1) / 2 - ( p-1) las dimensiones se pueden especificar en algún tipo de cópula condicional.
Doy la bienvenida a otros métodos que la gente podría haber encontrado, pero al menos voy a dejar este puntero hacia una respuesta porque, por mi vida, no puedo encontrar otras formas de abordar esto.
fuente
Es posible que pueda resolver esto modificando el algoritmo de Ruscio y Kaczetow (2008). Su artículo proporciona un algoritmo iterativo (con código R) que minimiza la diferencia entre las formas marginales reales y previstas. Es posible que pueda modificarlo para que esté dirigido a los momentos multivariados (en lugar de marginales).
Ruscio, J. y Kaczetow, W. (2008). Simulación de datos no normales multivariados utilizando un algoritmo iterativo. Investigación conductual multivariante, 43 (3), 355‐381. doi: 10.1080 / 00273170802285693
fuente
Es posible que desee comprobar la Distribución elíptica generalizada , que permite una matriz de forma "clásica" con flexibilidad para otras características.
fuente
Se me ocurrió un método simple para hacer esto que no involucra coplas y otros diseños complejos. Me temo que no tengo ninguna referencia formal, aunque el método parece ser muy efectivo.
La idea es simple. 1. Dibuje cualquier número de variables de una distribución normal conjunta. 2. Aplique el CDF normal de variables univariadas para derivar probabilidades para cada variable. 3. Finalmente aplique el CDF inverso de cualquier distribución para simular sorteos de esa distribución.
Se me ocurrió este método en 2012 y demostré usar Stata . También he escrito un post reciente que muestra el mismo método utilizando R .
fuente
Creo que el método presentado en los siguientes documentos permite generar multivariantes aleatorios con cualquier combinación (factible) de media, varianza, asimetría y curtosis.
Exención de responsabilidad: soy no uno de los autores.
fuente