Parece que está preguntando cómo generar datos con una matriz de correlación particular.
Un hecho útil es que si tiene un vector aleatorio con matriz de covarianza Σ , entonces el vector aleatorio A x tiene media A E ( x ) y matriz de covarianza Ω = A Σ A T . Por lo tanto, si comienza con datos que tienen una media de cero, la multiplicación por A no cambiará eso, por lo que su primer requisito se cumple fácilmente. xΣAxAE(x)Ω=AΣATA
Digamos que usted comienza con los datos correlacionados (media cero) (es decir, la matriz de covarianza es diagonal) - ya que estamos hablando de la matriz de correlación, vamos a tomar . Puede transformar esto en datos con una matriz de covarianza dada eligiendo A como la raíz cuadrada cholesky de Ω ; entonces A x tendría la matriz de covarianza deseada Ω .Σ=IAΩAxΩ
En su ejemplo, parece querer algo como esto:
Ω=⎛⎝⎜1.80.81.80.81⎞⎠⎟
Desafortunadamente, esa matriz no es positiva definida, por lo que no puede ser una matriz de covarianza; puede verificar esto al ver que el determinante es negativo. Quizás, en cambio
Ω=⎛⎝⎜1.8.3.81.8.3.81⎞⎠⎟ or Ω=⎛⎝⎜12/302/312/302/31⎞⎠⎟
bastaría. No estoy seguro de cómo calcular la raíz cuadrada de Cholesky en Matlab (que parece ser lo que estás usando), pero R
puedes usar la chol()
función.
En este ejemplo, para los dos s enumerados anteriormente, los múltiplos de matriz adecuados (respectivamente) seríanΩ
A=⎛⎝⎜1.8.30.6.93300.1972⎞⎠⎟ or A=⎛⎝⎜12/300.7453.894400.4472⎞⎠⎟
El R
código utilizado para llegar a esto fue:
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