RNA-Seq HISAT+ HTSeq + DESeq2流程 及测序深度和质控问题讨论

数据基于BGISEQ500 SE50 clean data约1.XG,20+M reads。
  • SE50 20M是否够?
    对基因定量足够。理由:1,测序饱和度(随reads数增加,检测到的基因数随之上升。但当测序量达到一定区间后,基因数变化不明显)。 2,如果要检测isoform等信息,需要PE150或PE100(6G数据),但仅仅定量SE50 20M已经够了。

    1,FastQC质控

FastQC -t 2 XX.fq.gz
  • ’per base sequence content’几乎每个样本前15碱基存在bias。是否要剔除或剪切?
    可以不剔除。随机引物引起的碱基偏向行本质是测序起始位置偏向性,任然是真实转录本序列,故比对时候不必剔除。
    其他解释和讨论:
    https://sequencing.qcfail.com/articles/positional-sequence-bias-in-random-primed-libraries/
    http://www.360doc.com/content/18/0401/08/19913717_741943897.shtml

2, HISAT2 index

从HISAT2官网下载,这里下载mm10的index (http://daehwankimlab.github.io/hisat2/download/)

3,HISAT比对

  • 建议提前下载参考基因组的index,自己构建会很花时间。
hisat2 -p 5 -x Ref/mm10/mm10_hisat2/mm10/genome -U $file -S HISAT2_align/${filename}.sam

4, HTSeq-count计算表达量

samtools view -bS -F 4 $file > ${filename}_mapped.bam
samtools sort -n ${filename}_mapped.bam ${filename}_sort
htseq-count -f bam -s no ${filename}_sort.bam ~/Ref/UCSC_hg19/Homo_sapiens/UCSC/hg19/Annotation/Genes/genes.gtf > ${filename}.count

gtf下载:
https://genome-euro.ucsc.edu/cgi-bin/hgTables?hgsid=239123651_B3FfoLgtEzb0aUaWA5LZK0HU2URW

  • 利用paste命令合并每个文件的基因表达值。

5,DESeq2计算差异基因

library(DESeq2)
condition <- factor(c("A","A","A","B","B","B"))
hs = read.table('../htseqcounts/ko-counts.txt',header=T,sep='\t',row.names=1)
dds <- DESeqDataSetFromMatrix(hs, DataFrame(condition), ~ condition)
dds <- dds[ rowSums(counts(dds)) > 1, ]   #过滤low count数据
nrow(dds)
dds <- DESeq(dds)     #差异分析
res <- results(dds)   #用result()函数获取结果
summary(res)  #summary()函数统计结果
count_r <- counts(dds, normalized=T)  #提取normalized count matrix
resdata <-  merge(as.data.frame(res),as.data.frame(counts(dds,normalize=TRUE)),by="row.names",sort=FALSE)  #合并DESeq2结果和normalized counts数据
  • 因为HTSeq输出的count table里基因名为ENSEMBL gene name,因此要转为gene symbol来更好识别。
library(org.Mm.eg.db)
#构建函数,提取ENSEMBL gene name '.'之前的部分
getname <- function(x) strsplit(x,split = '[.]')[[1]][1]  
#构建ENSEMBL name dataframe
namedat <- data.frame(ENSEMBL_ID0=as.character(dat$ENSEMBL_ID))
#从org.Mm.eg.db里导出表格,列为ENSEMBL id, SYMBOL
list=select(org.Mm.eg.db, keys = k, columns = c('ENSEMBL','SYMBOL'), keytype = 'ENSEMBL')
#依据namedat里的ENSEMBL ID list,match list (dataframe)里的信息。
ID=as.character(namedat$ENSEMBL_ID)
ID_list=list[match(ID,list[,"ENSEMBL"]),]

你可能感兴趣的:(RNA-seq)