Предположим, у нас есть
где - равномерная случайная выборка размером n, и
Тогда корреляция между и равна .
Как я могу расширить это до трех переменных: , , ?
Предположим, у нас есть
где - равномерная случайная выборка размером n, и
Тогда корреляция между и равна .
Как я могу расширить это до трех переменных: , , ?
Ответы:
Вопрос содержит несколько ошибок, как отмечено в комментариях - как определено в вопросе, Z не является ни однородным, ни имеет указанную корреляцию.
кардинал упоминает связки, и это самый общий способ сделать это. Тем не менее, есть несколько довольно простых способов получить коррелированные формы (которые можно рассматривать как простые ярлыки для различных видов связок).
Итак, давайте начнем с нескольких способов получить пару взаимосвязанных форм.
1) Если вы добавите две формы, результат будет треугольным, а не равномерным. Но вы можете использовать cdf результирующей переменной как преобразование, чтобы вернуть результат обратно в форму. Конечно, результат больше не имеет линейной корреляции.
Вот функция R для преобразования симметричного треугольника на (0,2) в стандартную форму
t2u = function(x) ifelse(x<1, x^2, 2-(2-x)^2)/2
Давайте проверим, что это дает форму
u1 = runif(30000)
u2 = runif(30000)
v1 = t2u(u1+u2)
И это связано с u1 и u2:
> cor(cbind(u1,u2,v1))
u1 u2 v1
u1 1.000000000 0.006311667 0.7035149
u2 0.006311667 1.000000000 0.7008528
v1 0.703514895 0.700852805 1.0000000
но не линейно, из-за монотонного преобразования в однородность
Используя это в качестве инструмента, мы можем сгенерировать некоторые дополнительные переменные, чтобы получить три одинаковые формы:
u3 = runif(30000)
v2 = t2u(u1+u3)
v3 = t2u(u2+u3)
cor(cbind(v1,v2,v3))
v1 v2 v3
v1 1.0000000 0.4967572 0.4896972
v2 0.4967572 1.0000000 0.4934746
v3 0.4896972 0.4934746 1.0000000
Все отношения между переменными v выглядят так:
-
Второй альтернативой является получение путем взятия смеси . Вместо суммирования униформ, возьмите их с фиксированными вероятностями.
например
z = ifelse(rbinom(30000,1,.7),u1,u2)
cor(cbind(u1,z))
u1 z
u1 1.0000000 0.7081533
z 0.7081533 1.0000000
Который снова может быть использован для создания нескольких коррелированных униформ.
-
Третий простой подход заключается в генерации коррелированных нормалей и преобразовании в однородность.
n1=rnorm(30000)
n2=rnorm(30000)
n3=rnorm(30000)
x=.6*n1+.8*n2
y=.6*n2+.8*n3
z=.6*n3+.8*n1
cor(cbind(x,y,z))
x y z
x 1.0000000 0.4763703 0.4792897
y 0.4763703 1.0000000 0.4769403
z 0.4792897 0.4769403 1.0000000
Итак, теперь мы конвертируем в форму:
w1 = pnorm(x)
w2 = pnorm(y)
w3 = pnorm(z)
cor(cbind(w1,w2,w3))
w1 w2 w3
w1 1.0000000 0.4606723 0.4623311
w2 0.4606723 1.0000000 0.4620257
w3 0.4623311 0.4620257 1.0000000
Одна из приятных вещей в методах 2 и 3 заключается в том, что вы получаете множество вариантов выбора того, насколько коррелированными могут быть вещи (и они не должны быть равносильны, как в примерах здесь).
Конечно, существует множество других подходов, но все они быстрые и простые.
Сложная часть получает именно желаемое соотношение населения; это не так просто, как когда вы просто хотите коррелированных гауссиан. Ответ Quantibex в « Генерации пар случайных чисел, равномерно распределенных и коррелированных, дает подход, который модифицирует мой третий метод, который должен дать информацию о желаемой корреляции населения».
Это должно помочь вам разложить ряд на его компоненты так же, как вы разложили бы вектор на его ортогональные компоненты.