R實戰(zhàn) | OPLS-DA(正交偏最小二乘判別分析)篩選差異變量(VIP)及其可視化

oplsda.jpg

主成分分析(PCA)是一種無監(jiān)督降維方法捂齐,能夠有效對高維數(shù)據(jù)進(jìn)行處理。但PCA對相關(guān)性較小的變量不敏感,而PLS-DA(偏最小二乘判別分析)能夠有效解決這個問題。而OPLS-DA(正交偏最小二乘判別分析)結(jié)合了正交信號和PLS-DA來篩選差異變量蜘腌。

本分析主要用于代謝組學(xué)中差異代謝物的篩選。

22

數(shù)據(jù)集

液相色譜高分辨質(zhì)譜法(LTQ Orbitrap)分析了來自183位成人的尿液樣品饵隙。

sacurine list 包含了三個數(shù)據(jù)矩陣:

dataMatrix為樣本-代謝物含量矩陣(log10轉(zhuǎn)換過)撮珠,記錄了各種類型的代謝物在各樣本中的含量信息。共計183個樣本(行)以及109種代謝物(列)癞季。

sampleMetadata中記錄了183個樣本所來源個體的年零劫瞳、體重、性別等信息绷柒。

variableMetadata為109種代謝物的注釋詳情,MSI level水平涮因。

rm(list = ls())
# load  packages
library(ropls)
# load data
data(sacurine)
#查看數(shù)據(jù)集
head(sacurine$dataMatrix[ ,1:2])
head(sacurine$sampleMetadata)
head(sacurine$variableMetadata)
#提取性別分類
genderFc = sampleMetadata[, "gender"]
> head(sacurine$dataMatrix[ ,1:2])
       (2-methoxyethoxy)propanoic acid isomer (gamma)Glu-Leu/Ile
HU_011                               3.019766           3.888479
HU_014                               3.814339           4.277149
HU_015                               3.519691           4.195649
HU_017                               2.562183           4.323760
HU_018                               3.781922           4.629329
HU_019                               4.161074           4.412266
> head(sacurine$sampleMetadata)
       age   bmi gender
HU_011  29 19.75      M
HU_014  59 22.64      F
HU_015  42 22.72      M
HU_017  41 23.03      M
HU_018  34 20.96      M
HU_019  35 23.41      M

OPLS-DA

# 分組以性別為例
# 通過orthoI指定正交組分?jǐn)?shù)目
# orthoI = NA時废睦,執(zhí)行OPLS,并通過交叉驗證自動計算適合的正交組分?jǐn)?shù)
oplsda = opls(dataMatrix, genderFc, predI = 1, orthoI = NA)
OPLS-DA
183 samples x 109 variables and 1 response
standard scaling of predictors and response(s)
      R2X(cum) R2Y(cum) Q2(cum) RMSEE pre ort pR2Y  pQ2
Total    0.275     0.73   0.602 0.262   1   2 0.05 0.05
Snipaste_2021-10-28_21-32-57

結(jié)果中养泡,R2XR2Y分別表示所建模型對X和Y矩陣的解釋率嗜湃,Q2表示模型的預(yù)測能力奈应,它們的值越接近于1表明模型的擬合度越好,訓(xùn)練集的樣本越能夠被準(zhǔn)確劃分到其原始?xì)w屬中购披。

  • Inertia(慣量)柱形圖(左上)

    展示了3個正交軸的R2YQ2Y杖挣。通過展示累計解釋率評估正交組分是否足夠。

  • 顯著性診斷(右上)

    實際和模擬模型的R2YQ2Y值經(jīng)隨機(jī)排列后的散點(diǎn)圖刚陡,模型R2YQ2Y(散點(diǎn))大于真實值時(橫線)惩妇,表明產(chǎn)生過擬合2。右上圖筐乳,OPLS-DA模型的R2Y和Q2Y與隨機(jī)置換數(shù)據(jù)后獲得的相應(yīng)值進(jìn)行比較歌殃。

  • 離群點(diǎn)展示(左下)

    展示了各樣本在投影平面內(nèi)以及正交投影面的距離,具有高值的樣本標(biāo)注出名稱蝙云,表明它們與其它樣本間的差異較大氓皱。顏色代表性別分組。

  • x-score plot(右下)

    各樣本在OPLS-DA軸中的坐標(biāo)勃刨,顏色代表性別分組波材。

可視化

library(ggplot2)
library(ggsci)
library(tidyverse)
#提取樣本在 OPLS-DA 軸上的位置
sample.score = oplsda@scoreMN %>%  #得分矩陣
  as.data.frame() %>%
  mutate(gender = sacurine[["sampleMetadata"]][["gender"]],
         o1 = oplsda@orthoScoreMN[,1]) #正交矩陣
head(sample.score)#查看
> head(sample.score)
              p1 gender         o1
HU_011 -1.582933      M -4.9806037
HU_014  1.372806      F -1.7443382
HU_015 -3.341370      M -3.4372771
HU_017 -3.590063      M -0.9794960
HU_018 -1.662716      M  0.3155845
HU_019 -2.312923      M  0.6561281
p <- ggplot(sample.score, aes(p1, o1, color = gender)) +
  geom_hline(yintercept = 0, linetype = 'dashed', size = 0.5) + #橫向虛線
  geom_vline(xintercept = 0, linetype = 'dashed', size = 0.5) +
  geom_point() +
  #geom_point(aes(-10,-10), color = 'white') +
  labs(x = 'P1(5.0%)',y = 'to1') +
  stat_ellipse(level = 0.95, linetype = 'solid', 
               size = 1, show.legend = FALSE) + #添加置信區(qū)間
  scale_color_manual(values = c('#008000','#FFA74F')) +
  theme_bw() +
  theme(legend.position = c(0.1,0.85),
        legend.title = element_blank(),
        legend.text = element_text(color = 'black',size = 12, family = 'Arial', face = 'plain'),
        panel.background = element_blank(),
        panel.grid = element_blank(),
        axis.text = element_text(color = 'black',size = 15, family = 'Arial', face = 'plain'),
        axis.title = element_text(color = 'black',size = 15, family = 'Arial', face = 'plain'),
        axis.ticks = element_line(color = 'black'))
p
Snipaste_2021-10-28_22-49-44

差異代謝物篩選

#VIP 值幫助尋找重要的代謝物
vip <- getVipVn(oplsda)
vip_select <- vip[vip > 1]    #通常以VIP值>1作為篩選標(biāo)準(zhǔn)
head(vip_select)

vip_select <- cbind(sacurine$variableMetadata[names(vip_select), ], vip_select)
names(vip_select)[4] <- 'VIP'
vip_select <- vip_select[order(vip_select$VIP, decreasing = TRUE), ]
head(vip_select)    #帶注釋的代謝物,VIP>1 篩選后身隐,并按 VIP 降序排序
> head(vip_select)   
                               msiLevel      hmdb chemicalClass
p-Anisic acid                         1 HMDB01101        AroHoM
Malic acid                            1 HMDB00156        Organi
Testosterone glucuronide              2 HMDB03193 Lipids:Steroi
Pantothenic acid                      1 HMDB00210        AliAcy
Acetylphenylalanine                   1 HMDB00512        AA-pep
alpha-N-Phenylacetyl-glutamine        1 HMDB06344        AA-pep
                                    VIP
p-Anisic acid                  2.533220
Malic acid                     2.479289
Testosterone glucuronide       2.421591
Pantothenic acid               2.165296
Acetylphenylalanine            1.988311
alpha-N-Phenylacetyl-glutamine 1.965807
#對差異代謝物進(jìn)行棒棒糖圖可視化
#代謝物名字太長進(jìn)行轉(zhuǎn)換
vip_select$cat = paste('A',1:nrow(vip_select), sep = '')
p2 <- ggplot(vip_select, aes(cat, VIP)) +
  geom_segment(aes(x = cat, xend = cat,
                   y = 0, yend = VIP)) +
  geom_point(shape = 21, size = 5, color = '#008000' ,fill = '#008000') +
  geom_point(aes(1,2.5), color = 'white') +
  geom_hline(yintercept = 1, linetype = 'dashed') +
  scale_y_continuous(expand = c(0,0)) +
  labs(x = '', y = 'VIP value') +
  theme_bw() +
  theme(legend.position = 'none',
        legend.text = element_text(color = 'black',size = 12, family = 'Arial', face = 'plain'),
        panel.background = element_blank(),
        panel.grid = element_blank(),
        axis.text = element_text(color = 'black',size = 15, family = 'Arial', face = 'plain'),
        axis.text.x = element_text(angle = 90),
        axis.title = element_text(color = 'black',size = 15, family = 'Arial', face = 'plain'),
        axis.ticks = element_line(color = 'black'),
        axis.ticks.x = element_blank())
p2
Snipaste_2021-10-28_23-35-09

參考

  1. OPLS-DA在R語言中的實現(xiàn) | 小藍(lán)哥的知識荒原 (blog4xiang.world)
  2. R包ropls的偏最小二乘判別分析(PLS-DA)和正交偏最小二乘判別分析(OPLS-DA) (qq.com)
  3. 用PLS和OPLS分析代謝組數(shù)據(jù) - 簡書 (jianshu.com)
  4. ropls: PCA, PLS(-DA) and OPLS(-DA) for multivariate analysis and feature selection of omics data (bioconductor.org)

往期

  1. 單組學(xué)的多變量分析|1.PCA和PLS-DA
  2. 單組學(xué)的多變量分析| 2.稀疏偏最小二乘判別分析(sPLS-DA)
推廣.jpg
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末廷区,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抡医,更是在濱河造成了極大的恐慌躲因,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忌傻,死亡現(xiàn)場離奇詭異大脉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)水孩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進(jìn)店門镰矿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人俘种,你說我怎么就攤上這事秤标。” “怎么了宙刘?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵苍姜,是天一觀的道長。 經(jīng)常有香客問我悬包,道長衙猪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮垫释,結(jié)果婚禮上丝格,老公的妹妹穿的比我還像新娘。我一直安慰自己棵譬,他們只是感情好显蝌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著订咸,像睡著了一般曼尊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上算谈,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天涩禀,我揣著相機(jī)與錄音,去河邊找鬼然眼。 笑死艾船,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的高每。 我是一名探鬼主播屿岂,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼鲸匿!你這毒婦竟也來了爷怀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤带欢,失蹤者是張志新(化名)和其女友劉穎运授,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乔煞,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吁朦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了渡贾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逗宜。...
    茶點(diǎn)故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖空骚,靈堂內(nèi)的尸體忽然破棺而出纺讲,到底是詐尸還是另有隱情,我是刑警寧澤囤屹,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布熬甚,位于F島的核電站,受9級特大地震影響肋坚,放射性物質(zhì)發(fā)生泄漏则涯。R本人自食惡果不足惜复局,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一冲簿、第九天 我趴在偏房一處隱蔽的房頂上張望粟判。 院中可真熱鬧,春花似錦峦剔、人聲如沸档礁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呻澜。三九已至,卻和暖如春惨险,著一層夾襖步出監(jiān)牢的瞬間羹幸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工辫愉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留栅受,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓恭朗,卻偏偏與公主長得像屏镊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子痰腮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評論 2 354

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