这是我的问题:重复回归 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
宏是无害的,但如果想法是这与初始化变量bb0
、bb1
、bb2
有任何关系,那就完全不正确了。
错误 第二次循环,第一个generate
语句将失败,因为变量u
已经存在。
错误 同样的问题将困扰接下来的三个generate
语句。
错误 第一次循环时,bb0
的 replace
语句将失败,因为不存在这样的变量(见上文:前面的本地宏赋值无关紧要)。
错误 同一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