Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Nick Cox <njcoxstata@gmail.com> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: Re: Stata matrix to Mata matrix form - Turn lower diagonal matrix |
Date | Thu, 1 Nov 2012 18:05:49 +0000 |
Then the missing . should have carried over to Mata and should have been displayed, which is not visible in your previous report. More importantly, -makesymmetric()- works: . mat li S2 S2[2,2] c1 c2 r1 0 . r2 1 0 . mata ------------------------------------------------- mata (type end to exit) -------------------------------------------- : S2 = st_matrix("S2") : S2 1 2 +---------+ 1 | 0 . | 2 | 1 0 | +---------+ : makesymmetric(S2) [symmetric] 1 2 +---------+ 1 | 0 | 2 | 1 0 | +---------+ : What you may be missing is that -makesymmetric()- shows the result of making a matrix symmetric; it does not itself change the argument. That can be done by assignment or by using -_makesymmetric()- : _makesymmetric(S2) : S2 [symmetric] 1 2 +---------+ 1 | 0 | 2 | 1 0 | +---------+ On Thu, Nov 1, 2012 at 5:57 PM, Bianca B. <bianca268@yahoo.com> wrote: > The elements in row 1 are 0 and . (i.e. missing value), in row 2 1 and 0. > Then I converted my original stata matrix into mata. > > > > --- On Thu, 11/1/12, Nick Cox <njcoxstata@gmail.com> wrote: > >> From: Nick Cox <njcoxstata@gmail.com> >> Subject: Re: st: Re: Stata matrix to Mata matrix form - Turn lower diagonal matrix >> To: statalist@hsphsun2.harvard.edu >> Date: Thursday, November 1, 2012, 10:11 AM >> I mean what is the element in row 1 >> and column 2 of your matrix? >> >> mat_s2[1,2] >> >> will display it in Mata. >> >> I may be missing something important, but I don't understand >> how your >> matrix can display like that unless it is symmetric. >> >> Nick >> >> On Thu, Nov 1, 2012 at 4:46 PM, Bianca B. <bianca268@yahoo.com> >> wrote: >> >> > mat_S2[1,2] is the name of the matrix. >> > >> > mat_S2 >> > >> > 1 2 >> > +---------+ >> > 1 | 0 | >> > | 1 0 >> > | >> >> >+---------+ >> > I found this old post >> > http://www.stata.com/statalist/archive/2007-02/msg00156.html >> > >> > where there is exactly my same question that is to turn >> my lower-triangular matrix, named mat_S2, into a symmetrical >> matrix by reflecting the lower triangular elements across >> the diagonal. >> > >> > I tried to use mata makesymmetric function but I do not >> obtain the matrix I wish and that I report below >> > >> > 1 2 >> > +---------+ >> > 1 | >> 0 1 | >> > 2 | >> 1 0 | >> > +---------+ >> > >> > >> > >> > --- On Thu, 11/1/12, Nick Cox <njcoxstata@gmail.com> >> wrote: >> > >> >> From: Nick Cox <njcoxstata@gmail.com> >> >> Subject: Re: st: Re: Stata matrix to Mata matrix >> form >> >> To: statalist@hsphsun2.harvard.edu >> >> Date: Thursday, November 1, 2012, 9:34 AM >> >> You've lost me. What is mat_S2[1,2]? >> >> >> >> Nick >> >> >> >> On Thu, Nov 1, 2012 at 3:39 PM, Bianca B. <bianca268@yahoo.com> >> >> wrote: >> >> > Nick, you're right, I'm sorry. I didn't >> specify that I >> >> need to turn my lower-triangular matrix into a >> symmetrical >> >> matrix by reflecting the lower triangular elements >> across >> >> the diagonal. So starting from this matrix >> >> > >> >> > mat_S2 >> >> > >> >> > >> >> 1 2 >> >> > +---------+ >> >> > 1 | 0 >> | >> >> > 2 | 1 0 >> >> > | >> >> > +---------+ >> >> > I'd like to obtain a matrix like that >> >> > >> >> > >> >> 1 2 >> >> > +---------+ >> >> > 1 | >> 0 1 | >> >> > 2 | >> 1 0 | >> >> > +---------+ >> >> > >> >> > >> >> > >> >> > >> >> > --- On Thu, 11/1/12, Nick Cox <njcoxstata@gmail.com> >> >> wrote: >> >> > >> >> >> From: Nick Cox <njcoxstata@gmail.com> >> >> >> Subject: Re: st: Re: Stata matrix to Mata >> matrix >> >> form >> >> >> To: statalist@hsphsun2.harvard.edu >> >> >> Date: Thursday, November 1, 2012, 8:29 AM >> >> >> Looks symmetric to me. >> >> >> >> >> >> If a matrix is symmetric, Stata says so, >> and only >> >> displays >> >> >> the lower >> >> >> half (including the principal diagonal). >> >> >> >> >> >> In your case, Stata is doing exactly >> that. >> >> >> >> >> >> Here is another example: >> >> >> >> >> >> . mata : I(3) >> >> >> [symmetric] >> >> >> >> >> >> >> >> 1 2 3 >> >> >> +-------------+ >> >> >> 1 | 1 >> >> | >> >> >> 2 | >> >> 0 1 | >> >> >> 3 | >> >> >> >> 0 0 1 | >> >> >> +-------------+ >> >> >> >> >> >> If this is not what you mean, you'll have >> to >> >> explain what >> >> >> "doesn't >> >> >> work" means exactly. >> >> >> >> >> >> Nick >> >> >> >> >> >> On Thu, Nov 1, 2012 at 3:16 PM, Bianca B. >> <bianca268@yahoo.com> >> >> >> wrote: >> >> >> > Dear Nick, >> >> >> > >> >> >> > Thanks a lot. I converted a >> lower-triangular >> >> matrix >> >> >> from stata to mata form to apply the mata >> >> makesymmetric >> >> >> command but it doesn't work. >> >> >> > The command is >> >> >> > >> >> >> > : makesymmetric(mat_S2) >> >> >> > [symmetric] >> >> >> > >> >> 1 2 >> >> >> > +---------+ >> >> >> > 1 | 0 >> >> | >> >> >> > 2 | >> >> 1 0 >> >> >> | >> >> >> > +---------+ >> >> >> > >> >> >> > Would you have any suggestion? >> >> >> > Best, >> >> >> > Bianca >> >> >> > >> >> >> > >> >> >> > >> >> >> > . mat foo = J(6,7,42) >> >> >> > >> >> >> > . mat li foo >> >> >> > >> >> >> > foo[6,7] >> >> >> > c1 >> c2 c3 >> >> >> c4 c5 c6 c7 >> >> >> > r1 42 42 42 >> 42 >> >> 42 >> >> >> 42 42 >> >> >> > r2 42 42 42 >> 42 >> >> 42 >> >> >> 42 42 >> >> >> > r3 42 42 42 >> 42 >> >> 42 >> >> >> 42 42 >> >> >> > r4 42 42 42 >> 42 >> >> 42 >> >> >> 42 42 >> >> >> > r5 42 42 42 >> 42 >> >> 42 >> >> >> 42 42 >> >> >> > r6 42 42 42 >> 42 >> >> 42 >> >> >> 42 42 >> >> >> > >> >> >> > . mata : mat_foo = st_matrix("foo") >> >> >> > >> >> >> > . mata : mat_foo >> >> >> > >> 1 >> >> >> 2 3 4 >> 5 >> >> >> 6 7 >> >> >> > >> >> >> >> >> +------------------------------------+ >> >> >> > 1 | >> >> >> >> >> >> 42 42 42 42 42 42 42 >> >> >> | >> >> >> > 2 | >> >> >> >> >> >> 42 42 42 42 42 42 42 >> >> >> | >> >> >> > 3 | >> >> >> >> >> >> 42 42 42 42 42 42 42 >> >> >> | >> >> >> > 4 | >> >> >> >> >> >> 42 42 42 42 42 42 42 >> >> >> | >> >> >> > 5 | >> >> >> >> >> >> 42 42 42 42 42 42 42 >> >> >> | >> >> >> > 6 | >> >> >> >> >> >> 42 42 42 42 42 42 42 >> >> >> | >> >> >> > >> >> >> >> >> +------------------------------------+ >> >> >> > >> >> >> > . mata : st_matrix("foo", mat_foo :/ >> 7) >> >> >> > >> >> >> > . mat li foo >> >> >> > >> >> >> > foo[6,7] >> >> >> > c1 >> c2 c3 >> >> >> c4 c5 c6 c7 >> >> >> > >> >> >> >> >> >> r1 6 6 6 6 6 6 6 >> >> >> > >> >> >> >> >> >> r2 6 6 6 6 6 6 6 >> >> >> > >> >> >> >> >> >> r3 6 6 6 6 6 6 6 >> >> >> > >> >> >> >> >> >> r4 6 6 6 6 6 6 6 >> >> >> > >> >> >> >> >> >> r5 6 6 6 6 6 6 6 >> >> >> > >> >> >> >> >> >> r6 6 6 6 6 6 6 6 >> >> >> > >> >> >> > --- On Thu, 11/1/12, Bianca B. <bianca268@yahoo.com> >> >> >> wrote: >> >> >> > >> >> >> >> From: Bianca B. <bianca268@yahoo.com> >> >> >> >> Subject: Stata matrix to Mata >> matrix form >> >> >> >> To: statalist@hsphsun2.harvard.edu >> >> >> >> Date: Thursday, November 1, 2012, >> 7:25 AM >> >> >> >> Hi Stata users, >> >> >> >> >> >> >> >> Does anyone know how can I get >> stata >> >> matrix in mata >> >> >> matrix? * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/faqs/resources/statalist-faq/ * http://www.ats.ucla.edu/stat/stata/