Похоже, что вы спрашиваете, как генерировать данные с определенной корреляционной матрицей.
Полезным в том, что если у вас есть случайный вектор с ковариационной матрицей Σ , то случайный вектор х имеет среднее Е ( х ) и ковариационная матрица Ω = Σ T . Таким образом, если вы начнете с данных, у которых среднее значение равно нулю, умножение на A не изменит этого, поэтому ваше первое требование легко будет выполнено. xΣAxAE(x)Ω=AΣATA
Допустим, вы начинаете с (среднее ноль) некоррелированных данных (т.е. ковариационная матрица является диагональной) - так как мы говорим о корреляционной матрицы, давайте просто взять . Вы можете превратить это в данных с заданной ковариационной матрицей, выбирая А быть Cholesky корень квадратный из Q , - то х будет иметь желаемый ковариационная матрица Ω .Σ=IAΩAxΩ
В вашем примере вы хотите что-то вроде этого:
Ω=⎛⎝⎜1.80.81.80.81⎞⎠⎟
К сожалению, эта матрица не является положительно определенной, поэтому она не может быть ковариационной матрицей - вы можете проверить это, увидев, что определитель отрицателен. Возможно, вместо
Ω=⎛⎝⎜1.8.3.81.8.3.81⎞⎠⎟ or Ω=⎛⎝⎜12/302/312/302/31⎞⎠⎟
было бы достаточно. Я не уверен, как рассчитать квадратный корень cholesky в Matlab (который, кажется, то, что вы используете), но R
вы можете использовать chol()
функцию.
В этом примере для двух перечисленных выше соответствующие коэффициенты матрицы (соответственно) будутΩ
A=⎛⎝⎜1.8.30.6.93300.1972⎞⎠⎟ or 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