İkili ve sürekli değişken arasında rasgele ilişkilendirilmiş veri üretmek


23

İki değişken oluşturmak istiyorum. Bunlardan biri ikili sonuç değişkenidir (başarı / başarısızlık) ve diğeri yıllardır. Yaşın başarı ile pozitif olarak ilişkili olmasını istiyorum. Örneğin, yüksek yaş segmentlerinde düşükten daha fazla başarı olması gerekir. İdeal olarak, korelasyon derecesini kontrol edebilecek konumda olmalıyım. Bunu nasıl yaparım?

Teşekkürler

Yanıtlar:


20

@ ocram'ın yaklaşımı kesinlikle işe yarayacak. Bağımlılık özellikleri açısından bu biraz kısıtlayıcı olsa da.

Diğer bir yöntem, bir eklem dağılımını türetmek için bir kopula kullanmaktır. Başarı ve yaş için marjinal dağılımları (mevcut verilere sahipseniz, bu özellikle basit) ve bir kopula ailesi belirleyebilirsiniz. Kopulaların parametrelerini değiştirmek, farklı derecelerde bağımlılık sağlayacaktır ve farklı kopula aileleri, size çeşitli bağımlılık ilişkileri verecektir (örneğin, güçlü üst kuyruk bağımlılığı).

Bunu Copula paketi üzerinden R'de yapmanın son bir genel bakışını burada bulabilirsiniz . Ek paketler için bu yazıdaki tartışmaya da bakın.

Yine de tam bir pakete ihtiyacınız yok; Gaussian copula, marjinal başarı olasılığı 0.6 ve gamma dağılı yaşları kullanan basit bir örnek. Bağımlılığı kontrol etmek için değişken r.

r = 0.8 # correlation coefficient
sigma = matrix(c(1,r,r,1), ncol=2)
s = chol(sigma)
n = 10000
z = s%*%matrix(rnorm(n*2), nrow=2)
u = pnorm(z)

age = qgamma(u[1,], 15, 0.5)
age_bracket = cut(age, breaks = seq(0,max(age), by=5))
success = u[2,]>0.4

round(prop.table(table(age_bracket, success)),2)

plot(density(age[!success]), main="Age by Success", xlab="age")
lines(density(age[success]), lty=2)
legend('topright', c("Failure", "Success"), lty=c(1,2))

Çıktı:

Tablo:

           success
age_bracket FALSE TRUE
    (0,5]    0.00 0.00
    (5,10]   0.00 0.00
    (10,15]  0.03 0.00
    (15,20]  0.07 0.03
    (20,25]  0.10 0.09
    (25,30]  0.07 0.13
    (30,35]  0.04 0.14
    (35,40]  0.02 0.11
    (40,45]  0.01 0.07
    (45,50]  0.00 0.04
    (50,55]  0.00 0.02
    (55,60]  0.00 0.01
    (60,65]  0.00 0.00
    (65,70]  0.00 0.00
    (70,75]  0.00 0.00
    (75,80]  0.00 0.00

görüntü tanımını buraya girin


Mükemmel cevap! Copulas, takdir edilmeyen bir araç ise güzeldir. Probit modeli (sürekli değişkende Gauss marjinaliyle), Gaussian copula modelinin özel bir halidir. Fakat bu çok daha genel bir çözüm.
jpillow

1
@JMS: +1 Evet, Copulas çok çekici. Onları daha ayrıntılı incelemeye çalışmalıyım!
ocram

@jpillow Indeed; Gaussian copula modelleri, her çeşit çok değişkenli probit tipi modelleri içermektedir. Ölçek karıştırma yoluyla ayrıca t / lojistik kopula ve logit / robit modellerine kadar uzanırlar. Tres havalı :)
JMS

@ ocram Do! Karma veri bağlamlarında (bunları model olarak kullanırken ve sadece onlardan çizim yapmıyorken) benim gibi insanların çözülmüş görmek isteyecekleri birçok açık soru var ...
JMS

@JMS Mükemmel cevap!
kullanıcı333

28

Lojistik regresyon modelini simüle edebilirsiniz .

Daha doğrusu, önce yaş değişkeni için değerler oluşturabilirsiniz (örneğin tek biçimli bir dağılım kullanarak) ve ardından kullanarak başarı olasılığını hesaplayabilirsiniz.

π(x)=exp(β0+β1x)1+exp(β0+β1x)

β0β1β1

π

R'deki açıklayıcı örnek:

n <- 10
beta0 <- -1.6
beta1 <- 0.03
x <- runif(n=n, min=18, max=60)
pi_x <- exp(beta0 + beta1 * x) / (1 + exp(beta0 + beta1 * x))
y <- rbinom(n=length(x), size=1, prob=pi_x)
data <- data.frame(x, pi_x, y)
names(data) <- c("age", "pi", "y")
print(data)

         age        pi y
 1  44.99389 0.4377784 1
 2  38.06071 0.3874180 0
 3  48.84682 0.4664019 1
 4  24.60762 0.2969694 0
 5  39.21008 0.3956323 1
 6  24.89943 0.2988003 0
 7  51.21295 0.4841025 1
 8  43.63633 0.4277811 0
 9  33.05582 0.3524413 0
 10 30.20088 0.3331497 1

3
Güzel bir cevap, estetik açıdan bakıldığında ( pratik bir değil ) probit regresyon modeli daha da güzel olabilir. Probit modeli, iki değişkenli bir Gauss RV ile başlamaya ve bunlardan birini eşiklemeye eşdeğerdir (sıfıra veya 1'e). Gerçekten de sadece lojistik regresyonda kullanılan logit için Gauss kümülatif normal ("probit") fonksiyonunu kullanmaktan ibarettir. Pratik olarak bu aynı performansı vermelidir (ve hesaplama yavaş çünkü normcdf değerlendirmek pahalıdır (1 + e ^ x) ^ - 1), ancak sansürlü ("yuvarlatılmış") değişkenlerden biri olan bir Gauss hakkında düşünmek güzeldir.
jpillow

@jpillow: Yorumunuz için teşekkür ederiz. En kısa zamanda düşüneceğim!
ocram

1
Probit / Gaussian copula modelinde güzel olan şey, parametrelerin iki miktar arasında bir kovaryans matrisi biçiminde olmasıdır (bunlardan biri 0 ve 1'e dize edilir). Bu yüzden yorumlanabilirlik bakış açısından hoş (ama hesaplama kolaylığı açısından pek hoş değil).
jpillow

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.