Saya memiliki sejumlah pengamatan multivariat dan ingin mengevaluasi kepadatan probabilitas di semua variabel. Diasumsikan bahwa data terdistribusi secara normal. Pada jumlah variabel yang rendah semuanya berfungsi seperti yang saya harapkan, tetapi pindah ke jumlah yang lebih besar menghasilkan matriks kovarians menjadi tidak pasti positif.
Saya telah mengurangi masalah di Matlab menjadi:
load raw_data.mat; % matrix number-of-values x number of variables
Sigma = cov(data);
[R,err] = cholcov(Sigma, 0); % Test for pos-def done in mvnpdf.
Jika err> 0 maka Sigma tidak pasti positif.
Adakah yang bisa saya lakukan untuk mengevaluasi data eksperimen saya pada dimensi yang lebih tinggi? Apakah ini memberi tahu saya sesuatu yang berguna tentang data saya?
Saya agak pemula di bidang ini, jadi minta maaf jika saya melewatkan sesuatu yang jelas.
Jawaban:
Matriks kovarians tidak pasti positif karena singular. Itu berarti bahwa setidaknya satu dari variabel Anda dapat dinyatakan sebagai kombinasi linear dari yang lain. Anda tidak perlu semua variabel karena nilai minimal satu dapat ditentukan dari subset yang lain. Saya akan menyarankan menambahkan variabel secara berurutan dan memeriksa matriks kovarians pada setiap langkah. Jika variabel baru membuat singularitas, letakkan dan lanjutkan ke yang berikutnya. Akhirnya, Anda harus memiliki subset variabel dengan matriks kovarians pasti postive.
sumber
regress
perintah Stata akan secara otomatis menjatuhkan variabel tambahan ketika beberapa collinear (dan outputnya dapat disimpan dalam bentuk yang mengidentifikasi variabel-variabel ini dan menandai subset non-collinear untuk digunakan di masa mendatang). Namun, komplikasi yang mungkin terjadi adalah bahwa variabel-variabel tersebut mungkin tidak selalu berupa garis lurus, tetapi mereka mungkin cukup dekat sehingga penyebaran kesalahan titik apung dalam dekomposisi Cholesky menghasilkan perkiraan nilai eigen negatif, membuat variabel-variabel tersebut membentuk garis lurus untuk semua tujuan praktis.R
juga - model regresi secara otomatis menjatuhkan variabel dari prediktor linier jika ada collinearity yang tepat.g
model linier Anda, makacolnames(model.matrix(g))[-which(is.na(coef(g))==TRUE)][-1]
harus mengembalikan nama-nama prediktor yang dimasukkan ke dalam model yang tidak persis collinear. Ini berfungsi dengan memeriksa koefisien mana yangNA
(itulah yangR
menunjukkan variabel dijatuhkan), dan menemukan nama kolom yang sesuai dari matriks model (menghapus kolom intersep). Ngomong-ngomong, itu tidak akan berfungsi jika tidak ada istilah collinear sehingga pernyataan if untuk memeriksa yangwhich(is.na(coef(g))==TRUE)
tidak kosong diperlukan :)Ini hasil yang valid. Perkiraan untuk komponen matriks kovarian adalah nol, yang mungkin benar! Ini dapat menyebabkan kesulitan perhitungan, tetapi beberapa algoritma di R (saya tidak tahu tentang Matlab) dapat menangani ini. Saya tidak mengerti mengapa orang marah tentang hal ini dan bersikeras untuk memasang model yang lebih pelit.
sumber
Satu hal yang menurut saya tidak dibahas di atas adalah bahwa itu IS mungkin untuk menghitung matriks kovarians pasti non-positif dari data empiris bahkan jika variabel Anda tidak terkait linear secara sempurna. Jika Anda tidak memiliki data yang cukup (terutama jika Anda mencoba untuk membangun matriks kovarians dimensi tinggi dari sekelompok perbandingan berpasangan) atau jika data Anda tidak mengikuti distribusi normal multivariat, maka Anda dapat berakhir dengan hubungan paradoks antar variabel, seperti cov (A, B)> 0; cov (A, C)> 0; cov (B, C) <0.
Dalam kasus seperti itu, seseorang tidak dapat memenuhi multivariat PDF normal, karena tidak ada distribusi normal multivariat yang memenuhi kriteria ini - cov (A, B)> 0 dan cov (A, C)> 0 selalu berarti bahwa cov (B, C )> 0.
Semua ini untuk mengatakan, matriks pasti non-positif tidak selalu berarti bahwa Anda termasuk variabel collinear. Bisa juga menyarankan agar Anda mencoba membuat model hubungan yang tidak mungkin mengingat struktur parametrik yang telah Anda pilih.
sumber