PIXNET Logo登入

以斯帖統計顧問公司

跳到主文

面對複雜的統計分析,是否感到不知所措?『以斯帖統計顧問公司』能幫您擷取最有價值的資訊。本公司的主要服務項目為統計教學、統計諮詢,並承接公家機關、國內外藥廠、醫院的研究委託案,數年來已累積大量的服務群,也深受許多好評。

部落格全站分類:不設分類

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 1月 21 週二 201420:26
  • SAS中的時間函數: INTNX( )

 
在臨床資料或健保資分析中,時間點的定義是很重要的,例如用藥後6個月、發病前1年、住院後7天等,至於這些時間點該如何標示,是今天要介紹的重點,通常我們會採用的時間函函數為 intnx( )。函數的語法為INTNX(interval, start-from, increment)
[程式一] 利用[程式一]建立一筆資料,共有2個欄位,身份證號(ID)、就醫日期(in_date),日期格式為yymmdd10.,即yyyy-mm-dd格式, 
[程式一];
(繼續閱讀...)
文章標籤

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

  • 個人分類:SAS程式編輯武功秘笈
▲top
  • 1月 21 週二 201420:14
  • SAS中的描述性統計: PROC MEANS指令

 
健保資料庫的描述性統計中,常見的是計算患者的醫療費用、用藥天數、用藥的累積劑量或平均劑量等。究竟要如何透過程式語法依特定變項分層計算呢?今天將介紹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,檔案中的欄位名稱以與n、sum、mean、median統計量同名的名稱來命名,報表見[結果一]。

[程式三] 但 [程式二] 的DATA=AA之後為何要加NWAY指令? 這個指令的用意在於取SEX, AREA分層的最大組合,什麼意思呢?若將[程式二] 的NWAY ,以及OUT=BB(DROP=_TYPE_ _FREQ_)中的(DROP=_TYPE_ _FREQ_)刪除,結果將如[結果二]所呈現。其中,_TYPE_=0為完成不分層的情況,_TYPE_=1或_TYPE_=2為以AREA或SEX變數分層的結果,_TYPE_=3為同時考慮SEX與AREA 2個變數的組合下的分層結果, DATA=AA之後加NWAY指令的目的即是取_TYPE_=3的統計結果。[見結果二]
[程式一];
data aa;
input id $ sex $ area $ fee in_date yymmdd10.;
format in_date yymmdd10.;
cards;
A01 F 北區 1245 1999-02-03
A01 F 北區 7890 1999-12-12
A02 M 北區 2310 2000-03-10
A02 M 南區 1205 2001-11-15
A02 M 南區 24360 2002-06-05
;
proc print;
run;
[程式二];
proc means n sum mean median data=aa nway noprint; /*n sum mean median為統計量*/
var fee;
class sex area; /*sex area為分層變數*/
output out=bb(drop=_type_ _freq_) n=n sum=sum mean=mean median=median;
proc print;
run; 
[結果一]
Obs sex area n sum mean median
1 F 北區 2 9135 4567.5 4567.5
2 M 北區 1 2310 2310.0 2310.0
3 M 南區 2 25565 12782.5 12782.5
; 
[程式三];
proc means n sum mean median data=aa noprint;
var fee;
class sex area;
output out=bb n=n sum=sum mean=mean median=median;
proc print;
run; 
[結果二]

(繼續閱讀...)
文章標籤

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

  • 個人分類:SAS程式編輯武功秘笈
▲top
  • 1月 21 週二 201420:07
  • 統合分析(Meta-analysis)在醫學診斷工具準確性的整合方法II:Hierarchical Summary ROC (HSROC)

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

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

  • 個人分類:統計分析方法簡介
▲top
  • 1月 21 週二 201419:58
  • SAS中的子字串函數

 
健保資料庫中的國際疾病分類碼(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)

  • 個人分類:SAS程式編輯武功秘笈
▲top
  • 1月 21 週二 201419:48
  • 無母數統計-Kruskal-Wallis tset的組間比較

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

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

  • 個人分類:統計分析方法簡介
▲top
  • 1月 21 週二 201419:41
  • 統合分析(Meta-analysis)在醫學診斷工具準確性的整合方法:Summary ROC (SROC)簡介

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

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

  • 個人分類:統計分析方法簡介
▲top
  • 1月 21 週二 201419:37
  • 健保資料庫的歸戶(人次轉人數)(二)


今天要介紹另一支「歸戶」程式,主要的指令是SORT與NODUPKEY。昨天的主要語法是first.var=1,透過1與0指定擷取的資料為第一筆或非第一筆。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排序,再執行SORT與NODUPKEY的指令,就能找到真正的第一筆了。
然而,想擷取資料庫中的最後一筆,該如何執行呢?
[程式三];
proc sort data=aa out=bb nodupkey;
by id birthday ;
proc print;
run;
[程式四];
proc sort data=aa out=bb nodupkey;
by id birthday in_date ;
proc print;
run;
[程式五];
proc sort data=aa;
by id birthday in_date; 
proc sort data=aa out=bb nodupkey;
by id birthday ;
proc print;
run;
(繼續閱讀...)
文章標籤

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

  • 個人分類:SAS程式編輯武功秘笈
▲top
  • 1月 21 週二 201419:28
  • 健保資料庫的歸戶(人次轉人數)(一)

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

  • 個人分類:SAS程式編輯武功秘笈
▲top
  • 1月 21 週二 201419:20
  • ROC曲線 (Receiver Operating Characteristic Curve)

ROC3
 
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)

  • 個人分類:統計分析方法簡介
▲top
  • 1月 21 週二 201419:17
  • 重疊病例對照設計(nested case-control design)

 
世代研究(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)

  • 個人分類:淺談研究設計
▲top
«1...111213»

以斯帖官網

推薦熱門文章

熱門文章

  • (126,336)ROC曲線 (Receiver Operating Characteristic Curve)
  • (38,608)SAS中的描述性統計: PROC MEANS指令
  • (25,336)資料的水平合併(Merge)(二)
  • (23,380)交叉試驗(Crossover trial)
  • (22,492)SAS中的LAG()、DIF()與IFN()等函數
  • (18,238)SAS中的時間間隔的計算: INTCK('interval',from,to)
  • (17,606)SAS中的時間函數: INTNX( )
  • (9,533)健保資料庫的歸戶(人次轉人數)(二)
  • (8,342)淺談病例交叉設計(case-crossover design)
  • (7,521)群組化軌跡模式(Group-Based Trajectory Modeling, GBTM)

文章分類

  • AI人工智慧 (2)
  • Python的應用 (3)
  • 資訊分享 (6)
  • SPSS在統計上的應用 (4)
  • SigmaPlot的繪圖功能 (4)
  • R與統計分析 (4)
  • EXCEL教戰守則 (5)
  • 醫藥新聞 (8)
  • 統計分析方法簡介 (32)
  • 淺談研究設計 (16)
  • SAS程式編輯武功秘笈 (36)
  • 統計人的心靈小棧 (3)
  • 統計教學 (6)
  • 未分類文章 (1)

最新文章

  • 以統計軟體繪製死亡率地圖
  • 健保資料庫分析時,任一年出現二次特定疾病診斷碼定義研究族群,該怎麼做呢?
  • SAS程式中的array指令
  • SAS中的printto指令
  • 統計的變數型態-定量變數
  • 統計的變數型態-類別變數
  • 深度學習之- 時間序列
  • 深度學習之--迴歸與分類
  • 藥物流行病學中的immortal time bias
  • Python環境建置

留言板

最新留言

  • [25/04/28] 訪客 於文章「深度學習之--迴歸與分類...」留言:
    你好!有什麼我可以幫忙的嗎? 我是部落客流量商 也可以看...
  • [24/05/07] 學生 於文章「SAS中的first.variable與...」留言:
    請問 就醫記錄 同一個人同一天被記錄2次(診斷有特定疾病),...
  • [23/03/30] 訪客 於文章「資料的水平合併(Merge)(二)...」留言:
    太感謝你們把這篇文章的內容放上來、拯救遇到跑健保資料庫遇到障...
  • [22/04/26] 訪客 於文章「相關係數的呈現----斯皮爾曼(Spea...」留言:
    原本在搜尋引擎找出一堆 Blog 文章,不知哪幾篇值得花時間...
  • [22/02/15] 英文編修潤稿 於文章「多中心臨床試驗之分析(Multicent...」留言:
    如何為論文定合適的標題? 歡迎訂閱Uni-edit學術論文寫...
  • [21/12/30] 康藥本鋪 kmed.tw 於文章「相關係數的呈現----斯皮爾曼(Spea...」留言:
    新聞BLOG https://kmed.tw/ind...
  • [21/02/23] estat 於文章「交叉試驗(Crossover trial...」留言:
    washout確實是沖洗、清洗、洗滌的意思,在此,它當然可以...
  • [21/02/23] 訪客 於文章「交叉試驗(Crossover trial...」留言:
    洗滌期間(washout period) 明明就是排空期 媽...
  • [20/06/13] 吳涵 於文章「相關係數的呈現----斯皮爾曼(Spea...」發表了一則私密留言
  • [20/06/04] 英文編修潤稿 於文章「如何使用多重死因資料發表SCI論文?...」留言:
    Uni-edit 論文英文編修服務,將分享Uni-edit ...

文章精選

參觀人氣

  • 本日人氣:
  • 累積人氣:

以斯帖統計LINE

以斯帖統計LINE