Varsayalım
X 2 ∼ unif ( n , 0 , 1 ) ,
burada n boyutunda tek tip rastgele bir örnektir ve
Sonra arasındaki korelasyon ve olan .Z 0.4
Bunu üç değişkene nasıl genişletebilirim: , , ?
Varsayalım
X 2 ∼ unif ( n , 0 , 1 ) ,
burada n boyutunda tek tip rastgele bir örnektir ve
Sonra arasındaki korelasyon ve olan .Z 0.4
Bunu üç değişkene nasıl genişletebilirim: , , ?
Yanıtlar:
Soru, yorumlarda belirtildiği gibi birkaç hata içerir - soruda tanımlandığı gibi, Z ne tekdüzedir ne de belirtilen korelasyona sahiptir.
kardinal kopulalardan bahseder ve bu konuda en genel yol budur. Bununla birlikte, ilişkili üniformaları elde etmenin birkaç kolay yolu vardır (bu, farklı kopula türlerine sadece kısayollar olarak görülebilir).
Öyleyse bir çift ilişkili üniforma almanın bazı yollarıyla başlayalım .
1) İki üniforma eklerseniz sonuç üniform değil, üçgen olur. Ancak, sonucu bir formata geri almak için, sonuçtaki değişkenin cdf'sini bir dönüşüm olarak kullanabilirsiniz. Sonuç elbette artık doğrusal olarak ilişkili değil.
İşte (0,2) üzerindeki simetrik bir üçgeni standart forma dönüştürmek için bir R işlevi
t2u = function(x) ifelse(x<1, x^2, 2-(2-x)^2)/2
Üniforma verdiğini kontrol edelim
u1 = runif(30000)
u2 = runif(30000)
v1 = t2u(u1+u2)
Ve u1 ve u2 ile ilişkilidir:
> 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
ancak tekdüzeliğe monotonik dönüşüm nedeniyle doğrusal olarak değil
Bu bir araç olarak, üç eşdüzeyli üniforma elde etmek için bazı ek değişkenler üretebiliriz:
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 değişkenleri arasındaki ilişkinin tümü şöyle görünür:
-
İkinci bir alternatif, bir karışım alınarak üretilmesidir . Üniformaları toplamak yerine, sabit olasılıklarla alın.
Örneğin
z = ifelse(rbinom(30000,1,.7),u1,u2)
cor(cbind(u1,z))
u1 z
u1 1.0000000 0.7081533
z 0.7081533 1.0000000
Hangi tekrar birden çok ilişkili üniforma oluşturmak için kullanılabilir.
-
Üçüncü basit yaklaşım, ilişkili normaller üretmek ve tekdüzeliğe dönüştürmektir.
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
Şimdi üniformaya dönüştürüyoruz:
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
Yöntem 2 ve 3 ile ilgili güzel bir şey, birbiriyle ilişkili şeylerin nasıl olabileceğine dair seçiminizde bol miktarda çeşitlilik elde etmenizdir (ve buradaki örnekler gibi denkleştirilmeleri gerekmez).
Elbette çok çeşitli başka yaklaşımlar da var, ancak bunların hepsi hızlı ve kolaydır.
Zor kısmı tam olarak istenen nüfus korelasyonunu elde ediyor; sadece ilişkili Gauss'ları istediğiniz kadar basit değil. Quantibex'in tekdüze bir şekilde dağıtılmış ve ilişkilendirilmiş rasgele sayı çiftleri üretme yanıtı, burada üçüncü yöntemimi değiştirerek istenen nüfus korelasyonunu vermesi gereken bir yaklaşım sağlar.
Bu, bir diziyi bileşenlerine ayrıştırırken aynı şekilde bir vektörü dikey bileşenlerine ayırdığınız şekilde başlatmalıdır.