NHANES數(shù)據(jù)庫高血壓病如何確定?
關(guān)于NHANES數(shù)據(jù)庫不再介紹了,有很多文章都談過這個話題。本次主要想說在清洗NHANES數(shù)據(jù)時,高血壓病如何確定?
論文中一般滿足下列4條中的1個即可確認高血壓病的診斷:
(1)收縮壓(systolic blood pressure, SBP)≥140mmHg;
(2)舒張壓(diastolic tblood pressure, DBP)≥90mHg;
(3)目前口服降壓藥
(4)自述有高血壓
基于以上4點,我們來分別講述如何確定高血壓病
1.收縮壓≥140mmHg和/或舒張壓≥90mHg
我們可以從每個cycle里面的Examination Data獲得BPX開頭的文件(例如在 2000-2001 cycle中有BPX_B.xpt),里面有測量的血壓數(shù)據(jù),每個受試者大概測了4次血壓。該文件中,BPXSAR(SBP average reported to examinee)與BPXDAR(DBP average reported to examinee)分別對應(yīng)了測量后計算得到的平均收縮壓與舒張壓。通過這兩個數(shù)值我們便可判定是否滿足高血壓診斷的第(1)(2)條。
分析時有點需要注意,平均血壓其實也是基于血壓4次或3次或2次或1次的測量值計算而來的,所以平均血壓的缺失值最少。但是存在平均SBP、DBP數(shù)值為0的情況,在分析時可酌情刪除。

2.目前口服降壓藥與自述高血壓
關(guān)于降壓藥這一點,相關(guān)數(shù)據(jù)均在Questionnaire Data部分,通過與面對面訪談收集。但在用藥方面NHANES數(shù)據(jù)庫分析起來比較復(fù)雜,因為BPQ文件和RXQ_RX文件中均會涉及降壓藥用藥情況。BPQ文件針對受試者高血壓病史及控制情況進行提問,而RXQ_RX文件則采集了患者的用藥信息,同時RXQ_RX隨著年份的更迭,數(shù)據(jù)內(nèi)容也發(fā)生了一部分變化。最為簡單的就是分析BPQ文件,例如BPQ.xpt文件(1999-2000 cycle)中問題BPQ040A (Taking prescription for hypertension?) 以及BPQ050A (Now taking prescribed medicine?),但是該文檔中并沒有提及這兩個問題具體有什么區(qū)別。問題的內(nèi)容、出現(xiàn)的先后順序和回答為yes的人數(shù)來推斷,BPQ040A可能指是否服用過降壓藥(先出現(xiàn),1225人回答為yes),而BPQ050A指現(xiàn)在仍服用降壓藥(后出現(xiàn),1069人回答為yes)。但是這兩個問題都有個很大的缺陷。讓我門回到自述高血壓這條標準上,自述高血壓的信息也是從BPQ.xpt文件中得到的(BPQ020, Ever told you had high blood pressure?),BPQ040A與BPQ050A的問題就在這,只有當BPQ020回答為yes時,才會提問BPQ040A進而問BPQ050A。也就是說當額外考慮BPQ040A與BPQ050A時并不會對BPQ020判斷有無高血壓病提供更多的信息,因為當BPQ020為no時,BPQ040A與BPQ050A均為缺失。

因此,我更推薦通過RXQ_RX,通過用藥信息來確認目前是否使用降壓藥,但對該文件的分析難度較大需要較高的數(shù)據(jù)清洗能力、對高血壓用藥有較深入的理解,同時還要理解RXQ_RX文件的數(shù)據(jù)構(gòu)成,否則很容易出錯。在這里我以R語言為操作平臺,分享一下我的分析經(jīng)驗。
首先用藥信息來自與標題為Prescription Medications(處方藥)的文件(文件前綴為RXQ_RX),而不是Drug Use(毒品使用)。RXQ_RX這個文件以長數(shù)據(jù)的形式列出了每個受試者目前使用的所有藥物的通用名 (Standard generic ingredient name或generic drug name) 以及通用編碼 (RXDDRGID, Generic drug code),此外2013-2014及以后的RXQ_RX文件還很貼心地標明了用藥針對的疾病和對應(yīng)的國際疾病診斷編碼,可用primary/essential hypertension這個診斷或者相應(yīng)的ICD編碼來確定是否使用了降壓藥(但是注意不要納入了pulmonary hypertension)。我們這里使用更為通用的方法,即使用藥物通用編碼 RXDDRGID來確定ABCD四大類降壓藥。在這里我提供了我提取的藥物通用編碼,歡迎大家使用并勘誤。

ABCD四大類降壓藥中,ACEI類與ARB類最好確定,因為他們的作用比較局限于心血管系統(tǒng),而β受體阻斷劑、利尿劑及鈣離子受體阻斷劑則應(yīng)用廣泛,不一定就是用來降壓的。例如噻嗎洛爾(Timolol)雖為β受體阻斷劑但幾乎不用于心血管系統(tǒng),而是作為滴眼液來降低眼壓治療青光眼,又比如維拉帕米(Verapamil)、地爾硫?(Diltiazem)等非二氫吡啶類鈣離子阻斷劑在心血管系統(tǒng)的主要應(yīng)用為擴冠(變異性心絞痛)與抗心律失常,而幾乎沒有作為降壓藥使用的。諸如此類,BC類藥物中幾乎不用于降壓的均進行了排除。對于D利尿劑,我也只納入了噻嗪類的,而呋塞米、托拉塞米、螺內(nèi)酯、阿米洛利這類的藥物并沒有納入,同樣也是基于我的臨床經(jīng)驗,考慮到這些藥物很少用作降壓藥。這一塊肯定不同的醫(yī)生理解不同,也歡迎大家和我交流討論。
確定了編碼之后,我們就可以處理數(shù)據(jù)了。導(dǎo)入RXQ_RX文件后,我們發(fā)現(xiàn)這個文件為長數(shù)據(jù)即同一個受試者有多行數(shù)據(jù),每一行數(shù)據(jù)代表著一種藥物的使用情況。例如下圖中中編號為83732的受試者有10行數(shù)據(jù),說明他目前吃了10種處方藥,RXDDRUG為藥物名稱,RXDDRGID為藥物編號。

我的思路是先確定是不是降壓藥,再計算用了幾種降壓藥,≥1種即認定為使用了降壓藥。這里我直接貼了我的代碼,我就不多做解釋了,需要有R語言基礎(chǔ)...不懂的自行百度或者查R data science這本書。
anti_hypertensive_agent_code="d07077|d07486|d03193|d00689|d05048|d03829|d07668|d07440|d06905|d07533|d07498|d06662|d00004|d03258|d07754|d07818|d00730|d03265|d03259|d00176|d00709|d03744|d04322|d04711|d00006|d03566|h00032|d00013|d03740|d04266|d04837|d00231|d00242|d04539|d03257|d03256|d00253|d04245|a11077|d03266|d03830|d03263|d03264|d04141|d04878|d03261|d04509|d03251|d03247|d04737|d03260|d03052|d04293|d04222|d00270|d00732|d03821|d00134|d03835|d00018|d05265|d00315|d00051|d03825|d04801|d00332|d04440|d00137|d00032|d00365|d00728|d08369|d04364|d04008|d04065|d04113|d00260|d03564|d00645|d03252|d00643|d03253|d00646" #降壓藥的通用編碼
read_xpt("1999-2000/questionnaire/RXQ_RX.XPT")%>% #讀數(shù)據(jù),需要改成自己文件所在的路徑
mutate(anti_hypertensive_agent=if_else(grepl(pattern = anti_hypertensive_agent_code, RXDDRGID),"yes","no"))%>%
#根據(jù)通用編碼判斷該藥是否為降壓藥
select(c(SEQN,anti_hypertensive_agent))%>%
dcast(SEQN~anti_hypertensive_agent,length)%>%#長數(shù)據(jù)變寬數(shù)據(jù),length指填充為降壓藥的個數(shù)
mutate(anti_hypertensive_agent=if_else(yes>=1,"yes","no"))%>% #降壓藥的個數(shù)≥1就意味著吃了降壓藥
select(c(SEQN,anti_hypertensive_agent))%>%right_join(y=nhanes_A,by="SEQN")#將是否吃降壓藥這個結(jié)果合并到主數(shù)據(jù)里,即nhanes_A
這樣我們就大功告成了!回顧一下,通過BPX文件確定(1)(2)標準,通過RXQ_RX文件確定了(3)標準,通過BPQ確定了(4)標準。只要滿足上述4條中的1條即可認定為高血壓病!
最后的思考:滿足任何1條標準即可確定有高血壓,那么反過來說是不是4條標準都不符合時才能判定不存在高血壓?這個問題看似簡單直白,但是當牽扯到缺失數(shù)據(jù)時卻又那么復(fù)雜。根據(jù)R語言的邏輯判斷(&為和,|為或,T指TURE,F(xiàn)指FALSE),T&NA = NA,T|NA = T,F(xiàn)&NA =FALSE,F(xiàn)|NA=NA ,那么以下幾種情況該怎么判定無高血壓呢?
1.測量的血壓正常,未服用降壓藥,而自述高血壓項缺失,即第(1)(2)(3)條均為F,第(4)為NA,是否可認為沒有高血壓?
2.未測量血壓,未服用降壓藥,但自述沒有高血壓,即第(1)(2)條為NA,(3)(4)條均為F,第(4)為F,是否可認為沒有高血壓?
(通過RXQ_RX文件及上上述分析方法,是否服用降壓藥這個選項不會存在缺失,因為沒有用藥只會編碼為0,而不是缺失)
當然,我們可以豪氣地說直接把有缺失的刪除掉,但是這種問題不僅僅存在于高血壓病的確認上,還存在于糖尿?。ㄟ@個的確認方法更復(fù)雜,標準更多,下次有時間再詳細展開)、高血脂等其他疾病的,如果直接排除,可能會導(dǎo)致僅僅因為協(xié)變量的缺失就除外了很多受試者,更不用說主要分析的那些化驗、飲食等數(shù)據(jù)還有多少缺失了。
我的觀點是這樣的,如有不同意見,歡迎交流討論:
1.如果你主要分析的人群或者危險因素就是高血壓,不要猶豫,可以直接刪除有缺失的數(shù)據(jù),也不要嘗試插補,避免偏倚或者結(jié)果不穩(wěn)健。
2.如果高血壓只是一個協(xié)變量,那么結(jié)合臨床經(jīng)驗,情況1測量的血壓正常且未服用降壓藥基本上就可以說沒有高血壓了,可將其插補為FALSE。情況2則不確定性很大,因為很多人不吃藥也不測血壓也說自己沒高血壓,但實際上已經(jīng)有了血壓增高,所有不適合插補為無高血壓。究其根本,其實是因為測量血壓在高血壓診斷中權(quán)重更大一些,給我們排除高血壓的信心也更大。但是在這樣操作之后,我還建議加做一個敏感性分析,即比較直接排除和在滿足情況1下插補,兩者的分析結(jié)果有無差別。無差別,肯定樣本量越大越好。有差別,不用猶豫,選擇直接排除的方法!
糖尿病的診斷更復(fù)雜一些,不僅涉及病史、用藥,還牽扯到空腹血糖、隨機血糖、糖化血紅蛋白等指標。下期有空和大家再聊聊數(shù)據(jù)清洗時糖尿病怎么確定又怎么排除。