我必须通过group_id运行回归,然后生成预测。看起来似乎不允许“by”选项。有没有办法在group_id运行回归后预测?数据由group_id堆叠。
我正在考虑使用的回归命令如下:
by group_id: reg y x
将不胜感激任何帮助。感谢。
答案 0 :(得分:4)
进一步思考(并阅读Nick Cox的旧文章)后,我发现statsby
可以用来避免循环并加速程序。这是他们速度的比较。
让我们首先准备示例数据。
set more off
timer clear
webuse nlswork,clear
keep idcode ln_wage age
drop if missing(idcode, ln_wage, age) // drop all missing
drop if (idcode[_n]!=idcode[_n+1] & idcode[_n]!=idcode[_n-1]) // drop groups with one case
这是statsby
方法。 statsby
会自动创建一个覆盖现有数据集的新数据集。因此,我继续执行以下步骤:
statsby
,这是代码。
timer on 1
tempfile master using
save `master'
qui statsby _b[_cons] _b[age],by(idcode) :regress ln_wage age
save `using', replace
use `master'
qui merge m:1 idcode using `using'
gen yhat1=_stat_1+_stat_2*age
timer off 1
将此与levelsof
/ foreach
方法进行比较。
timer on 2
levelsof idcode, local(levels)
qui gen yhat2=.
foreach l of local levels {
qui reg ln_wage age if idcode==`l'
qui replace yhat2=_b[_cons]+_b[age]*age if idcode==`l'
}
timer off 2
第一种方法只需要第二种方法的一半时间。
. timer list
1: 22.11 / 1 = 22.1150
2: 56.44 / 1 = 56.4350
答案 1 :(得分:2)
您可以循环运行
levelsof group_id, local(levels)
foreach l of local levels {
reg y x if group_id == `l'
predict pred_`l'
}