PCA için eksik değerlerin tahmini


23

prcomp()Fonksiyonu, R'de bir PCA (temel bileşen analizi) gerçekleştirmek için kullandım. Ancak, bu fonksiyonda na.actionparametrenin çalışmadığı bir hata var . Stackoverflow konusunda yardım istedim ; iki kullanıcı, NAdeğerlerle baş etmek için iki farklı yöntem sundu . Bununla birlikte, her iki çözümde de sorun, bir NAdeğer olduğunda, bu sıranın PCA analizinde düşmemesi ve dikkate alınmamasıdır. Gerçek veri kümem 100 x 100'lük bir matristir ve tam bir satır kaybetmek istemiyorum çünkü sadece tek bir NAdeğer içeriyor .

Aşağıdaki örnek, prcomp()işlevin bir NAdeğer içerdiği için satır 5 için ana bileşenleri döndürmediğini göstermektedir .

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

Ben ayarlayabilirsiniz merak ediyordum NAbelirli sayısal değere değerleri zaman centerve scaleayarlanır TRUEböylece prcomp()fonksiyon eserleri ve içeren satırları kaldırmaz NAPCA analizi sonucunu etkilemez, aynı zamanda 'ın ama.

NADeğerleri tek bir sütundaki medyan değeriyle veya 0'a çok yakın bir değerle değiştirmeyi düşündüm. Ancak bunun PCA analizini nasıl etkilediğinden emin değilim.

Herhangi biri bu sorunu çözmenin iyi bir yolunu düşünebilir mi?


8
Sizin probleminiz PCA problemi değil, daha geniş bir eksik değerler değerleme problemidir. Eğer aşina değilseniz, lütfen biraz okuyun . Birçok fırsatınız var: (1) vakaları liste halinde silme veya (2) ikili olarak silme veya (3) kayıpları ortalama veya ortanca ile değiştirme. Veya (4), geçerli değerler arasından seçilen rastgele seçilerek değiştirilir (hot-deck yaklaşımı). Ya da (5) karşılıklı gerileme (gürültü ilaveli ya da gürültüsüz) yaklaşımıyla ya da daha iyi bir (6) EM yaklaşımı ile eksiklikleri ima edin.
ttnphns 02:12

Yorumlar ve cevaplar gösterilirken, iyi bir cevap almanın anahtarı, NAdeğerlerin ne anlama geldiğini açıklamaktır : "eksikliğin" sebebi nedir?
whuber

2
Sanırım "pcaMethods" paketi sorununuzu çözebilir ( burada )
ToNoY

Yanıtlar:


22

Gappy matrisleri ile başa çıkmak için bir iyi belgelenmiş yolu aslında var - çürüyüp bir kovaryans matrisi olabilir veri arasında gelen contructed X paylaşılan değerlerin sayısına göre ölçeklenir, n : C = 1CXn

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

ve daha sonra ana katsayıları en küçük kareler sığmasıyla genişletin (@ user969113'te belirtildiği gibi). İşte bir örnek .

Bununla birlikte, bu yöntemde kovaryans matrisinin artık yarı yarıya kesin bir tanım olmadığı ve öz / tekil değerlerin şişirilme eğiliminde olduğu ile ilgili birçok sorun vardır. Bu sorunların güzel bir incelemesi, Beckers ve Rixen'de (2003) bulunabilir , burada eksik boşlukları en iyi şekilde enterpolasyon etmek için bir yöntem de önerebilirler - DINEOF (Veri enterpolasyonlu Ampirik Ortogonal Fonksiyonlar). Geçenlerde DINEOF'u gerçekleştiren bir fonksiyon yazdım ve bu gerçekten daha iyi bir yol gibi görünüyor. Sen senin senin veri kümesi üzerinde DINEOF gerçekleştirebilir doğrudan ve sonra içine girdi olarak ara değerli veri kümesini kullanmak .Xprcomp

Güncelleştirme

PCA'yı boşluklu veri kümesi üzerinde yürütmek için başka bir seçenek "Yinelemeli Çıkarılmış Ampirik Ortogonal Fonksiyonlar" dır (Taylor ve ark. 2013). Ayrıca en küçük kareler yaklaşımındaki bazı problemleri düzeltir ve hesaplama açısından DINEOF'tan çok daha hızlıdır. Bu gönderi , üç yöntemi de PC'leri kullanarak veri inşasının doğruluğu açısından karşılaştırıyor.

Referanslar

Beckers, Jean-Marie ve M. Rixen. "EOF Hesaplamaları ve Eksik Oşinografik Veri Kümelerinden Veri Doldurma." Atmosferik ve Okyanus Teknolojisi Dergisi 20.12 (2003): 1839-1856.

Taylor, M., Losch, M., Wenzel, M., ve Schröter, J. (2013). Gappy verilerinden elde edilen Ampirik Ortogonal Fonksiyonlar kullanılarak yapılan alan ve rekonstrüksiyonun duyarlılığı. İklim Dergisi, 26 (22), 9194-9205.


(+1) Bu bana değerli bir katkı gibi görünüyor çünkü yeni bir fikir. Uzun zaman önce dikkat çekici bir şekilde benzer olan benzer bir soruyu sordum : Veriler sansürlendiğinde (eksikler yerine) bir kovaryans matrisini nasıl tahmin edersiniz ? Bu durum hakkında herhangi bir fikriniz varsa, cevap vermekten memnuniyet duyarım!
whuber

Thanks @whuber - Bu yöntemin de bir çok değeri olduğuna inanıyorum. Enterpolasyon değerleri ile ilgilenmeseniz bile, yöntem veri kümesi için EOF'leri / PC'leri tanımlamaktan daha iyidir - örneğin, yeniden oluşturulan veriler ile orijinal arasındaki hata algoritma yoluyla en aza indirilir.
Marc

@whuber - Sansürlü verilerle ilgili - Bu benim uzmanlık alanımın dışında ve ilginç bir şekilde, birkaç hafta önce (bu konuda yorum yaptığınız) bu yönde bir soru sordum . Benim önsezim, kişi sıfırları tespit limitinin altındaki rasgele değerlerle doldurmalı ve bu da gözlemlenen değerlerin dağılımını göstermektedir. Yazınızdan alıntı yapılan bazı literatürü inceleyeceğim - bu gerçekten çok ilginç bir konudur.
Marc

@whuber - Seyrek verilere benzer bir yinelemeli kovaryans matris uydurma prosedürünü tarif eden aşağıdaki makaleyle ilgilenebilirsiniz: Bien, Jacob ve Robert J. Tibshirani. "Bir kovaryans matrisinin seyrek tahmini." Biometrika 98.4 (2011): 807-820.
Marc,

Teşekkürler @Marc. Ne yazık ki sansürleme ve azlık, farklı kaygıları olan iki farklı şeydir.
whuber

6

Önerim, ne kadar verinin eksik olduğuna ve neden eksik olduğuna bağlı. Fakat bunun PCA ile ilgisi yok aslında. Çok az veri eksikse, o zaman ne yaptığınız önemli değildir. Medyan ile değiştirmek ideal değildir, ancak çok fazla eksik yoksa, daha iyi bir çözümden çok farklı olmayacaktır. Hem ortanca değiştirme hem de listeyle silme işlemiyle PCA yapmayı deneyebilir ve sonuçlarda büyük farklılıklar olup olmadığını görebilirsiniz.

Daha sonra, eğer daha fazla veri eksikse, tamamen rastgele kayıp, rastgele kayıp veya rastgele kayıp olup olmadığını düşünmelisiniz. İlk iki vakada birden fazla değerlendirme ve üçüncü vakada da zamanın bir kısmını önerebilirim - veriler NMAR statüsüne göre yüksek oranda bozulmadığı sürece, birden fazla empoze listenin silinmesinden daha iyi olacağını düşünüyorum (Penn State'ten Joe Schafer bir Kayıp verilerle ilgili çok fazla iş var - bazı NMAR vakalarında bile çok saygınlığın oldukça iyi çalıştığını gösteren bazı çalışmaları hatırlıyorum). Bununla birlikte, eğer veriler MCAR veya MAR ise, çoklu değerlendirmenin özellikleri kanıtlanabilir.

MI ile gitmeye karar verirseniz, bir not dikkatli olmaktır, çünkü PCA'daki bileşenlerin işaretleri rastgeledir ve verilerdeki küçük bir değişiklik bir işareti çevirebilir. Öyleyse PCA'yı yaptığınızda saçma sapan bir durumla karşılaşacaksınız. Uzun zaman önce SAS'ta bir çözüm buldum - zor değil, ama dikkat edilmesi gereken bir şey.


1

Soruna doğru bir çözüm yok. Vektördeki her koordinatın doğru ana bileşen setini elde etmek için belirtilmesi gerekir. Bir koordinat eksikse ve bazı emsal değerlerle değiştirilmişse, bir sonuç alırsınız ancak bu emsal değere bağlı olacaktır. eğer emsal değer için iki makul seçenek varsa, farklı seçenekler farklı cevaplar verecektir.


3
Ben sadece PCA'ya gitmiştim ve veriyi kaybettim ve şunu buldum: 4.2 SIMCA, eksik verilerle nasıl baş edebilir? Basitçe söylemek gerekirse, NIPALS algoritması eksik noktayı en küçük kareler sığdırarak enterpolasyon yapar, ancak eksik verileri model üzerinde hiçbir etkisi olmaz. Ardışık tekrarlamalar, puan ve puanları o puan için basitçe çarparak eksik değeri iyileştirir. Tahmin gibi eksik veriler için birçok farklı yöntem vardır, ancak bunlar genellikle aynı çözüme yaklaşır. Eksik veri rastgele dağıtılırsa kabul edilebilir. Eksik veri sistematik blokları problemlidir.
user969113

1
Model üzerinde hiçbir etkisi olmadan ne demek istediğini anlamadım. Koordinat için herhangi bir eksik değer seçimi ana bileşenleri etkileyecektir.
Michael R. Chernick

1

PCA analizlerinde eksik değerlerle başa çıkma yaklaşımlarını inceleyen yeni bir makale , Dray ve Josse (2015) tarafından "Eksik değerlerle temel bileşen analizi: karşılaştırmalı bir yöntem araştırması" dır . Eksik değerlere izin veren en iyi bilinen PCA yöntemlerinden ikisi nipals, ade4paket işlevinde uygulanan NIPALS algoritması ve işlevinde uygulanan yinelemeli PCA'dır (Ipca veya EM-PCA) imputePCA.missMDA paketinde. Makale, Ipca yönteminin en geniş koşullar altında en iyi performansı gösterdiği sonucuna varmıştır.

Örnek sözdiziminiz için:

NIPALS için:

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

Ipca için:

library(missMDA)
imputePCA(d[,c(1,2)],method="EM",ncp=1)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.