Imputasi nilai yang hilang untuk PCA

23

Saya menggunakan prcomp()fungsi untuk melakukan PCA (analisis komponen utama) di R. Namun, ada bug di fungsi itu sehingga na.actionparameter tidak berfungsi. Saya meminta bantuan pada stackoverflow ; dua pengguna di sana menawarkan dua cara berbeda dalam menangani NAnilai. Namun, masalah dengan kedua solusi tersebut adalah ketika ada NAnilai, baris itu dihapus dan tidak dipertimbangkan dalam analisis PCA. Kumpulan data nyata saya adalah matriks 100 x 100 dan saya tidak ingin kehilangan seluruh baris hanya karena mengandung NAnilai tunggal .

Contoh berikut menunjukkan bahwa prcomp()fungsi tidak mengembalikan komponen utama untuk baris 5 karena mengandung NAnilai.

d       <- data.frame(V1 = sample(1:100, 10), V2 = sample(1:100, 10), 
                      V3 = sample(1:100, 10))
result  <- prcomp(d, center = TRUE, scale = TRUE, na.action = na.omit)
result$x                                # $
d$V1[5] <- NA                           # $
result  <- prcomp(~V1+V2, data=d, center = TRUE, scale = TRUE, na.action = na.omit)
result$x

Saya bertanya-tanya apakah saya dapat mengatur NAnilai - nilai ke nilai numerik tertentu kapan centerdan scalediatur TRUEagar prcomp()fungsi berfungsi dan tidak menghapus baris yang berisi NA, tetapi juga tidak mempengaruhi hasil analisis PCA.

Saya berpikir untuk mengganti NAnilai dengan nilai median di satu kolom, atau dengan nilai yang sangat dekat dengan 0. Namun, saya tidak yakin bagaimana itu mempengaruhi analisis PCA.

Adakah yang bisa memikirkan cara yang baik untuk menyelesaikan masalah itu?

pengguna969113
sumber
8
Masalah Anda bukan masalah PCA tapi masalah nilai trearment nilai hilang yang lebih luas . Jika Anda tidak terbiasa dengan itu, silakan baca sedikit tentangnya. Anda memiliki banyak peluang: (1) hapus case listwise atau (2) pairwise, atau (3) ganti missings dengan mean atau median. Atau (4) ganti dengan nilai valid yang dipilih secara acak (pendekatan hot-deck). Atau menyalahkan kesalahan dengan (5) regresi timbal balik (dengan atau tanpa penambahan noise) atau dengan pendekatan EM yang lebih baik, (6).
ttnphns
Seperti yang ditunjukkan oleh komentar dan jawaban, kunci untuk mendapatkan jawaban yang baik adalah menjelaskan apa arti NAnilai - nilai itu : apa penyebab dari "ketiadaan"?
Whuber
2
Saya pikir paket "pcaMethods" dapat menyelesaikan masalah Anda (di sini )
ToNoY

Jawaban:

22

Sebenarnya ada cara yang terdokumentasi dengan baik untuk menangani matriks gappy - Anda dapat menguraikan matriks kovarians dari data Anda , yang diskalakan dengan jumlah nilai bersama :X n C = 1CXn

C=1nXTX,                Cjl=X.jY.l¯

dan kemudian memperluas koefisien utama melalui kuadrat terkecil (seperti @ user969113 menyebutkan). Ini sebuah contoh .

Namun, ada beberapa masalah dengan metode ini yang berkaitan dengan fakta bahwa matriks kovarians tidak lagi semipositif pasti dan nilai eigen / singular cenderung meningkat. Tinjauan yang bagus tentang masalah ini dapat ditemukan dalam Beckers dan Rixen (2003) , di mana mereka juga mengusulkan metode interpolasi secara optimal kesenjangan yang hilang - DINEOF (Data Interpolasi Fungsi Orthogonal Empiris Fungsi). Baru-baru ini saya menulis sebuah fungsi yang menjalankan DINEOF , dan sepertinya ini adalah cara yang jauh lebih baik. Anda dapat melakukan DINEOF pada dataset Anda secara langsung, dan kemudian menggunakan dataset yang diinterpolasi sebagai input .Xprcomp

Memperbarui

Pilihan lain untuk melakukan PCA pada dataset gappy adalah "Fungsi Orthogonal Empiris yang Dikurangi Secara Rekursif" (Taylor et al. 2013). Ini juga memperbaiki beberapa masalah dalam pendekatan kuadrat terkecil, dan secara komputasi jauh lebih cepat daripada DINEOF. Posting ini membandingkan ketiga pendekatan dalam hal akurasi rekonstruksi data menggunakan PC.

Referensi

Beckers, Jean-Marie, dan M. Rixen. "Perhitungan EOF dan Pengisian Data dari Kumpulan Data Oseanografi Tidak Lengkap." Jurnal Teknologi Atmosfer dan Kelautan 20.12 (2003): 1839-1856.

Taylor, M., Losch, M., Wenzel, M., & Schröter, J. (2013). Pada sensitivitas rekonstruksi lapangan dan prediksi menggunakan Fungsi Orthogonal Empiris yang berasal dari data gappy. Jurnal Iklim, 26 (22), 9194-9205.

Marc di dalam kotak
sumber
(+1) Ini sepertinya sumbangan berharga bagi saya, karena ini adalah ide baru. Saya mengajukan pertanyaan serupa di masa lalu yang sangat mirip: bagaimana Anda memperkirakan matriks kovarians ketika data disensor (bukannya hilang)? Jika Anda memiliki pemikiran tentang situasi itu, saya akan senang mendapat balasan!
whuber
Terima kasih @whuber - Saya percaya metode ini memiliki banyak manfaat juga. Bahkan jika Anda tidak tertarik dengan nilai-nilai yang diinterpolasi, metode ini jauh lebih baik dengan menggambarkan EOFs / PCs untuk dataset - misalnya kesalahan antara data yang direkonstruksi dan yang asli diminimalkan melalui algoritma.
Marc di dalam kotak
@whuber - Mengenai data yang disensor - Ini di luar bidang keahlian saya dan, yang menarik, saya mengajukan pertanyaan ke arah ini beberapa minggu yang lalu (yang Anda komentari!) . Firasat saya adalah bahwa seseorang harus mengisi nol dengan nilai acak di bawah batas deteksi, yang mendekati distribusi nilai yang diamati. Saya akan melihat beberapa literatur yang dikutip dari pos Anda - ini memang topik yang sangat menarik.
Marc di dalam kotak
@whuber - Anda mungkin tertarik pada makalah berikut yang menjelaskan prosedur pemasangan matriks kovarians iteratif serupa untuk data yang jarang: Bien, Jacob, dan Robert J. Tibshirani. "Perkiraan matriks kovarians yang jarang." Biometrika 98,4 (2011): 807-820.
Marc di dalam kotak
Terima kasih @Marc. Sayangnya sensor dan kesederhanaan adalah dua hal yang berbeda dengan kepedulian yang berbeda.
whuber
6

Saran saya tergantung pada berapa banyak data yang hilang dan mengapa data itu hilang. Tapi ini tidak ada hubungannya dengan PCA, sungguh. Jika ada sangat sedikit data yang hilang, maka tidak masalah apa yang Anda lakukan. Mengganti dengan median tidak ideal, tetapi jika tidak ada banyak yang hilang, itu tidak akan jauh berbeda dari solusi yang lebih baik. Anda bisa mencoba melakukan PCA dengan penggantian median dan penghapusan listwise dan melihat apakah ada perbedaan besar dalam hasil.

Selanjutnya, jika ada lebih banyak data yang hilang, Anda harus mempertimbangkan apakah itu hilang sepenuhnya secara acak, hilang secara acak, atau tidak hilang secara acak. Saya akan menyarankan beberapa imputasi dalam dua kasus pertama dan beberapa waktu dalam kasus ketiga - kecuali jika data sangat terdistorsi oleh status NMAR-nya, saya pikir beberapa imputasi akan lebih baik daripada penghapusan secara searah (Joe Schafer dari Penn State telah melakukan banyak pekerjaan pada data yang hilang - Saya ingat beberapa pekerjaannya menunjukkan bahwa beberapa imputasi bekerja cukup baik bahkan dalam beberapa kasus NMAR). Namun, jika datanya MCAR atau MAR, properti dari beberapa imputasi dapat dibuktikan.

Jika Anda memutuskan untuk menggunakan MI, satu catatan harus berhati-hati karena tanda-tanda komponen dalam PCA adalah arbitrer, dan perubahan kecil dalam data dapat membalikkan sebuah tanda. Kemudian ketika Anda melakukan PCA Anda akan mendapatkan omong kosong. Beberapa waktu yang lalu saya menemukan solusi di SAS - itu tidak sulit, tapi itu sesuatu yang harus diperhatikan.

Peter Flom - Pasang kembali Monica
sumber
1

Tidak ada solusi yang tepat untuk masalah ini. Setiap koordinat dalam vektor harus ditentukan untuk mendapatkan komponen komponen utama yang benar. Jika koordinat hilang dan digantikan oleh beberapa nilai imputed Anda akan mendapatkan hasil tetapi itu akan tergantung pada nilai imputed. jadi jika ada dua pilihan yang masuk akal untuk nilai imputasi, pilihan yang berbeda akan memberikan jawaban yang berbeda.

Michael R. Chernick
sumber
3
Saya baru saja menelusuri Google untuk PCA dan data yang hilang dan menemukan bahwa: 4.2 Bagaimana SIMCA mengatasi data yang hilang? Sederhananya algoritma NIPALS menginterpolasi titik yang hilang dengan menggunakan kuadrat terkecil tetapi memberikan data yang hilang tidak mempengaruhi model. Iterasi yang berurutan memperbaiki nilai yang hilang dengan hanya mengalikan skor dan memuat untuk titik itu. Banyak metode yang berbeda ada untuk data yang hilang, seperti estimasi tetapi mereka umumnya bertemu dengan solusi yang sama. Data yang hilang dapat diterima jika didistribusikan secara acak. Blok sistematis data yang hilang bermasalah.
user969113
1
Saya tidak tahu apa yang Anda maksud dengan tidak ada pengaruh pada model. Setiap pilihan nilai yang hilang untuk koordinat akan memengaruhi komponen utama.
Michael R. Chernick
1

Sebuah makalah baru-baru ini yang mengulas pendekatan untuk menangani nilai-nilai yang hilang dalam analisis PCA adalah "Analisis komponen utama dengan nilai-nilai yang hilang: survei komparatif metode" oleh Dray & Josse (2015) . Dua metode PCA yang paling dikenal yang memungkinkan nilai-nilai yang hilang adalah algoritma NIPALS, diimplementasikan dalam nipalsfungsi ade4paket, dan PCA iteratif (Ipca atau EM-PCA), diimplementasikan dalam imputePCAfungsi missMDApaket. Makalah ini menyimpulkan bahwa metode Ipca berkinerja terbaik di bawah berbagai kondisi terluas.

Misalnya sintaks Anda adalah:

Untuk NIPAL:

library(ade4)
nipals(d[,c(1,2)])

Untuk Ipca:

library(missMDA)
imputePCA(d[,c(1,2)],method="EM",ncp=1)
Tom Wenseleers
sumber