Eu gostaria de gerar uma matriz de correlação aleatória de modo que a distribuição de seus elementos fora da diagonal pareça aproximadamente normal. Como eu posso fazer isso?
A motivação é essa. Para um conjunto de dados de séries temporais, a distribuição de correlação geralmente parece bastante próxima do normal. Eu gostaria de gerar muitas matrizes de correlação "normais" para representar a situação geral e usá-las para calcular o número de risco.
Conheço um método, mas o desvio padrão resultante (da distribuição dos elementos fora da diagonal) é muito pequeno para o meu objetivo: gerar linhas aleatórias uniformes ou normais de uma matriz X , padronizar as linhas (subtrair a média, dividir por desvio padrão), então a matriz de correlação da amostra 1entradas fora da diagonal tem normalmente distribuídos [Actualizarapós comentários: desvio-padrão irá ser~n-1/2].
Alguém pode sugerir um método melhor com o qual eu possa controlar o desvio padrão?
Respostas:
Forneci primeiro o que agora acredito ser uma resposta abaixo do ideal; portanto, editei minha resposta para começar com uma sugestão melhor.
Usando o método Vine
Neste tópico: Como gerar eficientemente matrizes de correlação aleatória positiva-semidefinida? - Descrevi e forneci o código para dois algoritmos eficientes de geração de matrizes de correlação aleatória. Ambos vêm de um artigo de Lewandowski, Kurowicka e Joe (2009).
Por favor, veja minha resposta lá para muitas figuras e código do matlab. Aqui, gostaria apenas de dizer que o método vine permite gerar matrizes de correlação aleatórias com qualquer distribuição de correlações parciais (observe a palavra "parcial") e pode ser usado para gerar matrizes de correlação com grandes valores fora da diagonal. Aqui está a figura relevante desse segmento:
Eu acho que essas distribuições são razoavelmente "normais", e pode-se ver como o desvio padrão aumenta gradualmente. Devo acrescentar que o algoritmo é muito rápido. Veja o tópico vinculado para obter detalhes.
Minha resposta original
Uma modificação direta do seu método pode fazer o truque (dependendo de quão perto você deseja que a distribuição esteja do normal). Esta resposta foi inspirada nos comentários do @ cardinal acima e na resposta do @ psarka à minha própria pergunta Como gerar uma grande matriz de correlação aleatória com várias correlações fortes presentes?
Todas essas matrizes são, obviamente, positivas. Aqui está o código do matlab:
A saída deste código (valores próprios mínimos e máximos) é:
fonte
Você pode estar interessado em alguns dos códigos no seguinte link:
Correlação e co-integração
fonte
Se você estiver tentando gerar matrizes de correlação aleatória, considere a amostragem da distribuição Wishart. Esta pergunta a seguir fornece informações sobre a distribuição Wishart, bem como conselhos sobre como amostrar: Como gerar eficientemente matrizes de correlação aleatória positiva-semidefinida?
fonte
Esta não é uma resposta muito sofisticada, mas não posso deixar de pensar que ainda é uma boa resposta ...
Se sua motivação é que os parâmetros de correlação produzidos pelos dados de séries temporais tendem a parecer normais, por que não apenas simular dados de séries temporais, calcular os parâmetros de correlação e usá-los?
Você pode ter um bom motivo para não fazer isso, mas não está claro para mim a sua pergunta.
fonte