公告

[公告]
2014/01/17
由於已經是faculty的關係,不太有足夠時間寫部落格。因此更新的速度會相當緩慢。再加上近幾年來SAS GLOBAL FORUM沒有出現讓我覺得驚艷的技術文件,所以能分享的文章相對也減少許多。若有人推薦值得分享的SAS技術文件,請利用『問題討論區』告知。

2013/07/19
臉書留言板的功能因為有不明原因故障,因此特此移除。而intensedebate的留言板因管理不易,也一併移除。目前已經開啟內建的 G+ 留言系統,所以請有需要留言的朋友,可直接至『問題討論區』裡面留言。


2012年3月24日 星期六

Mixed Model Influence Diagnostics

原文載點:http://www2.sas.com/proceedings/sugi29/189-29.pdf

在進行混合模型的估計中,模型檢定也是不可忽略的一個重要步驟,雖然 SAS 有現成的語法可以執行,但因為所產生的報表和圖型落落長,不熟悉的人根本不會知道哪些圖或報表是代表什麼意義。SAS 內部工作人員利用官方的資料和程式發表了一篇技術文件,詳盡地解說每一張圖表在混合模型檢定中的意義。


混合模型的檢定主要的精神是,將每一個觀測值分別刪除後重新配飾模型,然後再計算一些統計量來看刪除這筆資料對於模型的影響大不大,最後並將這些統計量作圖。一般來講,無論是哪種統計量,只要算出來的值越大,就越表示該筆資料對整個模型的估計有影響。


。語法
此模型的檢定語法,主要是在 PROC MIXED 程序的 MODEL 語法後面加上一個 INFLUENCE 選項。該選項後面接一個括弧,而括弧裡面有六個主要的子選項需要填寫:
1. EFFECTS = 指定要檢定會影響模型的因素。此處只能放類別資料。而通常我們有興趣的影響因素都是觀測值本身,因為 SAS 會依序刪除每一個觀測值,然後用剩下的觀測值去估計模型,最後再算出一些檢定量。所以這個子選項通常都是填觀測值的 ID 變數,如 OBS, SUBJ, PERSON 之類的。
2. EST = 每一次程式用部分資料估計參數時,我們可以命令 SAS 儲存某些變數的估計值。這個動作就比需要呼叫 EST 來處理。如果沒有這個子選項的話,SAS 將不會儲存任何更新後的估計量。附帶一提的是,加上這個指令,並不會有任何結果印在報表上,而是需要另外用 ODS OUTPUT 才能把估計量真正的輸出來。
3. ITER = 預設值是 0。這是在定義在刪除一筆資料並重新估計模型時,利用牛頓法估計參數所需要使用的額外迴圈數量。這個道理是,有時候在山除了某筆資料時,可能會影響到牛頓法的收斂,因為額外增加迴圈數可以避免可能估計發散的情況。通常這個數值設定在 5~10 之間即可。
4. KEEP = 用來指定要保存多少資料,不過通常是省略不寫。
5. SELECT = 用來指定哪些觀測值或變數要拿來做檢定,不過通常的情況都是全部丟進去做,所以這個子選項可以忽略不寫。
6. SIZE = 用來指定一次要刪除幾筆資料來做檢定。通常若不寫的話,SAS會一次刪除一筆資料。

。範例資料

本篇使用範例是在 SAS 官網上有的,但官網上有說這是 Pothoff and Roy (1964)論文裡面所用的數據。裡面共包含六個變數,計有觀測值 ID(Person),性別(Gender)以及四個時間的測量值(y1, y2, y3, y4):
data pr;
input Person Gender $ y1 y2 y3 y4;
y=y1; Age=8; output;
y=y2; Age=10; output;
y=y3; Age=12; output;
y=y4; Age=14; output;
drop y1-y4;
datalines;
1 F 21.0 20.0 21.5 23.0
2 F 21.0 21.5 24.0 25.5
3 F 20.5 24.0 24.5 26.0
4 F 23.5 24.5 25.0 26.5
5 F 21.5 23.0 22.5 23.5
6 F 20.0 21.0 21.0 22.5
7 F 21.5 22.5 23.0 25.0
8 F 23.0 23.0 23.5 24.0
9 F 20.0 21.0 22.0 21.5
10 F 16.5 19.0 19.0 19.5
11 F 24.5 25.0 28.0 28.0
12 M 26.0 25.0 29.0 31.0
13 M 21.5 22.5 23.0 26.5
14 M 23.0 22.5 24.0 27.5
15 M 25.5 27.5 26.5 27.0
16 M 20.0 23.5 22.5 26.0
17 M 24.5 25.5 27.0 28.5
18 M 22.0 22.0 24.5 26.5
19 M 24.0 21.5 24.5 25.5
20 M 23.0 20.5 31.0 26.0
21 M 27.5 28.0 31.0 31.5
22 M 23.0 23.0 23.5 25.0
23 M 21.5 23.5 24.0 28.0
24 M 17.0 24.5 26.0 29.5
25 M 22.5 25.5 25.5 26.0
26 M 23.0 24.5 26.0 30.0
27 M 22.0 21.5 23.5 25.0
;


在讀入資料後,還有經過一小段資料整理,把橫向排列的 y1~y4 轉置成值的,並給了一個年齡變數 Age (=8, 10, 12, 14)。

。程式碼
ods html;
ods graphics on;
proc mixed data=pr;
class Person Gender;
model y = Gender Age Gender*Age / influence(iter=5 effect=Person est);
repeated / type=ar(1) subject=Person;
run;
ods graphics off;
ods html close;


模型檢定的語法就出現在上面程式碼的紅色部分。INFLUENCE的括弧裡面只呼叫了三個子選項。作者設定用牛頓法估計參數的迴圈數增加五次,而要刪除的變因是觀測值本身(Person),最後的 est 就是要保存每一次更新的參數估計值。另外,一定要呼叫 ODS GRAPHICS,這樣 SAS 才會去畫圖。至於輸出的格式,不一定要用 HTML,用 RTF 輸出亦可。

將程式碼送出後,除了原先 PROC MIXED 程序會出現的報表外,最後面會出現一長串的影響檢定表。裡面包含了每個觀測值相關的檢定統計量。如下圖所示:


這些統計量,在樣本少的時候還可以用眼睛稍微去判斷一下,但若資料筆數太多,就必須依靠之後 SAS 所畫的圖來解讀。這些圖可分成四大類:

1. 對全體固定效應的影響:
此處一共有四張圖,分別是 Restricted likelihood distance (RLD), PRESS, Cook's D 以及 Covariance ratio (COVARTIO)。RLD 是看每一筆觀測值的刪除對整個模型的影響,Cook's D 是看每一筆觀測值的刪除對固定效應估計量的影響,PRESS 是看每一筆資料刪除對預測值的影響,而 COVARATIO 則是看每一筆資料刪除對估計值準度的影響(亦即信賴區間)。以 RLD 和 Cook's D 圖來看,通常只要有任何比較突出的線就表示那一筆資料對模型有影響。而 PRESS 和 COVARTIO 圖的判斷法是看哪些點比較偏離其他的點。

2. 對共變異矩陣的影響:
同樣有四張圖,分別是 Cook's D, MDFFITS, COVRATIO 和 COVTRACE。同樣地,Cook's D 和 MDFFITS 是用來診斷每刪除一筆資料對共變異矩陣估計值的偏誤影響,而 COVRATIO 和 COVTRACE 則是枕對每刪除一筆資料對供變異矩陣估計值的準度影響。理論上,Cook's D 和 MDFFITS 會有比較類似的結果。

3. 對個別固定效應的影響:
這部份會出現的圖形數量端看有多少固定效應變數在裡面。SAS 會把每刪除一筆觀測值後估計出來的固定效應估計值依序畫在塗上,這樣就可以很清楚的判讀哪些資料被刪除後會對固定效應的參數估計值有影響。每張途中間出現的那條線是當所有觀測值都拿進去估計模型時的參數估計值。因此,越偏離那條線就表示影響越大。

4. 對個別共變異矩陣參數及殘差的影響:

既然有對個別固定效應的檢定,那就一定有對個別共變異矩陣參數的檢定。判讀方法也是越偏離圖內那條水平線就表示越有影響。

。結論
根據個人觀察,許多研究並沒有很仔細地做過模型診斷就把結果拿去發表。雖然這個步驟沒有強制性,但端看研究者的良心。至少,有時候若發現估計的結果很詭異無法解釋,藉由這篇文章便可以很輕鬆的完成模型診斷,說不定有機會可以抓出有問題的觀測值以改進模型估計的結果。但是,也要額外強調一點,不是說有影響力的觀測值被測出來就一定要移除,因為這很有可能是因為樣本太小所導致。因此,要不要刪除對模型有影響的觀測值,除了要參考模型診斷的結果,更需要研究者專業的判斷來看該筆資料是不是所謂真正的離群值。

CONTACT INFORMATION
Oliver Schabenberger
SAS Institute Inc.
SAS Campus Drive
Cary, NC 27513
Email: oliver.schabenberger@sas.com

沒有留言:

張貼留言

要問問題的人請在文章下方的intensedebate欄位留言,請勿使用blogger預設的意見表單。今後用blogger意見表單留言的人我就不回應了。

CODE { display: block; /* fixes a strange ie margin bug */ font-family: Courier New; font-size: 8pt; overflow:auto; background: #f0f0f0 url(http://klcintw.images.googlepages.com/Code_BG.gif) left top repeat-y; border: 1px solid #ccc; padding: 10px 10px 10px 21px; max-height:200px; height:200px; // for IE6 line-height: 1.2em; }