Я пытаюсь сгенерировать коррелированную случайную последовательность со средним значением = , дисперсией = , коэффициентом корреляции = . В приведенном ниже коде я использую & как стандартные отклонения, а & как средство.s1
s2
m1
m2
p = 0.8
u = randn(1, n)
v = randn(1, n)
x = s1 * u + m1
y = s2 * (p * u + sqrt(1 - p^2) * v) + m2
Это дает мне правильный corrcoef()
0,8 между x
и y
. Мой вопрос заключается в том, как я могу создать серию, если я хочу, z
чтобы это также коррелировалось с y
(с той же корреляцией ), но не с . Есть ли конкретная формула, которую мне нужно знать? Я нашел один, но не мог понять это.x
Ответы:
Похоже, что вы спрашиваете, как генерировать данные с определенной корреляционной матрицей.
Полезным в том, что если у вас есть случайный вектор с ковариационной матрицей Σ , то случайный вектор х имеет среднее Е ( х ) и ковариационная матрица Ω = Σ T . Таким образом, если вы начнете с данных, у которых среднее значение равно нулю, умножение на A не изменит этого, поэтому ваше первое требование легко будет выполнено.x Σ Ax AE(x) Ω=AΣAT A
Допустим, вы начинаете с (среднее ноль) некоррелированных данных (т.е. ковариационная матрица является диагональной) - так как мы говорим о корреляционной матрицы, давайте просто взять . Вы можете превратить это в данных с заданной ковариационной матрицей, выбирая А быть Cholesky корень квадратный из Q , - то х будет иметь желаемый ковариационная матрица Ω .Σ=I A Ω Ax Ω
В вашем примере вы хотите что-то вроде этого:
К сожалению, эта матрица не является положительно определенной, поэтому она не может быть ковариационной матрицей - вы можете проверить это, увидев, что определитель отрицателен. Возможно, вместо
было бы достаточно. Я не уверен, как рассчитать квадратный корень cholesky в Matlab (который, кажется, то, что вы используете), но
R
вы можете использоватьchol()
функцию.В этом примере для двух перечисленных выше соответствующие коэффициенты матрицы (соответственно) будутΩ
R
Код , используемый , чтобы прибыть на это:источник
chol
Если вы используете R, вы также можете использовать функцию mvrnorm из пакета MASS, предполагая, что вам нужны нормально распределенные переменные. Реализация аналогична описанной выше макрокоманде, но использует собственные векторы корреляционной матрицы вместо разложения Холецкого и масштабирования с разложением по сингулярному значению (если для эмпирической опции задано значение true).
Обратите внимание, что корреляционная матрица должна быть положительно определенной, но ее преобразование с помощью функции nearPD из пакета Matrix в R будет полезным.
источник
источник