Stata——回归后预测 group_id

Stata -- predict after regression by group_id

我必须通过 group_id 运行 回归,然后生成预测。 predict 似乎不允许 "by" 选项。在 运行 回归 group_id 之后,有没有一种方法可以预测?数据按group_id堆叠。

我想使用的回归命令如下:

by group_id: reg y x

将不胜感激任何帮助。谢谢

你可以运行循环

levelsof group_id, local(levels) 
foreach l of local levels {
  reg y x if group_id == `l'
  predict pred_`l'
}

经过进一步思考(并阅读了 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 自动创建一个覆盖现有数据集的新数据集。因此,我继续执行以下步骤:

  1. 先保存原始数据(作为临时文件"master"),
  2. 运行 statsby,
  3. 保存截距和斜率(作为临时文件 "using"),
  4. 加载原始数据,
  5. 合并两个数据,
  6. 计算预测值。

这是代码。

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