Subset terkorelasi terkecil dari variabel acak dari matriks korelasi

10

Saya memiliki matriks korelasi A , 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 (10010) kombinasi)? Algoritme pendekatan adalah OK.

Franck Dernoncourt
sumber
1
metrics to measure the overall correlation. Anda berpikir secara spesifik tentang faktor penentu?
ttnphns
1
Stats.stackexchange.com/q/73125/3277 pertanyaan yang sangat mirip .
ttnphns
1
Penentu log adalah fungsi submodular (lihat halaman 18 di sini ). Sayangnya, itu tidak meningkat, yang berarti hasil pendekatan serakah klasik 11/e tidak berlaku, tetapi masih terasa seperti itu mungkin bisa membantu entah bagaimana ....
Dougal
1
Jika Anda bukan ingin menggunakan nilai rata-rata korelasi, ini menjadi masalah klik berat tepi maksimum , yang tentu saja NP-keras tetapi telah melihat beberapa pekerjaan pada algoritma aproksimasi.
Dougal
3
Bagaimana dengan gagasan sederhana itu dengan analisis kluster. Ambilsebagai jarak (dissimilarity) dan melakukan pengelompokan dengan metode yang dipilih (saya mungkin akan memilih Ward atau hierarki linkage rata-rata). Pilih cluster paling ketat yang terdiri dari 10 item. |r|
ttnphns

Jawaban:

3

Mari kita anggap jumlah korelasi berpasangan absolut sebagai ukuran pilihan kita. Kami dengan demikian mencari vektor dengan yang akan meminimalkan mana.v{0,1}Nl1(v)=nvQvQij=|Aij|

Asumsikan Q juga positif sebagai A, masalahnya dikurangi untuk menyelesaikan masalah optimasi kuadratik terbatas:

v=min vQv s.t. l1(v)=n, vi{0,1}

Ini menyarankan relaksasi berikut:

v=min vQv s.t. l1(v)=n, vi[0,1]

yang dapat dengan mudah dipecahkan menggunakan pemecah yang tidak tersedia; maka hasilnya diberikan oleh komponen terbesar di .nv

Contoh kode matlab:

N=100;
n=10;
% Generate random data
A=rand(N,1000);
C=corrcoef(A');
Q=abs((C+C')/2); % make sure it is symmetric
x = cplexqp(Q,zeros(1,N),[],[], ones(1, N),n, zeros(N,1), ones(N,1));
% If you don't use CPLEX, use matlab's default
% x = quadprog(Q,zeros(1,N),[],[], ones(1, N),n, zeros(N,1), ones(N,1));
assert(abs(sum(x)-n)<1e-10);
% Find the n largest values
I=sort(x); 
v=zeros(size(x)); v(x>I(N-n))=1; 
assert(abs(sum(v)-n)<1e-10);
% Make sure we do better than 10K random trials
for i=1:10000
   vc=zeros(size(x)); vc(randperm(N,n))=1;
   assert(sum(vc)==n, 'Wrong l0 norm');
   assert(vc'*Q*vc>v'*Q*v, 'Improves result');
end
% Show results
J=find(v==1);
fprintf('The optimal solution total off-diagonal correlations are %1.3f\n', v'*Q*v-n);
fprintf('The matrix:\n');
C(J,J)
Uri Cohen
sumber
Apakah Anda memiliki versi Python untuk skrip ini?
Casimir
2

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)

Vanchinathan, Marfurt, Robelin, Kossman, dan Krause. Menemukan Barang Berharga dari Data Masif . KDD 2015. ( doi , arXiv )

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:11/ev

det[I+AvvT2]=det([I0vT(I+A)11][I+A002vT(I+A)1v][I(I+A)1v01])=det[I0vT(I+A)11]det[I+A002vT(I+A)1v]det[I(I+A)1v01]=(2vT(I+A)1v)det(I+A)

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=L1v2LI+AO(n2)O(k=1nNk2+k3)=O(Nn3)nN

Dougal
sumber
Sepertinya tautan ke kertasnya sudah mati. Apakah Anda memiliki kutipan yang berguna?
Sycorax berkata Reinstate Monica
@ Scorax Ini tersedia di Wayback Machine , tapi saya tidak bisa menemukan salinan saat ini di web. Sepertinya makalah lokakarya itu berubah menjadi makalah konferensi , yang saya tambahkan jawabannya.
Dougal
1

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.Aii1det(A0i)/det(A)A0i(n1)(n1)Ai

Mendapatkan indeks koefisien diagonal minimum dalam dengan demikian memberi tahu Anda titik mana yang memiliki korelasi terendah dengan sisa set.A1

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.

Romain Reboulleau
sumber
0

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.kn0.60.36k

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(n1)×(n1)k×kkn=43k=20

Jon Arts
sumber
2
Ini mungkin berhasil, tetapi kedengarannya ad hoc (berbunyi seperti algoritme serakah) dan Anda belum menawarkan alasan matematis apa pun yang menyarankannya harus bekerja. Apakah Anda punya jaminan itu akan berhasil, atau batas seberapa dekat itu akan sampai ke solusi terbaik?
whuber
Saya menggunakan cabang Gurobi dan terikat untuk menyelesaikan tunduk pada untuk optimalitas untuk matriks korelasi dan . Saya mendapat nilai objektif akhir 8.13. Sebagai perbandingan, metode serakah ini mencapai 42,87 sedangkan seleksi acak memiliki nilai obyektif yang diharapkan dari 62,07. Jadi tidak sehebat itu tetapi juga tidak sia-sia. Dan metode ini tentu memiliki kesederhanaan dan kecepatan untuk itu! x=argminx{0,1}n(xTC x)i=1nxi=k418×418k=20
Casimir
Ada juga korelasi positif antara entri yang disetel oleh Gurobi dan metode serakah ini. x
Casimir