Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: Foreach loop, panel data, and residuals
From
Ulrich Kohler <[email protected]>
To
[email protected]
Subject
Re: st: Foreach loop, panel data, and residuals
Date
Thu, 19 Dec 2013 12:57:45 +0100
Use -forvalues- instead of -foreach-, i.e.
. forv i=1/`=r(max)' {
...
}
Am 19.12.2013 12:54, schrieb Adrian Stork:
Dear Nick
deal all
So, as Nick suggested I tried to implement the loop using method one
from the link above. So the code I ended up with looks like this:
*******************************************
egen group = group(cusip date2)
gen residual = .
su group, meanonly
foreach i of numlist 1/`r(max)' {
regress ex_ret_daily mktrf smb hml if group == `i'
predict temp, residuals
replace residual=temp if group == `i'
drop temp
}
*******************************************
Although, this code makes sense at least to me, it does not work and I
get the error message:
invalid numlist has too many elements
r(123);
In total I have 758,510 obs and r(max) is 36,221.
I also used r(N) instead of r(max) and still the same error message.
I also extracted a subsample with merely 3677 obs and 2 cusips (i.e.
two groups, i.e. r(max)=2)
Does anyone have an idea how I can make this loop work based on the
description I previously gave or where my mistake is?
Would very much appreciate it.
Best,
A
2013/12/17 Nick Cox <[email protected]>:
Your -foreach- command cycles over a list containing precisely one
element, the variable -group-.
foreach i of var group {
regress ex_ret_daily mktrf smb hml if group == `i'
predict temp, residuals
replace residual=temp if group == `i'
drop temp
}
It is thus on all fours with
regress ex_ret_daily mktrf smb hml if group == group
predict temp, residuals
replace residual=temp if group == group
drop temp
which carries out the regression for every observation as -if group ==
group- selects all the data,
Your intent is to cycle over the distinct values of -group-, which is
quite a different matter. See Method 1 in
http://www.stata.com/support/faqs/data-management/try-all-values-with-foreach/index.html
Nick
[email protected]
On 17 December 2013 16:36, Adrian Stork <[email protected]> wrote:
I'm close to the solution I'm looking for but double-checking shows
some deviations that I can't figure out.
So I got a panel dataset defined by cusip and date which looks like this:
cusip date2 date
ex_ret_daily mktrf smb hml
90000000 1990m1 01Jan1990 0.10
1.5 0.3 0.2
90000000 1990m1 02Jan1990 0.40
0.7 0.6 0.7
.... .... ....
... ... ....
....
90000004 1983m1 01Jan1983 0.14
1.5 0.3 0.9
90000007 1983m1 02Jan1983 0.45
1.7 0.6 0.3
etc.
Now I want to retrieve the residuals from the regression:
ex_ret_daily= beta*mktrf + smb + hml
but for each cusip and month, that is, using the approx 25 daily
returns from a month of a cusip as the subsample each regression
should run on.
I wrote a code that works and the results even look reasonable, which
looks as follows:
***
egen group = group(cusip date2)
gen residual = .
foreach i of var group {
regress ex_ret_daily mktrf smb hml if group == `i'
predict temp, residuals
replace residual=temp if group == `i'
drop temp
}
***
However, when I compare the residuals from my code and the residuals
from a subsample of one cusip of one specific month, they are not
identical, and I don't know where I could've made a mistake?
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/faqs/resources/statalist-faq/
* http://www.ats.ucla.edu/stat/stata/
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/faqs/resources/statalist-faq/
* http://www.ats.ucla.edu/stat/stata/
*
* For searches and help try:
* http://www.stata.com/help.cgi?search
* http://www.stata.com/support/faqs/resources/statalist-faq/
* http://www.ats.ucla.edu/stat/stata/