Tampaknya Anda bertanya bagaimana cara menghasilkan data dengan matriks korelasi tertentu.
Sebuah fakta yang berguna adalah bahwa jika Anda memiliki vektor acak dengan kovarian matriks Σ , maka random vektor A x memiliki rata-rata A E ( x ) dan kovariansi matriks Ω = A Σ A T . Jadi, jika Anda mulai dengan data yang berarti nol, mengalikan dengan A tidak akan mengubahnya, sehingga persyaratan pertama Anda mudah dipenuhi. xΣAxAE(x)Ω=AΣATA
Katakanlah Anda mulai dengan (mean nol) Data berkorelasi (yaitu matriks kovarians diagonal) - karena kita sedang berbicara tentang matriks korelasi, mari kita hanya mengambil . Anda dapat mengubah ini menjadi data dengan matriks kovarians yang diberikan dengan memilih A menjadi akar kuadrat cholesky dari Ω - maka A x akan memiliki matriks kovarians yang diinginkan Ω .Σ=IAΩAxΩ
Dalam contoh Anda, Anda tampaknya menginginkan sesuatu seperti ini:
Ω=⎛⎝⎜1.80.81.80.81⎞⎠⎟
Sayangnya matriks itu tidak pasti positif, jadi tidak bisa menjadi matriks kovarians - Anda dapat memeriksanya dengan melihat bahwa determinannya negatif. Mungkin sebaliknya
Ω=⎛⎝⎜1.8.3.81.8.3.81⎞⎠⎟ or Ω=⎛⎝⎜12/302/312/302/31⎞⎠⎟
sudah cukup. Saya tidak yakin bagaimana menghitung root kuadrat cholesky di matlab (yang tampaknya adalah apa yang Anda gunakan) tetapi R
Anda dapat menggunakan chol()
fungsinya.
Dalam contoh ini, selama dua s tercantum di atas kelipatan matriks yang tepat (masing-masing) akanΩ
A=⎛⎝⎜1.8.30.6.93300.1972⎞⎠⎟ or A=⎛⎝⎜12/300.7453.894400.4472⎞⎠⎟
The R
kode yang digunakan untuk sampai pada ini:
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