实战 lasso特征筛选得到5个基因 cox单因素分析得到很多有意义的基因 如何lasso筛选特征基因 然后再进行cox多因素分析
二、為什么需要用 Lasso + Cox 生存分析模式一般我們在篩選影響患者預(yù)后的變量時,通常先進行單因素Cox分析篩選出關(guān)聯(lián)的變量,然后構(gòu)建多因素模型進一步確認(rèn)變量與生存的關(guān)聯(lián)是否獨立。
但這種做法沒有考慮到變量之間多重共線性的影響,有時候我們甚至?xí)l(fā)現(xiàn)單因素和多因素Cox回歸得到的風(fēng)險比是矛盾的,這是變量之間多重共線性導(dǎo)致模型 失真的結(jié)果。并且,當(dāng)變量個數(shù)大于樣本量時(例如篩選影響預(yù)后的基因或突變位點,候選的變量數(shù)可能遠(yuǎn)超樣本個數(shù)),此時傳統(tǒng)的Cox回歸的逐步回歸、前 進法、后退法等變量篩選方法都不再適用。
因此,當(dāng)變量之間存在多重共線性或者變量個數(shù)大于樣本量時,需要用Lasso(Least absolute shrinkage and selection operator)回歸首先進行變量的篩選,然后構(gòu)建Cox回歸模型分析預(yù)后影響,這就是Lasso + Cox 生存分析模式。
三、什么是 Lasso + Cox 生存分析模式Lasso可以在模型參數(shù)估計的同時實現(xiàn)變量的選擇,能夠較好的解決回歸分析中的多重共線性問題,并且能夠很好的解釋結(jié)果。Lasso回歸算法使用L1范數(shù)進行收縮懲罰,對一些對于因變量貢獻不大的變量系數(shù)進行罰分矯正,將一些不太重要的變量的系數(shù)壓縮為0,保留重要變量的系數(shù)大于0,以減少Cox回歸中協(xié)變量的個數(shù)。
5.7+生信文章復(fù)現(xiàn)(五):單因素cox+lasso篩選預(yù)后相關(guān)DEGs
load("G:/r/duqiang_IPF/GSE70866_metainformation_4_platforms/3_ipf_combined_cox_univariate_Adjuste_for_age_sex.RData")head(cox_results) rownames(cox_results) cox_results2=cox_results %>% as.data.frame() %>% filter(p<0.05) identical(colnames(exprSet),rownames(phe))x=exprSet[rownames(exprSet) %in% rownames(cox_results2),] x=t(x) dim(x) y=phe %>%select('time','event') head(y)[1:4,1:2] head(x)[1:4,1:4]模型構(gòu)建 input? x? y
#構(gòu)建模型 y=data.matrix(Surv(time=y$time,event= y$event)) head(y) head(x)[1:4,1:5]1 模型構(gòu)建
fit <- glmnet(x, y, family = 'cox', type.measure = "deviance", nfolds = 10) plot(fit,xvar = 'lambda',label = T) #候選DEHGs的lasso系數(shù)2 十折交叉檢驗篩選最佳lambda:?
#十折交叉檢驗篩選最佳lambda: set.seed(007) lasso_fit <- cv.glmnet(x, y, family = 'cox', type.measure = 'deviance', nfolds = 10)3 提取最佳λ值(這里選擇1se對應(yīng)lambda):?
#提取最佳λ值(這里選擇1se對應(yīng)lambda): lambda.1se <- lasso_fit$lambda.1se lasso_fit$lambda.min lambda.1se #[1] 0.26173154.使用1se的lambda重新建模:
model_lasso_1se <- glmnet(x, y, family = 'cox',type.measure = 'deviance', nfolds = 10,lambda = lambda.1se)5 拎出建模使用基因:
#拎出建模使用基因: gene_1se <- rownames(model_lasso_1se$beta)[as.numeric(model_lasso_1se$beta)!=0]#as.numeric后"."會轉(zhuǎn)化為0 gene_1se #篩選出5個 #"HS3ST1" "MRVI1" "TPST1" "SOD3" "S100A14" library(dplyr)#save(phe,phe_final_3,exprSet,cox_results,file = "G:/r/duqiang_IPF/GSE70866_metainformation_4_platforms/3_ipf_combined_cox_univariate_Adjuste_for_age_sex.RData") load("G:/r/duqiang_IPF/GSE70866_metainformation_4_platforms/3_ipf_combined_cox_univariate_Adjuste_for_age_sex.RData")head(cox_results) rownames(cox_results) cox_results2=cox_results %>% as.data.frame() %>% filter(p<0.05)getElement(cox_results,"p") cox_results['p'] head(cox_results) dim(cox_results)head(exprSet) dim(exprSet)dim(phe) head(phe)identical(colnames(exprSet),rownames(phe))x=exprSet[rownames(exprSet) %in% rownames(cox_results2),] x=t(x) dim(x) y=phe %>%select('time','event') head(y)[1:4,1:2] head(x)[1:4,1:4]table(y$time==0)#OS單位從天轉(zhuǎn)換為年: 是否轉(zhuǎn)換成年不影響結(jié)果 if(1==1){y$time <- round(y$time/365,5) #單位年,保留5位小數(shù) time不可以有0head(y) }#構(gòu)建模型 y=data.matrix(Surv(time=y$time,event= y$event)) head(y) head(x)[1:4,1:5] fit <- glmnet(x, y, family = 'cox', type.measure = "deviance", nfolds = 10) plot(fit,xvar = 'lambda',label = T) #候選DEHGs的lasso系數(shù) head(coef(fit))#十折交叉檢驗篩選最佳lambda: set.seed(007) lasso_fit <- cv.glmnet(x, y, family = 'cox', type.measure = 'deviance', nfolds = 10)plot(lasso_fit) lasso_fit head(coef(lasso_fit)) rownames(lasso_fit$beta)[as.numeric(lasso_fit$beta)>0]#提取最佳λ值(這里選擇1se對應(yīng)lambda): lambda.1se <- lasso_fit$lambda.1se lasso_fit$lambda.min lambda.1se #[1] 0.2617315#使用1se的lambda重新建模: model_lasso_1se <- glmnet(x, y, family = 'cox',type.measure = 'deviance', nfolds = 10,lambda = lambda.1se) head(model_lasso_1se) head(coef(model_lasso_1se))#拎出建模使用基因: gene_1se <- rownames(model_lasso_1se$beta)[as.numeric(model_lasso_1se$beta)!=0]#as.numeric后"."會轉(zhuǎn)化為0 gene_1se #篩選出5個 #"HS3ST1" "MRVI1" "TPST1" "SOD3" "S100A14"cox回歸與logistic回歸的區(qū)別
一、LASSO簡要介紹
? ? ???隨著科技的進步,收集數(shù)據(jù)的技術(shù)也有了很大的發(fā)展。因此如何有效地從數(shù)據(jù)中挖掘出有用的信息也越來越受到人們的關(guān)注。統(tǒng)計建模無疑是目前處理這一問題的最有效的手段之一。在模型建立之初,為了盡量減小因缺少重要自變量而出現(xiàn)的模型偏差,人們通常會選擇盡可能多的自變量。但實際建模過程中通常需要尋找對響應(yīng)變量最具有解釋性的自變量子集—即模型選擇(或稱變量選擇、特征選擇),以提高模型的解釋性和預(yù)測精度。所以模型選擇在統(tǒng)計建模過程中是極其重要的問題。
? ??? ?Lasso(Least absolute shrinkage and selection operator, Tibshirani(1996))方法是一種壓縮估計。它通過構(gòu)造一個罰函數(shù)得到一個較為精煉的模型,使得它壓縮一些系數(shù),同時設(shè)定一些系數(shù)為零。因此保留了子集收縮的優(yōu)點,是一種處理具有復(fù)共線性數(shù)據(jù)的有偏估計。
? ? ??Lasso?的基本思想是在回歸系數(shù)的絕對值之和小于一個常數(shù)的約束條件下,使殘差平方和最小化,從而能夠產(chǎn)生某些嚴(yán)格等于0?的回歸系數(shù),得到可以解釋的模型。R的Lars?算法的軟件包提供了Lasso編程,我們根據(jù)模型改進的需要,可以給出Lasso算法,并利用AIC準(zhǔn)則和BIC準(zhǔn)則給統(tǒng)計模型的變量做一個截斷,進而達到降維的目的。因此,我們通過研究Lasso可以將其更好的應(yīng)用到變量選擇中去。
? ? ?說簡單點:在回歸分析中因素篩選主要用到逐步回歸stepwise、向前、向后等等方法,這些方法比較傳統(tǒng),而對于共線性問題比較嚴(yán)重的數(shù)據(jù),或者變量個數(shù)大于觀測值個數(shù)例如基因測序數(shù)據(jù),基因個數(shù)遠(yuǎn)大于觀測值個數(shù)(病人數(shù)),上述傳統(tǒng)方法不合適,而Lasso 方法就是為了解決上述問題而生,它提供了一種新的變量篩選算法,可以很好的解決共線性問題,對于我們平常做的回歸分析,如果大家覺得用普通的方法篩選到的變量不理想,自己想要的變量沒有篩選到,可以用此方法試一試,具體流程是先在R軟件中用此方法篩選出變量,之后對篩選出的變量再做COX回歸或者其他回歸分析。
總結(jié)
以上是生活随笔為你收集整理的实战 lasso特征筛选得到5个基因 cox单因素分析得到很多有意义的基因 如何lasso筛选特征基因 然后再进行cox多因素分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jpg转svg文字路径动画
- 下一篇: js 对一个字段去重_js面试