Stata foreach and forvalue loop



这是我的问题:重复回归 1,000 次,每次都按指定为 y、X1、X2 和 u 变量绘制新值。计算估计系数的均值及其相关性。我用 for 循环编写了代码,但它只是告诉我没有任何变化。

foreach n in 1000{
  forvalues m = 1/1000 {
        local bb0 = 0
        local bb1 = 0
        local bb2 = 0
        gen u = rnormal(0, 5) if _n <= `n'
        gen x1i = rnormal(0, 1) if _n <= `n'
        gen x2i = exp(x1i) if _n <= `n'
        gen Yi = 2 + 4 * x1i - 6 * x2i + u if _n <= `n'
        regress Yi x1i x2i
        replace bb0 = b[_cons]) if _n <= `n'
        replace bb1 = b[x1i] if _n <= `n'
        replace bb2 = b[x2i] if _n <= `n'
}
}
gen b0 = mean(bb0)
gen b1 = mean(bb1)
gen b2 = mean(bb2)  

你的报告是最神秘的。从表面上看,这段代码从未通过几个错误中的第一个。这里提到的任何错误都是致命的,但我仍然报告其他错误。

循环

的目的显然是保存 1000 次回归的结果,但每次循环时,最后一次回归的估计系数都会(其他错误不知何故不咬人)覆盖变量bb0 bb1 bb2中的任何先前估计值。这本身不是语法错误,但即使在大纲中,程序也不会执行预期操作。

外部循环是使用单个参数的循环,它只是将最后一个观测值设置为 1000。它本身不会产生任何迭代。

bb0 bb1 bb2初始化local宏是无害的,但如果想法是这与初始化变量bb0bb1bb2有任何关系,那就完全不正确了。

错误 第二次循环,第一个generate语句将失败,因为变量u已经存在。

错误 同样的问题将困扰接下来的三个generate语句。

错误 第一次循环时,bb0replace 语句将失败,因为不存在这样的变量(见上文:前面的本地宏赋值无关紧要)。

错误 同一replace语句包含一个杂散的括号。

Bug 同样的问题会在第一次循环时困扰接下来的两个replace语句,因为不存在这样的变量。

错误 regress系数保持_b,而不是b

错误 没有函数mean()可以在generate语句的表达式中使用。

下面的代码至少有效。报告的问题陈述在各种细节上都不清楚:例如,样本量和模拟数量可能不同。由于问题的语气暗示了某些课程中的作业,至少相关性代码被留作练习。

clear 
set seed 42 
set obs 1000 
quietly foreach v in Yi x1i x2i bb0 bb1 bb2 { 
    gen `v' = . 
}
quietly forval m = 1/1000 {
    replace x1i = rnormal(0, 1) 
    replace x2i = exp(x1i) 
    replace Yi = 2 + 4 * x1i - 6 * x2i + rnormal(0, 5) 
    regress Yi x1i x2i
    replace bb0 = _b[_cons] in `m'
    replace bb1 = _b[x1i] in `m'
    replace bb2 = _b[x2i] in `m' 
}
su bb0 bb1 bb2 

最新更新