Saya memiliki matriks korelasi , yang saya peroleh dengan menggunakan koefisien korelasi linear Pearson melalui corrcoef () Matlab . Matriks korelasi dimensi 100x100, yaitu saya menghitung matriks korelasi pada 100 variabel acak.
Di antara 100 variabel acak ini, saya ingin menemukan 10 variabel acak yang matriks korelasinya mengandung "korelasi sekecil mungkin" (lihat Mengukur berapa "korelasi lebih banyak" yang terkandung dalam matriks korelasi A dibandingkan dengan matriks korelasi B mengenai metrik untuk mengukur korelasi keseluruhan dalam matriks korelasi). Saya hanya peduli tentang korelasi berpasangan.
Adakah metode yang baik untuk menemukan 10 variabel acak dalam jumlah waktu yang wajar (mis. Saya tidak ingin mencoba kombinasi)? Algoritme pendekatan adalah OK.
sumber
metrics to measure the overall correlation
. Anda berpikir secara spesifik tentang faktor penentu?Jawaban:
Mari kita anggap jumlah korelasi berpasangan absolut sebagai ukuran pilihan kita. Kami dengan demikian mencari vektor dengan yang akan meminimalkan mana.v∈{0,1}N l1(v)=n v′Qv Qij=|Aij|
Asumsikan Q juga positif sebagai A, masalahnya dikurangi untuk menyelesaikan masalah optimasi kuadratik terbatas:
Ini menyarankan relaksasi berikut:
yang dapat dengan mudah dipecahkan menggunakan pemecah yang tidak tersedia; maka hasilnya diberikan oleh komponen terbesar di .n v∗
Contoh kode matlab:
sumber
Ini mungkin lebih buruk daripada ide pengelompokan hierarkis @ ttnphns. Tetapi: Saya baru saja menemukan kertas yang menggunakan sebagai fungsi tujuan submodular yang meningkat:logdet(I+A)
Jika Anda berpikir itu ukuran yang masuk akal dari "berkorelasi paling rendah", Anda bisa mendapatkan dalam faktor dari set optimal dengan hanya secara iteratif memilih titik yang memaksimalkan itu. Ini dapat dilakukan secara efisien dengan dekomposisi blok LU , di mana adalah vektor korelasi untuk entri yang sudah ada dalam matriks:1−1/e v
dan tentu saja Anda harus menghitung , di mana adalah faktorisasi Cholesky dari dan menggunakan pemecah segitiga yaitu . Jadi seluruh proses ini harus mengambil waktu untuk memilih dari elemen , dengan asumsi matriks korelasi sudah dihitung .vT(I+A)−1v=∥L−1v∥2 L I+A O(n2) O(∑nk=1Nk2+k3)=O(Nn3) n N
sumber
Saya tidak yakin untuk sepenuhnya memahami apa yang Anda maksud dengan "Saya hanya peduli tentang korelasi berpasangan" , tapi di sini ada sesuatu yang dapat membantu: gunakan pembalik matriks korelasi Anda. Istilah sama dengan , di mana adalah x dibangun dari di mana kolom dan garis ke- telah dihapus.A−1ii det(A0i)/det(A) A0i (n−1) (n−1) A i
Mendapatkan indeks koefisien diagonal minimum dalam dengan demikian memberi tahu Anda titik mana yang memiliki korelasi terendah dengan sisa set.A−1
Bergantung pada apa yang sebenarnya ingin Anda lakukan, Anda bisa mengambil 10 nilai terendah pada diagonal invert, atau mendapatkan yang pertama, lalu menghitung invert dengan titik yang dihapus, dan seterusnya.
Jika ini bukan yang Anda butuhkan, saya merasa trik ini mungkin masih bisa membantu, tetapi saya tidak yakin bagaimana caranya.
sumber
Cari dari item dengan berpasangan korelasi setidaknya: Sejak korelasi katakanlah menjelaskan dari hubungan antara dua seri lebih masuk akal untuk meminimalkan jumlah kuadrat dari korelasi untuk target item. Ini solusi sederhana saya.k n 0.6 0.36 k
Tulis ulang matriks korelasi Anda ke matriks kuadrat korelasi. Jumlahkan kuadrat dari setiap kolom. Hilangkan kolom dan baris yang sesuai dengan jumlah terbesar. Anda sekarang memiliki . Ulangi sampai Anda memiliki matriks . Anda juga bisa menyimpan kolom dan baris yang sesuai dengan jumlah terkecil. Membandingkan metode, saya menemukan dalam matriks dengan dan bahwa hanya dua item dengan jumlah dekat yang disimpan dan dihilangkan secara berbeda.n×n (n−1)×(n−1) k×k k n=43 k=20
sumber