prcomp и ggbiplot: недопустимое значение 'rot'
Я пытаюсь провести PCA-анализ своих данных с помощью R, и я нашел это хорошее руководство, используя prcomp
а также ggbiplot
, Мои данные представляют собой два типа выборок с тремя биологическими копиями каждый (т.е. 6 строк) и около 20000 генов (т.е. переменных). Во-первых, получение модели PCA с кодом, описанным в руководстве, не работает:
>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
Однако, если я удалю scale. = T
часть, это работает просто отлично, и я получаю модель. Почему это, и это причина ошибки ниже?
> 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
Во-вторых, заговор PCA. Даже просто используя базовый код, я получаю ошибку и пустое изображение графика:
> ggbiplot(pca)
Error: invalid 'rot' value
Что это значит, и как я могу это исправить? Это как-то связано с (не) масштабом в создании СПС, или это что-то другое? Я думаю, это должно быть что-то с моими данными, поскольку, если я использую стандартный пример кода (ниже), я получаю действительно хороший 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))
[РЕДАКТИРОВАТЬ 1] Я попытался поднастроить свои данные двумя способами: 1) удалить все столбцы, если все строки равны 0, и 2) удалить все столбцы, если все строки равны 0. Первое подмножество все еще дает мне scale
ошибка, но не те, которые удалили столбцы с любыми 0. Почему это? Как это влияет на мой PCA?
Кроме того, я пытался делать с помощью обычного biplot
Команда как для исходных данных (немасштабированных), так и для поднабора данных выше, и она работает в обоих случаях. Так что это как-то связано с ggbiplot
?
[РЕДАКТИРОВАТЬ 2] Я загрузил подмножество моих данных, которое выдает мне ошибку, когда я не удаляю все нули, и работает, когда я это делаю. Я раньше не использовал гист, но думаю, что это так. Или это...
1 ответ
После переноса ваших данных я смог повторить вашу ошибку. Первая ошибка является основной проблемой. PCA стремится максимизировать дисперсию каждого компонента, поэтому важно, чтобы он не фокусировался только на одной переменной, которая может иметь очень высокую дисперсию. Первая ошибка:
Error in prcomp.default(tdf, center = T, scale. = T) :
cannot rescale a constant/zero column to unit variance
Это говорит вам о том, что некоторые из ваших переменных имеют нулевую дисперсию (т.е. не изменчивость). Видя, как PCA пытается сгруппировать вещи, максимизируя дисперсию, нет смысла сохранять эти переменные. Они могут быть легко удалены с помощью следующего вызова:
df_f <- data[,apply(data, 2, var, na.rm=TRUE) != 0]
Как только вы сделаете этот фильтр, остальные вызовы будут работать должным образом
pca=prcomp(df_f,center=T,scale.=T)
ggbiplot(pca)