隨機(jī)森林與人工神經(jīng)網(wǎng)絡(luò)聯(lián)合診斷心衰模型的構(gòu)建與分析

今天魄幕,和大家分享一篇生信文章的解讀與復(fù)現(xiàn)——隨機(jī)森林與人工神經(jīng)網(wǎng)絡(luò)聯(lián)合診斷心衰模型的構(gòu)建與分析。

Part1文獻(xiàn)解讀

1摘要

心力衰竭是一個(gè)全球性的健康問題仅偎,影響到全世界約 2600 萬人孕似。由于傳統(tǒng)的心力衰竭診斷技術(shù)在實(shí)踐中存在諸多局限性,有必要開發(fā)新的診斷模型來補(bǔ)充現(xiàn)有的診斷方法娘荡。

近年來,隨著基因測(cè)序技術(shù)的進(jìn)步和進(jìn)步驶沼,人們發(fā)現(xiàn)了更多與心力衰竭相關(guān)的基因炮沐。利用基因表達(dá)綜合(GEO)數(shù)據(jù)庫中現(xiàn)有的基因表達(dá)數(shù)據(jù),篩選出心力衰竭患者差異表達(dá)基因(DEGS)回怜,并通過隨機(jī)森林分類器鑒定出 6 個(gè)關(guān)鍵基因(HMOX 2, SERPINA 3, LCN6, CSDC 2, FREM 1大年,和 ZMAT1)。

這些基因中玉雾,CSDC 2, FREM 1翔试,和 ZMAT1 從未與心力衰竭有關(guān)聯(lián)。利用人工神經(jīng)網(wǎng)絡(luò)成功地建立了心力衰竭的診斷模型复旬,并在公共數(shù)據(jù)集上驗(yàn)證了該模型的有效性垦缅。

2前言

心力衰竭(HF)是所有類型心臟病常見的一種慢性疾病。心衰實(shí)質(zhì)上是由心臟功能異常引起的病理生理狀態(tài)赢底,心臟不能滿足正常心臟壓力下正常代謝所需的抽吸速度失都。HF 可分為兩類:一種是伴有射血分?jǐn)?shù)降低的 HF柏蘑,另一種是保留射血分?jǐn)?shù)(HFpEF)的 HF幸冻,這兩類 HF 的發(fā)生和發(fā)展機(jī)制明顯不同。

HFpEF 常發(fā)生于壓力超負(fù)荷肥大疾病咳焚。與 HFrEF 相比洽损,HFpEF 更有可能降低心臟儲(chǔ)備。在 HFpEF 的發(fā)病機(jī)制中革半,心肌細(xì)胞本身的凋亡程度較小碑定,而其特征性變化是異常成纖維細(xì)胞的增殖和細(xì)胞基質(zhì)蛋白的積累。這是 HFpEF 與 HFrEF 最顯著的區(qū)別又官。

對(duì)于臨床常用的 HF 診斷技術(shù)有幾個(gè)限制延刘。腦鈉尿肽/N 端脯氨酸型鈉尿肽在各種非心衰疾病如肺動(dòng)脈高壓、肝硬化腹水六敬、急性或慢性腎功能衰竭碘赖、感染和炎癥中也可能升高,但 HFpEF 患者正常。超聲心動(dòng)圖是另一種常用的心功能評(píng)估技術(shù)普泡,它更多地依賴于專家的個(gè)人操作能力和診斷經(jīng)驗(yàn)播掷,使檢查的可重復(fù)性差。此外撼班,單純測(cè)量 EF 值歧匈,難以識(shí)別 HFpEF 患者。因此砰嘁,有必要開發(fā)新的診斷模型來補(bǔ)充現(xiàn)有的診斷方法件炉。

近年來,第二代測(cè)序技術(shù)的迅速發(fā)展為識(shí)別與多種疾病相關(guān)的標(biāo)記基因提供了基礎(chǔ)般码,為建立新的與基因相關(guān)的 HF 診斷模型奠定了堅(jiān)實(shí)的基礎(chǔ)妻率。在本研究中,我們?cè)?GEO 數(shù)據(jù)庫中篩選了 HF 與正常心肌標(biāo)本之間的差異表達(dá)基因(DEGS)板祝。在這些 DEG 數(shù)據(jù)的基礎(chǔ)上宫静,我們采用隨機(jī)森林算法對(duì) HF 中的關(guān)鍵基因進(jìn)行了識(shí)別。然后券时,我們將這些關(guān)鍵基因輸入到人工神經(jīng)網(wǎng)絡(luò)中孤里,以構(gòu)建 HF 的遺傳診斷模型.

3方法&結(jié)果

GEOQuery 軟件包用于下載數(shù)據(jù)以獲得芯片數(shù)據(jù)集的表達(dá)譜和臨床表型數(shù)據(jù):GSE57345, GSE42955,和 GSE84796 和 rna-seq 數(shù)據(jù)集:GSE141910 和 GSE116250橘洞。從 GEO 數(shù)據(jù)庫中獲取相應(yīng)平臺(tái)芯片探針的相應(yīng)標(biāo)注信息捌袜。在芯片探針 ID 和基因符號(hào)轉(zhuǎn)換過程中,發(fā)現(xiàn)多個(gè)探針對(duì)應(yīng)于 1 個(gè)基因符號(hào)炸枣,在這種情況下虏等,平均探針表達(dá)作為基因表達(dá)水平。使用 org.Hs.eg.db 包 (3.7.0 版)對(duì) rna-seq 表達(dá)式配置文件進(jìn)行基因 ID 轉(zhuǎn)換适肠。

R 軟件包 limma 對(duì) GSE57345 數(shù)據(jù)集 136 個(gè)正常和 177 個(gè)心衰樣本進(jìn)行了差異分析霍衫。limma 軟件包使用經(jīng)典的貝葉斯數(shù)據(jù)分析來篩選 DEGS。DEGS 的顯著性標(biāo)準(zhǔn)設(shè)置在 P 值小于 0.05侯养, logFoldChang (LogFC) 大于 1.5敦跌。用 phatmap 軟件包繪制 DEGS 的熱圖。

用 R 軟件包繪制聚類剖面圖對(duì)相關(guān)基因進(jìn)行 GO 功能富集分析和 KEGG 富集分析逛揩,使用了 Benjamini–Hochberg 校正方法柠傍,閾值設(shè)置為 P 值<0.01,q 值<0.01辩稽。為了避免 GO 富集結(jié)果中的冗余惧笛,我們對(duì) GO 富集項(xiàng)進(jìn)行了去重復(fù),消除了基因重疊>0.75(詳見附錄 2)逞泄。確定三種顯著富集 GO 術(shù)語(P < 0.05) 和顯著富集通路 (P < 0.05)患整。

在這些結(jié)果中静檬,與 HF 相關(guān)的生物學(xué)過程包括細(xì)胞外基質(zhì)的組織、心臟收縮并级、巨噬細(xì)胞活化和細(xì)胞-基質(zhì)粘附拂檩。所涉及的細(xì)胞成分包括含有膠原的細(xì)胞外基質(zhì)。分子功能包括整體結(jié)合和其他重要功能嘲碧。圖 3B 顯示了部分 GO 富集的術(shù)語和顯著表達(dá)的差異基因稻励。我們還對(duì) DEGS 進(jìn)行了 kegg 通路富集分析,展示了所涉及的重要的富集生物途徑的結(jié)果和相應(yīng)的 DEG愈涩。

將 281 個(gè) DEG 輸入到隨機(jī)森林分類器中望抽。為了找到最優(yōu)參數(shù) mtry(即指定節(jié)點(diǎn)中二叉樹的最優(yōu)變量數(shù)),我們對(duì) 1-281 個(gè)變量中的所有可能數(shù)進(jìn)行了遞歸隨機(jī)森林分類履婉,并計(jì)算了模型的平均錯(cuò)誤率煤篙。圖 4A 顯示所有變量被選中時(shí)的平均錯(cuò)誤率。最后毁腿,選取 6 作為變量數(shù)的參數(shù)辑奈。變量數(shù)目越少越好,帶外誤差(out-of-band error)越小越好已烤。引用模型誤差與決策樹數(shù)之間的關(guān)系圖(圖 4B)選取 2000 棵樹作為最終模型的參數(shù)鸠窗,模型誤差穩(wěn)定。

在建立隨機(jī)森林模型的過程中胯究,從降低精度和減小均方誤差的角度出發(fā)稍计,對(duì)輸出結(jié)果的變量重要性(基尼系數(shù)法)進(jìn)行了測(cè)量。然后裕循,我們確定了 6 個(gè)重要性大于 2 的 DEGS 作為后續(xù)分析的候選基因臣嚣。圖 4C 表明在這六個(gè)變量中,HMOX 2 和 CSDC 2 是最重要的剥哑,其次是 ZMAT1, SERPINA3, FREM1硅则,和 LCN6⌒浅郑基于這六個(gè)重要變量抢埋,我們對(duì) GSE57345 數(shù)據(jù)集進(jìn)行了 k-均值無監(jiān)督聚類弹灭。圖 4D 結(jié)果表明督暂,在 GSE57345 數(shù)據(jù)集 313 例樣本中,這 6 個(gè)基因可用于患者和正常人的鑒別穷吮。其中逻翁,ZMAT1 和 FREM 1 基因在正常組織中呈低表達(dá),在疾病組織中呈高表達(dá)捡鱼。另一方面八回,SERPINA3, LCN6, HMOX2,和 CSDC2 屬于另一組, 在正常標(biāo)本中高表達(dá)缠诅,在疾病標(biāo)本中低表達(dá)溶浴。

我們使用了另一個(gè)數(shù)據(jù)集 GSE141910 建立了基于 neuralnet 包的人工神經(jīng)網(wǎng)絡(luò)模型。第一步 是對(duì)數(shù)據(jù)進(jìn)行預(yù)處理管引,以實(shí)現(xiàn)數(shù)據(jù)的規(guī)范化士败。其次,選擇最小-最大值方法[0褥伴,1]谅将,在訓(xùn)練神經(jīng)網(wǎng)絡(luò)之前按下分離縮放數(shù)據(jù)。在開始計(jì)算之前重慢,對(duì)最大和最小數(shù)據(jù)值進(jìn)行標(biāo)準(zhǔn)化處理饥臂,并將隱藏層數(shù)設(shè)置為 5 層。在參數(shù)的選擇上似踱,不存在使用多少層和多個(gè)神經(jīng)元的固定規(guī)則隅熙。神經(jīng)元的數(shù)量應(yīng)該介于輸入層大小和輸出層大小之間,通常是輸入層大小的三分之二核芽。為了更有效地評(píng)價(jià)神經(jīng)網(wǎng)絡(luò)模型的結(jié)果猛们,我們選擇了一種 5 折交叉驗(yàn)證方法。數(shù)據(jù)集隨機(jī)分為訓(xùn)練集和驗(yàn)證集狞洋。訓(xùn)練集的目的是確定候選指標(biāo)的權(quán)重弯淘。利用驗(yàn)證集驗(yàn)證了基于基因表達(dá)和基因權(quán)重構(gòu)建的模型評(píng)分的分類效率。得到疾病神經(jīng)網(wǎng)絡(luò)模型分類評(píng)分吉懊。

5 折交叉驗(yàn)證結(jié)果使用受試者工作曲線(ROC)顯示模型分類性能(圖 5A)庐橙。此外,還使用了一個(gè)混淆矩陣來評(píng)估預(yù)測(cè)的性能(表 1)借嗽。

五折交叉驗(yàn)證結(jié)果的 ROC 曲線下面積接近 1(平均 AUC>0.99)态鳖,表明模型具有較強(qiáng)的魯棒性(Robust)。因此恶导,接下來浆竭,我們利用所有的數(shù)據(jù)來構(gòu)建神經(jīng)網(wǎng)絡(luò)模型。

根據(jù)神經(jīng)網(wǎng)絡(luò)模型的輸出結(jié)果(補(bǔ)充檔案 4 和圖 5B)惨寿,可以看出邦泄,整個(gè)培訓(xùn)是按照 1423 步驟進(jìn)行的。終止條件為誤差函數(shù)的絕對(duì)偏導(dǎo)數(shù)<0.01(達(dá)到閾值)裂垦。輸出結(jié)果表明顺囊,該模型的權(quán)重范圍為 ?4.67~4.53。重量預(yù)測(cè)為 4.527373(HMOX 2)蕉拢,?4.7670777(CSDC 2), 1.478590 (ZMAT1), 2.332519 (SERPINA 3)特碳,?4.522891(FREM 1)诚亚,以及 1.940819(LCN6).

使用三個(gè)獨(dú)立的驗(yàn)證數(shù)據(jù)集 GSE116250, GSE42955,和 GSE84796 在進(jìn)行最大和最小標(biāo)準(zhǔn)化數(shù)據(jù)處理后午乓,計(jì)算出三個(gè)評(píng)分站宗,并對(duì)其分類效率進(jìn)行評(píng)價(jià),并對(duì) AUC 進(jìn)行比較益愈。這三個(gè)評(píng)分結(jié)果 如下:1)neuraHF份乒,將本研究中所識(shí)別的 DGS 與神經(jīng)網(wǎng)絡(luò)中的權(quán)重相乘得到的分?jǐn)?shù);2)CD8K腕唧;3)TP 53或辖,這是文獻(xiàn)中報(bào)道的與 HF 疾病相關(guān)的特征基因。

圖 6 顯示了三個(gè)獨(dú)立驗(yàn)證數(shù)據(jù)集的三個(gè)分?jǐn)?shù)的比較枣接。在 GSE116250 數(shù)據(jù)集(圖 6A neuraHF颂暇、 CD8K 和 TP 53 的 AUC 分別為 0.991、0.683 和 0.597但惶。neuraHF 的敏感性為 100%耳鸯,特異性為 96%。在 GSE 42955 數(shù)據(jù)集(圖 6B 神經(jīng)高頻膀曾、CD8K 和 TP 53 的 AUC 分別為 0.858县爬、0.517 和 0.65。neuraHF 的敏感性為 80%添谊,特異性為 95.8%财喳。在核查結(jié)果中 GSE 84796 (圖 6C neuraHF、 CD8K 和 TP 53 的 AUC 分別為 0.871斩狱、0.586 和 0.486耳高。neuraHF 的敏感性和特異性分別為 85.7%和 80%。

4討論

在本研究中所踊,我們首次計(jì)算了與 HF 相關(guān)的 DEGS泌枪,并通過隨機(jī)森林分類器獲得了 6 個(gè)重要候選 DEGS。利用神經(jīng)網(wǎng)絡(luò)模型確定了相關(guān)基因的預(yù)測(cè)權(quán)重秕岛,構(gòu)建了與心衰相關(guān)的 neuraHF 分類模型碌燕,并在三個(gè)獨(dú)立樣本數(shù)據(jù)集上評(píng)價(jià)了模型評(píng)分的分類效率。與其他兩種 HF 相關(guān)的生物標(biāo)志物 相比继薛,AUC 的分類效率較高修壕,且具有較好的分類效率。然而惋增,由于 rna-seq 在構(gòu)建神經(jīng)網(wǎng)絡(luò)模型時(shí)所預(yù)測(cè)的權(quán)重在理論上更適用于 rna-seq 數(shù)據(jù)的疾病分類叠殷,GSE116250 數(shù)據(jù)集在驗(yàn)證結(jié)果中顯示出最佳性能改鲫。同時(shí)诈皿,由于 GEO 數(shù)據(jù)庫中缺乏 HFpEF 的基因數(shù)據(jù),HFpEF 的遺傳特征沒有被納入診斷模型的構(gòu)建中,從而影響了 HFpEF 模型的診斷效果嫉父。

更有趣的是富俄,在構(gòu)建 HF 診斷模型的分析過程中,我們首次發(fā)現(xiàn)了三個(gè)關(guān)鍵基因(CSDC 2, FREM 1截歉,和 ZMAT1)可能在 HF 的發(fā)病機(jī)制中起一定作用胖腾。

心臟標(biāo)本的獲取困難可能會(huì)減少 HF 的潛在應(yīng)用。然而瘪松,我們目前的研究并不打算完全取代現(xiàn)有的診斷和治療方法咸作,而是為了補(bǔ)充這些方法。通常宵睦,目前的診斷標(biāo)準(zhǔn)和程序是基于來自 HFrEF 患者的數(shù)據(jù)记罚。然而,仍不清楚這些是否完全適用于 HFpEF 患者壳嚎。例如桐智,使用這些非侵入性方法很難診斷 HFpEF 的輕微癥狀。然而烟馅,從我們的研究中得出的診斷模型可以通過及時(shí)的心臟活檢來確定心力衰竭的可能性说庭。因此,我們的方法具有一定的臨床應(yīng)用價(jià)值郑趁。顯然刊驴,根據(jù)我們目前的研究結(jié)果,該模型的精度還有待進(jìn)一步研究寡润。

5總結(jié)

亮點(diǎn):

1.使用了機(jī)器學(xué)習(xí)來篩選 hub gene

2.使用了深度學(xué)習(xí)來構(gòu)建診斷模型

3.使用了多個(gè)數(shù)據(jù)集進(jìn)行數(shù)據(jù)分析

4.文章思路清晰缺脉,邏輯明了

不足:

1.文章里包含明顯錯(cuò)誤如文中實(shí)際 logFC 是>0.5 而不是 1.5,GSE141910 在 GEO 中僅包含 366 個(gè)樣本而非 399 個(gè)樣本

2.流程圖未描述 kegg,帶外誤差的英文為 out-of-bag error

3.本文臨床意義不大

Part2文章復(fù)現(xiàn)

step1 start GEO

#數(shù)據(jù)下載

rm(list?=?ls())

library(GEOquery)

gse?="GSE57345"

Sys.setenv("VROOM_CONNECTION_SIZE"=?2621440*2)

eSet?<-?getGEO(gse,

destdir?='.',

getGPL?=?F)

#(1)提取表達(dá)矩陣exp

exp?<-?exprs(eSet[[1]])

exp[1:4,1:4]

#boxplot(exp)

#exp?=?log2(exp+1)

#(2)提取臨床信息

pd?<-?pData(eSet[[1]])

#(3)調(diào)整pd的行名順序與exp列名完全一致

p?=?identical(rownames(pd),colnames(exp));p

if(!p)?exp?=?exp[,match(rownames(pd),colnames(exp))]

#(4)提取芯片平臺(tái)編號(hào)

gpl?<-?eSet[[1]]@annotation

save(eSet,gse,pd,exp,gpl,file?="step1output.Rdata")

因?yàn)?GSE57345 是常規(guī)的微陣列芯片,所以我們按照標(biāo)準(zhǔn)流程代碼來就好悦穿,得到了 GSE57345 的表達(dá)矩陣攻礼。

step2 group id

#1.group_list(實(shí)驗(yàn)分組)和ids(芯片注釋)

rm(list?=?ls())

load("step1output.Rdata")

library(stringr)

library(dplyr)

gr?=?pd$characteristics_ch1.1

k1?=?str_detect(gr,"yes");table(k1)

k2?=?str_detect(gr,"no");table(k2)

group?=?ifelse(k1,"disease",'normal');table(group)

group?=?factor(group,levels?=?c("normal","disease"))

#2.探針注釋----

#library(devtools)

#install_github("jmzeng1314/idmap1")

library(idmap1)

temp=getIDs("GPL11532")

rowname?<-?data.frame(probe_id=rownames(exp))

gene?<-?left_join(rowname,temp,by='probe_id')

gene?<-?na.omit(gene)

exp?<-?exp[match(gene$probe_id,rownames(exp)),]

#?多個(gè)探針對(duì)應(yīng)一個(gè)基因的話,取平均表達(dá)量最大的那個(gè)探針

result?<-?data.frame(ex=rowMeans(exp),

symbol=gene$symbol)

result?<-?arrange(result,symbol,desc(ex))

de?<-?result[!duplicated(result$symbol),]

exp?<-?exp[match(rownames(de),rownames(exp)),]

exp_sy?<-?data.frame(symbol=de$symbol,

exp)

save(eSet,pd,exp_sy,group,gpl,file?="step2output.Rdata")

將樣本分組栗柒,用曾老師的 idmap1 包給探針注釋礁扮,這里開始和文章不一樣了。我們經(jīng)常會(huì)遇到多個(gè)探針對(duì)應(yīng)一個(gè)基因的情況瞬沦,但是處理方法有很多種太伊,我們選擇取平均表達(dá)量最大的那個(gè)探針。得到 18837 個(gè)基因逛钻。

step3 pca

rm(list?=?ls())

load(file?="step1output.Rdata")

load(file?="step2output.Rdata")

exp?=?exp_sy[,-1]

group_list?=?group

dat=as.data.frame(t(exp))

library(FactoMineR)#畫主成分分析圖需要加載這兩個(gè)包

library(factoextra)

#?pca的統(tǒng)一操作走起

dat.pca?<-?PCA(dat,?graph?=?FALSE)

pca_plot?<-?fviz_pca_ind(dat.pca,

geom.ind?="point",#?show?points?only?(nbut?not?"text")

col.ind?=?group_list,#?color?by?groups

#palette?=?c("#00AFBB",?"#E7B800"),

addEllipses?=?TRUE,#?Concentration?ellipses

legend.title?="Groups"

)

pca_plot

save(pca_plot,file?="pca_plot.Rdata")

做主成分分析圖僚焦,看看該芯片中對(duì)照組和實(shí)驗(yàn)組的差異性。

step4 DEG

rm(list?=?ls())

load(file?="step2output.Rdata")

#差異分析曙痘,用limma包來做

#需要表達(dá)矩陣和group_list芳悲,不需要改

exp?=exp_sy[,-1]

group_list?=?group

library(limma)

design=model.matrix(~group_list)

fit=lmFit(exp,design)

fit=eBayes(fit)

deg=topTable(fit,coef=2,number?=?Inf)

#為deg數(shù)據(jù)框添加幾列

#1.加probe_id列立肘,把行名變成一列

library(dplyr)

deg?<-?mutate(deg,probe_id=rownames(deg))

head(deg)

#2.加symbol列,火山圖要用

deg?<-?cbind(deg,symbol=exp_sy$symbol)

head(deg)

#3.加change列,標(biāo)記上下調(diào)基因

logFC_t=0.5

P.Value_t?=?0.05

k1?=?(deg$P.Value?<?P.Value_t)&(deg$logFC<?-logFC_t)

k2?=?(deg$P.Value?<?P.Value_t)&(deg$logFC>?logFC_t)

change?=?ifelse(k1,

"down",

ifelse(k2,

"up",

"stable"))

table(change)

deg?<-?mutate(deg,change)

ex_deg?<-?deg[k1|k2,]

save(group_list,deg,logFC_t,P.Value_t,ex_deg,

file?="step4output.Rdata")

做差異分析名扛,logfc 取 0.5谅年,結(jié)果如下,得到 426 個(gè)差異基因肮韧。

step5 random forest

rm(list?=?ls())

library(tidyverse)

load(file?="step2output.Rdata")

load(file?="step4_output.Rdata")

df?<-?exp_sy[match(ex_deg$symbol,exp_sy$symbol),]

rownames(df)?<-?df$symbol

df?<-?data.frame(t(df[,-1]))?%>%

cbind(group,.)

library(randomForest)

set.seed(1423)

fit.forest?<-?randomForest(group~.,?data=df,

ntree=3000)

fit.forest

plot(fit.forest)

#找出使模型準(zhǔn)確率達(dá)到最優(yōu)所需要的樹的數(shù)量

which.min(fit.forest$err.rate[,1])

set.seed(1423)

fit.forest_2?<-?randomForest(group~.,?data=df,

ntree=49)

fit.forest_2

(127+173)/313

#?模型正確率為95.85%

varImpPlot(fit.forest_2)

result_df?<-?data.frame(importance(fit.forest_2,type=2))?%>%

arrange(desc(.))

impo_df?<-?filter(result_df,MeanDecreaseGini>4)

impo_df

#?選取了比較重要的幾個(gè)基因放入后續(xù)分析融蹂,

#?但是我覺得更好的方法應(yīng)該是使用Boruta包進(jìn)行特征選擇。

#?Kursa?M.,?Rudnicki?W.?(2010),?Feature?Selection?with?the?Boruta?Package,

#?Journal?of?Statistical?Software,?36(11),?1?-?13

impo_exp?<-?exp_sy[match(rownames(impo_df),exp_sy$symbol),]

rownames(impo_exp)?<-?impo_exp[,1]

n=impo_exp[,-1]

dim(n)

library(pheatmap)

annotation_col=data.frame(group=group_list)

rownames(annotation_col)=colnames(n)

library(ggplotify)

heatmap_plot?<-?as.ggplot(pheatmap(n,show_colnames?=F,

show_rownames?=?T,

cluster_cols?=?T,

scale?='row',

annotation_col=annotation_col))

heatmap_plot

rownames(impo_exp)

#?"ALG3"?????"AGFG1"????"ADAMTS15"?"ACE"??????"ADGRD1"

save(list?=?ls(),file?="step5output.Rdata")

我們?cè)O(shè)隨機(jī)種子為1423弄企,然后做隨機(jī)森林超燃,確定最佳隨機(jī)樹數(shù)目為49

看看變量重要性統(tǒng)計(jì)圖

選取了基尼指數(shù)平均減少量大于4的變量作為后續(xù)分析的重要變量。

并畫了個(gè)熱圖拘领。

step6 neuralnet

rm(list?=?ls())

filelist?<-?dir('gse141910')

file_path?<-?paste('gse141910',filelist,sep?='/')

data_ne?<-??read.csv(file_path[1])

for(nin2:length(file_path))?{

a?<-?read.csv(file_path[n])

data_ne?<-?merge(data_ne,a)

}

#?轉(zhuǎn)換基因id

library(clusterProfiler)

library(org.Hs.eg.db)

keytypes(org.Hs.eg.db)##?查看org.Hs.eg.db包含的數(shù)據(jù)

#?browseVignettes("clusterProfiler")?#查看教程

eg?=?bitr(data_ne$X,?fromType="ENSEMBL",

toType="SYMBOL",?OrgDb="org.Hs.eg.db")

impo_sy?<-?c("ALG3","AGFG1","ADAMTS15","ACE","ADGRD1")

nt?<-?eg[match(impo_sy,eg$SYMBOL),]

nt_exp?<-?data_ne[match(nt$ENSEMBL,data_ne$X),]?%>%

.[,-1]?%>%

scale()

rownames(nt_exp)?<-?impo_sy

library(tidyverse)

k?<-?str_detect(colnames(nt_exp),'P')

table(k)

#?240名病人淋纲,126名正常人

nt_gr?<-?rbind(nt_exp,group=k)?%>%

t(.)?%>%

data.frame()

nt_gr$group<-?factor(nt_gr$group)

library(neuralnet)

fit?<-?neuralnet(group~.,nt_gr,

hidden?=?5)

fit$result.matrix

plot(fit)

#?我也不知道做出來的結(jié)果對(duì)不對(duì),反正看得不是很懂院究,

#?不知道那篇文章中的權(quán)重是怎么得出來的洽瞬。

#?但是如果真要應(yīng)用深入學(xué)習(xí)的方法來研究問題時(shí),

#?應(yīng)該多嘗試一些不同的算法或r包來比較一下結(jié)果业汰。

#?比如TensorFlow,MXNet伙窃,H2O包等。

save(list?=?ls(),file?="step6output.Rdata")

GSE141910是rna-seq芯片样漆,處理原始數(shù)據(jù)可能有點(diǎn)麻煩为障,所以我就直接用了芯片上傳者處理好的表達(dá)矩陣來做后續(xù)分析。

用Y叔的clusterProfiler包放祟,和org.Hs.eg.db數(shù)據(jù)庫來對(duì)探針進(jìn)行注釋鳍怨,并提取出之前的5個(gè)重要變量。

然后構(gòu)建神經(jīng)網(wǎng)絡(luò)模型跪妥,隱藏神經(jīng)元數(shù)量設(shè)為5鞋喇,和文章里的圖比起來就丑好多了

step7 auc

rm(list?=?ls())

load('step6output.Rdata')

library(ggplot2)

library(pROC)

source("ROC_Plot.R")

source("Theme_Publication.R")

HUB?<-?nt_gr

colnames(HUB)

#?"ALG3","AGFG1","ADAMTS15","ACE","ADGRD1","group"

x1?<-?HUB$ALG3

x2?<-?HUB$AGFG1

x3?<-?HUB$ADAMTS15

x4?<-?HUB$ACE

x5?<-?HUB$ADGRD1

y?<-?HUB$group

R1?<-?roc(y,x1,ci=T);?R2?<-?roc(y,x2,ci=T);?R3?<-?roc(y,x3,ci=T)

R4?<-?roc(y,x4,ci=T);R5?<-?roc(y,x5,ci=T)

dat1?<-?data.frame(Sensitivities?=?R1$sensitivities,

FalsePositiveRate?=?(1-R1$specificities),

Model?=?rep("ARG1",length(R1$sensitivities)))

dat2?<-?data.frame(Sensitivities?=?R2$sensitivities,

FalsePositiveRate?=?(1-R2$specificities),

Model?=?rep("CXCL1",length(R2$sensitivities)))

dat3?<-?data.frame(Sensitivities?=?R3$sensitivities,

FalsePositiveRate?=?(1-R3$specificities),

Model?=?rep("LRG1",length(R3$sensitivities)))

dat4?<-?data.frame(Sensitivities?=?R4$sensitivities,

FalsePositiveRate?=?(1-R4$specificities),

Model?=?rep("MMP9",length(R4$sensitivities)))

dat5?<-?data.frame(Sensitivities?=?R5$sensitivities,

FalsePositiveRate?=?(1-R5$specificities),

Model?=?rep("OSCAR",length(R5$sensitivities)))

dat?<-?rbind(dat1,dat2,dat3,dat4,dat5)

colnames(dat)[2]?<-?("1-Specificities")

ggplot(dat,aes(`1-Specificities`,Sensitivities,colour?=?Model))?+?geom_roc_plot()+

scale_colour_Publication()?+?theme_Publication()+

theme(panel.border?=?element_rect(colour?='black'),legend.title?=?element_blank(),

legend.position?=?c(0.9,0.15),legend.direction?='vertical')

#做表

sy?<-?(c("ALG3","AGFG1","ADAMTS15","ACE","ADGRD1"))

auc?<-?data.frame(rn=?c('low','auc','up'))

roc?<-?list(R1,R2,R3,R4,R5)

for(nin1:length(sy))?{

auc1?<-?data.frame(roc[[n]]$ci)

auc?<-?cbind(auc,auc1)

}

rownames(auc)?<-?auc[,1]

auc?<-?auc[,-1]

colnames(auc)?<-?sy

write.csv(auc,'auc.csv')

save(list?=?ls(),file?="step7output.Rdata")

#?這里只是舉了個(gè)畫auc的例子眉撵,并沒有像文章一樣去獨(dú)立驗(yàn)證了侦香,

#?因?yàn)槲也恢郎窠?jīng)網(wǎng)絡(luò)模型怎么在其他芯片里驗(yàn)證并做roc曲線。

我并沒有像原文一樣去做auc纽疟,原文的思想是用GSE57345和GSE141910兩個(gè)大樣本芯片作為訓(xùn)練集罐韩,再用三個(gè)小樣本GSE42995,GSE84796污朽,GSE116250作為驗(yàn)證集散吵。最近有點(diǎn)其他事耽誤了,就沒有做這一步,但是還是找了一下之前做auc的代碼放上來了矾睦。

還有富集分析忘了做了晦款,大家可以參考一下其他推文:批量GO-KEGG富集分析注釋何必自己寫腳本,看Y叔的神器

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末顷锰,一起剝皮案震驚了整個(gè)濱河市柬赐,隨后出現(xiàn)的幾起案子亡问,更是在濱河造成了極大的恐慌官紫,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件州藕,死亡現(xiàn)場(chǎng)離奇詭異束世,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)床玻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門毁涉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人锈死,你說我怎么就攤上這事贫堰。” “怎么了待牵?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵其屏,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我缨该,道長(zhǎng)偎行,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任贰拿,我火速辦了婚禮蛤袒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘膨更。我一直安慰自己妙真,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布荚守。 她就那樣靜靜地躺著隐孽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪健蕊。 梳的紋絲不亂的頭發(fā)上菱阵,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天,我揣著相機(jī)與錄音缩功,去河邊找鬼晴及。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嫡锌,可吹牛的內(nèi)容都是我干的虑稼。 我是一名探鬼主播琳钉,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蛛倦!你這毒婦竟也來了歌懒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤溯壶,失蹤者是張志新(化名)和其女友劉穎及皂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體且改,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡验烧,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了又跛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碍拆。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖慨蓝,靈堂內(nèi)的尸體忽然破棺而出感混,到底是詐尸還是另有隱情,我是刑警寧澤礼烈,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布弧满,位于F島的核電站,受9級(jí)特大地震影響济丘,放射性物質(zhì)發(fā)生泄漏谱秽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一摹迷、第九天 我趴在偏房一處隱蔽的房頂上張望疟赊。 院中可真熱鬧,春花似錦峡碉、人聲如沸近哟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吉执。三九已至,卻和暖如春地来,著一層夾襖步出監(jiān)牢的瞬間戳玫,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工未斑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留咕宿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像府阀,于是被迫代替她去往敵國(guó)和親缆镣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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