Eşit dağıtılmış ve ilişkilendirilmiş rasgele sayı çiftleri üret


14

Belirli korelasyon ile rastgele sayılar çiftleri oluşturmak istiyorum. Bununla birlikte, iki normal değişkenin doğrusal bir kombinasyonunu kullanmaya ilişkin olağan yaklaşım burada geçerli değildir, çünkü tekdüze değişkenlerin doğrusal bir kombinasyonu artık tekdüze dağıtılmış bir değişken değildir. Tekdüze olmak için iki değişkene ihtiyacım var.

Belirli bir korelasyon ile tekdüze değişken çiftlerinin nasıl üretileceği hakkında bir fikrin var mı?


7
Yakından ilgili: stats.stackexchange.com/questions/30526 . Ayrıca, copula etiketine de göz atmak istiyorsunuz - buradaki bağlantıyı tıklamanız yeterlidir. Hızlı ve kirli teknik sağlamaktır üniform ve zaman ve , aksi. Korelasyon , bu durumda hile yapar. Ama copulalar sana daha fazla kontrol verecek. X[0,1]Y=XXαY=1+αXρ=2(α1)3+1α=1((1ρ)/2)1/3
whuber

Yorum için teşekkürler, ama evet, bu yöntem gerçekten "kirli" olduğunu düşünüyorum
Onturenio

1
Umudum, bu yaklaşımı gördüğünüzde, rastgele sayı çiftlerinizin özellikleri ile ilgili ek kriterler sağlayabileceğinizi (ve yapmanız gerektiğini) biliyor olmanızdı. Bu "kirli" ise, çözümün tam olarak ne sorunu var? Durumunuz için daha uygun cevaplar verebilmemiz için bize bildirin.
whuber

Bu soru, yakından ilişkili bir soruya yanıt olarak tesadüfen cevaplanmıştır: doğrusal regresyon ilişkisi olan RV çiftlerinin nasıl üretileceği. Doğrusal regresyonun eğimi, korelasyon katsayısına kolayca hesaplanmış bir şekilde ilişkili olduğundan ve tüm olası eğimler üretilebildiğinden, tam olarak ne istediğinizi üretmenin bir yolunu verir. Bkz stats.stackexchange.com/questions/257779/... .
whuber

1
Lütfen üç rastgele üniformaya genelleme yanıt veren stats.stackexchange.com/questions/31771 adresine bakın .
whuber

Yanıtlar:


16

Herhangi bir marjinal dağılım ile ilişkili rasgele değişkenler oluşturmak için evrensel bir yöntem farkında değilim. Bu nedenle, belirli bir (Pearson) korelasyonu ile düzgün dağılmış rastgele değişken çiftleri oluşturmak için geçici bir yöntem önereceğim. Genellik kaybı olmadan, istenen marjinal dağılımın standart üniform olduğunu varsayıyorum (yani destek ).[0,1]

Önerilen yaklaşım aşağıdakilere dayanmaktadır:
a) İlgili dağıtım fonksiyonları olan standart tek tip ve rasgele değişkenleri içinU1U2 ve F 2 , elimizdeki F ı ( u ı ) = u ı için, i = 1 , 2 . Böylece, tanımı gereğiSpearman'ın rhodeğeri ρ S ( U 1 , U 2 ) = c o r r ( F 1 (F1F2Fi(Ui)=Uii=1,2 Bu nedenle, Spearman'ın rho ve Pearson korelasyon katsayısı eşittir (ancak örnek versiyonlar farklı olabilir).

ρS(U1,U2)=corr(F1(U1),F2(U2))=corr(U1,U2).

b) Eğer , sürekli kenar ile rasgele değişkenlerdir Gauss bağ ile (Pearson) korelasyon katsayısı p'ye ve ardından Spearman rho olan ρ S ( X 1 , x 2 ) = 6X1,X2ρ Bu, Spearman'ın rho'sunun istenen değerine sahip rastgele değişkenler oluşturmayı kolaylaştırır.

ρS(X1,X2)=6πarcsin(ρ2).

Yaklaşım, Spearman'ın rho'nun homojen rasgele değişkenler için istenen korelasyona karşılık geleceği şekilde, uygun bir korelasyon katsayısı ile Gauss kopuladan veri üretmektir .ρ

Simülasyon algoritması
Let korelasyon istenilen düzeyde temsil etmektedir, ve n, çiftlerinin sayısı elde edilecek. Algoritma:rn

  1. hesaplayın .ρ=2sin(rπ/6)
  2. Gauss kopula'sından bir çift rasgele değişken oluşturun (örneğin, bu yaklaşımla )
  3. n


r=0.6n=500

## Initialization and parameters 
set.seed(123)
r <- 0.6                            # Target (Spearman) correlation
n <- 500                            # Number of samples

## Functions
gen.gauss.cop <- function(r, n){
    rho <- 2 * sin(r * pi/6)        # Pearson correlation
    P <- toeplitz(c(1, rho))        # Correlation matrix
    d <- nrow(P)                    # Dimension
    ## Generate sample
    U <- pnorm(matrix(rnorm(n*d), ncol = d) %*% chol(P))
    return(U)
}

## Data generation and visualization
U <- gen.gauss.cop(r = r, n = n)
pairs(U, diag.panel = function(x){
          h <- hist(x, plot = FALSE)
          rect(head(h$breaks, -1), 0, tail(h$breaks, -1), h$counts/max(h$counts))})

U1U2U1U2resim açıklamasını buraya girin

rr

cor(U)[1, 2]
# [1] 0.5337697

gen.gauss.copFonksiyonun, sadece daha büyük bir korelasyon matrisi belirterek ikiden fazla değişkenle çalışması gerektiğini unutmayın .


r=0.5,0.1,0.6n

## Simulation
set.seed(921)
r <- 0.6                                                # Target correlation
n <- c(10, 50, 100, 500, 1000, 5000); names(n) <- n     # Number of samples
S <- 1000                                               # Number of simulations

res <- sapply(n,
              function(n, r, S){
                   replicate(S, cor(gen.gauss.cop(r, n))[1, 2])
               }, 
               r = r, S = S)
boxplot(res, xlab = "Sample size", ylab = "Correlation")
abline(h = r, col = "red")

resim açıklamasını buraya girin resim açıklamasını buraya girin resim açıklamasını buraya girin


3
Verilen marjinal dağılımlarla ilişkili çok değişkenli dağılımlar üretmenin genel yöntemine kopula denir .
whuber

@whuber, kopula kullanımı rastgele değişkenler arasında bir bağımlılık yapısının belirlenmesine izin verir. Sorun, (Kişi) korelasyonunun hem bağımlılık yapısından hem de marjlardan etkilenmesidir. Bu nedenle, her bir kenar boşluğu seçimi, belirli sınırlar için bazı korelasyon seviyelerine ulaşılamayacağından bahsetmemek gerekirse, karşılık gelen bir kopula parametreleri seçimini gerektirecektir (örneğin, buraya bakın ). Herhangi bir marj seçimi için korelasyon seviyesini 'kontrol etmeyi' sağlayan bir yöntem biliyorsanız, bunu bilmek isterim.
QuantIbex

Teşekkürler @QuantIbex. Ama neden "a) Spearman'ın standart üniform kenar boşluklarına sahip rastgele değişkenler için rho ve (Pearson) korelasyon katsayısının büyük örnekte yaklaşık olarak eşit olduğunu
ima etmiyorum

2
[1,1]

1
@Quantibex İşlevinizin gen.gauss.cop(önemsiz) bir tweak ile ikiden fazla değişken için çalışacağına işaret eden bir cümle ekleme özgürlüğünü aldım . Eklemeyi beğenmediyseniz veya farklı bir şekilde koymak istiyorsanız lütfen geri dönün veya gerektiği gibi değiştirin.
Glen_b

0

u1U(0,1)u1w1U(0,1)I=1u1w2U(0,1)I=0u1U(0,1)u2

E(u1u2)=E[Iw1+(1I)w2][Iw1+(1I)w3]

I(I1)=0I2=I(1I)2=(1I)I01Iw

E(u1u2)=E(I)E(w12)+E(1I)E(w2)E(w3) =pE(w12)+(1p)/4

V(w1)=1/12E(w12)=1/3E(u1u2)=p/12+1/4cov(u1u2)=p/12V(u1)=V(u2)=1/12cor(u1,u2)=p


0

(u1,u2)=Iw1+(1I)(w2,w3)w1,w2,w3U(0,1)Ipu1u2U(0,1)pk

(u1,u2)=I(w1,1w1)+(1I)(w2,w3)p


Bunun neden işe yaradığına dair kısa bir kanıt ekleyebilir misiniz?
Laconic

u1=w1
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.