了解PCA tSNE聚类分析

1 使用简单的 prcomp 函数来了解 PCA分析

ng=500 
    nc=20
a1=rnorm(ng*nc);dim(a1)=c(ng,nc) #创建正态分布随机矩阵500行,20列
 #dim()检索或设置对象的维度
a2=rnorm(ng*nc);dim(a2)=c(ng,nc) #因为是随机创建,这两个矩阵不一样
a3=cbind(a1,a2)
colnames(a3)=c(paste0('cell_01_',1:nc),
                   paste0('cell_02_',1:nc)) #添加列名
rownames(a3)=paste('gene_',1:ng,sep='') #添加行名
    pheatmap(a3)
    dist(a3) #dist()函数按行分析,按列的话需要转置
    a3=t(a3);dim(a3) ## PCA分析 
pca_dat <- prcomp(a3, scale. = TRUE) #prcomp()主成分分析
p=autoplot(pca_dat) + theme_classic() + ggtitle('PCA plot')
print(p)
了解PCA tSNE聚类分析_第1张图片
屏幕快照 2020-07-05 下午7.29.44.png

可以看到细胞无法被区分开来。

2 t-SNE分析

set.seed(42)
tsne_out <- Rtsne(a3,pca=FALSE,perplexity=10,theta=0.0) # Run TSNE
    tsnes=tsne_out$Y
    colnames(tsnes) <- c("tSNE1", "tSNE2") #添加列名
ggplot(tsnes, aes(x = tSNE1, y = tSNE2))+ geom_point()
了解PCA tSNE聚类分析_第2张图片
屏幕快照 2020-07-05 下午7.33.23.png

还是无法区分

3 同样的正态分布随机表达矩阵,但是其中部分细胞+3,PCA可以区分开来。

 ng=500
    nc=20
    a1=rnorm(ng*nc);dim(a1)=c(ng,nc)
    a2=rnorm(ng*nc)+3;dim(a2)=c(ng,nc) 
    a3=cbind(a1,a2)
    colnames(a3)=c(paste0('cell_01_',1:nc),paste0('cell_02_',1:nc))
    rownames(a3)=paste('gene_',1:ng,sep = '')
    pheatmap(a3)
    a3=t(a3);dim(a3) ## PCA分析 
    
    pca_dat <- prcomp(a3, scale. = TRUE)
    p=autoplot(pca_dat) + theme_classic() + ggtitle('PCA plot')
    print(p)
了解PCA tSNE聚类分析_第3张图片
屏幕快照 2020-07-05 下午7.37.40.png

4 同样的正态分布随机表达矩阵,但是其中部分细胞+3,tSNE可以区分开来。

set.seed(42)
    tsne_out <- Rtsne(a3,pca=FALSE,perplexity=10,theta=0.0) # Run TSNE
    tsnes=tsne_out$Y
    colnames(tsnes) <- c("tSNE1", "tSNE2")
    ggplot(tsnes, aes(x = tSNE1, y = tSNE2))+ geom_point()
了解PCA tSNE聚类分析_第4张图片
屏幕快照 2020-07-05 下午7.38.46.png

5 真实数据的PCA操作

rm(list = ls())  ## 魔幻操作,一键清空~
options(stringsAsFactors = F)
load(file = '../input_rpkm.Rdata')
dat[1:4,1:4]
head(metadata) 
plate=metadata$plate
## 下面是画PCA的必须操作,需要看不同做PCA的包的说明书。
dat_back=dat

dat=dat_back
dat=t(dat)
dat=as.data.frame(dat)
dat=cbind(dat,plate ) #cbind根据列进行合并,即叠加所有列 #矩阵添加批次信息
dat[1:4,1:4]
table(dat$plate)
library("FactoMineR")
library("factoextra") 
# The variable plate (index = ) is removed
# before PCA analysis
dat.pca <- PCA(dat[,-ncol(dat)], graph = FALSE)
fviz_pca_ind(dat.pca,#repel =T,
             geom.ind = "point", # show points only (nbut not "text")
             col.ind = dat$plate, # color by groups
             #palette = c("#00AFBB", "#E7B800"),
             addEllipses = TRUE, # Concentration ellipses
             legend.title = "Groups") 
ggsave('all_cells_PCA_by_plate.png') 
了解PCA tSNE聚类分析_第5张图片
屏幕快照 2020-07-05 下午7.55.52.png

你可能感兴趣的:(了解PCA tSNE聚类分析)