【轉(zhuǎn)錄組07】樣本表達(dá)分布、相關(guān)性分析&差異表達(dá)分析

一.樣本表達(dá)分布

箱式圖

##魔鬼操作一鍵清空,以防前面出現(xiàn)的變量名干擾后續(xù)的操作
rm(list = ls())
options(stringsAsFactors = F)

# 加載原始表達(dá)的數(shù)據(jù)
lname <- load(file = "Step01-airwayData.Rdata")
lname

exprSet <- express_cpm
exprSet[1:6,1:6]

# 樣本表達(dá)總體分布-箱式圖
library(ggplot2)
# 構(gòu)造繪圖數(shù)據(jù)
data <- data.frame(expression=c(exprSet),sample=rep(colnames(exprSet),each=nrow(exprSet)))
head(data)

p <- ggplot(data = data,aes(x=sample,y=expression,fill=sample))
p1 <- p + geom_boxplot() + theme(axis.text.x = element_text(angle = 90)) + xlab(NULL) + ylab("log2(CPM+1)")
p1

# 保存圖片
pdf(file = "../Analysis/sample_cor/sample_boxplot.pdf",width = 6,height = 8)
print(p1)
dev.off()
為何即使組與組之間即使有生物學(xué)上的差異牲芋,但是箱式圖中卻沒(méi)有表現(xiàn)出來(lái)呢?這是 基于前提假設(shè):大多數(shù)情況下發(fā)生差異表達(dá)的基因只是很少的一部分询兴,并且發(fā)生差異表達(dá)的基因不足以改變整體所有基因表達(dá)水平的分布;如果看樣本的總體表達(dá)分布差異非常大的話(huà)熬甫,不是由于生物水平差異導(dǎo)致的,是誤差導(dǎo)致的【比如不同人做實(shí)驗(yàn)蔓罚、機(jī)子椿肩、protocol】

小提琴圖

image.png
# 樣本表達(dá)總體分布-小提琴圖
p2 <- p + geom_violin() + theme(axis.text = element_text(size = 12),axis.text.x = element_text(angle = 90)) + xlab(NULL) + ylab("log2(CPM+1)")
p2

# 保存圖片
pdf(file = "../Analysis/sample_cor/sample_violin.pdf",width = 6,height = 8)
print(p2)
dev.off()  #打開(kāi)畫(huà)板要養(yǎng)成關(guān)掉的習(xí)慣
與箱式圖結(jié)合發(fā)現(xiàn),其實(shí)位于中位數(shù)的數(shù)量不是最多的

概率密度分布圖

# 樣本表達(dá)總體分布-概率密度分布圖
m <- ggplot(data=data, aes(x=expression))
p3 <- m +  geom_density(aes(fill=sample, colour=sample),alpha = 0.2) + xlab("log2(CPM+1)")
p3

# 保存圖片
pdf(file = "../Analysis/sample_cor/sample_density.pdf",width = 7,height = 8)
print(p3)
dev.off()
不僅可以看單個(gè)樣本的表達(dá)趨勢(shì)豺谈,還可以看多個(gè)樣本的表達(dá)趨勢(shì)郑象;可以判斷是否有異常的樣本;圖上不同樣本的表達(dá)性就非常一致

以上三個(gè)圖結(jié)合起來(lái)可以看總體樣本表達(dá)分布圖

二.樣本的相關(guān)性

  • 層次聚類(lèi)樹(shù)————通過(guò)計(jì)算點(diǎn)與點(diǎn)之間的空間距離對(duì)樣本進(jìn)行類(lèi)別劃分

主要看縱軸Height茬末,也叫刻畫(huà)樣本之間的相似性厂榛;先從下到上看,每個(gè)樣本先是單獨(dú)的一類(lèi)团南,距離相近的一類(lèi)劃分在一起

# 魔幻操作噪沙,一鍵清空
rm(list = ls())  
options(stringsAsFactors = F)

# 加載數(shù)據(jù)并檢查
lname <- load(file = '../Analysis/data/Step01-airwayData.Rdata')
lname

dat <- express_cpm
dat[1:6,1:6]
dim(dat)


## 1.樣本之間的相關(guān)性-層次聚類(lèi)樹(shù)----
sampleTree <- hclust(dist(t(dat)), method = "average")  ##dist是計(jì)算距離【按照行來(lái)算的】,所以要用t來(lái)轉(zhuǎn)置 吐根,把距離矩陣算完之后正歼,開(kāi)始聚類(lèi)了使用的是:hclust函數(shù)
plot(sampleTree)


  • PCA主成分分析————提取樣本的綜合特征,即主成分(第一主成分拷橘、第二主成分)對(duì)樣本進(jìn)行分類(lèi)

image.png

## 2.樣本之間的相關(guān)性-PCA----
# 第一步局义,數(shù)據(jù)預(yù)處理
dat <- as.data.frame(t(dat))  ##轉(zhuǎn)置
dat$group_list <- group_list  ##添加group信息

# 第二步喜爷,繪制PCA圖
library(FactoMineR)
library(factoextra)

# 畫(huà)圖僅需要數(shù)值型數(shù)據(jù),去掉最后一列的分組信息
dat_pca <- PCA(dat[,-ncol(dat)], graph = FALSE)
class(dat_pca)

p <- fviz_pca_ind(dat_pca,
                  geom.ind = "text", # 只顯示點(diǎn)萄唇,不顯示文字
                  col.ind = dat$group_list, # 用不同顏色表示分組
                  palette = c("#00AFBB", "#E7B800"),
                  addEllipses = T, # 是否圈起來(lái)
                  legend.title = "Groups")
p



  • 相關(guān)性分析

image.png



# 使用500個(gè)基因的表達(dá)量來(lái)做相關(guān)性圖
library(corrplot)
dim(exprSet)

# 計(jì)算相關(guān)性
M <- cor(exprSet)  #M是一個(gè)對(duì)稱(chēng)矩陣
g <- corrplot(M,order = "AOE",addCoef.col = "white")
##可視化corrplot
corrplot(M,order = "AOE",type="upper",tl.pos = "d")
corrplot(M,add=TRUE, type="lower", method="number",order="AOE",diag=FALSE,tl.pos="n", cl.pos="n")

# 繪制樣本相關(guān)性的熱圖
anno <- data.frame(sampleType=group_list)  ##最重要的地方就是矩陣的行名是數(shù)據(jù)框的列名
rownames(anno) <- colnames(exprSet)
anno
p <- pheatmap::pheatmap(M,display_numbers = T,annotation_col = anno,fontsize = 11,cellheight = 28,cellwidth = 28)
p

pdf(file = "../Analysis/sample_cor/cor.pdf")
print(p)
dev.off()
image.png
image.png

三檩帐、差異分析

三大分析方法:limma、edgeR另萤、DESeq2【原始輸入數(shù)據(jù)都是count值】————用于高通量測(cè)序湃密,不能用于基因芯片

基本理論

image.png

很多指標(biāo)是對(duì)FC取了log,那么logFC>0四敞,B相對(duì)于A就是上調(diào)泛源;反之亦然【對(duì)表達(dá)水平較低的基因敏感,對(duì)表達(dá)水平高的不敏感】
image.png

可以理解為對(duì)P值做的矯正

image.png

limma差異分析


# 清空當(dāng)前對(duì)象
rm(list = ls())
options(stringsAsFactors = F)

# 讀取基因表達(dá)矩陣
lname <- load(file = "Step01-airwayData.Rdata")
lname

exprSet <- filter_count
# 檢查表達(dá)譜
dim(exprSet)
exprSet[1:6,1:6]
table(group_list)

# 加載包
library(limma)
library(edgeR)

## 第一步忿危,創(chuàng)建設(shè)計(jì)矩陣和對(duì)比:假設(shè)數(shù)據(jù)符合正態(tài)分布达箍,構(gòu)建線(xiàn)性模型
# 0代表x線(xiàn)性模型的截距為0
design <- model.matrix(~0+factor(group_list))  ##0是線(xiàn)性模型的截距
colnames(design) <- levels(factor(group_list))
rownames(design) <- colnames(exprSet)
design

兩列八行
# 設(shè)置需要進(jìn)行對(duì)比的分組,需要修改
comp <- 'trt-untrt'   ##不要設(shè)置反了
cont.matrix <- makeContrasts(contrasts=c(comp),levels = d esign)



## 第二步铺厨,進(jìn)行差異表達(dá)分析
# 將表達(dá)矩陣轉(zhuǎn)換為edgeR的DGEList對(duì)象
dge <- DGEList(counts=exprSet)

# 進(jìn)行標(biāo)準(zhǔn)化
dge <- calcNormFactors(dge)   

#Use voom() [15] to convert the read counts to log2-cpm, with associated weights, ready for linear modelling:
v <- voom(dge,design,plot=TRUE, normalize="quantile") 
fit <- lmFit(v, design)
fit2 <- contrasts.fit(fit,cont.matrix)
fit2 <- eBayes(fit2)


## 第三步缎玫,提取過(guò)濾差異分析結(jié)果
tmp <- topTable(fit2, coef=comp, n=Inf,adjust.method="BH")
DEG_limma_voom <- na.omit(tmp)
head(DEG_limma_voom)

# 篩選上下調(diào),設(shè)定閾值
fc_cutoff <- 2
fdr <- 0.05

DEG_limma_voom$regulated <- "normal"

loc_up <- intersect(which(DEG_limma_voom$logFC>log2(fc_cutoff)),which(DEG_limma_voom$adj.P.Val<fdr))
loc_down <- intersect(which(DEG_limma_voom$logFC< (-log2(fc_cutoff))),which(DEG_limma_voom$adj.P.Val<fdr))

DEG_limma_voom$regulated[loc_up] <- "up"
DEG_limma_voom$regulated[loc_down] <- "down"
  
table(DEG_limma_voom$regulated)

# 添加一列g(shù)ene symbol
library(org.Hs.eg.db)
keytypes(org.Hs.eg.db)

library(clusterProfiler)
id2symbol <- bitr(rownames(DEG_limma_voom), fromType = "ENSEMBL", toType = "SYMBOL", OrgDb = org.Hs.eg.db )
head(id2symbol)

symbol <- rep("NA",time=nrow(DEG_limma_voom))
symbol[match(id2symbol[,1],rownames(DEG_limma_voom))] <- id2symbol[,2]
DEG_limma_voom <- cbind(rownames(DEG_limma_voom),symbol,DEG_limma_voom)
colnames(DEG_limma_voom)[1] <- "GeneID"


# 保存
write.table(DEG_limma_voom,"DEG_limma_voom_all-1.xls",row.names = F,sep="\t",quote = F)

## 取表達(dá)差異倍數(shù)和p值,矯正后的pvalue
DEG_limma_voom <- DEG_limma_voom[,c(1,2,3,6,7,9)]
save(DEG_limma_voom, file = "Step03-limma_voom_nrDEG.Rdata")


## 檢查是否上下調(diào)設(shè)置錯(cuò)了
# 挑選一個(gè)差異表達(dá)基因
head(DEG_limma_voom)

exp <- c(t(express_cpm[match("ENSG00000178695",rownames(express_cpm)),]))
test <- data.frame(value=exp,group=group_list)
library(ggplot2)
ggplot(data=test,aes(x=group,y=value,fill=group)) + geom_boxplot()



edgeR差異分析


rm(list = ls())
options(stringsAsFactors = F)

# 讀取基因表達(dá)矩陣信息
lname <- load(file = "../Analysis/data/Step01-airwayData.Rdata")
lname 

# 查看分組信息和表達(dá)矩陣數(shù)據(jù)
exprSet <- filter_count
dim(exprSet)
exprSet[1:6,1:6]
table(group_list)

# 加載包
library(DESeq2)

# 第一步解滓,構(gòu)建DESeq2的DESeq對(duì)象
colData <- data.frame(row.names=colnames(exprSet),group_list=group_list)
dds <- DESeqDataSetFromMatrix(countData = exprSet,colData = colData,design = ~ group_list)

# 第二步赃磨,進(jìn)行差異表達(dá)分析
dds2 <- DESeq(dds)

# 提取差異分析結(jié)果,trt組對(duì)untrt組的差異分析結(jié)果
tmp <- results(dds2,contrast=c("group_list","trt","untrt"))
DEG_DESeq2 <- as.data.frame(tmp[order(tmp$padj),])
head(DEG_DESeq2)

# 去除差異分析結(jié)果中包含NA值的行
DEG_DESeq2 = na.omit(DEG_DESeq2)

# 篩選上下調(diào)伐蒂,設(shè)定閾值
fc_cutoff <- 2
fdr <- 0.05

DEG_DESeq2$regulated <- "normal"

loc_up <- intersect(which(DEG_DESeq2$log2FoldChange>log2(fc_cutoff)),which(DEG_DESeq2$padj<fdr))
loc_down <- intersect(which(DEG_DESeq2$log2FoldChange< (-log2(fc_cutoff))),which(DEG_DESeq2$padj<fdr))

DEG_DESeq2$regulated[loc_up] <- "up"
DEG_DESeq2$regulated[loc_down] <- "down"

table(DEG_DESeq2$regulated)

# 添加一列g(shù)ene symbol
library(org.Hs.eg.db)
keytypes(org.Hs.eg.db)

library(clusterProfiler)
id2symbol <- bitr(rownames(DEG_DESeq2), fromType = "ENSEMBL", toType = "SYMBOL", OrgDb = org.Hs.eg.db )
head(id2symbol)

symbol <- rep("NA",time=nrow(DEG_DESeq2))
symbol[match(id2symbol[,1],rownames(DEG_DESeq2))] <- id2symbol[,2]
DEG_DESeq2 <- cbind(rownames(DEG_DESeq2),symbol,DEG_DESeq2)
colnames(DEG_DESeq2)[1] <- "GeneID"
head(DEG_DESeq2)

# 保存
write.table(DEG_DESeq2,"../Analysis/deg_analysis/DEG_DESeq2_all.xls",row.names = F,sep="\t",quote = F)

## 取表達(dá)差異倍數(shù)和p值,矯正后的pvalue并保存
colnames(DEG_DESeq2)
DEG_DESeq2 <- DEG_DESeq2[,c(1,2,4,7,8,9)]
save(DEG_DESeq2, file = "../Analysis/deg_analysis/Step03-DESeq2_nrDEG.Rdata")


## 檢查是否上下調(diào)設(shè)置錯(cuò)了
# 挑選一個(gè)差異表達(dá)基因
head(DEG_DESeq2)

exp <- c(t(express_cpm[match("ENSG00000152583",rownames(express_cpm)),]))
test <- data.frame(value=exp,group=group_list)
library(ggplot2)
ggplot(data=test,aes(x=group,y=value,fill=group)) + geom_boxplot()



image.png

差異結(jié)果可視化

image.png

image.png

rm(list = ls())
options(stringsAsFactors = F)

# 加載原始表達(dá)矩陣
load(file = "Step01-airwayData.Rdata")

# 讀取3個(gè)軟件的差異分析結(jié)果
load(file = "Step03-limma_voom_nrDEG.Rdata")
load(file = "Step03-DESeq2_nrDEG.Rdata")
load(file = "Step03-edgeR_nrDEG.Rdata")
ls()

# 根據(jù)需要修改DEG的值
data <- DEG_limma_voom
colnames(data)


# 繪制火山圖
library(ggplot2)
colnames(data)
p <- ggplot(data=data, aes(x=logFC, y=-log10(adj.P.Val),color=regulated)) + 
     geom_point(alpha=0.5, size=1.8) + theme_set(theme_set(theme_bw(base_size=20))) + 
     xlab("log2FC") + ylab("-log10(FDR)") +scale_colour_manual(values = c('blue','black','red'))
p

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末煞躬,一起剝皮案震驚了整個(gè)濱河市肛鹏,隨后出現(xiàn)的幾起案子逸邦,更是在濱河造成了極大的恐慌,老刑警劉巖在扰,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缕减,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡芒珠,警方通過(guò)查閱死者的電腦和手機(jī)桥狡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)皱卓,“玉大人裹芝,你說(shuō)我怎么就攤上這事∧戎” “怎么了嫂易?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掐禁。 經(jīng)常有香客問(wèn)我怜械,道長(zhǎng)颅和,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任缕允,我火速辦了婚禮峡扩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘障本。我一直安慰自己教届,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布驾霜。 她就那樣靜靜地躺著巍佑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪寄悯。 梳的紋絲不亂的頭發(fā)上萤衰,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音猜旬,去河邊找鬼脆栋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛洒擦,可吹牛的內(nèi)容都是我干的椿争。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼熟嫩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼秦踪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起掸茅,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤椅邓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后昧狮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體景馁,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年逗鸣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了合住。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡撒璧,死狀恐怖透葛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情卿樱,我是刑警寧澤僚害,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站殿如,受9級(jí)特大地震影響贡珊,放射性物質(zhì)發(fā)生泄漏最爬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一门岔、第九天 我趴在偏房一處隱蔽的房頂上張望爱致。 院中可真熱鬧,春花似錦寒随、人聲如沸糠悯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)互艾。三九已至,卻和暖如春讯泣,著一層夾襖步出監(jiān)牢的瞬間纫普,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工好渠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留昨稼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓拳锚,卻偏偏與公主長(zhǎng)得像假栓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子霍掺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容