จะสร้างตัวเลขสุ่มที่มีความสัมพันธ์กันอย่างไร (ให้หมายถึงผลต่างและระดับความสัมพันธ์)


53

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

ด้วยความสูงและน้ำหนักของตัวแปรเทียมสองตัวที่มีความหมายและความแปรปรวนที่รู้จักกันและความสัมพันธ์ที่กำหนดฉันคิดว่าฉันพยายามเข้าใจว่าขั้นตอนที่สองนี้ควรเป็นอย่างไร

   height = gaussianPdf(height.mean, height.variance)
   weight = gaussianPdf(correlated_mean(height.mean, correlation_coefficient), 
                        correlated_variance(height.variance, 
                        correlation_coefficient))
  • ฉันจะคำนวณค่าเฉลี่ยและความแปรปรวนได้อย่างไร แต่ฉันต้องการยืนยันว่านี่เป็นปัญหาที่เกี่ยวข้องจริงๆที่นี่
  • ฉันจำเป็นต้องใช้วิธีจัดการกับเมทริกซ์หรือไม่? หรือฉันมีสิ่งอื่นที่ผิดปกติมากในแนวทางพื้นฐานของปัญหานี้

1
ไม่แน่ใจว่าฉันเข้าใจคุณถูกต้อง แต่คุณไม่จำเป็นต้องคำนวณ "ค่าเฉลี่ยและความแปรปรวน" หากคุณสมมติว่าตัวแปรเป็นตัวแปรปกติมันควรจะเพียงพอที่จะระบุค่าเฉลี่ยและผลต่างและความสัมพันธ์ มีซอฟต์แวร์เฉพาะที่คุณต้องการใช้สำหรับสิ่งนี้หรือไม่?
mark999

3
Qs ต่อไปนี้เกี่ยวข้องอย่างมาก & จะเป็นที่สนใจ: วิธีกำหนดการแจกแจงแบบนั้นที่สัมพันธ์กันจากการจับฉลากจากการแจกแจงแบบอื่นที่ระบุไว้ล่วงหน้า และสร้างตัวแปรสุ่มที่มีความสัมพันธ์ที่กำหนดให้ตัวแปรที่มีอยู่
gung - Reinstate Monica

คำตอบ:


44

ในการตอบคำถามของคุณเกี่ยวกับ "วิธีที่ดีและรวดเร็วในการสร้างตัวเลขสุ่มที่มีความสัมพันธ์": เนื่องจากความแปรปรวน - ความแปรปรวนร่วมแปรปรวนของเมทริกซ์ที่ต้องการโดยนิยามเชิงบวกแน่นอนการสลายตัวของ Cholesky คือ: C = L L T ; Lเป็นเมทริกซ์สามเหลี่ยมที่ต่ำกว่าCCLLTL

หากคุณใช้เมทริกซ์นี้เพื่อคาดการณ์ตัวแปรเวกเตอร์X ที่ไม่เกี่ยวข้องสัมพันธ์การประมาณค่าผลลัพธ์Y = L Xจะเป็นของตัวแปรสุ่มที่สัมพันธ์กันLXY=LX

คุณสามารถหาคำอธิบายว่าทำไมรัดกุมนี้เกิดขึ้นที่นี่


ขอบคุณ! สิ่งนี้มีประโยชน์อย่างมาก ฉันคิดว่าอย่างน้อยฉันก็มีความรู้สึกที่ดีขึ้นว่าฉันต้องมองอะไรต่อไป
Joseph Weissman

7
วิธีนี้ใช้ได้เฉพาะกับการแจกแจงแบบเกาส์ (ตามที่ระบุในคำถาม) หรือสามารถใช้สำหรับการสร้างตัวแปรที่มีความสัมพันธ์ที่ตามหลังการแจกแจงแบบอื่นได้หรือไม่? ถ้าไม่คุณทราบวิธีที่สามารถใช้ในกรณีนั้นได้หรือไม่?
user000001

1
@Michael: ใช่ ต้องบอกว่าได้รับเป็นเมทริกซ์ความแปรปรวนร่วมที่ถูกต้องการสลายตัว Cholesky เป็นวิธีที่เร็วที่สุด คุณสามารถหาเมทริกซ์จตุรัสรูทXแบบสมมาตรของCโดยใช้ SVD (ดังนั้นC = X X = X X Tโดยที่X = U S 0.5 V TจากC = U S V T ) แต่มันจะแพงกว่า เกินไป. CXCC=XX=XXTX=US0.5VTC=USVT
usεr11852พูดว่า Reinstate Monic

1
@Michael: แน่นอน ความแปรปรวนร่วมของพวกเขาจะเหมือนกัน (โดยประมาณ) ไม่ใช่ตัวเลขเอง
usεr11852พูดว่า Reinstate Monic

1
@Sid: การกระจายอย่างต่อเนื่องใด ๆ ที่ไม่ได้รับการสนับสนุนในสายจริงทั้งหมดจะล้มเหลวทันที ตัวอย่างเช่นหากเราใช้เครื่องแบบเราไม่สามารถรับประกันได้ว่า "หมายเลขที่สัมพันธ์กัน" จะอยู่ใน[ 0 , 1 ] ; ในทำนองเดียวกันสำหรับปัวซองเราจะจบลงด้วยตัวเลขที่ไม่ต่อเนื่อง นอกจากนี้การแจกแจงใด ๆ ที่ผลรวมของการแจกแจงยังไม่เหมือนเดิม (เช่นการรวมt -distribution จะไม่ส่งผลให้t -distribution) จะล้มเหลวเช่นกัน ในทุกกรณีที่กล่าวถึงตัวเลขที่ผลิตจะมีความสัมพันธ์ตามCU[0,1][0,1]ttCแต่พวกเขาจะไม่สอดคล้องกับการกระจายเราเริ่ม
usεr11852พูดว่า Reinstate Monic

36

+1 ถึง @ user11852 และ @ jem77bfp นี่เป็นคำตอบที่ดี ให้ฉันเข้าใกล้สิ่งนี้จากมุมมองที่แตกต่างไม่ใช่เพราะฉันคิดว่ามันจำเป็นต้องใช้ในทางปฏิบัติที่ดีกว่าแต่เพราะฉันคิดว่ามันเป็นคำแนะนำ นี่คือข้อเท็จจริงที่เกี่ยวข้องสองสามข้อที่เราทราบแล้ว:

  1. คือความชันของเส้นถดถอยเมื่อทั้ง Xและ Yมีมาตรฐานเช่น N ( 0 , 1 ) , rXYN(0,1)
  2. คือสัดส่วนของความแปรปรวนใน Yเนื่องมาจากความแปรปรวนใน X , r2YX



    (เช่นจากกฎสำหรับผลต่าง ):

  3. ความแปรปรวนของตัวแปรสุ่มคูณด้วยค่าคงที่คือค่าคงที่กำลังสองคูณความแปรปรวนดั้งเดิม:
    Var[aX]=a2Var[X]

  4. Var[X+ε]=Var[X]+Var[ε]

rρXN(0,1)aveYN(0,a2+ve)a2+ve=1|a| 1a=rra1r2xieiveyi

หากคุณต้องการทำสิ่งนี้ใน R รหัสต่อไปนี้อาจใช้ได้กับคุณ:

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

0

อีกครั้งในรูปแบบที่ง่ายที่สุดเพียงให้คุณสร้างคู่ของตัวแปรที่มีความสัมพันธ์กัน (สิ่งนี้สามารถเพิ่มขนาดได้ แต่เร็วขึ้นอย่างน่าเกลียด) และแน่นอนว่าไม่ใช่วิธีที่สะดวกที่สุดในการทำงานให้สำเร็จ ใน R คุณต้องการใช้? mvrnormในแพ็คเกจMASSทั้งสองเพราะมันง่ายกว่าและเพราะคุณสามารถสร้างตัวแปรจำนวนมากด้วยเมทริกซ์สหสัมพันธ์ประชากรที่กำหนด อย่างไรก็ตามฉันคิดว่ามันคุ้มค่าที่จะทำตามขั้นตอนนี้เพื่อดูว่าหลักการพื้นฐานบางอย่างเล่นง่าย


วิธีการนี้ regressional หลักเป็นสิ่งที่ดีโดยเฉพาะอย่างยิ่งการปล่อยให้หนึ่งในการสร้างหนึ่งสุ่ม Y มีความสัมพันธ์กับจำนวนใด ๆที่มีอยู่ X "พยากรณ์" ฉันเข้าใจถูกต้องหรือไม่
ttnphns

ขึ้นอยู่กับว่ารูปแบบของความสัมพันธ์ระหว่างตัวแปรที่คุณต้องการคืออะไร @ttnphns คุณสามารถทำซ้ำสิ่งนี้ผ่านทีละคน แต่มันจะน่าเบื่อ ในการสร้างตัวแปรที่มีความสัมพันธ์หลายอย่างพร้อมกับรูปแบบที่กำหนดควรใช้การสลายตัวของ Cholesky
gung - Reinstate Monica

gung, คุณรู้วิธีการใช้ Cholesky เพื่อสร้างหนึ่งที่มีความสัมพันธ์ Y (โดยประมาณ, ในวิธีการของคุณ) ตามเวกเตอร์ของความสัมพันธ์กับXs ที่มีอยู่หลาย(ไม่ได้จำลอง)?
ttnphns

@ttnphns คุณต้องการสร้าง Y เดี่ยว / สหสัมพันธ์ของประชากรที่กำหนด w / a ชุดของ X ไม่ใช่ชุดของตัวแปร p ที่ทุกคนมีความสัมพันธ์ของประชากรล่วงหน้า วิธีง่ายๆคือการเขียนสมการการถดถอยเพื่อสร้าง Y-hat เดี่ยวจาก X's ของคุณจากนั้นใช้วิธีการด้านบนเพื่อสร้าง Y เป็นสหสัมพันธ์ของ Y-hat ของคุณ คุณสามารถถามคำถามใหม่เกี่ยวกับมันถ้าคุณต้องการ
gung - Reinstate Monica

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

16

โดยทั่วไปแล้วนี่ไม่ใช่เรื่องง่ายที่จะทำ แต่ฉันเชื่อว่ามีแพ็กเกจสำหรับการสร้างตัวแปรแบบหลายตัวแปร (อย่างน้อยใน R, ดูmvrnormในMASSแพ็คเกจ) ที่คุณใส่เมทริกซ์ความแปรปรวนร่วมและเวกเตอร์เฉลี่ย

(X1,X2)F(x1,x2)Fx2

FX1(x1)=F(x1,x2)dx2.
FX11FX1ξ1[0,1]x^1=FX11(ξ)

F(x1,x2)x1=x^1

F(x2|X1=x^1)=F(x^1,x2)fX1(x^1),
fX1X1FX1(x1)=fX1(x1)

ξ2[0,1]ξ1F(x2|X1=x^1)x^2=(F(x2|X1=x^1))1(ξ)x^2F(x^2|X1=x^1)=ξ

หากคุณไม่เข้าใจความหมายของการเสียบตัวแปรชุดเข้ากับฟังก์ชันการแจกแจงความน่าจะเป็นแบบผกผันให้ลองทำร่างของกรณีที่ไม่มีตัวแปรแล้วจดจำการตีความเชิงเรขาคณิตของฟังก์ชันผกผัน


ความคิดที่ฉลาด! มีการอุทธรณ์ที่ใช้งานง่าย แต่ใช่ว่ามีราคาแพง
MichaelChirico

fX,Y(x,y)=fX(x)fY|X(y)

1

หากคุณพร้อมที่จะยอมแพ้อย่างมีประสิทธิภาพคุณสามารถใช้ alogorithm ที่ใช้แล้วทิ้งได้ ข้อได้เปรียบของมันคือมันช่วยให้มีการแจกแจงแบบใด ๆ (ไม่เพียงแค่เสียน)

{xi}i=1N{yi}i=1NC

cold=corr({xi},{yi})

n1n2:1n1,2N

xn1xn2

cnew=corr({xi},{yi})

|Ccnew|<|Ccold|

|Cc|<ϵ

xi

โชคดี!


xicorr(xi,yi)

xi{xi}ycorr(xi,yi)corr({xi},{yi})=(1/N)Σi=1N(xix¯)(yyy¯)

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