Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: st: Re: Stata matrix to Mata matrix form - Turn lower diagonal matrix
From
Nick Cox <[email protected]>
To
[email protected]
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. <[email protected]> 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 <[email protected]> wrote:
>
>> From: Nick Cox <[email protected]>
>> Subject: Re: st: Re: Stata matrix to Mata matrix form - Turn lower diagonal matrix
>> To: [email protected]
>> 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. <[email protected]>
>> 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 <[email protected]>
>> wrote:
>> >
>> >> From: Nick Cox <[email protected]>
>> >> Subject: Re: st: Re: Stata matrix to Mata matrix
>> form
>> >> To: [email protected]
>> >> 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. <[email protected]>
>> >> 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 <[email protected]>
>> >> wrote:
>> >> >
>> >> >> From: Nick Cox <[email protected]>
>> >> >> Subject: Re: st: Re: Stata matrix to Mata
>> matrix
>> >> form
>> >> >> To: [email protected]
>> >> >> 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.
>> <[email protected]>
>> >> >> 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. <[email protected]>
>> >> >> wrote:
>> >> >> >
>> >> >> >> From: Bianca B. <[email protected]>
>> >> >> >> Subject: Stata matrix to Mata
>> matrix form
>> >> >> >> To: [email protected]
>> >> >> >> 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/