+1 ila @ user11852 ve @ jem77bfp, bunlar iyi cevaplardır. Buna farklı bir bakış açısıyla yaklaşmama izin verin , pratikte mutlaka daha iyi olduğunu düşündüğüm için değil, öğretici olduğunu düşündüğüm için. İşte zaten bildiğimiz birkaç ilgili gerçek:
- Her iki regresyon çizgisinin eğimi olan X ve Y, olanstandartyani, N ( 0 , 1 ) , rXYN-( 0 , 1 )
varyans oranı olan Y varyansın atfedilebilir X , r2YX
(ayrıca, varyans kurallarından ):
- Bir sabit ile çarpılan rastgele bir değişkenin varyansı, orijinal varyansın sabit kare çarpımıdır :
Var [ a X] = a2Var [ X]
- varyanslar eklemek iki varyans toplamıdır yani iki rastgele değişkenlerin toplamı varyans (bunlar bağımsız varsayılarak):
Var [ X+ ε ] = Var [ X] + Var [ ε ]
Şimdi, bu dört gerçeği, popülasyonları belirli bir korelasyona sahip olacak iki normal normal değişken oluşturmak için birleştirebiliriz , (daha doğru, ρ ), ancak ürettiğiniz örnekler değişken örnek korelasyonlara sahip olsa da. Fikri yalancı rasgele bir değişken oluşturmak için olan X standart normal, N ( 0 , 1 ) , ve daha sonra bir katsayı bulmak bir ve bir hata varyans, v e , bu şekilde Y, ~ N ( 0 , bir 2 + v , e ) , burada birrρXN-( 0 , 1 )birveY∼N(0,a2+ve) . (Bunun çalışması için | a | 'nın ≤ 1 olması gerektiğinive dahası, a = r olması gerektiğini unutmayın .) Böylece, istediğiniz r ile başlarsınız; bu senin katsayın, a . O zaman ihtiyacınız olacak hata varyansı anlamaya, bu kadar 1 - r 2 . (Yazılım standart sapması kullanmanızı gerektiriyorsa, bu değerin karekökünü alır.) Son olarak, her yalancı rasgele değişkenin, için x i , oluşturulan oldukları bir yalancı rasgele hata değişken oluşturmak e ia2+ve=1|a| ≤1a=rra1−r2xieiUygun hata varyans ile , korelasyon yalancı rasgele değişken, hesaplamak ve y ı , çoğalarak ekleyerek. veyi
Bunu R'de yapmak istiyorsanız, aşağıdaki kod sizin için işe yarayabilir:
correlatedValue = function(x, r){
r2 = r**2
ve = 1-r2
SD = sqrt(ve)
e = rnorm(length(x), mean=0, sd=SD)
y = r*x + e
return(y)
}
set.seed(5)
x = rnorm(10000)
y = correlatedValue(x=x, r=.5)
cor(x,y)
[1] 0.4945964
(Düzenleme: Söylemeyi unuttum :) Açıkladığım gibi, bu prosedür size iki standart normal korelasyonlu değişken verir. Standart normaller istemiyorsanız , ancak değişkenlerin bazı özel araçlara (0 değil) ve SD'lere (1 değil) sahip olmasını istiyorsanız, korelasyonu etkilemeden bunları dönüştürebilirsiniz. Böylece, ortalamanın tam olarak olmasını sağlamak için gözlemlenen ortalamayı çıkarır, değişkeni istediğiniz SD ile çarpın ve ardından istediğiniz ortalamayı ekleyin. Gözlemlenen ortalamanın istenen ortalamanın etrafında normal olarak dalgalanmasını istiyorsanız, ilk farkı geri ekleyeceksiniz. Temel olarak, bu tersine bir z-puanı dönüşümüdür. Bu doğrusal bir dönüşüm olduğundan, dönüştürülen değişken önceki değişkenle aynı korelasyona sahip olacaktır. 0
Yine, bu, en basit haliyle, sadece bir çift korelasyonlu değişken oluşturmanıza izin verir (bu ölçeklendirilebilir, ancak çirkin hızlı olur) ve kesinlikle işi yapmanın en uygun yolu değildir. Ar, kullanmak isteyeyim ? Mvrnorm içinde KİTLE daha kolay hem çünkü paketin ve belirli bir nüfus korelasyon matris ile birçok değişken oluşturabilir çünkü. Bununla birlikte, bazı temel prensiplerin basit bir şekilde nasıl yürüdüğünü görmek için bu süreçten geçmenin faydası olduğunu düşünüyorum.