#FeatureCounts
for ele in {MT1,MT2,MT3,WT1,WT2,WT3}; do featureCounts -p -T 6 -t exon -g gene_id -a Danio_rerio_Ensemble_97.gtf -o ./count/counts$ele.txt ./bam/M_H_$ele.bam; done ###每个文件进行counts
featureCounts -p -T 6 -t exon -g gene_id -a Danio_rerio_Ensemble_97.gtf -o ./count/counts_all.txt ./bam/M_H_*.bam ###所有输入文件汇成一个txt
featureCounts -T 24 -p -a ~/data/genome/Rat6.0.99.gtf -o ~/1data/07count/count_all.txt ~/1data/06sort/sorted*.bam 1
-a 注释文件,也就是GTF或者GFF文件,通过这个文件才能区分出哪些区域为外显子; -o 输出结果文件,同样会输出一个以该名字结尾的.summary统计文件; -F 指定输入注释文件类型,包括GTF,GFF,SAF等; -t 指定注释文件中功能类型,默认外显子exon -g 指定注释文件中属性信息,默认为gene_id -A 如果基因组与注释文件中染色体ID不同,可以通过-A指定一个别名文件,例如有些基因组直接用数字表示染色体号,有些使用chr前缀; -f 计算级别,以基因还是外显子为单位进行计算; -M 如何处理多重比对reads -Q 比对质量值阈值,小于此值的reads不用于计算; -G 参考序列
最后的到数据有,countData表示的是count矩阵,行代表gene,列代表样品,中间的数字代表对应count数。
安装DESeq2包 start R (version "3.6") and enter
> if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")
> BiocManager::install("DESeq2")
一个个包安装
data1<-read.table("counts_all.txt")### txt格式读取数据。。。mycounts<-read.csv("readcount.csv")##csv格式读取
dim(data1)###查看行数列数 >head(data1) ##前六行数据
>mycounts<-data1[,-(2:6)] ##先去掉第2-6列
> write.csv(mycounts, "results2.csv",row.names=FALSE) #重新写入csv格式中,去除行名,并将行名改为M_H_MT1等,删除第一行数据。###
> mycounts<-read.csv("results2.csv") #重新读入数据
> rownames(mycounts)<-mycounts[,1] ###第一列设为行名
> mycounts<-mycounts[,-1] ##去掉第1列
> head(mycounts)
手动去除第一行,就不需要下面的2行命令
> colnames(mycounts)<-mycounts[1,]
> mycounts<-mycounts[-1,]
###注意control要放在前面####
> condition <- factor(c(rep("M_H_MT",3),rep("M_H_WT",3)), levels = c("M_H_MT","M_H_WT")) ##设置对照组,实验组
> condition
[1] M_H_WT M_H_WT M_H_WT M_H_MT M_H_MT M_H_MT Levels: M_H_WT M_H_MT
>colData <- data.frame(row.names=colnames(mycounts),condition) #####colData也可以自己在excel做好另存为.csv格式,再导入即可
> colData
condition M_H_MT1 M_H_MT M_H_MT2 M_H_MT M_H_MT3 M_H_MT M_H_WT1 M_H_WT M_H_WT2 M_H_WT M_H_WT3 M_H_WT
构建dds对象,开始DESeq流程 注释:dds=DESeqDataSet Object
> dds <- DESeqDataSetFromMatrix(mycounts, colData, design= ~ condition)
> dds <- DESeq(dds)
> dds # 查看一下dds的内容
接下来,我们要查看treat versus control的总体结果,并根据p-value进行重新排序。利用summary命令统计显示一共多少个genes上调和下调(FDR0.1)
> res= results(dds)
> res = res[order(res$pvalue),] .
> head(res)
> summary(res) #所有结果先进行输出 > write.csv(res,file="All_results.csv")
> table(res$padj<0.05)
4 提取差异表达genes(DEGs)并进行gene symbol注释
差异表达基因的界定很不统一,但log2FC是用的最广泛同时也是最不精确的方式,但因为其好理解所以广泛被应用尤其芯片数据处理中,记的是havard universit做过一个统计,FC=2相对比较可靠。但无论怎么,这种界定人为因素太大,过于武断。所以GSEA,WGCNA是拿全部表达数据(可以进行初步过滤)来进行分析,并且WGCNA采取软阈值的方式来挑选genes更加合理。既然挑选差异表达基因,还是采取log2FC和padj来进行。 获取padj(p值经过多重校验校正后的值)小于0.05,表达倍数取以2为对数后大于1或者小于-1的差异表达基因。
获取padj(p值经过多重校验校正后的值)小于0.05,表达倍数取以2为对数后大于1或者小于-1的差异表达基因。代码如下
> diff_gene_deseq2 <-subset(res, padj < 0.05 & abs(log2FoldChange) > 1) #或 #
> diff_gene_deseq2 <-subset(res,padj < 0.05 & (log2FoldChange > 1 | log2FoldChange < -1))
> dim(diff_gene_deseq2)
> head(diff_gene_deseq2)
> write.csv(diff_gene_deseq2,file= "DEG_MT_vs_WT.csv")
5 用bioMart对差异表达基因进行注释
和RNA-seq(6): reads计数,合并矩阵并进行注释代码一样
> library("biomaRt")
> zebrafish<- useMart("ensembl", dataset = "drerio_gene_ensembl")
> my_ensembl_gene_id<-row.names(diff_gene_deseq2)
> mms_symbols<- getBM(attributes=c('ensembl_gene_id','external_gene_name',"description"), filters = 'ensembl_gene_id', values = my_ensembl_gene_id, mart = zebrafish)
> > head(mms_symbols)
5合并数据:res结果+mms_symbols合并成一个文件
合并的话两个数据必须有共同的列名,我们先看一下
可见,diff_gene_deseq2,mms_symbols两个文件没有共同的列名,所以要先给'diff_gene_deseq2'添加一个‘ensembl_gene_id’的列名,方法如下:(应该有更简便的方法)
> ensembl_gene_id<-rownames(diff_gene_deseq2)
> diff_gene_deseq2<-cbind(ensembl_gene_id,diff_gene_deseq2)
> colnames(diff_gene_deseq2)[1]<-c("ensembl_gene_id") ##添加到第一列
> diff_name<-merge(diff_gene_deseq2,mms_symbols,by="ensembl_gene_id") ### 两个表根据共同列合并
>head(diff_name) #查看mtpap的情况
mtpap <- diff_name[diff_name$external_gene_name=="mtpap",]
参考文章:https://www.jianshu.com/p/3a0e1e3e41d0
https://www.jianshu.com/u/51a71446d509 Y大宽