2014-11-19 15 views
5

Próbuję wykonać analizę PCA moich danych za pomocą R i znalazłem this nice guide, używając prcomp i ggbiplot. Moje dane to dwa typy próbek z trzema replikami biologicznymi (6 rzędów) i około 20000 genami (tj. Zmiennymi). Po pierwsze, coraz model PCA z kodem opisanym w przewodniku nie działa:prcomp i ggbiplot: niepoprawna wartość "zgnilizny"

>pca=prcomp(data,center=T,scale.=T) 
Error in prcomp.default(data, center = T, scale. = T) : 
cannot rescale a constant/zero column to unit variance 

Jednak jeśli usunąć scale. = T część, to działa dobrze i mam model. Dlaczego tak jest i czy jest to przyczyną błędu poniżej?

> summary(pca) 
Importance of components: 
          PC1  PC2  PC3  PC4  PC5 
Standard deviation  4662.8657 3570.7164 2717.8351 1419.3137 819.15844 
Proportion of Variance 0.4879 0.2861 0.1658 0.0452 0.01506 
Cumulative Proportion  0.4879 0.7740 0.9397 0.9849 1.00000 

Po drugie, wykreślenie PCA. Nawet po prostu używając podstawowego kodu, pojawia się błąd i pusty obraz wydruku:

Co to oznacza i jak mogę to naprawić? Czy ma to coś wspólnego z (nie) skalą w tworzeniu PCA, czy jest to coś innego? To chyba coś z moimi danymi, ponieważ jeśli użyję standardowego kodu przykładowego (poniżej), otrzymam naprawdę fajny wykres PCA.

> data(wine) 
> wine.pca=prcomp(wine,scale.=T) 
> print(ggbiplot(wine.pca, obs.scale = 1, var.scale = 1, groups = wine.class, 
    ellipse = TRUE, circle = TRUE)) 

[EDIT 1] Próbowałem podzbioru moje dane na dwa sposoby: 1) usunąć wszystkie kolumny zostały wszystkie wiersze są 0 i 2) usunąć wszystkie kolumny zostały wszystkie wiersze są 0. Pierwszy podzbiorów nadal daje mi błąd scale, ale nie te, które usunęły kolumny z dowolnymi zerami. Dlaczego to? Jak to wpływa na moją PCA?

Próbowałem także użyć zwykłej komendy biplot zarówno dla oryginalnych danych (nieskalowanych), jak i dla podsegmentów danych powyżej, i to działa w obu przypadkach. A więc ma to coś wspólnego z ggbiplot?

[EDIT 2] Załadowałem podzbiór moich danych, który daje mi błąd, gdy nie usuwam wszystkich zer i działa, gdy robię. Nie używałem wcześniej gist, ale myślę, że to jest to. Lub this ...

+1

Czy istnieje jakiś sposób, aby dostarczyć dane, takie jak 'dput' swojego zestawu danych w [gist] (https://gist.github.com/)? Lub jeśli jest duży, podzbiór, który nadal powoduje błąd? Trudno jest zdiagnozować problem, którego nie możemy odtworzyć. – cdeterman

+0

Dodałem trochę danych, każda pomoc jest doceniana! – Sajber

+0

Dane podane w istotce nie odtwarzają błędu. Pobrałem plik i 'prcomp' i' ggbiplot' działały bezbłędnie. – cdeterman

Odpowiedz

6

Po przeniesieniu danych udało mi się odtworzyć błąd. Pierwszy błąd jest głównym problemem. PCA dąży do maksymalizacji wariancji każdego komponentu, dlatego ważne jest, aby nie koncentrował się tylko na jednej zmiennej, która może mieć bardzo wysoką wariancję. Pierwszy błąd:

Error in prcomp.default(tdf, center = T, scale. = T) : 
    cannot rescale a constant/zero column to unit variance 

To mówi, że niektóre z twoich zmiennych mają zerową wariancję (tzn. Brak zmienności). Widząc, jak PCA próbuje grupować rzeczy przez maksymalizację wariancji, nie ma sensu utrzymywać tych zmiennych. Mogą one być łatwo usunięte z poniższej rozmowy:

df_f <- data[,apply(data, 2, var, na.rm=TRUE) != 0] 

Po wykonaniu tego filtra, pozostałe połączenia działają prawidłowo

pca=prcomp(df_f,center=T,scale.=T) 
ggbiplot(pca) 
+0

Okay, to świetnie! Nie w pełni rozumiem twój kod, chociaż ... Usuwasz kolumny, w których nie ma wariancji ('var')? W jaki sposób różni się od usuwania wszystkich kolumn zero? (Rozumiem, że jest jakaś różnica, ale nie dokładnie jak). Mój kod usuwający zera wygląda następująco: 'nonzero = dane [, zastosuj (dane, 2, funkcja (x) wszystko (x> 0))]' – Sajber

+0

Różnica polega na tym, że jestem kolumnami usuniętymi z 0 ** wariancją ** nie te, które zawierają zero 0. A mogą być ważne, ale zmienna bez wariancji nie jest wartościowa w PCA. – cdeterman

+0

Okay, wielkie dzięki! – Sajber

Powiązane problemy