# st: RE: Matrix manipulation of regression results

 From "Nick Cox" <[email protected]> To <[email protected]> Subject st: RE: Matrix manipulation of regression results Date Fri, 5 Jan 2007 22:04:53 -0000

```-matmap- from SSC offers users of Stata 6 .. 8
a way to get element-wise square roots (and more
besides).

Here is the program, and pretty horrible it is
too. I didn't do anything further with it because
I became aware that Bill Gould had a much better program
for elementwise stuff, but he never got round to
releasing it, given the alternative he was developing
called Mata.

For Stata 8, -matmap- can be rewritten, as below.

-------------------------- matmap from SSC
*! 1.0.0  NJC 23 August 2000
program define matmap
version 6.0
gettoken A 0 : 0
gettoken B 0 : 0, parse(" ,")
syntax , Map(str) [ Symbol(str) ]

if "`symbol'" == "" { local symbol "@" }

if !index("`map'","`symbol'") {
di in r "map( ) does not contain `symbol'"
exit 198
}

local nr = rowsof(matrix(`A'))
local nc = colsof(matrix(`A'))

tempname C val
mat `C' = `A'

local i 1
while `i' <= `nr' {
local j 1
while `j' <= `nc' {
local exp : /*
*/ subinstr local map "`symbol'" "`A'[`i',`j']", all
scalar `val' = `exp'
if `val' == . {
di in r "matrix would have missing values"
exit 504
}
mat `C'[`i',`j'] = `val'
local j = `j' + 1
}
local i = `i' + 1
}

mat `B' = `C' /* allows overwriting of either `A' or `B' */
end
----------------------------------------

--------------------------- matmap8
*! 1.1.0  NJC 5 January 2007
program matmap8
version 8
gettoken A 0 : 0
gettoken B 0 : 0, parse(" ,")
syntax , Map(str) [ Symbol(str) ]

if "`symbol'" == "" local symbol "@"

if !index("`map'","`symbol'") {
di as err "map() does not contain `symbol'"
exit 198
}

tempname C val
mat `C' = `A'

forval i = 1/`= rowsof(matrix(`A'))' {
forval j = 1/`= colsof(matrix(`A'))' {
local exp : ///
subinstr local map "`symbol'" "`A'[`i',`j']", all
mat `C'[`i',`j'] = `exp'
}
}

mat `B' = `C' /* allows overwriting of either `A' or `B' */
end
---------------------------------

But the best way to do e.w. square roots is like this:

mat A = J(5,5,3)
forval i = 1/5 {
forval j = 1/5 {
mat A[`i',`j'] = sqrt(A[`i',`j'])
}
}

Nick
[email protected]

Herb Smith
>
> Mis-step 2:  Okay, what about using the old -matrix-
> a vector of coefficient variances, I could locate within
> -mata- a simple
> command for taking element-by-element square roots, but not
> under the old
> -matrix- commands.  I ended up turning this vector into a
> diagonal matrix
> and getting square roots via Cholesky; but this is inelegant
> and hardly
> the sort of thing that gets social science graduate students
> into using a
> set of commands to do things....

*
*   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/
```