### Saturday, March 11, 2006

## RE: st: easy way to save regressor variable names?

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/

Tag: statalist