1

我需要帮助将自举系数及其上下 95% CI 粘贴到新变量中以生成图表。

我尝试了下面的代码。看起来标量已成功检索,但我无法在使用replace.

clear all
forvalues j=0/1{
    foreach l in P2 P3 P4 {
        use `l'_per_`j', clear
        set seed 1
        reg estimate xaxis
        predict yhat
        gen yhat_bs=yhat
        gen ll_95per=.
        gen ul_95per=.
        local N = _N
        foreach i in 1/11 { //number of time periods to be predicted
            bootstrap pred=(_b[_cons] + _b[xaxis]*`i'), reps(1000) seed(1): reg
            estimate xaxis
            matrix b=e(b)
            scalar sb=b[1,1]
            matrix ci_normal=e(ci_normal)
            local par=b[1,1] //coefficient bootstrap
            local ll=ci_normal[1,1] //lower CI 95%
            local ul=ci_normal[2,1] //upper CI 95%
            replace yhat_bs=`par' if xaxis==`i' 
            replace ll_95per=`ll' if xaxis==`i' 
            replace ul_95per=`ul' if xaxis==`i'
        }
        save `l'_per_`j'_lin_trend, replace
    }
}
4

1 回答 1

1

这里的语法foreach i in 1/11是错误的。就 Stata 而言,这是一个包含一个1/11不会扩展的项目的列表。所以,当 Stata 上线时

replace yhat_bs=`par' if xaxis==`i' 

这将成为,执行此循环的一次,

replace <stuff> if xaxis==1/11 

现在这是合法的:1/11 是 Stata 将计算的分数。但是您没有任何值xaxis等于该分数,因此没有任何内容被替换。

你想要foreach i of num 1/11甚至更好forval i = 1/11。这是您的代码的重写。我还删掉了不必要的中间宏和其他一些看起来不必要的东西,但我还没有测试过。

清除所有
对于值 j = 0/1 {
    foreach l 在 P2 P3 P4 {
        使用`l'_per_`j',清除
        设置种子 1
        reg 估计 xaxis
        预测 yhat
        gen yhat_bs = yhat
        第 ll_95per = .
        创 ul_95per = 。

        forval i = 1/11 { //要预测的时间段数
            bootstrap pred=(_b[_cons] + _b[xaxis]*`i'), reps(1000) seed(1): reg 估计 xaxis
            矩阵 b = e(b)
            矩阵 ci_normal = e(ci_normal)
            如果 xaxis == `i' 则替换 yhat_bs = b[1,1]
            如果 xaxis == `i' 则替换 ll_95per = ci_normal[1,1]
            如果 xaxis == `i' 则替换 ul_95per = ci_normal[2,1]
        }
        保存`l'_per_`j'_lin_trend,替换
    }
}
于 2013-10-16T15:50:35.623 回答