Saya menggunakan prcomp()
fungsi untuk melakukan PCA (analisis komponen utama) di R. Namun, ada bug di fungsi itu sehingga na.action
parameter tidak berfungsi. Saya meminta bantuan pada stackoverflow ; dua pengguna di sana menawarkan dua cara berbeda dalam menangani NA
nilai. Namun, masalah dengan kedua solusi tersebut adalah ketika ada NA
nilai, 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 NA
nilai tunggal .
Contoh berikut menunjukkan bahwa prcomp()
fungsi tidak mengembalikan komponen utama untuk baris 5 karena mengandung NA
nilai.
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 NA
nilai - nilai ke nilai numerik tertentu kapan center
dan scale
diatur TRUE
agar prcomp()
fungsi berfungsi dan tidak menghapus baris yang berisi NA
, tetapi juga tidak mempengaruhi hasil analisis PCA.
Saya berpikir untuk mengganti NA
nilai 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?
sumber
NA
nilai - nilai itu : apa penyebab dari "ketiadaan"?Jawaban:
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 = 1C X n
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 .X
prcomp
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.
sumber
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.
sumber
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.
sumber
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
nipals
fungsiade4
paket, dan PCA iteratif (Ipca atau EM-PCA), diimplementasikan dalamimputePCA
fungsimissMDA
paket. Makalah ini menyimpulkan bahwa metode Ipca berkinerja terbaik di bawah berbagai kondisi terluas.Misalnya sintaks Anda adalah:
Untuk NIPAL:
Untuk Ipca:
sumber