在臨床資料或健保資分析中,時間點的定義是很重要的,例如用藥後6個月、發病前1年、住院後7天等,至於這些時間點該如何標示,是今天要介紹的重點,通常我們會採用的時間函函數為 intnx( )。函數的語法為INTNX(interval, start-from, increment)

[
程式一] 利用[程式一]建立一筆資料,共有2個欄位,身份證號(ID)、就醫日期(in_date),日期格式為yymmdd10.,即yyyy-mm-dd格式, 

[程式一];

data aa;
input id $ in_date yymmdd10.;
format in_date yymmdd10.;
cards;

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

健保資料庫的描述性統計中,常見的是計算患者的醫療費用、用藥天數、用藥的累積劑量或平均劑量等。究竟要如何透過程式語法依特定變項分層計算呢?今天將介紹SAS中的描述性統計: PROC MEANS指令。

[程式一] 建立檔案AA,檔案中有身份證號(ID)、性別(SEX)、居住地區(AREA)、醫療費用(FEE)、就醫日期(IN_DATE)5個欄位的資料。


[程式二] 利用PROC MEANS計算檔案AA中的醫療費用(FEE),但要依性別(SEX)、居住地區(AREA)分層計算,且描述醫療費用(FEE)的使用人數(n)、總和(sum)、平均值(mean)、中位數(median),因此VAR後面放醫療費用(FEE)CLASS指令後面放的是分層變數sex, area。將分層計算後的統計量存成檔案BB,檔案中的欄位名稱以與nsummeanmedian統計量同名的名稱來命名,報表見[結果一]


[程式三] [程式二] DATA=AA之後為何要加NWAY指令? 這個指令的用意在於取SEX, AREA分層的最大組合,什麼意思呢?若將[程式二] NWAY ,以及OUT=BB(DROP=_TYPE_ _FREQ_)中的(DROP=_TYPE_ _FREQ_)刪除,結果將如[結果二]所呈現。其中,_TYPE_=0為完成不分層的情況,_TYPE_=1_TYPE_=2為以AREASEX變數分層的結果,_TYPE_=3為同時考慮SEXAREA 2個變數的組合下的分層結果, DATA=AA之後加NWAY指令的目的即是取_TYPE_=3的統計結果。[見結果二]


文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

上文中提到SROC是統合分析在醫學診斷工具結果合併的方法,雖然將敏感度(sensitivity)和特異度(specificity)兩個測量的值整合在模式中,但其明顯的缺點即在沒有考量到敏感度(sensitivity)和特異度(specificity)之間的相關性(correlation)。正因爲如此,就有學者提出了更爲複雜精細的分析方法---階層式摘要ROC曲線(HSROC)HSROC模式中,有兩個不同的層次:同一研究結果內(within studies)及不同研究結果間(between studies)藉此來使得合併的效果值更加合理準確,

其模式爲
ln(πij/(1-πij))=(θi+αi*dij)exp(-β*dij), i=1,2,…,k. j=1,2.


其中θi, αi皆爲隨機效果(random effect)θi代表的是不同的切點(threshold); αi代表了診斷準確度(diagnostic accuracy). dij代表黃金標準(gold standard)所測得的結果是否爲有病(positive)
目前可用來分析HSROC的軟體包含SAS, STATA, R等,皆需要以輸入程式的方式來操作,所以要先對HSROC有一定程度的了解,才能用於分析及最後結論的詮釋。


Reference:
Petra Macaskill (2004). Empirical Bayes estimates generated in a hierarchical summary ROC analysis agreed closely with those of a full Bayesian analysis. J. Clin. Epidemiol 57: 925-32.
Rutter CM, Gatsonis CA (2001). A hierarchical regression approach to meta-analysis of diagnostic test accuracy evaluations. Stat Med 20: 2865-84.

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

健保資料庫中的國際疾病分類碼(ICD9-CM)在資料分析中,可以用來定義感興趣的疾病,在『門診處方及治療明細檔』有3個欄位記錄國際疾病分類碼;『住院醫療費用清單明細檔』則有5個欄位。究竟要如何透過國際疾病分類碼定義疾病?一般的作法是請益臨床的醫師或其他專業人員,以瞭解一個疾病是透過幾個分類號(ICD9_CM)構成,例如糖尿病是ICD9-CM3碼為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個患者有250493的代碼(參見[結果])

是不是很簡單呢?

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

One-way ANOVA 可以用來檢定3組以上的平均值是否相等,但必須符合常態分配的基本假設與變異數同質的檢定,並且需要有足夠的樣本數,若樣本不足或資料不符合常態分配時,可選用無母數方法中的Kruskal-Wallis tset (又稱H檢定法),檢定的變項可以是等距或等比率變項,或是次序變項,以考驗各組平均等級的差異。如果整體考驗之卡方值達統計上的顯著意義,則拒絕虛無假設,表示至少有一對組別的平均等級不相等,至於哪幾對間有差異則要進行事後比較。公式如下:

 

KW


R為任一組的平均等級;Z為標準化值;α為顯著水準;k為組數;N為總人數;n為任一組的人數。


若任2組的平均等級差的絕對值大過檢定值KS    ,則2組間具有統計上的差異。

 

  

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

ROC 曲線是檢查醫學診斷工具準確性的重要統計方法,它藉由與黃金標準(gold standard) 的比較計算出敏感度(sensitivity)和特異度(specificity),在同時考慮這兩個量的訊息下,做出最後的結論。統合分析(Meta-analysis)是合併(pooling)同一研究主題下,不同研究成果的方法,尤其在實證醫學(EBM)上常被運用。在診斷工具準確性的整合結果上,我們可以很直接的分別合併敏感度或特異度,以得到的結果加以解釋;但此做法的缺點在於沒有同時考量到這兩個測量值。所以,在統合分析上常用較爲合理的方法爲Summary Receiver Operating Characteristic curve(SROC)


SROC
是將敏感度(即爲True positive rate, TPR), 特異度(即爲1-False positive rate, 1-FPR)這兩個值經過適當的變換(transformation)後,再以線性迴歸(linear regression)模式來分析。迴歸模式爲D=α+βS,
其中D=ln(TPR/1-TPR)-ln(FPR/1-FPR),S= ln(TPR/1-TPR)+ln(FPR/1-FPR).

Reference:
Irwig, L., Macaskill, P., Glasziou, P., Fahey, M. (1995). Meta-analytic methods for diagnostic test accuracy. J. Clin. Epidemiol 48: 119-30.
Midgette, A.S., Studel, T.A., Littenberg, B. (1993). A meta-analytic method for summarizing diagnostic test performances: receiver-operating-characteristic-summary point estimates. Med. Decis Making 13: 253-7.


文章標籤

estat 發表在 痞客邦 留言(0) 人氣()


今天要介紹另一支「歸戶」程式,主要的指令是SORTNODUPKEY。昨天的主要語法是first.var=1,透過10指定擷取的資料為第一筆或非第一筆NODUPKEY指令則在刪除重覆的資料,言下之意是只取第一筆,如何定義第一筆呢?

[程式三] 首先要以SORT指令將id,birthday排序,如此一來,就可以一目瞭然地看到哪幾筆資料是同一人的,藉此就可以定義排在最前面的id, birthday是第一筆,之後為重覆,加了NODUPKEY後,重覆的筆數就被刪除。被排序的資料檔為aa ,指令為data=aa;輸出的結果為bb ,指令為out=bb,是不是比FIRST.VAR=1的指令簡單呢?


[程式四] 若大家還記得昨天的資料,A01患者的就醫日期還沒排序呢,因此排序時要多加in_date,但是...支程式執行的結果會是什麼呢?就是...id, birthday取完每一個人的第一筆之後,再考慮一個人有好幾筆不同的就醫日期,每筆就醫日期都不重覆,於是所有的就醫日期都納入了,最後,等於沒有歸戶,因為所有的資料又全被擷取回來,該怎麼辦呢?方法很簡單的,不用耽心。

[程式五] 為先單獨將id, birthday, in_date排序,再執行SORTNODUPKEY的指令,就能找到真正的第一筆了。

然而,想擷取資料庫中的最後一筆,該如何執行呢?

文章標籤

estat 發表在 痞客邦 留言(1) 人氣()

 

「歸戶」是健保資料庫的資料處理過程中少不了的步驟,因為健保資料不是為學術目的而生成,而是為申請健保費用而存在的,因此資料庫中記載了每一次的就醫日期、就醫診斷、處置與費用等。若我們想知道每一個費用申報年有多少病人就醫?就必須透過「歸戶」的程序將一人多筆的資料轉為一人一筆,即可知每一個費用申報年有多少病人就醫。今天要介紹的是 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_dateSAS格式是yymmdd10.,這種型式指的是西元年--日,寬度共10個位元(byte)

[
程式二]若大家有留意,會發現二件事:()資料檔aa中的第一筆資料非idA01患者的第一筆就醫日期,()A01的第4筆出生日期與前3筆不同,若研究者想取每人的一筆資料,而且是每一個費用申報年的第一筆,資料就必須利用SORT指令先將id, birthday, in_date排序。為什麼要加入birthday?因為國人的戶政會出現不同的人擁有相同id的情況,因此認定資料是否為同一人的條件必須同時加入idbirthday。再加入in_date的目的,是為了讓入院日期由前排到後。接下來,利用DATA指令產生新的檔bb,且由SET指令讀取檔案aaby 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),意即先取每人的idbirthday的第一筆;B=(first.id=0 & first.birthday=1),即在相同的id中,若id不是第一筆,但birthday第一次出現,要取出來。如此即完成擷取每人的第一筆資料的歸戶動作,檔案aa中包含3個人的資料,您的程式寫對了嗎?([結果])

大家練習看看,若要依每一個就醫年度去擷取每人的第一筆,歸戶程式該如何寫?

[
程式一];

文章標籤

estat 發表在 痞客邦 留言(0) 人氣()

 

ROC曲線 (Receiver operating characteristic curve) 是第二次世界大戰中的發明,最初用在1941年的珍珠港事件,以偵測戰場上的日軍載具(飛機、船艦),其原理係利用雷達上的信號強弱設定閾值,以作為軍事行動的判斷依據[1],而發展出的信號偵測理論(Signal Detection Theory )1950年代被應用在心理學領域[2]。此後的數十年,ROC分析被用於無線電、生物學、犯罪心理學領域中,而且最近在機器學習machine learning和數據挖掘data mining領域也得到了很好的發展[3]。在醫學上,廣泛地應用在疾病的診斷,同時也被應用在流行病學、實證醫學研究、放射技術、社會科學的研究上[4-6]。在臨床上可能會面對檢驗方法複雜、耗時、有侵入性、結果需要有經驗者才能準確判讀等因素,而利用ROC曲線發展出更簡易操作的替代方式,並與臨床認定的黃金標準(Gold standard)作比較,例如以癌症的切片檢查作為黃金標準,該標準將病人判定為罹癌與未罹癌,以鑑定新的診斷工具替代黃金標準的可行性。

 

ROC3   

圖片來源:以斯帖統計顧問公司

(繪圖軟體: SigmaPlot繪製方法請連結http://goo.gl/nCFg3y

 

在信號偵測理論中,ROC曲線是以圖像的方式呈現二分類系統(binary classifier system)在特定的分類或閾值(discrimination threshold)下的表現。圖形的縱軸(y-axis)為真陽性率(true positive rate; TPR),又稱為敏感度(sensitivity);橫軸(x-axis)為偽陽性率(false-posiitive rate; FPR),以1 – 特異度(specificity)表示,而敏感度為將結果正確判斷為陽性的機率,特異度係將結果正確判斷為負向或陰性的機率。當指定一個分界點(cut-point)來區分檢驗的陽性與陰性時,這個分界點會影響到診斷工具的敏感度(sensitivity)及特異度(specificity)。在醫學上,敏感度表示有病者被判為陽性的機率,而特異度表示無病者被判為陰性的機率。在曲線上的任何一個點都會對應到一組敏感度與1-特異度,而敏感度與特異度會受到分界點移動的影響。

 

ROC1   

文章標籤

estat 發表在 痞客邦 留言(3) 人氣()

 

世代研究(cohort study)是運用相當廣泛的流病研究設計方法。但通常由於需要較大的樣本數,使得實行上時間和經費消秏相當大。也正因爲如此,才發展出了其它研究設計的方法,而重疊病例對照設計(nested case-control design)即爲其中一種。其設計的想法即是在一個世代研究中,套入病例個案對照(case-control)設計,所以亦有學者稱之爲世代內病例對照設計(case-control study within cohort)

重疊病例對照設計可以是前曕型(prospective)的也可以是回溯的(retrospective),對照組依照研究者事先定出的比例(例如常見的,病例:對照=11, 12)隨機在世代中挑選出來。在找尋對照組中,最大的特性在於時間配對(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) 人氣()