RNA-seq分析至尊套餐

本分析从HISAT2比对的counts开始,先整合所有的counts数据,再获取再半数以上样本中CPM>1的基因,再进行差异分析,pathway分析,并并制作GSEA的input文件

suppressMessages(library(DESeq2))
suppressMessages(library(humanid))#参考Jimmy教程,安装这个包
suppressMessages(library(limma))
suppressMessages(library(ggplot2))
suppressMessages(library(pathview))
suppressMessages(library(topGO))
suppressMessages(library(clusterProfiler))
suppressMessages(library(enrichplot))
suppressMessages(library(DOSE))
suppressMessages(library(org.Hs.eg.db))
setwd("~/Fcounts")

##########Combind data############
prefix<-"Your file names"


mytsvfile = list.files(pattern="*.tsv")   
list2env(
 lapply(setNames(mytsvfile, make.names(gsub("*.tsv$", "", mytsvfile))),
        read.table,header=T,row.names=1,check.names=FALSE,skip = 1), envir = .GlobalEnv)
files<-unlist(lapply(mytsvfile, FUN = function(x) {return(strsplit(x, split = ".tsv")[[1]][1])}))
data<-as.matrix(get(files[1])[,6])
rownames(data)<-row.names(get(files[1]))
colnames(data)<-files[1]
info<-get(files[1])[,1:5]

##########get gene whose CPM>1 in more than half samples##########
for (i in files[-1]){
 tmp<-as.matrix(get(i)[,6])
 rownames(tmp)<-row.names(get(i))
 colnames(tmp)<-i
 data<-cbind(data,tmp)
}
data<-cbind(info,data)
meta_data<-data[,1:5]
counts<-data[,6:ncol(data)]
colnames(counts)<-files2
data<-cbind(meta_data,counts)
write.csv(data,"BC_featureCounts_counts.csv")

rt <- as.matrix(t(t(counts)/colSums(counts) * 1000000)) #this is CPM values
write.csv(rt,"BC_CPM.csv")

MyFunction<-function(x){
 ifelse(x>1,1,0)
}
#设置一个计数函数
keep_genes<-vector()#设置一个空的变量储存基因
row_names<-row.names(rt)
for (i in row_names){
 cpm<-rt[i,]
 count<-apply(as.matrix(cpm),2,MyFunction)
 a<-sum(count)
 if (a>=ncol(rt)/2)
   keep_genes<-c(keep_genes,i)
}
new_counts<-counts[keep_genes,]
new_cpm<-rt[keep_genes,]

#-----TPM Calculation------

avg_cpm <- data.frame(avg_cpm=rowMeans(new_cpm))
kb <- meta_data$Length / 1000
rpk <- new_counts / kb
tpm <- t(t(rpk)/colSums(rpk) * 1000000)
avg_tpm <- data.frame(avg_tpm=rowMeans(tpm))

write.csv(new_counts,paste0(prefix,"_new_counts_CPM1.csv"))
write.csv(new_cpm,paste0(prefix,"_cpm_CPM1.csv"))
write.csv(avg_tpm,paste0(prefix,"_avg_tpm_CPM1.csv"))
write.csv(avg_cpm,paste0(prefix,"_avg_cpm_CPM1.csv"))
write.csv(tpm,paste0(prefix,"_tpm_CPM1.csv"))
write.csv(cpm,paste0(prefix,"_cpm_CPM1.csv"))

###########DEG analysis############
group_list<-c(rep("NC",3),rep("OE",3))
colData <- data.frame(row.names=colnames(new_counts), group_list=group_list)
dds1 <- DESeqDataSetFromMatrix(countData = new_counts,
                              colData = colData,
                              design = ~ group_list)
suppressMessages(dds <- DESeq(dds1))
res <-results(dds, contrast=c("group_list","OE","NC"))

resOrdered <- res[order(res$padj),]
resOrdered=as.data.frame(resOrdered)
sigoutTab1<-resOrdered[abs(resOrdered$log2FoldChange)>1 & resOrdered$padj<0.05,]
sigoutTab2<-resOrdered[abs(resOrdered$log2FoldChange)>0.5849625 & resOrdered$padj<0.05,]
write.csv(resOrdered,paste0(prefix,"_DESeq2_results.csv"))
write.csv(sigoutTab1,paste0(prefix,"_FoldChange_2_DESeq2_results.csv"))
write.csv(sigoutTab2,paste0(prefix,"_FoldChange_1.5_DESeq2_results.csv"))


##########Pathway#########
genes1<-unlist(lapply(row.names(sigoutTab1), FUN = function(x) {return(strsplit(x, split = ".",fixed = T)[[1]][1])}))
gene_list1<-select(org.Hs.eg.db, keys=as.character(genes1), columns=c("SYMBOL","ENTREZID"), keytype="ENSEMBL") #keytype是你输入基因编号类型,columns是你输出对基因编号类型,基因怎么导入不再赘述。
genes2<-unlist(lapply(row.names(sigoutTab2), FUN = function(x) {return(strsplit(x, split = ".",fixed = T)[[1]][1])}))
gene_list2<-select(org.Hs.eg.db, keys=as.character(genes2), columns=c("SYMBOL","ENTREZID"), keytype="ENSEMBL") #keytype是你输入基因编号类型,columns是你输出对基因编号类型,基因怎么导入不再赘述。
entrezIDs1 <- as.character(gene_list1[,3])
entrezIDs2 <- as.character(gene_list2[,3])

go1 <- enrichGO(entrezIDs1, OrgDb = "org.Hs.eg.db", ont="all")
write.csv(as.data.frame(go1@result), file=paste0(prefix,"_go_all_all_FoldChange_2.csv"))

kk1 <- enrichKEGG(gene = entrezIDs1,
                organism="human",
                pvalueCutoff = 0.05,
                qvalueCutoff = 0.05,
                minGSSize = 1,
                #readable = TRUE ,
                use_internal_data =FALSE)
write.csv(as.data.frame(kk1@result), file=paste0(prefix,"_kegg_all_FoldChange_2.csv"))

tiffFile<-paste0(prefix,"_FoldChange_2_go_all_dotplot.tiff")
p1<-dotplot(go1, split="ONTOLOGY") + facet_grid(ONTOLOGY~., scale="free")
tiff(file=tiffFile,width = 1000,height = 600)
plot(p1)
dev.off()
tiff(file=paste0(prefix,"_FoldChange_2_KEGG_barplot.tiff"),width = 20,height = 20,units ="cm",compression="lzw",bg="white",res=300)
g1<-barplot(kk1, drop = TRUE, showCategory = 12)
plot(g1)
dev.off()
#??ͼ
tiff(file=paste0(prefix,"_FoldChange_2_KEGG_dotplot.tiff"),width = 20,height = 20,units ="cm",compression="lzw",bg="white",res=300)
gg1<-dotplot(kk1)
plot(gg1)
dev.off()


kk2 <- enrichKEGG(gene = entrezIDs2,
                 organism="human",
                 pvalueCutoff = 0.05,
                 qvalueCutoff = 0.05,
                 minGSSize = 1,
                 #readable = TRUE ,
                 use_internal_data =FALSE)
write.csv(as.data.frame(kk2@result), paste0(prefix,"_kegg_all_FoldChange_1.5.csv"))

tiffFile<-paste0(prefix,"_FoldChange_1.5_go_all_dotplot.tiff")
p2<-dotplot(go2, split="ONTOLOGY") + facet_grid(ONTOLOGY~., scale="free")
tiff(file=tiffFile,width = 1000,height = 600)
plot(p2)
dev.off()

tiff(file=paste0(prefix,"_FoldChange_1.5_KEGG_barplot.tiff"),width = 20,height = 20,units ="cm",compression="lzw",bg="white",res=300)
g2<-barplot(kk2, drop = TRUE, showCategory = 12)
plot(g2)
dev.off()
#??ͼ
tiff(file=paste0(prefix,"_FoldChange_1.5_KEGG_dotplot.tiff"),width = 20,height = 20,units ="cm",compression="lzw",bg="white",res=300)
gg2<-dotplot(kk2)
plot(gg2)
dev.off()


############get the annotation form gtf files#######
#creat .csv from gtf files very easy得到human_v0.0.3.csv
#参考这个https://www.jianshu.com/p/e1f3e5abb44f
ann<-read.csv("~/human_v0.0.3.csv",header = T,row.names = 1,check.names = F)
ann_tmp<-ann[,c("gene_name","gene_type")]
tpm_ann<-cbind(ann_tmp[row.names(tpm),],tpm)
tpm_ann<-as.matrix(tpm_ann[!duplicated(tpm_ann$gene_name),])
row.names(tpm_ann)<-as.character(tpm_ann[,1])
new_tpm<-tpm_ann[,3:ncol(tpm_ann)]
write.csv(new_tpm,paste0(prefix,"_tpm_CPM1_with_annotation.csv"))  
createGSEAinput(prefix = prefix, exprSet=new_tpm,group_list=group_list)
##########
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容