楊?;?王靜嫻 趙 芃 李業棉 陳方堯
西安交通大學醫學部公共衛生學院流行病與衛生統計學系衛生統計學教研室,710061 陜西 西安
隊列研究是流行病學研究中一種重要的研究類型。在隊列研究中,研究人員常會對大量對象進行長期隨訪,來收集與研究目的相關的信息、記錄特定終點事件的發生情況及發生時間[1]。然而,在研究中通常只有一部分個體在隨訪中發生終點事件,另一部分個體在隨訪期內并未觀測到終點事件的發生,這樣的數據稱為縱向刪失數據(censored data)[2]。而基于刪失數據的預測模型,一直是研究人員感興趣的熱點。本文探討基于super learner算法的集成學習在縱向刪失數據預測建模中的應用,為刪失數據預測提供參考。
目前,基于機器學習(machine learning)的統計分析技術已廣泛應用于生物醫學數據的預測建模分析中[3],它是進行自動或半自動信息(知識)獲取的有力工具,且利用機器學習算法及相關技術對高維數據進行處理,可對傳統的統計分析起到輔助作用。目前,在生物醫學高維數據預測建模分析中,應用較多的機器學習算法包括回歸學習(regression learning)、正則化算法(regularization)、決策樹算法(decision tree)、貝葉斯方法(bayesian method)、核方法(kernel method)、無監督學習(unsupervised learning)和有監督學習(supervised learning)等。
機器學習算法的應用為生物醫學數據的處理和分析提供了新的、有利的工具,然而機器學習算法在實踐中存在以下2個方面的問題。
(1)不同算法在處理同一個數據時得到的結果不完全一樣,即不同算法的預測結果之間存在差異;這時就需要進行算法或模型的選擇(selection),但基于不同的選擇標準,依舊會導致選出的算法或模型不同,進而影響預測結果的穩健性。
(2)即使是同一個算法,如人工神經網絡,在初值設置不同的情況下,最終的預測結果也不盡相同;同時,機器學習算法還容易導致過擬合的問題,使得預測結果的外推性變差。
為了解決上述問題,研究人員提出了集成學習(ensemble learning)方法[4]。相關研究指出,當樣本量足夠大的時候,集成學習可以整合多個機器學習算法,先獨立地基于同一個樣本進行訓練,然后再把各個算法所得的結果整合起來,最終得到整體的預測結果,這改善了預測結果的穩健性和外推性[4-5]。一個較為典型的集成學習方法的實例,就是隨機森林(random forest),它通過將不同的決策樹模型進行整合,構成一個“森林”,最終實現分類預測的目的,其預測準確度較決策樹模型有較大的提升[6]。
2006年Van der Laan等提出了一種基于損失函數的集成學習算法super learner[7]。該算法含有一個算法箱,其中包含了回歸學習、決策樹等多種機器學習算法。該算法將多種適用于不同情況的算法集合起來,并賦予不同的權重,在交叉驗證(cross-validation)的框架下,找到使得損失函數最小的一套權重,以及在該權重下的算法組合。基本步驟如下。
Step 1:根據研究目的和數據情況,選擇并定義算法箱內的a種系數估計方法;在完整數據集中,使用所選擇的算法,分別單獨基于完整數據進行模型參數估計,得到a個系數估計的模型。
Step 2:將數據分為訓練樣本和測試樣本后,進行K層交叉驗證。
Step 3:對訓練集中的每一層數據使用算法箱中的全部估計方法,得到多套系數估計組合下的模型Ψa(X)。


Step 5:調整算法權重αka,得到使交叉驗證中所得的預測結果最優,即損失函數最小的算法權重:

需要注意的是,選擇不同的損失函數,得到的算法權重估計不全相同。通常情況下,super learner算法使用的損失函數包括絕對誤差損失函數、平方誤差損失函數、適用于二分類因變量的負對數損失函數3類。
Step 6:將調整后得到的最佳算法權重與Step1中得到的每一種算法下的模型參數估計進行組合,得到最終的模型。
基于super learner算法進行預測建模,優點有: (1) 算法選擇靈活:可以自行選擇算法來擬合整體模型,且super learner算法會通過權重來刪除對整體預測能力無貢獻的算法(權重為0);(2) 建模過程基于交叉驗證方法,可有效提高模型預測的準確度,同時降低模型過度擬合的風險;(3) super learner算法得到的模型,可以看作是不同算法下模型的加權組合,可以快速獲得原本需要花費大量實驗才能得出的模型權重,這使集合過程變得更加高效[7-8]。
super learner算法在數據刪失率較高或含有時間相依型協變量(time-dependent variable)時,可以更好地利用數據進行建模,且預測能力更高。在使用super learner算法進行刪失數據建模時與常規的cox比例風險模型不同,該算法建模時將刪失時間等距地劃分成時間段,作為應變量納入模型;同時,針對終點事件發生的時間點建立一個指示變量,如果時間段被劃分的足夠精細,則包含有每個時間點指標的參數統計模型,如logistic回歸將近似于cox比例風險模型[9]。
super learner算法在R語言中的實現,可以通過R包“SuperLearner”(https://CRAN.R-project.org/package=SuperLearner)進行。該軟件包的當前版本為2.0-26,發布時間為2019年12月。應用該軟件包實現基于super learner算法預測建模的基本語法和參數如下:
使用R軟件包“SuperLearner”中的“SuperLearner”函數進行建模時,函數的基本參數和格式如下:

#模型的建立>Fit<- SuperLearner(Y,#應變量,可以是二分類變量或連續型變量>X,#自變量矩陣>family = ,#鏈接函數,目前可選gaussian()或binomial()>SL.library=
其中,參數Y為應變量,且必須是數值型向量;X是自變量的集合,通常是一個數據集。
函數參數“method”用來指定損失函數類型,可以選擇的損失函數包括基于lawson-hanson算法的最小二乘損失函數(method.NNLS,默認損失函數)、基于goldfarb和idnani雙重算法的最小二乘損失函數(method.NNLS2)、負對數二項似然損失函數(method.NNloglik)和1-AUC損失函數(method.AUC)、基于二次規劃算法來計算權重組合的損失函數(method.CC_LS)和通過最小化負二項式對數似然確定最佳權重組合的損失函數(method.CC_nloglik)。
參數“SL.library”為算法參數,用來指定該super learner模型中希望組合的算法。super learner算法的算法箱中包含多個可選算法,如隨機森林算法等,使用相應的算法時需要R已經安裝了相應的R程序包,否則在調用算法時會報錯。同時,該函數也允許使用者調用自己設定的算法,或對軟件包中已定義算法的超參數(hyperparameter)進行自定義。相關研究認為,在使用super learner算法進行建模分析時,根據數據情況和分析目的,對算法超參數進行適當的調整,會對建模結果帶來有利的影響[10]。
需要注意的是,基于同一個數據集,選擇不同的算法組合或損失函數,建立得到的模型很可能是不同的。需要特別說明的是,選擇1-AUC損失函數時,應變量Y需要是二分類變量。
模型評價采用該軟件包中的另一個函數“CV.SuperLearner”來實現,其基本格式和參數的含義如下:

#模型評價>Fit<- CV.SuperL-earner(Y,#應變量,可以是二分類變量或連續型變量>X,#自變量矩陣>V=
其中,參數“V”為交叉驗證的折數,不進行指定時,默認為10折。交叉驗證的折數不宜過高,否則會將數據過度分割。該函數的其余參數,含義與2.1部分中相同。模型驗證的結果,可以采用“summary()”函數和“plot()”函數進行輸出。
實例數據獲取自TCGA數據庫(https://cancergenome.nih.gov/)[11],研究所使用的數據集包含了結腸腺癌患者的生存結局及其microRNA測序結果。該數據刪失率為88.8%,屬于高刪失數據。參考2019年Chen等[12]的分析結果,選取其中15個在單因素分析中有統計學意義的microRNA納入分析,采用super learner算法建立預測模型。
在建模前首先需對刪失時間進行處理。應用super learner算法對刪失數據建模前,必須將數據從常規的結構轉換為計數過程(counting process)格式,即需要對時間變量進行拆分,使得在給定的時間間隔下,每個小的時間區間內最多僅有1個終點事件發生[9]。
在較早期版本的R里,“SuperLearner”包中的“createDiscrete()”函數可以完成該轉換,但更新后的版本中,該函數已經不可使用??梢钥紤]使用“survival”包中的“survSplit()”函數達到相同的效果,亦可基于R語言自行編程進行數據格式的轉換處理。
建模時,將新產生的區間間隔的起點或終點作為自變量,不再將原有的時間變量納入分析,模型的應變量為小區間內事件的發生與否。
經過預處理后,首先將數據集按照7∶3的比例分割為訓練集和測試集:
# 將數據集(s)分割為訓練集(70%)和驗證集(30%)
>num <- round(nrow(s)*0.7)
>index <- sample(nrow(s),size = num)
>s_train <-s[index,] #訓練集
>s_test <-s[-index,] #驗證集
#基于訓練樣本建立模型
#指定結局變量和自變量集合
y_train <- as.vector(s_stran$y) #定義結局變量,應為數值型向量
x_train <-s_train[,-1] #定義自變量集合,應為數據集
#模型建立
>model <- SuperLearner(y_train,x_train, family=binomial(),
> SL.library=list("SL.ranger","SL.ksvm","SL.ipredbagg","SL.bayesglm"))
訓練結果見圖1:

圖1 基于super learner算法建模時的算法權重和對應的風險值
以上輸出結果中,Risk為每一種算法下損失函數的值,默認Coef為每個算法最終獲得的權重。由該結果可知,所選的4個算法中,“SL.ranger”權重為0.622 598 9,“SL.ipredbagg”算法權重為0.377 401 1,二者之和為1;而其余2個算法權重為0,被判定為無效算法。以上結果相當于,當前模型是基于“SL.ranger”和“SL.ipredbagg”2個算法得到的。
以下是模型交叉驗證的結果。
#模型交叉驗證,默認為10折
>CV.model <- CV.SuperLearner(y_train, x_strain, family=binomial(),
> SL.library=list("SL.ranger","SL.ksvm","SL.ipredbagg","SL.bayesglm"))
以下2個函數分別輸出不同算法下,模型損失函數的量化(圖2)和圖形化結果(圖3)。
#輸出交叉驗證結果
>summary(cv.model)

圖2 不同算法模型損失函數值(Risk)的量化結果
#將結果以統計圖的形式體現
>plot(cv.model)

圖3 不同算法下模型損失函數值(Risk)及其95%CI的圖形化結果
模型建立后,可以基于拆分好的測試集,對模型的預測能力進行檢驗,以下過程同時需要加載R包“dplyr”和“caret”,方法如下:
#基于測試集進行預測
#指定結局變量和自變量集合
y_test <- as.vector(s_test$y) #定義結局變量,應為數值型向量
x_test <- s_test[,-1] #定義自變量集合,應為數據集
>predictions <- predict.SuperLearner(model, newdata=x_test)
>conv.preds <- ifelse(predictions$pred>=0.5, 1, 0)
# 輸出預測結果
>cm <- confusionMatrix(factor(conv.preds), factor(y_test))
可以得到,當前模型的預測準確度為0.873 7(95%CI:0.789 7~0.933 0)。基于訓練集的模型預測結果顯示,模型的預測準確度良好。此外,我們也可以估計模型的C-index[13]進行模型預測結果的評價,C-index的估計需要調用R包“Hmisc”來估計。
我們同時使用常規的cox回歸模型基于以上數據建模,得到相對應回歸模型的C-index為0.784,而基于super learner算法的到的預測模型,其C-index為0.883,比常規的cox回歸模型高。
super learner算法得到的預測模型,可以看作為基于其算法箱內的1個或多個算法得到預測模型的加權組合,預測準確度高。因此,近年來,在生物醫學的預測建模分析中,super learner算法的使用越來越多[14]。
在處理刪失數據時,使用該算法及R包“SuperLearner”對刪失數據進行預測建模與常規的cox回歸不同,具體的不同之處在于,預測得到終點事件的發生概率,是矯正了事件發生時間后的結果。由于該軟件包暫時不支持直接導出回歸系數的估計,因此目前使用該軟件包進行基于super learner算法的集成學習建模,更適合以預測為目的的分析。同時,相關模擬研究也證明,在刪失數據的預測分析中,super learner算法的表現都優于其他相關算法和模型[15]。
綜上所述,基于super learner的集成學習算法,為縱向刪失數據的預測建模提供了一個新的選擇,其預測效果良好,對于數據分析實踐來說,是良好的統計預測建模工具。