สมมติว่าเรามี
โดยที่เป็นตัวอย่างแบบสุ่มขนาดเท่ากันของขนาด n และ
จากนั้นความสัมพันธ์ระหว่างและเป็น0.4
ฉันสามารถขยายนี้ถึงสามตัวแปร , , ?
สมมติว่าเรามี
โดยที่เป็นตัวอย่างแบบสุ่มขนาดเท่ากันของขนาด n และ
จากนั้นความสัมพันธ์ระหว่างและเป็น0.4
ฉันสามารถขยายนี้ถึงสามตัวแปร , , ?
คำตอบ:
คำถามมีข้อผิดพลาดหลายอย่างที่ระบุไว้ในความคิดเห็น - ตามที่กำหนดไว้ในคำถาม Z ไม่เหมือนกันหรือมีความสัมพันธ์ที่ระบุ
พระคาร์ดินัลกล่าวถึง copulas และนั่นเป็นวิธีที่ใช้กันโดยทั่วไปมากที่สุด อย่างไรก็ตามมีวิธีง่าย ๆ หลายวิธีในการรับเครื่องแบบที่มีความสัมพันธ์กัน (ซึ่งสามารถเห็นได้ว่าเป็นเพียงทางลัดไปยัง copulas ประเภทต่างๆ)
ดังนั้นเรามาเริ่มต้นด้วยวิธีที่จะได้รับเครื่องแบบคู่ที่มีความสัมพันธ์กัน
1) ถ้าคุณเพิ่มเครื่องแบบสองชุดผลลัพธ์จะเป็นรูปสามเหลี่ยมไม่เหมือนกัน แต่คุณสามารถใช้ cdf ของตัวแปรผลลัพธ์เป็นการแปลงเพื่อนำผลลัพธ์กลับมาเป็นชุด แน่นอนว่าผลลัพธ์ไม่ได้มีความสัมพันธ์เชิงเส้นอีกต่อไป
นี่คือฟังก์ชัน R เพื่อแปลงสามเหลี่ยมสมมาตรบน (0,2) เป็นชุดมาตรฐาน
t2u = function(x) ifelse(x<1, x^2, 2-(2-x)^2)/2
ตรวจสอบว่ามันให้เครื่องแบบ
u1 = runif(30000)
u2 = runif(30000)
v1 = t2u(u1+u2)
และมันมีความสัมพันธ์กับ u1 และ u2:
> 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
แต่ไม่เชิงเส้นเนื่องจากการแปลงแบบโมโนโทนิเป็นความสม่ำเสมอ
ด้วยสิ่งนี้เป็นเครื่องมือที่เราสามารถสร้างตัวแปรเพิ่มเติมบางอย่างเพื่อให้ได้ชุด equicorrelated สามชุด:
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 ทั้งหมดมีลักษณะดังนี้:
-
ทางเลือกที่สองคือการสร้างโดยการผสม แทนที่จะรวมเครื่องแบบเอาพวกเขาด้วยความน่าจะเป็นคงที่
เช่น
z = ifelse(rbinom(30000,1,.7),u1,u2)
cor(cbind(u1,z))
u1 z
u1 1.0000000 0.7081533
z 0.7081533 1.0000000
ซึ่งสามารถนำมาใช้อีกครั้งเพื่อสร้างเครื่องแบบหลายชุดที่มีความสัมพันธ์กัน
-
วิธีการง่าย ๆ ที่สามคือการสร้างบรรทัดฐานที่สัมพันธ์และเปลี่ยนเป็นความสม่ำเสมอ
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
ดังนั้นตอนนี้เราเปลี่ยนเป็นชุด:
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
สิ่งหนึ่งที่ดีเกี่ยวกับวิธีที่ 2 และ 3 คือคุณได้รับความหลากหลายมากมายในการเลือกว่าสิ่งที่สัมพันธ์กันจะเป็นอย่างไร (และพวกเขาไม่จำเป็นต้องเท่าเทียมกันเหมือนตัวอย่างที่นี่)
แน่นอนว่ามีวิธีการอื่น ๆ ที่หลากหลาย แต่สิ่งเหล่านี้รวดเร็วและง่ายดาย
ส่วนที่ยุ่งยากคือการได้ค่าสหสัมพันธ์ของประชากรที่ต้องการ มันไม่ง่ายอย่างนั้นเมื่อคุณต้องการ Gaussians ที่มีความสัมพันธ์กัน คำตอบของ Quantibex ที่ สร้างตัวเลขสุ่มคู่กระจายอย่างสม่ำเสมอและมีความสัมพันธ์ให้วิธีการที่ปรับเปลี่ยนวิธีที่สามของฉันที่นี่ซึ่งควรให้เกี่ยวกับความสัมพันธ์ของประชากรที่ต้องการ
สิ่งนี้จะเริ่มต้นคุณในการแยกย่อยซีรีย์เป็นส่วนประกอบในแบบเดียวกับที่คุณย่อยสลายเวกเตอร์ให้เป็นส่วนประกอบมุมฉาก