Здається, ви запитуєте, як генерувати дані за допомогою певної кореляційної матриці.
Корисний факт полягає в тому, що якщо у вас є випадковий вектор з коваріаційною матрицею , то випадковий вектор має значення і матрицю коваріації . Отже, якщо ви почнете з даних, що мають середній нуль, множення на це не змінить, тому ваша перша вимога буде легко виконана. Σ A x A E ( x ) Ω = A Σ A T AхΣА хА Е( х )Ω = A Σ AТА
Припустимо, ви починаєте з (середнє нуль) некоррелірованних даних (тобто ковариационная матриця є діагональною) - так як ми говоримо про кореляційної матриці, давайте просто взяти . Ви можете перетворити це в даних із заданою ковариационной матрицею, вибираючи , щоб бути Cholesky квадратний корінь з - тоді матиме бажаний ковариационная матриця .A Ω A x ΩΣ = IАΩА хΩ
У вашому прикладі вам здається, що ви хочете чогось подібного:
Ω = ⎛⎝⎜1.80.81.80.81⎞⎠⎟
На жаль, матриця не є позитивно визначеною, тому вона не може бути коваріаційною матрицею - ви можете перевірити це, побачивши, що визначник є від'ємним. Можливо, замість цього
Ω = ⎛⎝⎜1.8.3.81.8.3.81⎞⎠⎟ o r Ω= ⎛ ⎝⎜12 / 302 / 312 / 302 / 31⎞⎠⎟
вистачило б Я не впевнений, як обчислити квадрат холеського кореня в matlab (який, здається, є тим, що ви використовуєте), але в ньому R
ви можете використовувати chol()
функцію.
У цьому прикладі для двох s, перелічених вище, було б відповідне кратне матричне число (відповідно)Ω
A = ⎛⎝⎜1.8.30.6.93300.1972⎞⎠⎟ o r A = ⎛ ⎝⎜12 / 300.7453.894400.4472⎞⎠⎟
R
Код , який використовується , щоб прибути на це:
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