2010-03-10 56 views
1

我想編寫一個簡單的程序來結合一組迴歸擬合的係數和標準誤差估計值。我運行5次迴歸,並將感興趣的係數和標準誤存儲在向量中(Stata矩陣對象,實際上)。然後,我需要執行以下操作:簡單的Stata程序

  1. 查找係數估計值的平均值。
  2. 根據建議的公式結合「多重歸因」的結果組合標準誤差估計值。該公式是this document第6頁上「T」公式的平方根。

我已經寫過Stata代碼,但是我想把它作爲一個函數(或者在Stata說的「程序」)編寫,它將矢量(或矩陣,如果可能的話)一次多次估計)迴歸係數估計和相應標準誤差估計的向量(或矩陣),然後生成上面的1和2。下面是我寫的代碼:

(BREG是迴歸係數估計的1×5向量,sereg是相關的標準誤差估計的1×5矢量)

mat ones = (1,1,1,1,1) 
mat bregmean = (1/5)*(ones*breg’) 
scalar bregmean_s = bregmean[1,1] 
mat seregmean = (1/5)*(ones*sereg’) 
mat seregbtv = (1/4)*(breg - bregmean#ones)* (breg - bregmean#ones)’ 
mat varregmi = (1/5)*(sereg*sereg’) + (1+(1/5))* seregbtv 
scalar varregmi_s = varregmi[1,1] 
scalar seregmi = sqrt(varregmi_s) 
disp bregmean_s 
disp seregmi 

這給出了正確的答案一個實例。任何指針都會很棒!

更新:我完成了合併係數/參數kXm矩陣估計的代碼(k是參數數量,m是插值數)。代碼可以找到here

感謝特里斯坦和Gabi的指針。


更新:我已完成用於組合的係數/參數,其中,k是係數/參數的數目的KXM矩陣的代碼,和m是插補的數量。你可以找到它here

感謝特里斯坦和加比的提示。

回答

0

我假設你已經意識到包含這些類型的組合規則在內的多個插補內置於Stata 11中。我沒有使用它,但如果可能的話,這可能是最好的選擇。

您可以使用args命令輕鬆編寫Stata程序來獲取矩陣。按照此模板:

capture program drop mi_combine 
program define mi_combine 
    args coef se 
    matlist `coef' 
    matlist `se' 
end 

mat ones = (1,1,1) 
mat twos = (2, 2, 2) 
mi_combine ones twos 
0

這應該有所幫助。我是Stata的真正新手。我有v10,如果/當我得到v11我會看看mi。我想使用Clarify的mi combine功能,但我使用的是Clarify不支持的模型;我不敢肯定英里要麼(例如,用戶提供的審查分位數迴歸.ado)

因爲我貼我想出了,沒有工作,現在的問:

capture program drop micombine 
program define micombine 
    mat ones = (1,1,1,1,1) 
    mat bmean = (1/5)*(ones*`1'') 
    mat wtv = (1/5)*(`2'*`2'') 
    scalar wtv_s = wtv[1,1] 
    mat btv = (1/4)*(`1' - bmean#ones)* (`1' - bmean#ones)' 
    scalar btv_s = btv[1,1] 
    mat varregmi = wtv_s + (1+(1/5))*btv 
    scalar varregmi_s = varregmi[1,1] 
    scalar seregmi = sqrt(varregmi_s) 
    scalar bmean_s = bmean[1,1] 
    scalar dfmi = (5-1)*(1+(5*wtv_s)/(6*btv_s))^2 
    scalar moemi = seregmi*invttail(dfmi,.025) 
    di as text "b_mi = " as result bmean_s 
    di as text "se_mi = " as result seregmi 
    di as text "df_mi =" as result dfmi 
    di as text "95% moe_mi =" as result moemi 
end 

醜,並且只對一個係數估計做它。我希望能夠爲所有的系統做到這一點,儘管這不是必要的。

2

Tristan是正確的,你可以使用「參數」在Stata程序中調用矩陣作爲參數。用他的模板,該黑客應該複製計算在原來的職位對於任何BREG,SREG對向量:

capture prog drop myMI 
program myMI 

args breg sereg 
local params=colsof(`breg') // store the number of parameters here 

mat ones=J(1,`params',1) 
mat bregmean = (1/`params')*(ones*breg') 
scalar bregmean_s = bregmean[1,1] 
mat seregmean = (1/`params')*(ones*sereg') 
mat seregbtv = (1/(`params'-1))*(breg - bregmean#ones)* (breg - bregmean#ones)' 
mat varregmi = (1/`params')*(sereg*sereg') + (1+(1/`params'))* seregbtv 
scalar varregmi_s = varregmi[1,1] 
scalar seregmi = sqrt(varregmi_s) 
disp bregmean_s 
disp seregmi 

end 

您與

myMI breg sereg 
0

稱它爲如果計算是複雜的,我建議馬塔。

如果你想要做的計算中的數據,你可以使用parmest和/或postfile的迴歸係數導出到一個臨時數據文件。