Stata - 在group_id回归后进行预测

时间:2015-02-13 18:17:09

标签: regression stata predict

我必须通过group_id运行回归,然后生成预测。看起来似乎不允许“by”选项。有没有办法在group_id运行回归后预测?数据由group_id堆叠。

我正在考虑使用的回归命令如下:

by group_id: reg y x

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

2 个答案:

答案 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会自动创建一个覆盖现有数据集的新数据集。因此,我继续执行以下步骤:

  1. 首先保存原始数据(作为tempfile" master"),
  2. 运行statsby
  3. 保存截距和斜率(作为tempfile"使用"),
  4. 加载原始数据
  5. 合并两个数据,
  6. 计算预测值。
  7. 这是代码。

    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'
}