【发布时间】:2016-05-11 14:27:55
【问题描述】:
使用post 命令时,出现以下错误:
post command requires expressions be bound in parenthesis
我的程序生成一个矩阵来存储每个模拟的回归系数,然后使用post 命令声明为float 并将矩阵的输出放在括号中(测试版)。
代码示例:
*Priors
set more off
global nmc=10
global l = 4 /* number of lags */
global cnt=150 /* number of countries */
set seed 10101
* Gen empty beta matrix
matrix betas = J(153,$nmc+1,.)
*** THIS IS WHERE MONTECARLO STARTS***
program bootStrapCH5, rclass
tempname sim
postfile `sim' betas using results, replace /* As trial I'll create only the betas matrix for now. */
*postfile `sim' betas alpha_mean b1_mean b2_mean b3_mean b4_mean se_alpha se1 se2 se3 se4 using results, replace
quietly {
forvalues i = 1/$nmc {
* Fixed effects regression.
reg gdp_growth_wb L(1/4).gdp_growth_wb i.id
matrix B1= e(b)
mat li B1
predict g_hat,xb
gen e_hat= gdp_growth_wb - g_hat
*gen flag=e(sample)
* Generate the "wild" errors for the forecasts
gen eta=rnormal()
gen e_star=e_hat*eta
**RECURSION
levelsof id, local(codes)
capture noisily replace y_star= _b[_cons] + _b[L.gdp_growth_wb]*L.y_star + ///
_b[L2.gdp_growth_wb]*L2.y_star + _b[L3.gdp_growth_wb]*L3.y_star + ///
_b[L4.gdp_growth_wb]*L4.y_star + e_star if (id==1 & Dini4forward==1)
forvalues cc= 2(1)150 {
capture noisily replace y_star= _b[_cons] + _b[`cc'.id] + _b[L.gdp_growth_wb]*L.y_star + ///
_b[L2.gdp_growth_wb]*L2.y_star + _b[L3.gdp_growth_wb]*L3.y_star + ///
_b[L4.gdp_growth_wb]*L4.y_star + e_star if (id==`cc' & Dini4forward==1)
}
*Regression with new sample: y_star
reg y_star L(1/4).y_star i.id
matrix b= e(b)'
matrix betas= (betas , b)
matrix list betas
post `sim' float (betas)
}
}
postclose `sim'
end
*Execute program
bootStrapCH5
use results, clear
summarize
我也尝试了另一种方法:
post `sim' (betas)
得到了错误:
> type mismatch
post: above message corresponds to expression 1, variable betas
非常感谢有关如何解决此问题的任何想法。
【问题讨论】:
-
如果要为每次模拟运行存储 1Xm 的回归系数矩阵,最好在模拟上方初始化一个 rXm 存储矩阵(其中 r 是复制次数)并填充一行每次复制后的矩阵。然后在最后使用单个
svmat命令将您的结果放入主 stata 数据集,或使用putexcel,具体取决于您要对结果执行的操作。 -
谢谢。我将使用 svat 命令。非常感谢。
标签: recursion functional-programming stata montecarlo