การสร้างค่าจากการแจกแจงแบบเกาส์หลายตัวแปร


14

ฉันกำลังพยายามที่จะจำลองค่าของNมิติตัวแปรสุ่มXที่มีการแจกแจงแบบปกติหลายตัวแปรที่มีค่าเฉลี่ยเวกเตอร์และความแปรปรวนเมทริกซ์Sμ=(μ1,...,μN)TS

ผมหวังที่จะใช้วิธีการคล้ายกับวิธีการผกผัน CDF หมายความว่าผมต้องการที่จะเป็นครั้งแรกสร้างมิติเครื่องแบบตัวแปรสุ่มแล้วเสียบเข้าไปใน CDF ผกผันของการกระจายนี้เพื่อที่จะสร้างมูลค่าXNUX

ฉันกำลังมีปัญหาเพราะขั้นตอนที่ไม่ได้เป็นเอกสารที่ดีและมีความแตกต่างเล็กน้อยระหว่างฟังก์ชั่น mvnrnd ใน MATLABและคำอธิบายที่ผมพบว่าในวิกิพีเดีย

ในกรณีของฉันฉันเลือกพารามิเตอร์ของการแจกแจงแบบสุ่มด้วย โดยเฉพาะอย่างยิ่งผมสร้างแต่ละหมายความว่าจากการกระจายชุด(20,40) ฉันสร้างเมทริกซ์ความแปรปรวนร่วมSโดยใช้ขั้นตอนต่อไปนี้: U ( 20 , 40 )μiU(20,40)S

  1. สร้างเมทริกซ์สามเหลี่ยมล่างที่โดยที่L ( i , i ) = 1สำหรับi = 1 .. NและL ( i , j ) = U ( - 1 , 1 )สำหรับ i < jLL(i,i)=1i=1..NL(i,j)=U(1,1)i<j

  2. ให้ที่L Tหมายถึง transpose ของLS=LLTLTL

ขั้นตอนนี้ช่วยให้ฉันมั่นใจได้ว่านั้นสมมาตรและเป็นบวกแน่นอน นอกจากนี้ยังมีเมทริกซ์สามเหลี่ยมที่ต่ำกว่าLดังนั้นS = L L Tซึ่งฉันเชื่อว่าจำเป็นต้องสร้างค่าจากการแจกแจงSLS=LLT

ใช้แนวทางใน Wikipedia ฉันควรจะสามารถสร้างค่าของโดยใช้เครื่องแบบN -dimensional ดังนี้XN

  • X=μ+LΦ1(U)

อย่างไรก็ตามจากฟังก์ชั่น MATLAB สิ่งนี้มักจะทำดังนี้:

  • X=μ+LTΦ1(U)

ที่ไหนเป็น CDF ผกผันของNมิติ, แยกกระจายปกติและแตกต่างระหว่างทั้งสองวิธีก็คือว่าจะใช้LหรือL TΦ1NLLT

MATLAB หรือ Wikipedia เป็นวิธีที่จะไปไหม หรือทั้งสองอย่างผิดปกติ?


2
ดังที่ระบุไว้ทั้งคู่ผิดเนื่องจากเป็นเวกเตอร์แถวขณะที่T ฉันn v n o r m ( U )จะต้องเป็นเวกเตอร์คอลัมน์ เมื่อคุณดึงแถวและคอลัมน์ของคุณออกตรงคำถามนี้ควรตอบตัวเองง่ายๆโดยระบุว่ารุ่นใดของ( X - μ ) ( X - μ )หรือ ( X - μ ) ( X - μ ) μTinvnorm(U) (Xμ)(Xμ)(Xμ)(Xμ)ให้เมทริกซ์และเวอร์ชันใดให้ตัวเลขเพียง: ตรวจสอบว่าคุณสามารถคำนวณความคาดหวังของเวอร์ชันเมทริกซ์และมันให้ได้ S
whuber

@whuber Yeap ทำการเปลี่ยนแปลงในการจัดรูปแบบสำหรับคำถาม ขอบคุณสำหรับเคล็ดลับ - วิธีที่ง่ายที่สุดในการตรวจสอบ
Berk U.

คำตอบ:


14

ถ้าเป็นเวกเตอร์คอลัมน์มาตรฐานปกติ RV แล้วถ้าคุณตั้งค่าY = L XแปรปรวนของYคือL L T XN(0,I)Y=LXYLLT

ฉันคิดว่าปัญหาที่คุณอาจเกิดขึ้นจากความจริงที่ว่าฟังก์ชั่นmvnrndของmatlabคืนค่าเวกเตอร์แถวเป็นตัวอย่างแม้ว่าคุณจะระบุค่าเฉลี่ยเป็นเวกเตอร์คอลัมน์ เช่น,

 > size(mvnrnd(ones(10,1),eye(10))  
 > ans =
 >      1    10

และสังเกตว่าการแปลงเวคเตอร์แถวให้สูตรตรงข้ามกับคุณ ถ้าเป็นเวกเตอร์แถวแล้วZ = X L Tเป็นเวกเตอร์แถวดังนั้นZ T = L X Tเป็นเวกเตอร์คอลัมน์และความแปรปรวนร่วมของZ TสามารถเขียนE [ Z T Z ] = L L T . XZ=XLTZT=LXTZTE[ZTZ]=LLT

สูตร Wikipedia นั้นถูกต้อง: ถ้าเป็นเวกเตอร์แถวที่ส่งคืนโดย matlab คุณจะไม่สามารถคูณด้วยL Tได้ (แต่การคูณด้านขวาด้วยL Tจะให้ตัวอย่างที่มีความแปรปรวนร่วมเดียวกันกับL L T )Φ1(U)LTLTLLT


โปรดทราบว่าความช่วยเหลือสำหรับmvnrndใน matlab ใช้เป็นจำนวนตัวอย่าง จำนวนมิติคือD ดังนั้นถ้าคุณขอตัวอย่างNจากD -dimensional multivariate ปกติมันจะคืนพวกมันเป็นเมทริกซ์N × D NDNDN×D
jpillow
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.