2016-11-10 59 views
1

我有長格式的面板數據,面板變量公司id和1986m7到2015m12之間的月度時間變量。追蹤十年Fama-MacBeth斜率係數

我想獲得Fama-MacBeth迴歸的10年Beta測試結果,並將它們存儲在一個新文件中以便日後繪製它們。

我想要從1986m7直到1996m7,1986m8直到1996m8等爲止的beta測試,最後一次從2005m12到2015m12迴歸。

我以爲我可以用rolling命令做到這一點,但我不知道如何告訴Stata隨着時間的推移只會「滾動」,而不是id,或者如果這個命令甚至可以使用這個命令。

我的第二個想法是使用while循環。但我不知道如何告訴Stata,在每個循環之後,它應該將局部變量提高一個月。是否有可能將本地變量保存爲日期?

也許有人知道解決我的問題的另一種方法。

另外一個解決方案將這些測試版存儲在一個新的文件中,並附加新的測試版,將不勝感激。我想把它們作爲標量存儲起來,但是我不知道如何把標量作爲一個新的變量。使用滾動命令這個問題不會是一個問題,因爲它爲我創建了一個新的變量。

我有什麼作爲到目前爲止的代碼爲滾動想法,window(120)因爲120個月(10年)的滾動窗口:

use mydata, clear 
    ssc install xtfbm 
    xtset id date 
    rolling _b, clear window(120): xtfmb y x 

我有什麼作爲到目前爲止的代碼爲循環理念:

ssc install xtfmb 

    local i = tm(1986m7) 
    while `i' <= tm(2005m7) { 

    use mydata, clear 

    drop if date < tm(`i') 
    drop if date >= tm(`i' + "1year") 

    xtset id date 

    quietly xtfmb y x 
    scalar x`i' = _b[x] 

    local i = `i' + "1month" 

    } 

回答

0

的意見看來是一個答案的捆綁產品:

該計劃被稱爲塔塔,不STATA。這是基本的。

xtfbm大概是xtfmb的拼寫錯誤。無論哪種方式,我從來沒有使用過它,甚至看過它,所以不要專門針對它提供建議。

更有趣的是,rolling不支持面板設置。這裏是一個遲鈍的例子,你可以嘗試:

webuse grunfeld 
xtset 
rolling _b, window(10): regress invest year 

當你的第一個代碼塊似乎是想類似的事情,我不清楚你問那裏。

你問:「甚至可以將本地變量保存爲日期嗎?」這是倒退,但我想我明白你的意思。 Stata日期只是數字,所以你可以將它們保存到本地宏(在Stata中它們不被視爲變量)。這將是合法的:

local t = ym(1986, 7) 
while `t' <= ym(2005, 7) { 
    ... 
    local T = `t' + 12 
    ... 
    local ++t 
} 

,這將是更好的:

forval t = `=ym(1986, 7)'/`=ym(2005, 7)' { 
    ... 
    local T = `t' + 12 
    ... 
} 

這很可能看起來更清晰的

local t1 = ym(1986, 7) 
local t2 = ym(2005, 7) 
forval t = `t1'/`t2' { 
    ... 
    local T = `t' + 12 
    ... 
} 

但我的建議仍然是嘗試rolling,這不這一切都是爲了你。

+0

「滾動」命令的問題在於它對每個ID分別進行滾動迴歸。這不是一個fama-macbeth迴歸的想法。 fmb是兩階段迴歸,其中在第一步中,對於每個單個時間段執行橫截面迴歸。然後,在第二步中,將最終係數估計值作爲第一步係數估計值的平均值。然而,用你的'forval'循環建議它工作得很好,謝謝你的幫助。 –

+0

感謝您的澄清和糾正。 –