在 STATA 上分析 Panel Data
分析 Panal Data 的準備與注意事項
這節整理一些處理 Panel Data 時應該注意的地方。相較於 cross-section data,Panel Data 多了時間維度,也就是說可以將資料表示成(Y_{i,t}, X_{i,t}
)的形式。Panel Data 中最理想的狀況是:對每個人 i
而言,時間 t
的起訖、頻率都一致且齊全(strict balance)。但實際的資料通常不會那麼整齊,也許有些人在某段時間內沒有觀察值(失業),也有可能每個人開始被觀察到的時間不同(different entering cohort),除了在分析時需要多加留意外,在處理資料時更需要小心以避免出錯。以下記錄了一些注意事項與實用的指令:
- 首先,STATA 是透過
xtset <panel_var> <time_var>
將資料設為 Panel Data。我們預期<panel_var> <time_var>
應該作為這份資料的 identifier,因此若有人同個時點被觀察到數次,xtset
就會出現 error。另外,<panel_var> <time_var>
需要是數值變數,若是字串的話,要先透過destring
或encode
轉換。 - 資料中的時間不一定是以 1 單位為間隔,也有可能像奧運年份一樣,每 4 年間隔。
xtset
預設時間間隔為 1 單位的數值,若要修改則要額外加上 option,delta(<gap>)
,其中<gap>
是時間間隔(以奧運為例的話就是delta(<gap>)
)。 - 設定完 Panel Data 之後,可以對變數使用額外的 operators。像是:
f.<var>
可以取得下一期的值(forward)、l.<var>
可以取得前一期的值 (lag)、d.<var>
可以取得這期的值扣掉前期的值(difference)。 - 請小心
l.<var>
和<var>[_n-1]
的差異,前者是上一期的資料(視你在定義 panel 時,時間的 gap 為何),後者則是上一筆資料。我們假設資料依<panel_var> <time_var>
排序,即使如此,但上一筆資料仍不一定等於上一期資料,因為不一定所有人都有每一期的資料。 - 當某人某期 missing 時,請小心使用
l.<var>
。一旦指令中涉及到的l.<var>
missing, 那麼最後生出來的變數也會 missing。在某些情境下,這可能不會是你所希望的,例如:生成一年內的累計薪資(希望 missing 實際上以 0 處理)。
Panel Data 有許多專門的指令,其中一個有趣的指令是 tsfill
(你可以從 prefix 猜到, 這個指令也適用於 time serie data)。 tsfill
可以填補上某人中斷而遺失的樣本點,比如說:A 國家每年都參加奧運,除了 2008 年因故缺席,這時 tsfill 就會補上(A、2008)的樣本點(其未知變數值為 missing)。這麼做不僅有利於資料呈現,還能夠幫助特定的運算。類似的功能可以參考 option full
以及指令 fillna
。
- 其他 panel 系列的指令留待讀者自行探索:
xtdescribe
、xttrans
、xttab
、xtreg
。
小結
Panel Data 的指令也許沒有比較複雜,但絕對需要花更多心思避免出錯。根本的原因就是資料變複雜了:有些人 N 年後就不在職場上(entry and exit)、有些人某個月兼了數份工作、有些人會暫時離開樣本而後再回來,考量到這些,樣本的選取、變數的定義就不得不謹慎。
最後稍微提一下交易資料,交易資料和 Panel Data 一樣有人 id
與時間維度,可以視為 Panel Data 的一種。但交易資料隨著人的不同,觀察到的時間會有很大的落差:有些人可能定期消費,有些人則是只買一次就流失了。在交易資料中,依分析目的不同,需要清楚的區分:第幾筆資料、第幾期的資料、何時加入的人(cohort)等等。