何 旭,錢夕元 ,阮 彤
華東理工大學理學院 上海 200237
無論在發達國家還是發展中國家,心血管疾病都是嚴重危害人類生命的常見疾病[1]。心血管疾病會和其他慢性病一同影響健康,因此,研究心血管疾病與各種慢性病之間的因果關系,將對疾病的防治有重大意義。但是,運用傳統方法對于少則十幾種多達數十種變量一一檢驗的計算量十分巨大,并且容易忽略條件獨立性,因此很難處理復雜變量的因果關系。
貝葉斯網絡是一種利用有向無環圖(directed acyclic graph,DAG)對變量全局概率分布進行編碼的概率圖模型[2]:該方法將變量抽象成結點,變量間的關系表現為結點間的弧;在條件獨立性和有向分隔基礎上,將變量的全局概率分布分解成子結點對應變量在其父結點對應變量集合條件下的局部概率分布的乘積。貝葉斯網絡學習可分為結構學習與參數學習兩部分。結構學習可以有效地構建符合真實概率分布的DAG,參數學習利用得到的DAG計算局部的條件概率,具有結果直觀的優點。故本研究應用貝葉斯網絡研究了心血管疾病與其他慢性病之間的因果關系。
1.1研究對象收集上海中醫藥大學附屬曙光醫院2016年3月至2017年3月間2 752例心血管疾病患者的病歷數據(男1 382例,女1 370例),其中高血壓1 854(67.37%)例,糖尿病826(30.01%)例,腦梗死538(19.55%)例,冠心病1 089(39.57%)例,房顫844(30.67%)例,心律失常1 262(45.86%)例,肺部感染549(19.95%)例,慢性心功能不全1 320(47.97%)例,慢性支氣管炎472(17.15%)例,慢性腎功能不全219(7.96%)例,擴張型心肌病67(2.43%)例,慢性阻塞性肺病64(2.33%)例,肥厚性心肌病9(0.33%)例。
1.2資料收集從病例中提取患者慢性病患病信息,同時將患者是否死亡和是否二次住院信息加入數據集。二次住院以患者有二次住院時間記錄為依據。對所有數據進行因子化處理,即“是”和性別中的“男”用因子1表示,“否”和“女”用因子0表示。
1.3貝葉斯網絡學習選用R語言中的bnlearn包進行貝葉斯網絡學習,使用Rgraphviz包繪制貝葉斯網絡結構圖。
1.3.1 結構學習 使用基于分數-搜索的學習方法構建貝葉斯網絡。基于分數-搜索的方法以分數函數得到的分數衡量結構的優劣,利用優化算法搜索最優網絡結構。分數函數以極大似然(MLE)或最大后驗(MAP)為規則構建,有AIC、MDL、BIC、BDe等,本文使用BIC函數[3]:
其中X是觀察值的取值序列,G為構造出的網絡結構,N是樣本量, |G|是G中參數的數量。BIC的前半部分為觀察值X對于結構G的似然函數,后半部分是對于網絡結構復雜度的懲罰項。
優化算法方面,傳統方法可以很好地與貝葉斯網絡相結合,如爬山算法、tabu算法、模擬退火等。本文使用爬山算法優化(表1),同時為了增加模型的魯棒性,使用Bootstrap模型平均[4]方法(表2)。

表1 爬山算法

表2 Bootstrap模型平均
1.3.2 條件獨立性檢驗 貝葉斯網絡結構中沒有直接相連的變量應是條件獨立的,運用bnlearn包中的arc.strength函數可以批量地對網絡結構中的每條邊進行條件獨立性檢驗。假設有Xi→Xj這條有向邊,而{Xk}為Xj的父結點集,那么:
原假設H0:Xj⊥Xi|{Xk}
備擇假設H1:┐Xj⊥Xi|{Xk}
由于本文使用的數據為二項類型(0,1),故選用Pearsonχ2檢驗。設i∈Xi,j∈Xj,k∈{Xk},則

1.4模型學習對于一些邏輯上錯誤的結構設置“黑名單”:首先,“死亡”結點不能是其他結點的父結點(因為死亡不可能是二次住院、性別、患慢性病的原因);其次,“性別”結點不能是其他結點的子結點(因為死亡、二次住院或患慢性病不可能影響性別);然后,“二次住院”結點不能成為除了“死亡”之外其他結點的父結點(因為二次住院不可能引起某種疾病或性別變化)。如果有準確的專家知識指導,可以將確定存在的關系加入“白名單”,確定不存在的關系加入“黑名單”。在程序中將這些關系轉化成關聯矩陣輸入。
繪制500次Bootstrap方法得到的所有弧的強度累計分布圖(圖1),依據弧強度大和分布密集選取閾值α。根據圖1,α取0.85。

圖1 Bootstrap模型平均方法弧強度累計分布圖
2.1結構部分貝葉斯網絡結構如圖2所示,其中用疾病名稱拼音首字母表示疾病變量名。慢性腎功能不全(mxsgnbq)和肥厚性心肌病(fhxxjb)為孤立結點;性別(sex)對房顫(fc)有影響,而房顫(fc)對心率失常(xlsc)有影響;冠心病(gxb)同時影響到擴張型心肌病(kzxxjb)、慢性阻塞性肺病(mxzsxfb)、腦梗死(ngs)和心律失常(xlsc);擴張型心肌病(kzxxjb)影響慢性心功能不全(mxxgnbq)和高血壓(gxy),高血壓(gxy)繼而對糖尿病(tnb)、腦梗死(ngs)產生影響;腦梗死(ngs)對肺部感染(fbgr)有影響,而肺部感染(fbgr)對死亡(death)、二次入院(sechospital)和慢性支氣管炎(mxzqgy)產生影響。
我們可以從網絡結構中注意到,肺部感染是死亡的直接原因,而冠心病和高血壓對腦梗死有直接影響,繼而對肺部感染產生了影響。結果提示,應著重于冠心病、高血壓和腦梗死的預防、治療,以減少肺部感染,從而減少死亡。

圖2 疾病因果網絡圖
2.2參數部分通過參數學習得到條件概率分布(圖3),可以發現冠心病和高血壓會增加罹患腦梗死的概率,腦梗死的患者發生肺部感染的概率也更高,肺部感染患者死亡概率也較無肺部感染者高很多。冠心病、高血壓→腦梗死→肺部感染→死亡這一路徑的條件概率見表3。

圖3 條件概率分布圖

表3 冠心病、高血壓→腦梗死→肺部感染→死亡路徑的條件概率值
2.3條件獨立性檢驗結果見表4。從表4可以發現,所有邊的檢驗值都遠遠小于0.05,說明貝葉斯網絡中相連的結點都是非條件獨立的。
貝葉斯網絡學習的優點在于其考慮了當變量數超過兩個時,變量之間可能存在條件獨立性,若用傳統方法(諸如回歸等)或可能無法有效發掘所有因果關系,或可能存在指數級計算復雜度的問題。貝葉斯網絡利用結構學習和參數學習的方法,可以有效構建出直觀的因果關系網絡。進一步,可以通過專家系統或文獻查詢,通過已有知識先將一些邊確定下來(并不一定需要定向),然后結合貝葉斯網絡學習,將這些邊作為“白名單”輸入,這樣處理一是可以加快計算速度,二是可以防止貝葉斯網絡學習時結果丟失。
本研究使用貝葉斯網絡,有效發掘出了多個心血管疾病與其他慢性病之間的因果關系,其中有些關系通過文獻可以得到驗證。如文獻[5]指出女性罹患房顫的概率高于男性;本研究中性別指向房顫,女性罹患房顫的概率約為0.356 9,男性約為0.256 9。文獻[6]指出高血壓會引起糖尿病;本研究中高血壓指向糖尿病,患高血壓者罹患糖尿病的概率為0.352 2,未患者為0.192 7。本研究結果提示,主要影響心血管疾病患者死亡的路徑是冠心病、高血壓→腦梗死→肺部感染→死亡。其他疾病之間也存在一些因果關系,未經專家系統認可的因果關系(路徑)可為未來的研究方向提供指導。需要注意的是本研究提示的因果關系僅是從樣本數據學習得出,事實是否具有關聯性需要臨床驗證;兩變量間的因果關系也并未確定是正向影響(促進)還是負向影響(抑制)。
由于本研究中使用的是觀察數據,數據中會存在一定噪聲,對結果產生干擾。如果是在人為控制變量下進行干擾實驗,我們還可以利用貝葉斯網絡檢測實驗的有效性,這一點在生物學中已有應用[7]。在醫學領域,一方面,可以將此方法廣泛應用到臨床試驗中。如文獻[8]通過貝葉斯網絡研究了中藥藥性、藥味與功效的關系。或是將試驗對象分為使用某種治療組和未使用組,對于兩個組的數據分別構建貝葉斯網絡,對比兩組的網絡結構和參數,可以有效發掘該種治療的療效和作用過程;如文獻[9]利用貝葉斯網絡對心力衰竭病因和死亡之間的關系進行了研究,文獻[10]利用貝葉斯網絡對藥物洗脫支架植入術后長期雙重抗血小板治療患者的死亡率進行了meta分析。另一方面,由于貝葉斯網絡具有處理復雜數據的優勢,并且沒有固定的輸入和輸出結點,故可選擇任意結點(疾病)作為輸入,利用貝葉斯網絡的信度傳播算法預測其他疾病的發生概率,以此構建智能醫療決策系統,如文獻[11]。
值得指出的是,貝葉斯網絡也存在一些缺點。首先,有時刪去一個變量或者加入一個新變量,貝葉斯網絡結構會出現較大變化;其次,貝葉斯網絡要求網絡結構必須是無環的,這可能會丟失一些疾病之間存在的“反饋”現象,即疾病之間的影響形成了一個環,貝葉斯網絡會將環中相對弱的一邊刪除,但理論上應該保留,這一點可以通過動態貝葉斯網絡解決[12]。