Dada uma matriz de covariância , como gerar dados de modo a ter a matriz de covariância de amostra ?
De maneira mais geral: geralmente estamos interessados em gerar dados a partir de uma densidade , com os dados com algum vetor de parâmetro . Isso resulta em uma amostra, da qual podemos estimar novamente um valor . O que me interessa é o problema inverso: e se recebermos um conjunto de parâmetros \ boldsymbol \ theta_ {s} , e gostaríamos de gerar uma amostra tal, que .
É um problema conhecido? Esse método é útil? Existem algoritmos disponíveis?
correlation
sampling
random-generation
covariance-matrix
Kees Mulder
fonte
fonte
Respostas:
Existem duas situações típicas diferentes para esse tipo de problemas:
i) você deseja gerar uma amostra a partir de uma determinada distribuição cujas características da população correspondem às especificadas (mas devido à variação da amostra, você não tem as características da amostra exatamente correspondentes).
ii) você deseja gerar uma amostra cujas características correspondam às especificadas (mas, devido às restrições de corresponder exatamente as quantidades da amostra a um conjunto de valores pré-especificado, na verdade não provém da distribuição desejada).
Você deseja o segundo caso - mas obtém-o seguindo a mesma abordagem do primeiro caso, com uma etapa extra de padronização.
Portanto, para normais multivariados, isso pode ser feito de uma maneira bastante direta:
No primeiro caso, você poderia usar normais aleatórios sem a estrutura da população (como o padrão normal iid, que tem expectativa 0 e matriz de covariância de identidade) e depois impor - transformar para obter a matriz de covariância e o que você deseja. Se e são a média da população e a covariância de que você precisa e são o seu padrão normal, você calcula , para alguns que (por exemplo, um adequado pode ser obtido por meio da decomposição de Cholesky) . Então tem as características desejadas da população.μ Σ z y= L z+ μ eu L L′= Σ eu y
Com o segundo, você deve primeiro transformar suas normais aleatórias para remover até mesmo a variação aleatória da média de zero e covariância de identidade (tornando a amostra média zero e covariância amostral ) e, em seguida, proceder como antes. Mas essa etapa inicial de remover o desvio da amostra da média exata , a variação interfere na distribuição. (Em amostras pequenas, pode ser bastante grave.)Eun 0 0 Eu
Isso pode ser feito subtraindo a média da amostra de ( ) e calculando a decomposição de Cholesky de . Se é o fator de Cholesky à esquerda, então deve ter média de amostra 0 e covariância de amostra de identidade. Você pode então calcular e ter uma amostra com os momentos desejados. (Dependendo de como suas quantidades de amostra são definidas, pode haver um pequeno violino envolvido na multiplicação / divisão por fatores como , mas é fácil identificar essa necessidade.)z z∗= z- z¯ z∗ eu∗ z( 0 )= ( L∗)- 1z∗ y= L z( 0 )+ μ n - 1n---√
fonte
@Glen_b deu uma boa resposta (+1), que eu quero ilustrar com algum código.
Como gerar amostras a partir de uma distribuição Gaussiana multivariada dimensional com uma dada matriz de covariância ? Isso é fácil, gerando amostras de um gaussiano padrão e multiplicando-as por uma raiz quadrada da matriz de covariância, por exemplo, por . Isso é abordado em muitos tópicos no CV, por exemplo, aqui: Como posso gerar dados com uma matriz de correlação pré-especificada? Aqui está uma implementação simples do Matlab:n d Σ c h o l (Σ)
A matriz de covariância de amostra dos dados resultantes obviamente não será exatamente ; por exemplo, no exemplo acima retornaΣ
cov(X)
Como gerar dados com uma matriz de correlação ou covariância de amostra pré-especificada ?
Como o @Glen_b escreveu, depois de gerar dados de um Gaussiano padrão, centralize, branqueie e padronize-os, para que ele tenha uma matriz de covariância de amostra ; somente então multiplique-o com .Eu c h o l (Σ)
Aqui está a continuação do meu exemplo do Matlab:
Agora
cov(X)
, conforme necessário, retornafonte