Robust火山圖:一種含離群值的代謝組數(shù)據(jù)差異分析方法

代謝組學(xué)中差異代謝物的識(shí)別仍然是一個(gè)巨大的挑戰(zhàn),并在代謝組學(xué)數(shù)據(jù)分析中發(fā)揮著突出的作用。由于分析悔雹、實(shí)驗(yàn)和生物的模糊性,代謝組學(xué)數(shù)據(jù)集經(jīng)常包含異常值欣喧,但目前可用的差異代謝物識(shí)別技術(shù)對(duì)異常值很敏感荠商。作者這里提出了一種基于權(quán)重的具有穩(wěn)健性火山圖方法,助于從含有離群值的代謝組數(shù)據(jù)中更加準(zhǔn)確鑒定差異代謝物续誉。

image

作者將提出的方法與其它9種代謝組中常用的方法(包含t-test)進(jìn)行比較莱没,發(fā)現(xiàn)有較低的misclassification error rates(MERs)和較高的AUC,證明了該方法的優(yōu)越性酷鸦。

MERs比較
AUC比較

安裝加載數(shù)據(jù)集

Github:https://github.com/nishithkumarpaul/Rvolcano

library(devtools)
install_github("nishithkumarpaul/Rvolcano")
library(Rvolcano)
data("DummyFullData")

dim(DummyFullData)
[1] 40 40

數(shù)據(jù)集由40行代謝物和40個(gè)樣本組成饰躲,其中(癌癥和健康組各20生物學(xué)重復(fù))

image

計(jì)算foldchange

fcval <- foldChngCalc(DummyFullData,nSampG1 = 20,nSampG2 = 20)
head(fcval)

## 查看該函數(shù)
edit(foldChngCalc)

function (data, nSampG1, nSampG2) 
{
  g1fold <- apply((data[, 1:nSampG1]), 1, weightedMean)
  g2fold <- apply((data[, (nSampG1 + 1):(nSampG1 + nSampG2)]), 
    1, weightedMean)
  foldChange <- g2fold - g1fold
  return(foldChange)
}

我們查看下foldChngCalc該函數(shù),可以看到主要是通過(guò)apply函數(shù)計(jì)算了weightedMean值,即加權(quán)平均數(shù), 而不是我們常用的mean(算術(shù)平均數(shù))臼隔。

算術(shù)平均數(shù)又稱均值嘹裂,是統(tǒng)計(jì)學(xué)中基本的平均指標(biāo),就是簡(jiǎn)單的把所有數(shù)加起來(lái)然后除以個(gè)數(shù)摔握。

加權(quán)平均數(shù)即加權(quán)平均值寄狼,是將各數(shù)值乘以相應(yīng)的權(quán)數(shù),然后加總求和得到總體值氨淌,再除以總的單位數(shù)泊愧。

通過(guò)一個(gè)例子計(jì)算下,觀察weightedMean函數(shù)和mean有啥區(qū)別盛正,,我們創(chuàng)建一個(gè)正態(tài)分布的向量集x和一個(gè)含有較高離群值的向量集删咱,分布計(jì)算一下結(jié)果。

> set.seed(123)
> x<-c(rnorm(200,3,1)) 
> x1<-c(rnorm(180,3,1),rnorm(20,60,3)) #contain 20 outliers#
> weightedMean(x)
[1] 2.957601
> mean(x)
[1] 2.99143
> weightedMean(x1)
[1] 3.062994
> mean(x1)
[1] 8.712792

## 查看該函數(shù)的計(jì)算方法
function (a, b = 0.2) 
{
  w <- NULL
  pw <- NULL
  for (i in 1:length(a)) {
    w[i] <- exp(-(b/2) * (mad(a)^-2) * (a[i] - median(a))^2)
    pw[i] <- w[i] * a[i]
  }
  tpw <- sum(pw)
  tw <- sum(w)
  wm <- tpw/tw
  dd <- c(tpw, tw, wm)
  return(wm)
}

結(jié)果發(fā)現(xiàn)豪筝,不含離群值時(shí)痰滋,加權(quán)與算術(shù)平均數(shù)都一樣,而含有離群值時(shí)候续崖,結(jié)果容易形成誤差敲街,算術(shù)平均數(shù)易受極端數(shù)據(jù)的影響,極端值的出現(xiàn)严望,會(huì)使平均數(shù)的真實(shí)性受到干擾多艇,加權(quán)差異有助于在進(jìn)行計(jì)算時(shí)考慮更多數(shù)據(jù),以便獲得最準(zhǔn)確的結(jié)果著蟹。

計(jì)算Pvalue

使用p.valcalc函數(shù)進(jìn)行差異分析墩蔓,使用robust vesion的t-test獲取p值梢莽,公式可以查看函數(shù)源碼,用到了weightedVar加權(quán)方差奸披。

## 添加Pvalue
pval <- NULL
for (i in 1:dim(DummyFullData)[1]){
  pval[i] <- p.valcalc(DummyFullData[i,1:20],DummyFullData[i,21:40])
  }
  
  ##查看該源碼
  edit(p.valcalc)
  function (x, y) 
{
  t.stat <- (weightedMean(x) - weightedMean(y))/sqrt(((length(x) - 
    1) * weightedVar(x) + (length(y) - 1) * weightedVar(y)) * 
    (1/(length(x) + length(y) - 2)) * ((1/length(x)) + 1/length(y)))
  pval <- 2 * pt(abs(t.stat), (length(x) + length(y) - 2), 
    lower.tail = FALSE)
  return(pval)
}

繪制火山圖

log2foldchange和Pvalue都有了昏名,直接使用RobVolPlot函數(shù)繪圖

##Robust volcano plot
RobVolPlot(fcval,pval,cexcutoff = 0.7,cexlab = 0.8,
           main = 'Volcano Plot',
           xlab = 'log2fc',
           ylab = '-log(Pvalue)',
           plimit = 0.05,fclimit = 2)
edit(RobVolPlot)
image

ggplot2繪圖

已經(jīng)得到了log2foldchange和Pvalue數(shù)據(jù)了,我們就可以自己拿著數(shù)據(jù)繪制圖形了

library(ggrepel)
## 獲取數(shù)據(jù)
result <- data.frame(log2foldchange = fcval,p_value = pval)
result$threshold = factor(ifelse(result$p_value < 0.05 & abs(result$log2foldchange) >= 1, 
                                 ifelse(result$log2foldchange>= 1 ,'Up','Down'),'NoSignificance'),
                                 levels=c('Up','Down','NoSignificance'))
##差異代謝物
re <- subset(result,p_value < 0.05)
ggplot(result,aes(log2foldchange, -log10(p_value)))+
  geom_point(aes(color = threshold), size = 5) +
  scale_colour_manual(values = c('#fb81f5', '#6868ed', 'gray40'), labels = c('Enriched metabolites', 'Depleted metabolites', 'No diff')) +
  # 添加x軸標(biāo)簽
  xlab(bquote(Log[2] ~ '(fold change)')) +
  # 添加y軸標(biāo)簽
  ylab(bquote(-Log[10] ~ italic('Pvalue')))+
  # 添加標(biāo)簽:
  geom_text_repel(data = re, aes(color = threshold,label = rownames(re)),max.overlaps = 20,
                  size = 4.8 ,fontface = "bold",arrow = arrow(length=unit(0.01, "npc")),force = 1, max.iter = 3e3,
                  box.padding = unit(0.6, 'lines'), segment.color = 'black', show.legend = FALSE)+
  theme_bw()+
  # 調(diào)整主題和圖例位置:
  theme(panel.grid = element_blank(),
        legend.position = c(0.01,0.25),
        legend.justification = c(0,1)
  )+
 geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "grey",size = 1)+
 geom_vline(xintercept = c(-1.2,1.2), linetype = "dashed", color = "grey",size = 1)


image

參考資料

  1. https://bmcbioinformatics.biomedcentral.com/articles/10.1186/s12859-018-2117-2

  2. 如何計(jì)算加權(quán)方差:https://cn.ebrdbusinesslens.com/88-how-8599659-calculate-weighted-variancel-37590

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末阵面,一起剝皮案震驚了整個(gè)濱河市轻局,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌样刷,老刑警劉巖仑扑,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異置鼻,居然都是意外死亡镇饮,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門箕母,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)储藐,“玉大人,你說(shuō)我怎么就攤上這事嘶是「撇” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵聂喇,是天一觀的道長(zhǎng)辖源。 經(jīng)常有香客問(wèn)我,道長(zhǎng)希太,這世上最難降的妖魔是什么克饶? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮跛十,結(jié)果婚禮上彤路,老公的妹妹穿的比我還像新娘秕硝。我一直安慰自己芥映,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布远豺。 她就那樣靜靜地躺著奈偏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躯护。 梳的紋絲不亂的頭發(fā)上惊来,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音棺滞,去河邊找鬼裁蚁。 笑死矢渊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的枉证。 我是一名探鬼主播矮男,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼室谚!你這毒婦竟也來(lái)了毡鉴?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤秒赤,失蹤者是張志新(化名)和其女友劉穎猪瞬,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體入篮,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陈瘦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了潮售。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甘晤。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖饲做,靈堂內(nèi)的尸體忽然破棺而出线婚,到底是詐尸還是另有隱情,我是刑警寧澤盆均,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布塞弊,位于F島的核電站,受9級(jí)特大地震影響泪姨,放射性物質(zhì)發(fā)生泄漏游沿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一肮砾、第九天 我趴在偏房一處隱蔽的房頂上張望诀黍。 院中可真熱鬧,春花似錦仗处、人聲如沸眯勾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)吃环。三九已至,卻和暖如春洋幻,著一層夾襖步出監(jiān)牢的瞬間郁轻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留好唯,地道東北人竭沫。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像骑篙,于是被迫代替她去往敵國(guó)和親输吏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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