为大量标量生成bootstrap标准错误

时间:2013-06-16 22:59:40

标签: stata bootstrapping

假设我有四个标量:称之为dea_1 dea_2 dea_3 dea_4。它们是从程序samprogram输出的(此处未显示)。

现在我在Stata中使用这些标量的bootstrap命令来获取引导标准错误。

set seed 123
bootstrap dea_1=r(dea_1)dea_2=r(dea_2)dea_3=r(dea_3)dea_4=r(dea_4), reps(100): samprogram

这很好,但在我的原始程序中,我计算了30个标量,dea_1 dea_2 ... dea_30。现在我想避免在bootstrap命令中编写这30个标量中的每一个,为此我写了一个循环如下:

set seed 234
forvalues i in 1(1)30{
local k dea_`i'
bootstrap dea_`k'=r(dea_`k'), reps(100): samprogram
}

这样可行,但一次为每个标量提供输出。但是,我正在寻找代码,避免在bootstrap命令中编写所有标量,但仍然同时为所有标量提供输出(即类似于以下命令的输出)

set seed 345
bootstrap dea_1=r(dea_1)dea_2=r(dea_2)dea_3=r(dea_3)dea_4=r(dea_4)[omitted]...dea_30=r(dea_30), reps(100): samprogram

在这方面的任何帮助将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

这样可以逐步构建本地宏的内容。

set seed 123
forval i = 1/30 { 
    local call `call' dea_`i'=r(dea_`i') 
}
bootstrap `call', reps(100) : samprogram 

如果需要,请事先通过

清空宏
local call 

http://www.stata-journal.com/sjpdf.html?articlenum=pr0005 [免费.pdf]

中的更多讨论

(LATER)请注意,与您的断言相反的是代码

set seed 234
forvalues i in 1(1)30{
local k dea_`i'
bootstrap dea_`k'=r(dea_`k'), reps(100): samprogram
}

不会按预期工作。例如,第一轮,bootstrap将寻找r(dea_dea_1),并且每个样本都会丢失。重复调用bootstrap的代码可能只是

set seed 234
forvalues i = 1/30 {
    bootstrap dea_`i'=r(dea_`i'), reps(100): samprogram
}

但是如果你能在一次通话中做你想做的事情,这将是一个坏主意。

答案 1 :(得分:1)

另一种解决方案是制作您的计划eclass并将结果返回到矩阵e(b)。这允许快捷方式bootstrap _b, reps(100): samprogram。以下是一个例子。这里的关键点是不同的标量存储在行向量`b'中,该行向量由程序作为行向量e(b)返回,并带有命令:

ereturn post `b', esample(`touse')

这里有一个完整的例子:

clear all

program define sim, eclass
    syntax varlist(numeric) [if] [in], by(varname numeric) 
    marksample touse
    markout `touse' `by'

    local k : word count `varlist'
    tempname b m0
    matrix `b' = J(1,`k',.)

    local i = 1
    foreach var of local varlist {
        sum `var' if `touse' & `by', meanonly
        scalar `m0' = r(mean)
        sum `var' if `touse' & !`by', meanonly
        matrix `b'[1,`i'] = `m0' - r(mean)
        local i = `i' + 1
    }
    ereturn post `b', esample(`touse')

end

sysuse auto
bootstrap _b, reps(100) : sim price mpg length weight trunk, by(foreign)