Wygląda na to, że pytasz, jak wygenerować dane z określoną macierzą korelacji.
Przydatnym faktem jest to, że jeśli masz losowy wektor z macierzą kowariancji , to losowy wektor ma średnią i macierz kowariancji . Tak więc, jeśli zaczniesz od danych oznaczających zero, pomnożenie przez tego nie zmieni, więc twoje pierwsze wymaganie jest łatwo spełnione. xΣAxAE(x)Ω=AΣATA
Powiedzmy zacząć (średnia zero) danych nieskorelowanych (tj macierz kowariancji jest przekątna) - skoro mówimy o macierzy korelacji, po prostu wziąć . Możesz przekształcić to w dane za pomocą danej macierzy kowariancji, wybierając jako cholesky pierwiastek kwadratowy z - wtedy miałby pożądaną macierz kowariancji .Σ=IAΩAxΩ
W twoim przykładzie wydaje się, że chcesz czegoś takiego:
Ω=⎛⎝⎜1.80.81.80.81⎞⎠⎟
Niestety, macierz ta nie jest jednoznacznie określona, więc nie może być macierzą kowariancji - można to sprawdzić, widząc, że wyznacznik jest ujemny. Być może zamiast tego
Ω=⎛⎝⎜1.8.3.81.8.3.81⎞⎠⎟ or Ω=⎛⎝⎜12/302/312/302/31⎞⎠⎟
wystarczyłoby. Nie jestem pewien, jak obliczyć cholesky pierwiastek kwadratowy w Matlabie (który wydaje się być tym, którego używasz), ale R
możesz użyć tej chol()
funkcji.
W tym przykładzie dla dwóch wymienionych wyżej odpowiednimi mnożnikami macierzy byłyby odpowiednioΩ
A=⎛⎝⎜1.8.30.6.93300.1972⎞⎠⎟ or A=⎛⎝⎜12/300.7453.894400.4472⎞⎠⎟
Do tego R
celu użyto kodu:
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