Hisat2+FeatureCounts+DESeq2流程+作图!

featureCounts是一个用来统计count数的软件,运行的速度飞快,比之前用的htseq-count快了好多好多。 照例先说一下怎么下载这个软件:

wget https://jaist.dl.sourceforge.net/project/subread/subread-1.6.2/subread-1.6.2-Linux-x86_64.tar.gz
tar -zxvf  subread-1.6.2-Linux-x86_64.tar.gz
cd subread-1.6.2-Linux-x86_64/bin
./featureCounts -h

然后来说这次的流程。 照旧用Hisat2来比对出Bam文件之后。 使用featureCounts统计:

featureCounts \
    -T 16 \
    -p \
    -t exon \
    -g gene_id \
    -a Homo_sapiens.GRCh38.92.chr_patch_hapl_scaff.gtf \
    -o all_feature.txt \
    1.sort.bam \
    2.sort.bam \
    3.sort.bam \
    4.sort.bam

# -T 使用的线程数
# -p 如果是paird end 就用
# -t 将exon作为一个feature
# -g 将gene_id作为一个feature
# -a 参考的gtf/gff
# -o 输出文件
# 最后加上bam文件,有几个就加几个

然后会得到两个文件,一个是结果,一个是结果的summary。 接下来就可以用DESeq2对结果进行愉快的操作了。 使用R。 我这次的样本有6个。

library(DESeq2)

## 数据预处理
sampleNames <- c("10A_1", "10A_2", "10A_3", "7_1", "7_2", "7_3")
# 第一行是命令信息,所以跳过
data <- read.table("all_feature.txt", header=TRUE, quote="\t", skip=1)
# 前六列分别是Geneid  Chr Start   End Strand  Length
# 我们要的是count数,所以从第七列开始
names(data)[7:12] <- sampleNames
countData <- as.matrix(data[7:12])
rownames(countData) <- data$Geneid
database <- data.frame(name=sampleNames, condition=c("10A", "10A", "10A", "7", "7", "7"))
rownames(database) <- sampleNames

## 设置分组信息并构建dds对象
dds <- DESeqDataSetFromMatrix(countData, colData=database, design= ~ condition)
dds <- dds[ rowSums(counts(dds)) > 1, ]

## 使用DESeq函数估计离散度,然后差异分析获得res对象
dds <- DESeq(dds)
res <- results(dds)
write.csv(res, "res_des_output.csv")
resdata <- merge(as.data.frame(res), as.data.frame(counts(dds, normalized=TRUE)),by="row.names",sort=FALSE)
write.csv(resdata, "all_des_output.csv", row.names=FALSE)

输出两个文件,一个只有差异统计的结果,一个包含各个样本的结果。 这样就完成了DESeq2了。

接下来是作图: 一、MA图 MA图是拿来展示数据表达是否异常,现在一般都不用了。

# library(DESeq2)
plotMA(res, main="DESeq2", ylim=c(-2, 2))

MA.png

二、火山图 可以非常直观且合理地筛选出在两样本间发生差异表达的基因。

library(ggplot2)

# 这里的resdata也可以用res_des_output.csv这个结果重新导入哦。
# 现在就是用的前面做DESeq的时候的resdata。
resdata$change <- as.factor(
    ifelse(
        resdata$padj<0.01 & abs(resdata$log2FoldChange)>1,
        ifelse(resdata$log2FoldChange>1, "Up", "Down"),
        "NoDiff"
    )
)
valcano <- ggplot(data=resdata, aes(x=log2FoldChange, y=-log10(padj), color=change)) + 
    geom_point(alpha=0.8, size=1) + 
    theme_bw(base_size=15) + 
    theme(
        panel.grid.minor=element_blank(),
        panel.grid.major=element_blank()
    ) + 
    ggtitle("DESeq2 Valcano") + 
    scale_color_manual(name="", values=c("red", "green", "black"), limits=c("Up", "Down", "NoDiff")) + 
    geom_vline(xintercept=c(-1, 1), lty=2, col="gray", lwd=0.5) + 
    geom_hline(yintercept=-log10(0.01), lty=2, col="gray", lwd=0.5)

valcano

valcano.png

三、PCA图 就是主成分分析。是把数据降维之后进行分析。PC1和PC2分别是贡献率第一的主成分和贡献率第二的主成分。

# library(ggplot2)
rld <- rlog(dds)
pcaData <- plotPCA(rld, intgroup=c("condition", "name"), returnData=T)
percentVar <- round(100*attr(pcaData, "percentVar"))
pca <- ggplot(pcaData, aes(PC1, PC2, color=condition, shape=name)) + 
    geom_point(size=3) + 
    ggtitle("DESeq2 PCA") + 
    xlab(paste0("PC1: ", percentVar[1], "% variance")) + 
    ylab(paste0("PC2: ", percentVar[2], "% variance"))
pca

pca.png

四、热图 heatmap 实现这基因表达模式可视化的需求。 从这里可以看到这6个样本的表达差异。

library(pheatmap)

select <- order(rowMeans(counts(dds, normalized=T)), decreasing=T)[1:1000]
nt <- normTransform(dds)
log2.norm.counts <- assay(nt)[select,]
df <- as.data.frame(colData(dds)[, c("name", "condition")])
pheatmap(log2.norm.counts, cluster_rows=T, show_rownames=F, cluster_cols=T, annotation_col=df, fontsize=6)

heatmap.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容