前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于基因集的样品队列分组之PCA

基于基因集的样品队列分组之PCA

作者头像
生信技能树
发布2022-03-03 13:20:18
1.2K1
发布2022-03-03 13:20:18
举报
文章被收录于专栏:生信技能树

随着ngs价格的持续走低,转录组测序项目早就走入了大样品时代,当然了,早在芯片价格亲民的时候就有这样的趋势,目前单细胞转录组价格也是在走这个老路。

那么,对于大样品队列的转录组,很多时候是没有已知的合理的分组, 这个时候会人为的去分组后看队列异质性,比如根据免疫高低进行分组。

那么这个根据免疫高低进行分组就有多种实现方式,我们这里简单的演示一下PCA和热图的层次聚类以及gsea或者gsva这样的打分的分组,看看是否有区别。

首先看看目标基因集的PCA分组

需要载入 step1-output.Rdata 这个文件里面的表达量矩阵哦,如果你不知道 step1-output.Rdata 如果得到,看文末的代码。

首先,我们需要提前免疫基因集的小表达量矩阵,代码如下所示:

代码语言:javascript
复制
load(file = 'step1-output.Rdata')
cg=c('CD3D','CD3G CD247','IFNG','IL2RG','IRF1','IRF4','LCK','OAS2,STAT1')
cg
cg=cg[cg %in% rownames(dat)]
library("FactoMineR") #画主成分分析图需要加载这两个包
library("factoextra")  
dat.pca <- PCA(as.data.frame(t(dat[cg,]))  )
fviz_pca_ind(dat.pca,
             geom.ind = "point", # show points only (nbut not "text")
             # col.ind =  group_list, # color by groups 
             addEllipses = T,
             legend.title = "Groups"
)
dat.pca$ind$coord

如下所示:

可以看到,每个样品在这个主成分分析图表上面都是有坐标的:

代码语言:javascript
复制
> head(dat.pca$ind$coord[,1:2])
                Dim.1      Dim.2
GSM1419942 -1.5307665  0.1820390
GSM1419943  0.2224343  0.9908672
GSM1419944 -2.1294537  0.3075360
GSM1419945  0.0745490  0.2147092
GSM1419946 -4.8646160 -0.2016098
GSM1419947  0.9149908  0.2421981

我们可以简单的根据PC1去划分样品成为两个组,也可以根据PC1和PC2合起来分成4个组,这个步骤很随意。我们先试试看简单的根据PC1去划分样品成为两个组,代码如下所示:

代码语言:javascript
复制
group_list=ifelse(dat.pca$ind$coord[,1] < 0 ,'neg','pos')
table(group_list) 
pca_gl = group_list
# 其中 hclust_gl 来自于前面的教程哦
table(pca_gl,hclust_gl)

可以看到前面的层次聚类的样品分组跟现在的PCA的PC1的分组,还是有差异的:

代码语言:javascript
复制
> table(pca_gl,hclust_gl)
      hclust_gl
pca_gl high low
   neg    1  59
   pos   37  10

但是它们可视化相关却没有太大的区别:

两个分组的差异

肉眼基本上看不出来差异,区别应该是横坐标为0附近的那些样品吧!

代码是:

代码语言:javascript
复制
library(patchwork)
fviz_pca_ind(dat.pca,
             geom.ind = "point", # show points only (nbut not "text")
             col.ind =  pca_gl, # color by groups 
             addEllipses = T,
             legend.title = "Groups"
)+ 
  fviz_pca_ind(dat.pca,
               geom.ind = "point", # show points only (nbut not "text")
               col.ind =  hclust_gl, # color by groups 
               addEllipses = T,
               legend.title = "Groups"
  )


蛮有意思的, 两个方法出现冲突的免疫高低分类的样品应该是有它特殊的意义吧!

关于 step1-output.Rdata 这个文件

上面的代码载入 step1-output.Rdata 这个文件,下面给出来这个文件的制作方式,代码如下所示:

代码语言:javascript
复制
rm(list = ls())  ## 魔幻操作,一键清空~
options(stringsAsFactors = F)

library(AnnoProbe)
library(GEOquery) 
gset <- geoChina("GSE58812")
gset
gset[[1]]
a=gset[[1]] #
dat=exprs(a) #a现在是一个对象,取a这个对象通过看说明书知道要用exprs这个函数
dim(dat)#看一下dat这个矩阵的维度
#   GPL570 [HG-U133_Plus_2] Affymetrix Human Genome U133 Plus 2.0 Array
dat[1:4,1:4] #查看dat这个矩阵的1至4行和1至4列,逗号前为行,逗号后为列
boxplot(dat[,1:4],las=2)  
dat=log2(dat)
boxplot(dat[,1:4],las=2)  
library(limma)
dat=normalizeBetweenArrays(dat)
boxplot(dat[,1:4],las=2)  
pd=pData(a) 
#通过查看说明书知道取对象a里的临床信息用pData
## 挑选一些感兴趣的临床表型。
library(stringr) 
table(pd$`meta:ch1`)
group_list= ifelse(pd$`meta:ch1` == '0' ,'stable','meta')
table(group_list)
 
dat[1:4,1:4]  
dim(dat)
a  
ids=idmap('GPL570','soft')
head(ids)
ids=ids[ids$symbol != '',]
dat=dat[rownames(dat) %in% ids$ID,]
ids=ids[match(rownames(dat),ids$ID),]
head(ids) 
colnames(ids)=c('probe_id','symbol')  
ids$probe_id=as.character(ids$probe_id)
rownames(dat)=ids$probe_id
dat[1:4,1:4] 

ids=ids[ids$probe_id %in%  rownames(dat),]
dat[1:4,1:4]   
dat=dat[ids$probe_id,] 

ids$median=apply(dat,1,median) #ids新建median这一列,列名为median,同时对dat这个矩阵按行操作,取每一行的中位数,将结果给到median这一列的每一行
ids=ids[order(ids$symbol,ids$median,decreasing = T),]#对ids$symbol按照ids$median中位数从大到小排列的顺序排序,将对应的行赋值为一个新的ids
ids=ids[!duplicated(ids$symbol),]#将symbol这一列取取出重复项,'!'为否,即取出不重复的项,去除重复的gene ,保留每个基因最大表达量结果s
dat=dat[ids$probe_id,] #新的ids取出probe_id这一列,将dat按照取出的这一列中的每一行组成一个新的dat
rownames(dat)=ids$symbol#把ids的symbol这一列中的每一行给dat作为dat的行名
dat[1:4,1:4]  #保留每个基因ID第一次出现的信息

dat['ACTB',]
dat['GAPDH',]
save(dat,group_list,
     file = 'step1-output.Rdata')

如果你确实觉得我的教程对你的科研课题有帮助,让你茅塞顿开,或者说你的课题大量使用我的技能,烦请日后在发表自己的成果的时候,加上一个简短的致谢,如下所示:

代码语言:javascript
复制
We thank Dr.Jianming Zeng(University of Macau), and all the members of his bioinformatics team, biotrainee, for generously sharing their experience and codes.

十年后我环游世界各地的高校以及科研院所(当然包括中国大陆)的时候,如果有这样的情谊,我会优先见你。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信技能树 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先看看目标基因集的PCA分组
  • 关于 step1-output.Rdata 这个文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档