劉劍波 莫寶軍 聶光輝 肖 博 莫復軍 羅學榮△
C#語言快速實現病例對照研究的個體匹配*
劉劍波1莫寶軍2聶光輝3肖 博1莫復軍4羅學榮1△
病例對照研究(case-control studies)是流行病學常用的研究方法之一[1],是一種回顧性的研究,由結果探索原因的研究方法。病例對照研究的研究類型主要分為兩類,一類是病例和對照不匹配,另外一類是病例對照匹配[2-3],最常用的匹配比例是1∶1,1∶2[4-6]。第一類的病例對照的方法比較簡單,只需要對照組個體人數大于等于病例組即可,然而第二類的匹配方法在目前的軟件難以實現,讓很多醫學工作者感到困擾,尤其當匹配因素不止一個,研究病例數多,對照組匹配的比例較高(如1∶2以上)時,更加無從下手。因此本文通過C#語言的編程快速實現大樣本,2個匹配因素,按照病例和對照1∶2的匹配。
某大型兒童精神疾病的調查,以下是其部分數據,包括編號(id)、學校(school)、是否有精神疾病家族史(history)、是否留守兒童(leftover children)、性別(sex)、年齡(age)、是否患精神疾病(disease)。其中,是否有精神疾病家族史:0=“無”,1=“有”,是否留守兒童:0=“不是”,1=“是”,性別:1=“男”,2=“女”,是否患精神疾病:0=“不是”,1=“是”,總樣本量是3094個,其中患病兒童924人,健康兒童2170人,現在要求按照是否患精神疾病1:2匹配(即1個患病兒童,匹配2個健康兒童),匹配的原則是年齡、性別一致。
1.匹配的詳細步驟:
(1)打開MySQL數據庫,在左側找到test數據庫,右鍵->new->table,建好名為vfp的表,在建表時會自動生成Id,分別手動建立字段School varchar(255),history varchar(255),leftover children varchar(255),Sex varchar(255),Age varchar(255),disease varchar(255),CareId1 int(11),CareId2 int(11)。
(2)建好字段后,單擊上面的Data Browser,將準備好的數據全部復制到指定區域。
(3)打開VS2010,左上角,文件->新建->項目,選擇Visual C#,選擇WPF應用程序,輸入項目的名字,點擊確定。
(4)右鍵剛剛建好的項目的名字,選擇添加->新建項,選擇類,輸入名字為SqlHelper,點擊確定,同理新建名字為vfpDal和vfpModel的文件,將如下代碼分別粘貼到對應文件,代碼見下(使用時將代碼復制即可)。
(5)在這些文件中粘貼了這些代碼后,按F5運行程序,在彈出的窗口中點擊配對按鈕,等出現一個配對成功的提示對話框后,回到剛剛建好的表,點擊一下左上角的刷新,即可得到數據。
2.匹配代碼
(1)vfpModel文件中放入如下代碼:



3.匹配代碼解釋
(1)vfpModel文件中的代碼:用于和vfp表的字段相對應,存儲每條數據。
(2)vfpDal文件中的代碼:程序1~4行用于獲取vfp中所有的數據,并存放在vfpModel對象數組中,5~8行用于將vfp表中指定Id的CareId1更新為指定值,9~12行用于將vfp表中指定Id的CareId2更新為指定值,13~15行用于將vfp表中指定Id的記錄刪除,16~21行用于將從vfp表中獲得的記錄轉化為用vfpModel對象形式存儲起來,22~26行用于獲得vfp表中disease=1或0的記錄,并存儲在vfpModel對象數組中。
(3)SqlHelper文件中代碼:上面的所有代碼都是用于連接用戶名為root,密碼為123456,數據庫名為test的MySql數據庫,是提供給vfpDal的工具方法。
(4)MainW indow.xm l文件中代碼:上面的xm l代碼就是定義了一個按鈕控件,這個控件可以直接在可視化界面下直接拖。
(5)MainW indow.xm l.cs文件中的代碼:1~7行都是對一些庫函數的引用,9~10行用于獲取vfp表中disease=1或者0的記錄,分別存放在兩個vfpModel數組中,11~29行是這個程序的主要邏輯部分,將所有disease=1的記錄從數據庫中的表里面讀取出來,放到一個剛剛建立的Model數組中,vfpModel[]vfpdisease=vfpDal.GetBydisease(“1”);//獲得患病兒童的所有記錄。將所有disease=0的記錄從數據庫中的表里面讀取出來,放到一個剛剛建立的Model數組中,vfpModel[]vfpNotdisease=vfpDal.GetBy Injured(“0”);//獲得健康兒童的所有記錄。接下來是給每個患病兒童匹配兩個健康兒童,從數組中取出一個患病兒童,如果這個患病兒童的CareId1和CareId2都不等于0的話,說明已經配對好了,取下一條患病兒童的記錄,只要CareId1和CareId2中任意一個為0,就在健康兒童里面找年齡和性別相匹配,由于記錄本身的隨機特性,找到后,就將患病兒童的CareId1或者CareId2賦值為健康兒童的Id,將健康兒童的CareId1和CareId2賦值為患病兒童的Id,在調用前面寫好的Dal層的方法將數據寫入數據庫中,當一個患病兒童找到兩個匹配的健康兒童的時候,就繼續下一個患病兒童,重復上述步驟。30~35行對只匹配了一個健康兒童的患病兒童的數據進行刪除處理,并且該健康兒童的數據也進行刪除,對沒有匹配到的健康兒童和患病兒童的數據也進行刪除處理。
代碼運行后,生成2484個記錄(其中患病兒童個數828個,健康兒童1656個),其他數據被刪除,被刪除的數據中包括配對不到數據患病兒童和健康兒童,還有一些只配對一個的患病兒童和健康兒童。
評價一篇病例對照文章質量的高低,其中一個重要的指標是病例組和對照組具有可比性[7],而病例組和對照組進行匹配可以控制混雜因素對研究的影響,能使病例組和對照組處于同一基線上,增加了可比性。另外,病例匹配使病例組和對照組均衡,也可以提高研究效率[3]。對于匹配因素多個,大樣本,對照組匹配的比例較高時,如果研究者采取手工匹配的方法,將產生巨大的工作量,同時手工匹配也很難做到隨機地匹配。采用上述的代碼可以大大提高研究者的效率,同時也保證了數據隨機的可靠。
使用上述的代碼,需要注意幾個問題:第一,在MySql里面的test數據庫里面建表名為vfp的表,要在建好工程的時候添加一個文件的引用,文件路徑為C:\Program Files(x86)\MySQL\MySQL Connector Net6.9.7\Assemblies\v4.0\MySql.Data.dll,因為C#連接的數據庫默認是sql server,這樣才能連接上MySql數據庫。第二,如果MySql的用戶名和密碼不同,需要在SQLHelper.cs文件中修改ConnStr中的Id和password,將其改成你的用戶名和密碼。第三,程序使用的是三層架構,建立好一個wpf項目時,要添加三個類文件,SQLHelper.cs,vfpDal.cs,vfpModel.cs,這樣程序邏輯清晰。第四,如果換成其他表格,就按這個表新建一個MySql數據庫表,然后再修改vfpModel.cs文件,讓這個類屬性和剛剛建好的表的字段一一對應即可,再修改vfpDal.cs文件,把里面用到的字段都改成剛剛建好表的字段。
本研究中,我們選用了1∶2匹配的方式,匹配年齡和性別,假如讀者的研究方法與本研究方法不同,匹配的方式不一樣,可以稍修改代碼實現。如按1∶n匹配,在建表時需要建n個CareId(即如果是1∶1匹配,建一個CareId,如果是1∶2匹配,就加2個CareId,以此類推),在對應的vfpModel.cs中就增加(n-1)個CareId,在主判斷邏輯中,一個患病兒童匹配n個健康兒童才可以跳到下一條記錄。相應數據庫的表中在增加(n-1)個CareId。再如,對于一些病例很難收集的疾病,如果不適宜刪除,我們可能會適當放寬一些配對的標準,并在MainW indow.xm l.cs文件的if(vfp Index<=1)這個判斷條件里面稍作修改,比如,適當放寬的條件,只要求年齡匹配,邏輯和本研究相同,修改代碼如下:

[1]李志華,劉洪慶.1∶M配比病例對照研究資料分析方法的探討.中國衛生統計,2015,32(6):1076-1084.
[2]呂曉珍,詹思延.第四講:病例對照研究.中國循證兒科雜志,2009,4(5):463-466.
[3]趙仲堂.流行病學研究方法與應用.北京:科學出版社,2000:73-74.
[4]常艷紅,田林.宮頸癌及癌前病變危險因素的病例對照研究.中國衛生統計,2016,33(1):120-122.
[5]王燕,劉銀梅,戴以恒,等.原因不明習慣性流產危險因素1:2病例對照研究.中國慢性病預防與控制,2011,19(1):49-51.
[6]Farsalinos KE,Romagna G,Voudris V.Factors associated with dual use of tobacco and electronic cigarettes:A case control study.Int J Drug Policy,2015,26(6):595-600.
[7]何瓊,黃淵秀,康文婧,等.2001-2010年我國傷害預防病例對照研究及隊列研究文獻質量評價.中華疾病控制雜志,2014,18(10):913-915.
(責任編輯:張 悅)
湖南省研究生科研創新項目(CX2016B062);中國兒童青少年精神障礙流行病學調查(2012BAI01B02)
1.中南大學湘雅二醫院(410000)
2.中南大學信息科學與工程學院
3.廣西醫科大學公共衛生學院
4.湖南涉外經濟學院信息科學與工程學院
△通信作者:羅學榮,E-mail:luoxr@vip.sina.com