Подмножества раскраски в биплоте PCA - PullRequest
1 голос
/ 29 мая 2020

Я работаю над фреймом данных экспрессии генов под названием expression. Мои образцы принадлежат к разным подгруппам, указанным в имени столбца (т. Е. Все образцы, содержащие «adk» в имени столбца, принадлежат к одной и той же подгруппе)

       adk1  adk2  bas1  bas2  bas3  non1  ...
gene1   1.1   1.3   2.2   2.3   2.8   1.6
gene2   2.5   2.3   4.1   4.6   4.2   1.9
gene3   1.6   1.8   0.5   0.4   0.9   2.2
...

Я уже определил подмножества, используя

adk <- expression[grepl('adk', names(expression))]

Затем я выполнил PCA на этом наборе данных, используя

pca = prcomp (t(expression), center = F, scale= F)

. Теперь я хочу построить график компьютеров, полученных от PCA, относительно друг друга в биплоте PCA. Для этого я хочу, чтобы все образцы, принадлежащие к одной и той же подгруппе, имели один и тот же цвет (так, например, все образцы «adk» должны быть зелеными, все образцы «bas» должны быть красными, а все образцы «не» должны быть синими). Я попытался использовать аргумент color функции autoplot из ggfortify, но мне не удалось заставить его использовать мои определенные подмножества.

Я был бы рад, если бы кто-нибудь мог мне помочь с этим! Спасибо :)

Edit : Я хотел бы дать вам пример того, что я хочу сделать, используя набор данных USArrests:

head(USArrests)
           Murder Assault UrbanPop Rape
Alabama      13.2     236       58 21.2
Alaska       10.0     263       48 44.5
Arizona       8.1     294       80 31.0
Arkansas      8.8     190       50 19.5
California    9.0     276       91 40.6
Colorado      7.9     204       78 38.7

## Doing a PCA on the USArrests dataset

US.pca = prcomp(t(USArrests), center = F, scale = F)

## Now I can create a PCA biplot of PC1 and PC2 using the autoplot function (since I have ggfortify installed)

biplot1 = autoplot(US.pca,data=t(USArrests), x=1, y=2)

Я хочу все образцы, содержащие букву «e» в своем имени (в данном случае «Убийство» и «Изнасилование»), должны быть одного цвета. Образцы "UrbanPop" и "Assault" также должны быть индивидуального цвета. Надеюсь, это проясняет ситуацию :)

PS Я запускаю R в последней версии RStudio на Windows 10

Ответы [ 2 ]

3 голосов
/ 29 мая 2020

Добро пожаловать в SO! Как насчет чего-то вроде этого, используя ggbiplot package:

# PCA
pca <- prcomp (t(expressions), center = F, scale= F)
# first you get the vector of the names
# gr <- substr(rownames(t(expressions)),1,3)
# EDIT
gr <-gsub(".*(adk|bas|non).*$", "\\1",rownames(t(expressions)), ignore.case = TRUE)

library(ggbiplot)
# plot it
ggbiplot(pca, groups = gr)+ 
  scale_color_manual(values=c("green", "red"," blue")) + 
  theme_light()

enter image description here

EDIT
Если вы используя R 4.0.0, вы должны установить пакет, выполнив следующие две строки:

library(devtools)
install_github("vqv/ggbiplot", force = TRUE)

С данными:

expressions <- read.table(    text = "adk1  adk2  bas1  bas2  bas3  non1 
                               gene1   1.1   1.3   2.2   2.3   2.8   1.6
                               gene2   2.5   2.3   4.1   4.6   4.2   1.9
                               gene3   1.6   1.8   0.5   0.4   0.9   2.2", header = T )
1 голос
/ 29 мая 2020

Вы можете попробовать использовать библиотеку factoextra

Ниже пример.

      library("factoextra")
      library("FactoMineR")
      data("decathlon2")
      df <- decathlon2[1:23, 1:10]
      res.pca <- PCA(df,  graph = FALSE)
      fviz_pca_biplot(res.pca, repel = TRUE)

enter image description here

...