Ini bukan bug.
Seperti yang telah kami jelajahi (ekstensif) dalam komentar, ada dua hal yang terjadi. Yang pertama adalah bahwa kolom U dibatasi untuk memenuhi persyaratan SVD: masing-masing harus memiliki panjang unit dan ortogonal untuk yang lainnya. Melihat U sebagai variabel acak yang dibuat dari matriks X acak melalui algoritma SVD tertentu, dengan demikian kami mencatat bahwa k ini (k ( k + 1 ) / 2 kendala independen fungsional ini menciptakan dependensi statistik di antara kolomU .
Ketergantungan ini mungkin terungkap sampai tingkat yang lebih besar atau lebih kecil dengan mempelajari korelasi antara komponen U , tetapi fenomena kedua muncul : solusi SVD tidak unik. Minimal, setiap kolom U dapat dinegasikan secara independen, memberikan setidaknya 2k solusi berbeda dengan k kolom. Korelasi yang kuat (melebihi 1 / 2 ) dapat diinduksi dengan mengubah tanda-tanda kolom tepat. (Salah satu cara untuk melakukan ini diberikan dalam komentar pertama saya untuk jawaban Amoeba di utas ini: Saya memaksa semua uii,i=1,…,k untuk memiliki tanda yang sama, membuat semuanya negatif atau semuanya positif dengan probabilitas yang sama.) Di lain pihak, semua korelasi dapat dibuat menghilang dengan memilih tanda-tanda secara acak, mandiri, dengan probabilitas yang sama. (Saya memberikan contoh di bawah ini di bagian "Edit".)
Dengan hati-hati, kita dapat sebagian membedakan kedua fenomena ini ketika membaca matriks sebar komponen U . Karakteristik tertentu - seperti penampakan titik-titik yang terdistribusi secara seragam di wilayah melingkar yang terdefinisi dengan baik - meyakini kurangnya kemandirian. Lainnya, seperti scatterplots yang menunjukkan korelasi bukan nol yang jelas, jelas tergantung pada pilihan yang dibuat dalam algoritma - tetapi pilihan tersebut hanya mungkin karena kurangnya independensi di tempat pertama.
Tes akhir dari algoritma penguraian seperti SVD (atau Cholesky, LR, LU, dll) adalah apakah ia melakukan apa yang diklaimnya. Dalam keadaan ini cukup untuk memeriksa bahwa ketika SVD mengembalikan tiga matriks (U,D,V) , bahwa X dipulihkan, hingga kesalahan floating point yang diantisipasi, oleh produk UDV′ ; bahwa kolom U dan V adalah ortonormal; dan bahwa D adalah diagonal, elemen-elemen diagonalnya adalah non-negatif, dan disusun dalam urutan menurun. Saya telah menerapkan tes tersebut ke svd
algoritma di Windows 7R
dan tidak pernah menemukan kesalahan. Meskipun itu bukan jaminan, itu sepenuhnya benar, pengalaman seperti itu - yang saya percaya dibagikan oleh banyak orang - menunjukkan bahwa bug apa pun akan membutuhkan beberapa jenis input yang luar biasa agar dapat terwujud.
Berikut ini adalah analisis yang lebih rinci tentang poin-poin spesifik yang diangkat dalam pertanyaan.
Menggunakan R
's svd
prosedur, pertama Anda dapat memeriksa bahwa sebagai k meningkat, korelasi antara koefisien U tumbuh lebih lemah, namun mereka masih nol. Jika Anda hanya melakukan simulasi yang lebih besar, Anda akan menemukan mereka signifikan. (Ketika k=3 , 50000 iterasi harus mencukupi.) Bertentangan dengan pernyataan dalam pertanyaan, korelasi tidak "menghilang sepenuhnya."
Kedua, cara yang lebih baik untuk mempelajari fenomena ini adalah dengan kembali ke pertanyaan mendasar tentang independensi koefisien. Meskipun korelasi cenderung mendekati nol dalam banyak kasus, kurangnya independensi jelas terlihat. Ini dibuat paling jelas dengan mempelajari distribusi multivariat penuh koefisien U . Sifat distribusi muncul bahkan dalam simulasi kecil di mana korelasi nol tidak dapat (belum) terdeteksi. Misalnya, periksa matriks sebaran koefisien. Untuk membuat ini bisa dilakukan, saya mengatur ukuran setiap dataset yang disimulasikan menjadi 4 dan tetap k=2 , sehingga menggambar 1000realisasi dari matriks 4×2U , menciptakan matriks 1000×8 . Berikut ini adalah matriks sebar penuhnya, dengan variabel-variabel yang dicantumkan berdasarkan posisi mereka di dalam U :
Memindai bawah kolom pertama mengungkapkan kurangnya menarik kemerdekaan antara u11 dan lainnya uij : lihat bagaimana kuadran atas dari sebar dengan u21 hampir kosong, misalnya; atau periksa awan miring ke atas yang menggambarkan hubungan (u11,u22) dan awan miring ke bawah untuk (u21,u12) . Pandangan yang dekat menunjukkan kurangnya kemandirian di antara hampir semua koefisien ini: sangat sedikit dari mereka yang terlihat independen, walaupun kebanyakan dari mereka menunjukkan korelasi yang hampir nol.
(NB: Sebagian besar awan melingkar adalah proyeksi dari hypersphere yang diciptakan oleh kondisi normalisasi yang memaksa jumlah kuadrat dari semua komponen dari setiap kolom menjadi satu.)
Matriks scatterplot dengan k=3 dan k=4 menunjukkan pola yang sama: fenomena ini tidak terbatas padak=2 , juga tidak bergantung pada ukuran setiap set data yang disimulasikan: mereka semakin sulit untuk dihasilkan dan diperiksa.
Penjelasan untuk pola-pola ini mengacu pada algoritma yang digunakan untuk mendapatkan U dalam dekomposisi nilai singular, tetapi kita tahu pola non-independensi tersebut harus ada oleh sifat-sifat yang sangat menentukan dari U : karena setiap kolom berturut-turut adalah (secara geometris) ortogonal dengan pendahulunya yang, kondisi ortogonalitas ini memaksakan dependensi fungsional di antara koefisien, yang dengan demikian menerjemahkan dependensi statistik di antara variabel acak yang sesuai.
Edit
Menanggapi komentar, mungkin perlu berkomentar sejauh mana fenomena ketergantungan ini mencerminkan algoritma yang mendasari (untuk menghitung SVD) dan seberapa banyak mereka melekat dalam sifat proses.
The spesifik pola korelasi antara koefisien tergantung banyak pada pilihan sewenang-wenang yang dilakukan oleh algoritma SVD, karena solusinya adalah tidak unik: kolom U dapat selalu independen dikalikan dengan −1 atau 1 . Tidak ada cara intrinsik untuk memilih tanda. Jadi, ketika dua algoritma SVD membuat pilihan tanda yang berbeda (sewenang-wenang atau bahkan mungkin acak), mereka dapat menghasilkan pola pola sebar yang berbeda dari nilai (uij,ui′j′) . Jika Anda ingin melihat ini, ganti stat
fungsi dalam kode di bawah ini dengan
stat <- function(x) {
i <- sample.int(dim(x)[1]) # Make a random permutation of the rows of x
u <- svd(x[i, ])$u # Perform SVD
as.vector(u[order(i), ]) # Unpermute the rows of u
}
Ini pertama secara acak memesan kembali pengamatan x
, melakukan SVD, kemudian menerapkan urutan terbalik u
agar sesuai dengan urutan pengamatan asli. Karena efeknya adalah untuk membentuk campuran versi yang dipantulkan dan diputar dari scatterplots asli, scatterplots dalam matriks akan terlihat jauh lebih seragam. Semua korelasi sampel akan sangat mendekati nol (dengan konstruksi: korelasi yang mendasarinya persis nol). Namun demikian, kurangnya independensi masih akan jelas (dalam bentuk lingkaran seragam yang muncul, khususnya antara ui,j dan ui,j′ ).
Kurangnya data di beberapa kuadran dari beberapa plot sebar asli (ditunjukkan pada gambar di atas) muncul dari bagaimana R
algoritma SVD memilih tanda untuk kolom.
Tidak ada yang berubah tentang kesimpulan. Karena kolom kedua dari U adalah ortogonal dengan yang pertama, maka (dianggap sebagai variabel acak multivariat) bergantung pada yang pertama (juga dianggap sebagai variabel acak multivariat). Anda tidak dapat membuat semua komponen dari satu kolom tidak tergantung pada semua komponen yang lain; yang dapat Anda lakukan adalah melihat data dengan cara yang mengaburkan dependensi - tetapi ketergantungan akan tetap ada.
Berikut adalah R
kode yang diperbarui untuk menangani kasing k>2 dan menggambar sebagian dari matriks sebar.
k <- 2 # Number of variables
p <- 4 # Number of observations
n <- 1e3 # Number of iterations
stat <- function(x) as.vector(svd(x)$u)
Sigma <- diag(1, k, k); Mu <- rep(0, k)
set.seed(17)
sim <- t(replicate(n, stat(MASS::mvrnorm(p, Mu, Sigma))))
colnames(sim) <- as.vector(outer(1:p, 1:k, function(i,j) paste0(i,",",j)))
pairs(sim[, 1:min(11, p*k)], pch=".")