Sinto muito se isso parece um pouco básico, mas acho que estou apenas tentando confirmar o entendimento aqui. Tenho a sensação de que eu teria que fazer isso em duas etapas e comecei a tentar criar matrizes de correlação, mas isso está começando a parecer realmente envolvido. Estou procurando uma explicação concisa (idealmente com dicas para uma solução de pseudocódigo) de uma maneira boa e idealmente rápida de gerar números aleatórios correlacionados.
Dadas duas variáveis pseudo-aleatórias, altura e peso, com médias e variações conhecidas e uma determinada correlação, acho que estou basicamente tentando entender como deve ser a segunda etapa:
height = gaussianPdf(height.mean, height.variance)
weight = gaussianPdf(correlated_mean(height.mean, correlation_coefficient),
correlated_variance(height.variance,
correlation_coefficient))
- Como calculo a média e variância correlacionadas? Mas quero confirmar que esse é realmente o problema relevante aqui.
- Preciso recorrer à manipulação de matrizes? Ou tenho outra coisa muito errada na minha abordagem básica para esse problema?
probability
correlation
conditional-probability
random-generation
Joseph Weissman
fonte
fonte
Respostas:
Para responder à sua pergunta sobre "uma maneira boa e idealmente rápida de gerar números aleatórios correlacionados": Dada a matriz variância-covariância desejada que é definida por definição positiva positiva, a decomposição de Cholesky é: C = L L T ; L sendo a matriz triangular inferior.C C L LT eu
Se você agora usar essa matriz para projetar um vetor variável aleatório não correlacionado X , a projeção resultante Y = L X será a das variáveis aleatórias correlacionadas.eu X Y= L X
Você pode encontrar uma explicação concisa sobre por que isso acontece aqui .
fonte
+1 a @ user11852 e @ jem77bfp, são boas respostas. Deixe-me abordar isso de uma perspectiva diferente, não porque eu acho que é necessariamente melhor na prática , mas porque eu acho que é instrutivo. Aqui estão alguns fatos relevantes que já sabemos:
é a proporção da variação em Y atribuível à variação em X ,r2 Y X
(também, das regras para variações ):
Se você quiser fazer isso no R, o seguinte código pode funcionar para você:
Novamente, isso, em sua forma mais simples, permite gerar apenas um par de variáveis correlacionadas (isso pode ser ampliado, mas fica muito rápido) e certamente não é a maneira mais conveniente de realizar o trabalho. Em R, você desejaria usar ? Mvrnorm no pacote MASS , tanto porque é mais fácil quanto porque você pode gerar muitas variáveis com uma matriz de correlação populacional. No entanto, acho que vale a pena ter percorrido esse processo para ver como alguns princípios básicos funcionam de maneira simples.
fonte
Em geral, isso não é uma coisa simples de se fazer, mas acredito que existem pacotes para geração de variáveis normais multivariadas (pelo menos em R, veja
mvrnorm
noMASS
pacote), onde você apenas insere uma matriz de covariância e um vetor médio.Se você não entender o significado de conectar uma variável uniforme a uma função de distribuição de probabilidade inversa, tente fazer um esboço do caso univariado e lembre-se de qual é a interpretação geométrica da função inversa.
fonte
Se você estiver pronto para desistir da eficiência, poderá usar um alogoritmo descartável. Sua vantagem é que ela permite qualquer tipo de distribuição (não apenas gaussiana).
Boa sorte!
fonte