ดูเหมือนว่าคุณกำลังถามวิธีสร้างข้อมูลด้วยเมทริกซ์ความสัมพันธ์เฉพาะ
ความเป็นจริงที่มีประโยชน์คือว่าถ้าคุณมีเวกเตอร์สุ่มกับความแปรปรวนเมทริกซ์Σแล้วสุ่มเวกเตอร์xมีค่าเฉลี่ยE ( x )และความแปรปรวนเมทริกซ์Ω = Σ T ดังนั้นหากคุณเริ่มต้นด้วยข้อมูลที่มีค่าเป็นศูนย์การคูณด้วยAจะไม่เปลี่ยนแปลงดังนั้นความต้องการแรกของคุณจึงเป็นที่พอใจได้ง่าย xΣA xE( x )Ω = A Σ ATA
สมมติว่าคุณเริ่มต้นด้วย (หมายถึงศูนย์) ข้อมูล uncorrelated (เช่นเมทริกซ์ความแปรปรวนเป็นเส้นทแยงมุม) - นับตั้งแต่ที่เรากำลังพูดถึงสัมพันธ์เมทริกซ์ขอเพียงแค่ใช้เวลาฉัน คุณสามารถเปลี่ยนนี้ข้อมูลที่มีเมทริกซ์ความแปรปรวนที่ได้รับจากการเลือกจะเป็นรากที่ CholeskyของΩ - แล้วxจะมีที่ต้องการความแปรปรวนเมทริกซ์ΩΣ = IAΩA xΩ
ในตัวอย่างของคุณคุณต้องการให้สิ่งนี้:
Ω = ⎛⎝⎜10.800.810.800.81⎞⎠⎟
น่าเสียดายที่เมทริกซ์นั้นไม่ได้เป็นค่าบวกแน่นอนดังนั้นมันจึงไม่ใช่เมทริกซ์ความแปรปรวนร่วม - คุณสามารถตรวจสอบสิ่งนี้ได้โดยดูว่าดีเทอร์มีแนนต์เป็นลบ บางทีอาจจะแทน
Ω = ⎛⎝⎜10.80.30.810.80.30.81⎞⎠⎟ o r Ω= ⎛ ⎝⎜12 / 302 / 312 / 302 / 31⎞⎠⎟
จะพอเพียง ฉันไม่แน่ใจวิธีคำนวณรากที่สองของ cholesky ใน matlab (ซึ่งดูเหมือนจะเป็นสิ่งที่คุณใช้) แต่R
คุณสามารถใช้chol()
ฟังก์ชันนี้ได้
ในตัวอย่างนี้สำหรับสอง s ที่ระบุไว้ข้างต้นคูณเมทริกซ์ที่เหมาะสม (ตามลำดับ) จะเป็นΩ
A = ⎛⎝⎜10.80.300.60.933000.1972⎞⎠⎟ o r A = ⎛ ⎝⎜12 / 3000.74530.8944000.4472⎞⎠⎟
R
รหัสใช้ที่จะมาถึงนี้คือ:
x = matrix(0,3,3)
x[1,]=c(1,.8,.3)
x[2,]=c(.8,1,.8)
x[3,]=c(.3,.8,1)
t(chol(x))
[,1] [,2] [,3]
[1,] 1.0 0.0000000 0.0000000
[2,] 0.8 0.6000000 0.0000000
[3,] 0.3 0.9333333 0.1972027
x[1,]=c(1,2/3,0)
x[2,]=c(2/3,1,2/3)
x[3,]=c(0,2/3,1)
t(chol(x))
[,1] [,2] [,3]
[1,] 1.0000000 0.0000000 0.0000000
[2,] 0.6666667 0.7453560 0.0000000
[3,] 0.0000000 0.8944272 0.4472136