Stata:在单个变量中按组回归保存残差

时间:2014-10-21 13:12:12

标签: loops stata

在Stata中,我希望按组运行多个回归,并将相应的残差保存在单个变量中。这是我尝试做的一个有效例子:

sysuse auto, clear

forvalues i=0/1 {
regress price mpg if foreign==`i'
predict r_`i' if foreign==`i', resid
}

egen residuals=rowtotal(r_0-r_1) , missing
drop r_0-r_1

虽然上面的循环工作得很好,但我的猜测是,必须有一种更优雅的方法来实现这一目标吗?

2 个答案:

答案 0 :(得分:1)

SSC的

rangestat允许这样做:

sysuse auto, clear
rangestat (reg) price mpg, int(foreign 0 0) 
gen residual = price - b_cons - b_mpg * mpg 

该方法扩展到移动窗口以及不相交的组。

答案 1 :(得分:0)

另一种方法是使用tempname在循环内创建局部变量。然后,我们更新res(残差)变量。循环结束后,tempname将被自动删除。这是我的代码:

sysuse auto, clear
* @Pilik's code:

forvalues i=0/1 {
    regress price mpg if foreign==`i'
    predict r_`i' if foreign==`i', resid
}
egen res = rowtotal(r_0-r_1) , missing
drop r_0-r_1

* My code: use `tempname`
gen res1 = .
forvalues i=0/1 {
    regress price mpg if foreign==`i'
    tempname r
    predict `r' if foreign==`i', resid
    replace res1 = `r' if foreign==`i'
}
* Compare two ways: same results
su res res1
相关问题