Estou interessado em descobrir um método para gerar dados correlatos e não normais. Então, idealmente, algum tipo de distribuição que considere uma matriz de covariância (ou correlação) como parâmetro e gere dados que os aproximam. Mas aqui está o problema: o método que estou tentando encontrar deve ter a flexibilidade de controlar também sua assimetria e / ou curtose multivariada.
Eu conheço o método de Fleishman e o uso do método de potência de variáveis normais, mas acredito que a maioria dessas extensões só permite ao usuário certas combinações de assimetria marginal e curtose, deixando assim assimetria / curtose multivariada. O que eu queria saber é se existe um método que ajude a especificar a assimetria e / ou curtose multivariada, juntamente com alguma estrutura de correlação / covariância.
Há cerca de um ano, participei de um seminário sobre distribuição de cópulas e lembro-me do professor mencionando casualmente que, através do uso de cópulas de videira, era possível gerar dados simétricos em cada um de seus marginais 1-D, mas sim distorcidos e vice-versa. -versa. Ou, ainda mais, que qualquer margem de menor dimensão poderia ter alguma assimetria ou curtose, mantendo as dimensões mais altas simétricas (ou não). Fiquei maravilhado com a ideia de que essa flexibilidade poderia existir. Estou tentando encontrar algum tipo de artigo ou artigo de conferência que descreva o método mencionado, mas não obtive sucesso :(. Não precisa ser pelo uso de cópulas, Estou aberto a qualquer coisa que funcione.
Edit: Eu adicionei um código R para tentar mostrar o que quero dizer. Até agora, estou familiarizado apenas com a definição de Mardia de assimetria e curtose multivariadas. Quando me aproximei do meu problema, pensei ingenuamente que, se eu usasse uma cópula simétrica (gaussiana neste caso) com marginais assimétricos (beta, neste exemplo), testes univariados nas marginais produziriam significância, mas o teste de Mardia para assimetria / curtose multivarita resultaria em ser não significativo. Eu tentei isso e não saiu como eu esperava:
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
Ao inspecionar os contornos de 'cop1' VS 'cop2', bem como os gráficos empíricos de densidade bivariada, também posso ver que nenhum deles parece simétrico. Foi quando eu percebi que isso provavelmente é um pouco mais complicado do que eu pensava.
Sei que o Mardia não é a única definição de assimetria / curtose multivariada, então não estou me limitando a encontrar um método que satisfaça apenas as definições de Mardia.
obrigado!
Respostas:
Depois de muito procurar, saltando fóruns em torno on-line, a consulta com professores e fazendo um monte de revisão da literatura, eu vim à conclusão de que provavelmente THE única maneira de resolver este problema é através do uso de cópulas de vinha, de fato. Dá a você algum controle sobre a assimetria e curtose em pares (ou em momentos mais altos) - para um vetor aleatório com variável p e a liberdade de especificar o par de cópulas p-1 e o restante p * (p-1) / 2 - ( p-1) as dimensões podem ser especificadas em algum tipo de cópula condicional.
Congratulo-me com outros métodos que as pessoas podem ter encontrado, mas pelo menos vou deixar esse ponteiro em direção a uma resposta, porque, pela minha vida, não consigo encontrar outras maneiras de resolver isso.
fonte
Você pode resolver isso modificando o algoritmo de Ruscio e Kaczetow (2008). O artigo deles fornece um algoritmo iterativo (com código R) que minimiza a diferença entre as formas marginais reais e pretendidas. Você pode modificá-lo para que ele direcione os momentos multivariados (e não marginais).
Ruscio, J. & Kaczetow, W. (2008). Simulação de dados não normais multivariados usando um algoritmo iterativo. Pesquisa Comportamental Multivariada, 43 (3), 355‐381. doi: 10.1080 / 00273170802285693
fonte
Convém verificar a distribuição elíptica generalizada , que permite uma matriz de forma "clássica" com flexibilidade para outros recursos.
fonte
Eu inventei um método simples para fazer isso que não envolve coplas e outros projetos complexos. Receio não ter nenhuma referência formal, embora o método pareça ser altamente eficaz.
A ideia é simples. 1. Desenhe qualquer número de variáveis de uma distribuição normal conjunta. 2. Aplique o CDF normal univariado das variáveis para derivar probabilidades para cada variável. 3. Finalmente, aplique o CDF inverso de qualquer distribuição para simular empates dessa distribuição.
Eu vim com esse método em 2012 e demonstrei usando o Stata . Eu também escrevi um post recente mostrando o mesmo método utilizando R .
fonte
Acredito que o método apresentado nos artigos a seguir permite gerar multivariadas aleatórias com qualquer combinação (viável) de média, variância, assimetria e curtose.
Disclaimer: Eu não sou um dos autores.
fonte