Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

# Re: Re: st: using subgroup regression coefficients in further regressions

 From Nick Cox <[email protected]> To [email protected] Subject Re: Re: st: using subgroup regression coefficients in further regressions Date Sun, 22 Jul 2012 15:52:23 +0100

```This looks like a different question to me, but the principles are the same.

0. Initialise a variable to hold results outside the loop

1. After each regression, you use its estimation results. What you
want may be most easily calculated in terms of something like

_b[X1] * X1 + _b[X2] * X2

2. Typically you will -replace- results of the variable created in 0
for some observations only.

However, I don't understand how this differs from a problem best
handled by -predict- or why no constant (intercept) appears in your
expressions.

Nick

On Sun, Jul 22, 2012 at 3:42 PM, Peter Hofmann <[email protected]> wrote:
> Thank you for the fast reply, Nick. Your hint improves my first step, however
> the original question is still unanswered. Obviously I did not pose the
> question clear enough, so I try again:
>
> After the regression I want to use the estimated coefficients (betas) of each
> subgroup (control groups) to calculate the y-hat (=expected dependent
> variable) of the
> treatment observations (each corresponding to its specific subgroup) by:
>
> treatment1:
> yhat_1 = beta-hat1 * X1 + beta-hat2 * X2
>
> treatment2:
> yhat_2 = beta-hat3 * X3 + beta-hat4 * X4
> .....
>
> The calculated y-hats of the treatments can now be compared to the real y's
> of the treatments.
>
> Any help is appreciated!
> Peter
>
>
> On Thu, Jul 19, 2012 at 2:00 PM, Nick Cox <[email protected]> wrote:
>
>> That code won't work at all. Apart from some fantasy syntax, the
>> second time around the loop the -generate- would fail as the variable
>
>> But as you want residuals, you can get them directly:
>
>> gen res = .
>> sum subgroupvar, meanonly
>
>> qui forvalues i = `r(min)'/`r(max)' {
>>        reg y x1 x2 if subgroupvar==`i'
>>        predict work, residual
>>         replace res = work if subgroupvar==`i'
>>         drop work
>> }
>
>> Note, if only as a style point, that putting returned results into
>> scalars, and then scalars into locals, is in this case two more steps
>> than needed.
>
>
>
> On Thu, Jul 19, 2012 at 1:12 PM, Peter Hofmann <[email protected]> wrote:
>> Dear all,
>>
>> Currently I use one regression for each subgroup of my control sample
>> and save the subgroup-betas.
>> Now I want to use the respective betas for a regression on the
>> treatment observations that correspond to the respective subgroup (to
>> extract the residuals from these regressions with the treatment
>> values).
>>
>> Currently I use:
>> . sum subgroupvar
>> . scalar min1=r(min)
>> . local j=min1
>> . scalar max1=r(max)
>> . local k=max1
>> . forvalues i=`j'(1)`k' {
>> . reg y x1 x2 if subgroupvar==`i'
>> . mat bhat = e(b)
>> . svmat bhat, names(bhat_`i'_)
>> . }
>>
>> But now I do not know how to proceed:
>> I want to use the respective subgroup betas in a regression on the
>> treatment observations (treatments are indicated by a dummy).
>>
>> I supposed it should look similar to:
>> . forvalues i=`j'(1)`k' {
>> . g yhat = `bhat_*_1' * var1 + `bhat_*_2' * var2    if subgroupvar==`i'
>> . }
>> But that results in:
>> . + invalid name
>> . r(198);
>>
*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/
```