Menghasilkan nilai dari distribusi Gaussian multivarian

14

Saat ini saya mencoba untuk nilai-nilai simulasi dari berdimensi variabel acak yang memiliki distribusi normal multivariat dengan mean vector dan kovarians matriks .NXμ=(μ1,...,μN)TS

Saya berharap untuk menggunakan prosedur yang sama dengan metode inverse CDF, yang berarti bahwa saya ingin pertama menghasilkan berdimensi seragam variabel acak dan kemudian steker yang ke CDF kebalikan dari distribusi ini, sehingga untuk menghasilkan nilai .NUX

Saya mengalami masalah karena prosedurnya tidak didokumentasikan dengan baik dan ada sedikit perbedaan antara fungsi mvnrnd di MATLAB dan deskripsi yang saya temukan di Wikipedia .

Dalam kasus saya, saya juga memilih parameter distribusi secara acak. Secara khusus, saya menghasilkan masing-masing cara, , dari distribusi seragam . Saya kemudian membuat matriks kovarians menggunakan prosedur berikut:μiU(20,40)S

  1. Buat matriks segitiga lebih rendah di mana untuk dan untuk LL(i,i)=1i=1..NL(i,j)=U(1,1)i<j

  2. Biarkan di mana menunjukkan transpos dari .S=LLTLTL

Prosedur ini memungkinkan saya untuk memastikan bahwa simetris dan pasti positif. Ini juga menyediakan matriks segitiga lebih rendah sehingga , yang saya percaya diperlukan untuk menghasilkan nilai dari distribusi.SLS=LLT

Menggunakan pedoman di Wikipedia, saya harus dapat menghasilkan nilai-nilai menggunakan seragam dimensi sebagai berikut:XN

  • X=μ+LΦ1(U)

Menurut fungsi MATLAB, ini biasanya dilakukan sebagai:

  • X=μ+LTΦ1(U)

Dimana adalah CDF terbalik dari berdimensi, dipisahkan, distribusi normal, dan satu-satunya perbedaan antara kedua metode hanyalah apakah penggunaan atau . N L L TΦ1NLLT

Apakah MATLAB atau Wikipedia adalah jalan yang harus ditempuh? Atau keduanya salah?

Berk U.
sumber
2
Seperti yang dinyatakan, keduanya salah karena adalah vektor baris sedangkan T i n v n o r m ( U ) harus menjadi vektor kolom. Saat baris dan kolom Anda diluruskan, pertanyaan ini harus menjawab sendiri hanya dengan mengidentifikasi versi ( X - μ ) ( X - μ ) atau ( X - μ ) ( X - μ ) ( X - μ ) μTinvnorm(U) (Xμ)(Xμ)(Xμ)(Xμ)memberikan matriks dan versi memberikan hanya nomor: cek bahwa Anda dapat menghitung harapan versi matriks dan memberikan . S
whuber
@whuber Yeap. Membuat perubahan pada format untuk pertanyaan. Terima kasih atas tipnya - jelas cara termudah untuk memeriksa.
Berk U.

Jawaban:

14

Jika adalah vektor kolom dari standar yang normal RV, maka jika Anda menetapkan Y = L X , kovarians dari Y adalah L L T . XN(0,I)Y=LXYLLT

Saya pikir masalah yang Anda hadapi mungkin timbul dari fakta bahwa fungsi mvnrnd matlab mengembalikan vektor baris sebagai sampel, bahkan jika Anda menentukan rata-rata sebagai vektor kolom. misalnya,

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

Dan perhatikan bahwa mengubah vektor baris memberi Anda formula yang berlawanan. jika adalah vektor baris, maka Z = X L T juga merupakan vektor baris, sehingga Z T = L X T adalah vektor kolom, dan kovarians dari Z T dapat ditulis E [ Z T Z ] = L L T . XZ=XLTZT=LXTZTE[ZTZ]=LLT

Berdasarkan apa yang Anda tulis meskipun, rumus Wikipedia benar: jika adalah vektor baris dikembalikan oleh matlab, Anda tidak bisa meninggalkan-kalikan dengan L T . (Tapi benar-mengalikannya dengan L T akan memberikan contoh dengan kovarians yang sama L L T ).Φ1(U)LTLTLLT

jpillow
sumber
Perhatikan bahwa bantuan untuk mvnrnd di matlab menggunakan sebagai jumlah sampel; jumlah dimensi adalah D . Jadi jika Anda meminta sampel N dari normal multivarian D- dimensional, mengembalikannya sebagai matriks N × D. NDNDN×D
jpillow