Parece que você está perguntando como gerar dados com uma matriz de correlação específica.
Um fato útil é que, se você tiver um vetor aleatório com matriz de covariância Σ , o vetor aleatório A x terá a média A E ( x ) e a matriz de covariânciaxΣAxAE(x) . Portanto, se você começar com dados com média zero, a multiplicação por A não mudará isso; portanto, seu primeiro requisito é facilmente satisfeito. Ω = A Σ ATUMA
Vamos dizer que você começar com dados não correlacionadas (média zero) (ou seja, a matriz de covariância é diagonal) - já que estamos falando sobre a matriz de correlação, vamos apenas dar . Você pode transformar isso em dados com uma dada matriz de covariância escolhendo A para ser a raiz quadrada de cholesky de Ω - então A x teria a matriz de covariância desejada Ω .Σ = IUMAΩA xΩ
No seu exemplo, você parece querer algo assim:
Ω = ⎛⎝⎜1.80 0.81.80 0.81⎞⎠⎟
Infelizmente, essa matriz não é definida positivamente, portanto não pode ser uma matriz de covariância - você pode verificar isso vendo que o determinante é negativo. Talvez, ao invés
Ω = ⎛⎝⎜1.8.3.81.8.3.81⎞⎠⎟ o r Ω= ⎛ ⎝⎜12 / 30 02 / 312 / 30 02 / 31⎞⎠⎟
seria suficiente. Não sei como calcular a raiz quadrada de cholesky no matlab (que parece ser o que você está usando), mas R
você pode usar a chol()
função
Neste exemplo, para o dois s listados acima dos múltiplos de matriz adequados (respectivamente) seriaΩ
A=⎛⎝⎜1.8.30.6.93300.1972⎞⎠⎟ or A=⎛⎝⎜12/300.7453.894400.4472⎞⎠⎟
O R
código usado para chegar a isso foi:
x = matrix(0,3,3)
x[1,]=c(1,.8,.3)
x[2,]=c(.8,1,.8)
x[3,]=c(.3,.8,1)
t(chol(x))
[,1] [,2] [,3]
[1,] 1.0 0.0000000 0.0000000
[2,] 0.8 0.6000000 0.0000000
[3,] 0.3 0.9333333 0.1972027
x[1,]=c(1,2/3,0)
x[2,]=c(2/3,1,2/3)
x[3,]=c(0,2/3,1)
t(chol(x))
[,1] [,2] [,3]
[1,] 1.0000000 0.0000000 0.0000000
[2,] 0.6666667 0.7453560 0.0000000
[3,] 0.0000000 0.8944272 0.4472136