สร้างข้อมูลที่มีความสัมพันธ์แบบสุ่มระหว่างไบนารีและตัวแปรต่อเนื่อง


23

ฉันต้องการสร้างตัวแปรสองตัว หนึ่งคือตัวแปรผลลัพธ์ไบนารี (พูดว่าสำเร็จ / ล้มเหลว) และอีกอันคืออายุในปีที่ผ่านมา ฉันต้องการอายุมีความสัมพันธ์เชิงบวกกับความสำเร็จ ตัวอย่างเช่นควรมีความสำเร็จมากกว่าในกลุ่มอายุที่สูงกว่าต่ำกว่า เป็นการดีที่ฉันควรอยู่ในตำแหน่งที่จะควบคุมระดับความสัมพันธ์ ฉันจะทำอย่างไร

ขอบคุณ

คำตอบ:


20

วิธีการของ @ ocram จะทำงานได้อย่างแน่นอน ในแง่ของคุณสมบัติการพึ่งพาอาศัยกันมันค่อนข้าง จำกัด

อีกวิธีคือใช้ copula เพื่อหาการกระจายตัวของข้อต่อ คุณสามารถระบุการแจกแจงส่วนเพิ่มสำหรับความสำเร็จและอายุ (ถ้าคุณมีข้อมูลที่มีอยู่สิ่งนี้ง่ายมาก) และตระกูลโคคูลา การผันแปรพารามิเตอร์ของ copula จะให้ระดับการพึ่งพาที่แตกต่างกันและตระกูล copula ที่แตกต่างกันจะทำให้คุณมีความสัมพันธ์ในการพึ่งพาอาศัยที่หลากหลาย (เช่นการพึ่งพาหางบนที่แข็งแกร่ง)

ภาพรวมที่ผ่านมาการทำเช่นนี้ในการวิจัยผ่านแพคเกจเชื่อมที่มีอยู่ที่นี่ ดูเพิ่มเติมที่การอภิปรายในเอกสารนั้นสำหรับแพ็คเกจเพิ่มเติม

คุณไม่จำเป็นต้องมีแพ็คเกจทั้งหมด นี่เป็นตัวอย่างง่ายๆของการใช้เกาส์เกาส์เกาส์น่าจะเป็นความสำเร็จเพียงเล็กน้อย 0.6 และแกมม่ากระจายวัย แตกต่างกัน 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))

เอาท์พุท:

ตาราง:

           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

ป้อนคำอธิบายรูปภาพที่นี่


คำตอบที่ดี! Copulas เป็นเครื่องมือที่สวยงามหากไม่ได้รับการชื่นชม โมเดล probit (ที่มีส่วนเสียแบบ Gaussian ในตัวแปรต่อเนื่อง) เป็นกรณีพิเศษของตัวแบบเกาส์เกาส์ แต่นี่เป็นวิธีทั่วไปมากขึ้น
jpillow

1
@JMS: +1 ใช่ Copulas น่าสนใจมาก ฉันควรลองศึกษารายละเอียดเพิ่มเติม!
ocram

@jpillow แน่นอน; แบบจำลอง Gaula copula ช่วยให้แบบจำลองชนิดหลายตัวแปรแบบโปรทีฟใด ๆ พวกเขายังขยายไปสู่ ​​copulae ของ t / logistic และ logit / robit ด้วย Tres cool :)
JMS

@ocram Do! มีคำถามเปิดมากมายในบริบทข้อมูลผสม (เมื่อใช้เป็นแบบจำลองและไม่ใช่แค่วาดจากพวกเขา) ที่คนอย่างฉันชอบที่จะเห็นการแก้ไข ...
JMS

@JMS คำตอบที่ยอดเยี่ยม!
user333

28

คุณสามารถจำลองรูปแบบการถดถอยโลจิสติก

แม่นยำยิ่งขึ้นคุณสามารถสร้างค่าสำหรับตัวแปรอายุได้ (ตัวอย่างเช่นการใช้การแจกแจงแบบเดียวกัน) จากนั้นคำนวณความน่าจะเป็นที่จะประสบความสำเร็จโดยใช้

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

โดยที่และเป็นค่าสัมประสิทธิ์การถดถอยแบบคงที่ที่จะระบุ โดยเฉพาะควบคุมขนาดของการเชื่อมโยงระหว่างความสำเร็จและอายุβ 1 β 1β0β1β1

มีค่าของตอนนี้คุณสามารถสร้างค่าสำหรับตัวแปรผลลัพธ์ไบนารีโดยใช้การแจกแจงเบอร์นูลลีπ

ตัวอย่างที่แสดงใน R:

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
คำตอบที่ดีแม้ว่าจากมุมมองด้านสุนทรียศาสตร์ ( ไม่ใช่แบบที่ใช้งานได้จริง) แบบจำลองการถดถอยแบบ probit อาจยิ่งกว่า รูปแบบของ probit นั้นเทียบเท่ากับการเริ่มต้นด้วย bivariate Gaussian RV และทำการจำลองใหม่หนึ่งในนั้น (เป็นศูนย์หรือ 1) จริงๆแล้วมันเกี่ยวข้องกับการแทนที่ฟังก์ชั่น Gaussian แบบสะสมปกติ ("probit") สำหรับ logit ที่ใช้ในการถดถอยโลจิสติก ในทางปฏิบัติสิ่งนี้ควรให้ประสิทธิภาพเดียวกัน (และการคำนวณช้ากว่าเนื่องจาก normcdf มีราคาแพงในการประเมิน (1 + e ^ x) ^ - 1) แต่ก็ดีที่จะคิดเกี่ยวกับ Gaussian ที่มีหนึ่งในตัวแปรที่ตรวจสอบ ("โค้ง")
jpillow

@jpillow: ขอบคุณสำหรับความคิดเห็นของคุณ ฉันจะคิดให้เร็วที่สุด!
ocram

1
สิ่งที่ดีเกี่ยวกับตัวแบบโปรบิต / เกาส์โคคูล่าคือพารามิเตอร์นั้นอยู่ในรูปของเมทริกซ์ความแปรปรวนร่วมระหว่างสองปริมาณ (หนึ่งในนั้นจะถูกแปลงเป็น 0 และ 1) ดังนั้นมันจึงเป็นเรื่องที่ดีจากมุมมองของการตีความ (แต่ไม่ค่อยดีจากมุมมองของความสะดวกในการคำนวณ)
jpillow

1

ครั้งแรกที่คุณสามารถสร้างความสำเร็จ / ล้มเหลวของตัวแปร ( ) แล้วสร้างอายุ ( ) มีการกระจายที่แตกต่างกันขึ้นอยู่กับค่าของXที่จะให้ความสัมพันธ์กับคุณY XXYX

ปริมาณสัมพันธ์วิธีที่ง่ายที่สุดคือการเปลี่ยนตามค่าของXจำนวนเงินที่คุณเปลี่ยนจะเป็นตัวชี้วัดความสัมพันธ์XYX

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.