在臨床資料或健保資分析中,時間點的定義是很重要的,例如用藥後6個月、發病前1年、住院後7天等,至於這些時間點該如何標示,是今天要介紹的重點,通常我們會採用的時間函函數為 intnx( )。函數的語法為INTNX(interval, start-from, increment)
[程式一] 利用[程式一]建立一筆資料,共有2個欄位,身份證號(ID)、就醫日期(in_date),日期格式為yymmdd10.,即yyyy-mm-dd格式,
[程式一]; estat 發表在 痞客邦 留言(0) 人氣(17,606)
上文中提到SROC是統合分析在醫學診斷工具結果合併的方法,雖然將敏感度(sensitivity)和特異度(specificity)兩個測量的值整合在模式中,但其明顯的缺點即在沒有考量到敏感度(sensitivity)和特異度(specificity)之間的相關性(correlation)。正因爲如此,就有學者提出了更爲複雜精細的分析方法---階層式摘要ROC曲線(HSROC)。HSROC模式中,有兩個不同的層次:同一研究結果內(within studies)及不同研究結果間(between studies)藉此來使得合併的效果值更加合理準確,
estat 發表在 痞客邦 留言(0) 人氣(1,720)
健保資料庫中的國際疾病分類碼(ICD9-CM)在資料分析中,可以用來定義感興趣的疾病,在『門診處方及治療明細檔』有3個欄位記錄國際疾病分類碼;『住院醫療費用清單明細檔』則有5個欄位。究竟要如何透過國際疾病分類碼定義疾病?一般的作法是請益臨床的醫師或其他專業人員,以瞭解一個疾病是透過幾個分類號(ICD9_CM)構成,例如糖尿病是ICD9-CM前3碼為250的分類號。但病歷登錄時,有時會登錄到4位碼(例如2500為未提及併發症之糖尿病),有時會登錄到5碼(例如25003為第一型糖尿病,未提及併發症,無法控制)。若不需要分類到4位或是5位碼,只是以3位碼250代表所有的糖尿病,程式將如何撰寫?今日將介紹子字串函數:SUBSTR( VARIABLE, POSITION, LENGTH)。
[程式一] 建立3個患者的資料,以INPUT指令讀入ID (身份證號)、ICD9_CM1~ICD9_CM3(國際疾病分類號一至國際疾病分類碼三),資料型態皆為文字型($)。
[程式二] 以PROC CONTENTS 指令查看資料檔AA的資料結構,在CONTENTS後面加上POSITION,是為了以資料建立時的欄位順序呈現資料結構,否則會以欄位名稱的字母作排序。在輸出的結果中可看到每一個欄位的順序, 欄位名稱,以及資料型態,透過這支程式可以快速建立譯碼簿(CODE BOOK)。
[程式三] 透過IF指令擷取ICD9_CM中,前3碼為250(糖尿病)以及493(氣喘)的患者,因為『門診處方及治療明細檔』有3個欄位記錄國際疾病分類碼,因此每一個欄位都要檢查看看,是否有前3碼為250以及493的代號。因為文字串的資料都是左靠,因此可以由每一個ICD9_CM的最左邊的第一個字元,向右取3個字元,如此即將前3碼為250(糖尿病)或493(氣喘)的患者取出。substr(ICD9_CM1,1,3)係指被擷取部份子字串的欄位是ICD9_CM1,從第1個欄位開始擷取,擷取的寬度是3個字元。此外程式中以IN 代替等號"=",且將要定義的疾病碼放在括號 ( )中,如此,可在括號( )中放2個以上的代碼,使程式更為精簡。結果,只有2個患者有250或493的代碼(參見[結果])。
是不是很簡單呢?
[程式一];
data aa;
input id $ (icd9_cm1- icd9_cm3) ($);
cards;
A01 250 4930 4279
A02 7851 25041 585
A03 532 5959 4130
;
proc print;
run;
[程式二];
proc contents position data=aa;*查看資料內容 ;
run;
* Variables in Creation Order
# Variable Type Len
1 id Char 8
2 icd9_cm1 Char 8
3 icd9_cm2 Char 8
4 icd9_cm3 Char 8
;
[程式三];
data bb;
set aa;
if substr(ICD9_CM1,1,3) in ('250','493') | substr(ICD9_CM2,1,3) in ('250','493') |
substr(ICD9_CM3,1,3) in ('250','493');
proc print;
run;
estat 發表在 痞客邦 留言(0) 人氣(11,185)
One-way ANOVA 可以用來檢定3組以上的平均值是否相等,但必須符合常態分配的基本假設與變異數同質的檢定,並且需要有足夠的樣本數,若樣本不足或資料不符合常態分配時,可選用無母數方法中的Kruskal-Wallis tset (又稱H檢定法),檢定的變項可以是等距或等比率變項,或是次序變項,以考驗各組平均等級的差異。如果整體考驗之卡方值達統計上的顯著意義,則拒絕虛無假設,表示至少有一對組別的平均等級不相等,至於哪幾對間有差異則要進行事後比較。公式如下:estat 發表在 痞客邦 留言(0) 人氣(20,924)
ROC 曲線是檢查醫學診斷工具準確性的重要統計方法,它藉由與黃金標準(gold standard) 的比較計算出敏感度(sensitivity)和特異度(specificity),在同時考慮這兩個量的訊息下,做出最後的結論。統合分析(Meta-analysis)是合併(pooling)同一研究主題下,不同研究成果的方法,尤其在實證醫學(EBM)上常被運用。在診斷工具準確性的整合結果上,我們可以很直接的分別合併敏感度或特異度,以得到的結果加以解釋;但此做法的缺點在於沒有同時考量到這兩個測量值。所以,在統合分析上常用較爲合理的方法爲Summary Receiver Operating Characteristic curve(SROC)。
estat 發表在 痞客邦 留言(0) 人氣(2,286)
estat 發表在 痞客邦 留言(1) 人氣(9,533)
「歸戶」是健保資料庫的資料處理過程中少不了的步驟,因為健保資料不是為學術目的而生成,而是為申請健保費用而存在的,因此資料庫中記載了每一次的就醫日期、就醫診斷、處置與費用等。若我們想知道每一個費用申報年有多少病人就醫?就必須透過「歸戶」的程序將一人多筆的資料轉為一人一筆,即可知每一個費用申報年有多少病人就醫。今天要介紹的是 first.var=1的語法。
[程式一] :以程式寫入1個資料檔aa,放入id(身份證號)、birthday(生日)、in_date(就醫日期)、icd9_cm1(國際疾病診斷碼),id與 icd9_cm1為文字型態的欄位;birthday,in_date
為日期格式yymmdd10. 。format birthday in_date yymmdd10.;係指定birthday, in_date的SAS格式是yymmdd10.,這種型式指的是西元年-月-日,寬度共10個位元(byte)。
[程式二] :若大家有留意,會發現二件事:(一)資料檔aa中的第一筆資料非id為A01患者的第一筆就醫日期,(二)A01的第4筆出生日期與前3筆不同,若研究者想取每人的一筆資料,而且是每一個費用申報年的第一筆,資料就必須利用SORT指令先將id, birthday, in_date排序。為什麼要加入birthday?因為國人的戶政會出現不同的人擁有相同id的情況,因此認定資料是否為同一人的條件必須同時加入id與birthday。再加入in_date的目的,是為了讓入院日期由前排到後。接下來,利用DATA指令產生新的檔bb,且由SET指令讀取檔案aa。by id birthday; 這段程式說明以下的擷取第一筆的動作,要以id, birthday辨別哪幾筆是同一人的資料。 if (first.id=1 & first.birthday=1) | (first.id=0 & first.birthday=1);這段程式是歸戶的主要動作,簡略地表達,可以將左式改為IF A | B; A=(first.id=1 & first.birthday=1),意即先取每人的id與birthday的第一筆;B=(first.id=0 & first.birthday=1),即在相同的id中,若id不是第一筆,但birthday第一次出現,要取出來。如此即完成擷取每人的第一筆資料的歸戶動作,檔案aa中包含3個人的資料,您的程式寫對了嗎?(見[結果])
大家練習看看,若要依每一個就醫年度去擷取每人的第一筆,歸戶程式該如何寫?
[程式一];
data aa;
input id $ birthday yymmdd10. in_date yymmdd10. icd9_cm1 $;
format birthday in_date yymmdd10.;
cards;
A01 1956-02-032006-10-12 493
A01 1956-02-032006-03-10 25090
A01 1956-02-032007-01-23 4870
A01 1973-08-052007-01-31 4910
B01 1977-11-302008-02-15 5990
B01 1977-11-302008-03-24 7805
;
proc print;
run;
[程式二];
proc sort data=aa;
by id birthday in_date;
data bb;
set aa;
by id birthday;
if (first.id=1 & first.birthday=1) | (first.id=0 & first.birthday=1);
proc print;
run;
[結果]
Obs id birthday in_date icd9_cm1
1 A01 1956-02-03 2006-03-10 25090
2 A01 1973-08-05 2007-01-31 4910
3 B01 1977-11-30 2008-02-15 5990 estat 發表在 痞客邦 留言(0) 人氣(8,597)
ROC曲線 (Receiver operating characteristic curve) 是第二次世界大戰中的發明,最初用在1941年的珍珠港事件,以偵測戰場上的日軍載具(飛機、船艦),其原理係利用雷達上的信號強弱設定閾值,以作為軍事行動的判斷依據[1],而發展出的信號偵測理論(Signal Detection Theory ),1950年代被應用在心理學領域[2]。此後的數十年,ROC分析被用於無線電、生物學、犯罪心理學領域中,而且最近在機器學習(machine learning)和數據挖掘(data mining)領域也得到了很好的發展[3]。在醫學上,廣泛地應用在疾病的診斷,同時也被應用在流行病學、實證醫學研究、放射技術、社會科學的研究上[4-6]。在臨床上可能會面對檢驗方法複雜、耗時、有侵入性、結果需要有經驗者才能準確判讀等因素,而利用ROC曲線發展出更簡易操作的替代方式,並與臨床認定的黃金標準(Gold standard)作比較,例如以癌症的切片檢查作為黃金標準,該標準將病人判定為罹癌與未罹癌,以鑑定新的診斷工具替代黃金標準的可行性。estat 發表在 痞客邦 留言(4) 人氣(126,336)
世代研究(cohort study)是運用相當廣泛的流病研究設計方法。但通常由於需要較大的樣本數,使得實行上時間和經費消秏相當大。也正因爲如此,才發展出了其它研究設計的方法,而重疊病例對照設計(nested case-control design)即爲其中一種。其設計的想法即是在一個世代研究中,套入病例個案對照(case-control)設計,所以亦有學者稱之爲世代內病例對照設計(case-control study within cohort),
重疊病例對照設計可以是前曕型(prospective)的也可以是回溯的(retrospective),對照組依照研究者事先定出的比例(例如常見的,病例:對照=1:1, 1:2)隨機在世代中挑選出來。在找尋對照組中,最大的特性在於時間配對(time matching);也就是說,對照組的選取必須在病例發生的時間進行。值得注意的是,在時間配對進行時,某時間點的病例有可能被選爲之前發生病例的對照組,這時必須要重新配對。在統計分析方面,重疊病例對照設計是使用條件邏輯斯迴歸(conditional logistic regression)來分析,解釋最後的研究結果。
Reference:
Ernster, V.L. (1994). Nested case-control studies, Preventive Medicine 23, 587–590
Mantel, N. (1973). Synthetic retrospective studies and related topics, Biometrics 29, 479–486.
Wacholder, S. (1995). Design issues in case-control studies, Statistical Methods in Medical Research 4, 293–309
estat 發表在 痞客邦 留言(0) 人氣(4,975)