转录组分析---step1 counts分布检查

整理分享最近转录组下游分析用到的代码,包括差异基因、GO/KEGG富集、GSEA、GSVA和常用的作图,主要是在生信技能树Jimmy老师代码的基础上根据自己的习惯修改了一些,感谢Jimmy老师的海量资源和无私奉献,我的分享也是希望自己记录的同时能帮助到有需要的小伙伴。
原始counts数据的检查,这一步主要是画各种图检查定量后样本counts分布,通过柱状图、小提琴图、PCA图多角度判断,数据的整体、组间、批次效应的情况。
加载示例数据

library(airway)
data(airway)
exprset <- assay(airway)
group_list <- c(rep(‘tr’,4),rep('cont',4))

数据变形

me <- function(exprset,group){         ####melt expression####
  library(reshape2)
  exprsetl <- log2(exprset+1)          #####取log值归一化####
  exprsetl <- melt(exprsetl)
  colnames(exprsetl) <- c('probe','sample','value')
  exprsetl$group <- rep(group,each=nrow(exprset))
  return(exprsetl)
}
exprsetl <- me(exprset,group_list)

柱状图等

library(ggplot2)
ggplot(exprsetl,aes(x=sample,y=value,fill=group))+geom_boxplot()
#ggplot(exprsetl,aes(x=sample,y=value,fill=group))+geom_violin()
ggplot(exprsetl,aes(value,col=group))+geom_density()
ggplot(exprsetl,aes(value,col=sample))+geom_density()
ggplot(exprsetl,aes(value,col=group))+geom_histogram()

对比组间个别基因表达 如GAPDH等管家基因

gene_boxplot <- function(exprn,gene){
  library(ggpubr)
  library(reshape2)
  exprt <- exprn[grep(gene,exprn$probe),]            ####前面取过log值######
  exprtg <- data.frame(exprt)
  rownames(exprtg) <- rownames(exprt)
  exprtg$group <- pd2$type
  colnames(exprtg)[1] <- gene
  ggboxplot(exprtg, x = "group", y = 'value',fill='group', 
            palette = "jco",color = 'black',
            add = "jitter") +
    stat_compare_means(method = 't.test')  + ggtitle('GAPDH')  ##加p值##
}
gene_boxplot(exprsetl,'GAPDH')  ###GAPDH####
hcplot <- function(expr,group_list){
  exprt <- expr
  colnames(exprt) <- paste0(group_list,seq(1:ncol(exprt)),sep='')
  hc <- hclust(dist(t(exprt)))
  nodePar <- list(lab.cex=0.6,pch=c(NA,19),cex=1,col='blue')
  #plot(as.dendrogram(hc))
  plot(as.dendrogram(hc),nodePar=nodePar,horiz=T)
}
p <- hcplot(exprset,group_list)

PCA 主成分分析,如检查批次或组别
point PCA 简易版

pcap <- function(expr,group_list){
  library(ggfortify)
  df <- as.data.frame(t(exprset))
  df$group <- as.character(group_list)
  autoplot(prcomp(df[,1:(ncol(df)-1)]),data=df,colour='group')
}
pcap(exprset,group_list)

sample PCA 显示分组

pcae <- function(expr,group_list,pdata){
  library("FactoMineR")
  library("factoextra")
  names(group_list) <- rownames(pdata)  ###or pdata$batch####
  df.pca <- PCA(t(exprset),graph = T)
  fviz_pca_ind(df.pca,addEllipses = T,col.ind =group_list)
  #fviz_pca_ind(df.pca,addEllipses = T,col.ind =factor(pdata$batch))
}
pcae(exprset,group_list,pdata)
if(T){
  library(corrplot)
  library(pheatmap)
  corrplot(cor(log2(exprset+1))) 
  c <- cor(log2(exprset+1))                   
  pheatmap(scale(c))
  pheatmap(c,scale = 'none')
}
#######or filter top500 cpm#####
if(T){
  library(pheatmap)
  exprset=exprset[apply(exprset,1, function(x) sum(x>1) > 1),] ##filter####
  dim(exprset)
  exprset=log(edgeR::cpm(exprset)+1)
  dim(exprset)
  exprset=exprset[names(sort(apply(exprset, 1,mad),decreasing = T)[1:500]),]
  dim(exprset)
  M=cor(log2(exprset+1))
  tmp=data.frame(g=group_list)
  rownames(tmp)=colnames(exprset)
  corf=pheatmap(M,annotation_col = tmp)
  exf=pheatmap(scale(cor(log2(exprset+1))))
  pic <- list(corf=corf,exf=exf)
}

你可能感兴趣的:(转录组分析---step1 counts分布检查)