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/