Thank you Nick!
Nick Cox wrote:
I want to comment on the code just posted.
local cons "_cons"
matrix define B = get(_b)
local p : colfullnames e(b)
local n = "`s(after)'"
local r : list sizeof n
local clist = " "
forvalues j = 1/`r' {
scalar define c`j' = B[1,`j']
if (c`j'~=0) {
local newpred : word `j' of `p'
local clist : list clist | newpred
}
}
local p_list : list clist - cons
Note that evaluating when you only need to copy is a source of
bugs. (This is one of the outputs of -njc-.) The result of
local n = "`s(after)'"
will be truncated to at most 80 characters
as a side-effect of the evaluation.
Also, "`s(after)'" may include options, -if-
and -in- stuff, and indeed much else, so the number of words in
it may easily differ from the number of columns in e(b). Leave it
well alone for this problem.
More a matter of style: there is some unnecessary copying and
setting up here. The code may be an extract from a longer code
chunk in which things are defined for
later use, but as far as what is visible
is concerned it can be slimmed down to
mat B = e(b) tokenize "`: colnames e(b)'" local clist forval j =
1/`= colsof(B)' { if B[1, `j'] != 0 & "``j''" != "_cons" {
local clist `clist' ``j''
}
}
I wouldn't be surprised at a shorter way of doing it.
Nick n.j.cox@durham.ac.uk
Rose Medeiros
My answer to your first question will depend on the regression
command used. (I say my answer, since someone else may have a
better way of doing this.) After you run regress, if covariates
are dropped for collinearity, they will appear in the
coefficient vector (e(b)), but the coefficient value in the
vector e(b) will be zero. For commands like logit, ologit, and
mlogit, independent variables dropped for collinearity will not
appear in the coefficient vector. So you have to accommodate the
particular regression command used. Also note that the constant
(_cons) will be in the coefficient vector, so you'll have to
remove that as well. Below is some syntax that I've been using
to do what you describe (the list of variables is returned as
the local macro p_list), it appears to work, but I make no
guarantees.
* -------- begin example when command is regress -----------
* run regress
local cons "_cons"
matrix define B = get(_b)
local p : colfullnames e(b)
local n = "`s(after)'"
local r : list sizeof n
local clist = " "
forvalues j = 1/`r' {
scalar define c`j' = B[1,`j']
if (c`j'~=0) {
local newpred : word `j' of `p'
local clist : list clist | newpred
}
}
local p_list : list clist - cons
*-------- end example when command is regress -----------
*-------- begin example when command is logit, ologit, or mlogit
-----------
* run logit or mlogit
local p : colnames e(b)
local p_list : list p - cons
*-------- end example when command is logit, ologit, or mlogit
-----------
Toby Andrew
1) Is there a generic way to access the list of variable
names used
in a regression such as regress, mlogit & ologit?
The reason i ask is because i am performing many regressions
by looping over variables & the list of recorded variables i save
will differ from the *actual* list retained in the analysis
if there
is collinearity (or i wish to use stepwise sw).
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/
--
Rose Anne Medeiros
Department of Sociology / Family Research Laboratory
University of New Hampshire
126 Horton Social Science Center
20 College Road
Durham, NH 03824
U.S.A.
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/