第四章 卡方檢定及勝算比 (I) 陳冠婷 統計分析師 在本章中, 我們將介紹如何比較兩個類別變項的相關性 與前兩章不同的是, 比較兩組或多組連續型資料時, 是針對每組連續變項的集中趨勢進行檢定, 而兩類別變項的相關性則是針對樣本之觀察次數和其虛無假設是否相符來進行檢定 使用卡方檢定 (Chi square test) 檢定兩個類別變項的相關性時, 必須注意樣本數大小, 當全部細格 (cell) 中超過 20% 的期望次數小於 5 時, 卡方檢定的結果就較不可信, 此時需使用費雪精確檢定 (Fisher s exact test) 本章將分四個部分進行 :(1) 資料型態的轉換 ;(2) 列聯表及統計圖表的建立 ;(3) 兩類別資料相關性的統計檢定 ;(4) 相關強度的估計 本章以慢性腎臟病的研究問題來討論這四個部份 1 0. 資料型態的轉換 我們想知道洗腎病人其洗腎方式是否與體內白蛋白有關 資料中白蛋白為一連續變項, 但對臨床人員而言白蛋白濃度分布的檢定無法提供臨床有意義的結果, 例如我們若希望知道洗腎病人的洗腎方式與白蛋白正常或異常是否相關, 此時可依臨床切點衍生新的類別變項, 將白蛋白濃度分類為正常與否, 經轉換成的類別變項, 在此分析中可更清楚表達此一研究目的 以下以白蛋白為例, 介紹如何使用 IF THEN / ELSE 轉換資料型態 1 1. 使用 IF THEN / ELSE 轉換資料型態 假設白蛋白的臨床切點為 3.0 g/dl, 小於此切點定義為異常白蛋白, 大於或等於此切點定義為正常白蛋白 如同第三章 1 2 節介紹, 我們在資料步驟 (data step) 中執行 IF THEN / ELSE 敘述, 根據白蛋白變項 (Albumin) 的數值, 衍生一個兩個類別的變項 (Albumin_1), 分別為正常白蛋白 :Albumin 3 g/dl 及異常白蛋白 :Albumin<3 g/dl,sas 語法如 程式 01 1 分類後, 使用 PRINT 程序將資料輸出以確認語法無誤 /* 使用臨床切點將白蛋白分為兩個類別的變項 */ DATA esrd_02; SET esrd; IF Albumin=. THEN Albumin_1=.; ELSE IF Albumin<3 THEN Albumin_1=1; ELSE IF Albumin>=3 THEN Albumin_1=0; 程式 01 1.1 使用 IF THEN / ELSE 將連續變項轉換為類別變項 4 1 SAS 教戰手冊
/* 檢查白蛋白是否正確分類 */ PROC SORT DATA=esrd_02; BY Albumin; PROC PRINT; VAR Albumin Albumin_1; 程式 01 1.2 排序並輸出新變項 圖 01 1 程式 01 1.2 的輸出結果 在圖 01 1 中, 我們可以看到排序後輸出的白蛋白與經資料轉換後之新變項 在轉換資料型態時, 切勿覆蓋原有變項, 如 程式 01 2 新舊變項命名相同, 會使舊變項訊息遺失 在產生新變項時, 檢查是必要執行的步驟 ( 請參考第三章 1 2 節 ) 新變項 Albumin_1 中,0 代表正常白蛋白 1 代表異常白蛋白, 後續將使用 Albumin_1 此類別變項作進一步分析 /* 覆蓋原有變項 */ DATA esrd_02; SET esrd; IF Albumin=. THEN Albumin=.; ELSE IF Albumin<3 THEN Albumin=1; ELSE IF Albumin>=3 THEN Albumin=0; 程式 01 2 覆蓋變項會導致原始訊息遺失 4 2 SAS 教戰手冊
2 0. 列聯表及統計圖表的建立 列聯表 (Contingency Tables) 為呈現兩個類別變項相關性的主要方式, 可隨著類別變項的類別個數不同變化出 2 2 或 R C 列聯表 (R 為列數 rows,c 為行數 columns) 另外也可使用圓餅圖 (pie chart) 或長條圖 (bar chart) 等統計圖作為輔助描述, 接下來將介紹如何產生列聯表及長條圖的 SAS 語法 我們將用 2 2 列聯表及長條圖呈現在不同洗腎方式下白蛋白正常與否的分布情形 2 1. 使用 PROC FREQ 產生列聯表 程式 02 1 可輸出列聯表的發生頻率 期望值 百分比等統計值 /* 設定白蛋白與治療方式的輸出格式 */ PROC FORMAT; VALUE Albumin 0='>=3.0 g/dl' 1='<3.0 g/dl'; VALUE treat 0='PD' 1='HD'; /* 產生白蛋白與治療方式的 2 2 列聯表 */ PROC FREQ DATA=esrd_02; FORMAT Albumin_1 Albumin. 程式 02 1 treat PROC treat.; BOXPLOT 語法 TABLES Albumin_1*treat 程式 02 1 /EXPECTED; 程式 02 1 PROC FREQ 語法並使用 PROC FORMAT 指定輸出格式 圖 02 1 程式 02 1 的輸出結果 執行 FREQ 程序時, 如果要對輸出結果做更清楚的標示, 可使用 FORMAT 程序自訂格式, 並在 FREQ 程序中撰寫 FORMAT 敘述句, 即可讓此結果依自訂格式輸出, 如圖 02 1 SAS 軟體呈現列聯表時, 其預設統計值由上到下依序為發生頻率 百分比 列百分比及欄百分比, 如欲顯示其他統計值或控制輸出內容則須在 TABLES 敘述句的斜線 (/) 後寫入選項, 程式 02 1 斜線後加入 EXPECTED 選項, 輸出結果於每個細格中第二列顯示其期望次數 在圖 02 1 中我們可以看到使用腹膜透析 (PD) 的病患其白蛋白異常的比例高於使用血液透析 (HD) 的病患 4 3 SAS 教戰手冊
第 2 1 節重要指令說明 : 1. PROC FORMAT 附屬敘述的語法 : VALUE 格式名稱資料內容 = 輸出內容 : 如 資料內容 為文字, 須在 格式名稱 前加錢字號 ($), 並於文字形態的 內容 前後加引號 (') 2. PROC FREQ 附屬敘述的語法及選項 : FORMAT 變項名稱格式名稱.: 宣告 變項名稱 的內容, 以特定格式 (PROC FORMAT 所設定的 格式名稱 ) 做輸出 TABLES ( 列變項名稱串 )*( 欄變項名稱串 ): 呈現列變項和欄變項的列聯表, 以星號 (*) 連接各變項 EXPECTED 選項計算各細格的期望次數, 置於 TABLES 敘述的斜線 (/) 後 2 2. 使用 PROC GCHART 產生長條圖 除列聯表可顯示兩個類別資料的聯合分布外, 長條圖可利用視覺快速地傳達資料訊息, 語法如 程式 02 2 /* 圖形環境設定 ( 可略 ) */ GOPTIONS RESET=all HTEXT=2.5 FTEXT='Arial'; AXIS1 LABEL=('(N)') MINOR=(NUMBER=1) ORDER=(0 to 70 by 10); LEGEND1 LABEL=('Albumin') VALUE=('>=3.0 g/dl' '<3.0 g/dl'); PATTERN1 color=lilac; PATTERN2 color=bigb; /* 繪製白蛋白與治療方式之長條圖 */ PROC GCHART DATA=esrd_02; FORMAT treat treat.; VBAR3D treat / DISCRETE SUBGROUP=Albumin_1 INSIDE=subpct WIDTH=35 SPACE=40 LEGEND=legend1 AXIS=axis1 COUTLINE=black; 程式 02 2 PROC GCHART 語法和圖形輸出之敘述及選項 4 4 SAS 教戰手冊
第 2 2 節重要指令說明 : 圖 02 2 程式 02 2 的輸出結果 1. GOPTIONS: 請參考第三章 2 1 節 2. AXIS#: # 需放置 1~99 數字, 宣告圖形軸線輸出的格式設定 LABEL=(' 文字 '): 軸線標題 MINOR=(NUMBER= 數字 ): 每個刻度裡安插小刻度的數目 ORDER=( 起始數字 to 結束數字 by 間隔 ): 軸線上的刻度範圍及間隔設定 3. LEGEND#: # 需放置 1~99 數字, 宣告在圖形輸出上加入圖例註解 LABEL=(' 文字 '): 圖例標題 VALUE =(' 文字 ' ' 文字 ' ): 針對圖形內容作註解, 如變項有分類, 可設定兩種以上名稱做說明 4. PATTERN#: # 需放置 1~99 數字, 宣告圖形輸出的樣式設定 COLOR= 顏色 : 描繪長條圖的顏色 5. 使用 PROC GCHART 繪製長條圖的附屬敘述及選項 : VBAR3D 變項名稱 : 以 變項名稱 做分組, 繪製長條圖 DISCRETE: 指定橫軸變項為類別資料 SUBGROUP= 變項名稱 : 在長條中以 變項名稱 做次分組 INSIDE= 統計值 : 將 統計值 顯示於長條中, 程式 02 2 以 subpct 為例, 顯示次分組在某一長條 ( 分類 ) 中各占多少百分比 WIDTH= 數字 : 長條的寬度 SPACE= 數字 : 長條圖的圖面寬度 LEGEND= LEGEND#: 顯示 LEGEND# 敘述所宣告的圖例註解 AXIS=AXIS#: 縱軸以 AXIS# 的宣告做輸出 COUTLINE= 顏色 : 長條邊框顏色 4 5 SAS 教戰手冊