if you expand your matrix production, you can see that:
M[i] = A[i]*Sigma*A[i]'=(a,b\c,d), where for example,
a=(a11x1[i]+a12x2[i])x1[i]+(a12x1[i]+a22x2[i])x2[i]
so the determinant is ad-bc
so I'd do:
gen double a = (a11*x1+a12*x2)*x1+(a12*x1+a22*x2)*x2
do similar for b, c, and d
and then
gen double y = a*d-b*c
-----Original Message-----
From: Hung-Jen Wang [mailto:[email protected]]
Sent: Friday, November 22, 2002 12:49 PM
To: [email protected]
Subject: st: matrix programming problem
Hi,
Suppose I have a dataset of m observations and three
variables x1, x2, and x3. I need to create a new variable y
in such a way that, for each of the ith observation of y,
i=1,2,..m, the value of y[i] is the determinant of the
following 2x2 matrix M[i]:
M[i] = A[i]*Sigma*A[i]'
where
A[i] is a 2x2 symmetric matrix taking values from x1 to x3:
A[i]= x1[i], x2[i]
x2[i], x3[i]
and Sigma is a 2x2 symmetric matrix of constant elements:
Sigma = a11, a12
a12, a22
My question: What is the most efficient way (fast code) to
do the calculation. I looked at -mat accum-, -mat glsaccm-,
and -mat vecaccum-, but do not see how they can be applied
here.
Currently, I loop over the observations to create the matrix
and the determinant. It is, however, quit slow. Any
suggestion that help speed up the computation will be
appreciated!
HJW
ps. matsize or computer memory will not be a constraint for me.
-------------- slow code begin ------
mat Sigma = (2, 1 \ 1, 3) /* an arbitrary example */
quie gen double y = .
forvalues k = 1/n { /* n is the total number of observations */
mat Amat = (x1[`k'], x2[`k'] \ x2[`k'], x3[`k'])
mat Mmat = Amat*Sigma*Amat /* a 2x2 matrix */
quie replace y = det(Mmat) in `k'/`k'
}
-------------- slow code end -------
*
* 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/
*
* 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/