You read my mind. I was thinking about this same problem tonight while at the 
opera, and I couldn't think of any way to only divide the diagonals by sqrt(2) 
a second time--without loops, of course. I don't quite yet understand why your 
solution works, but I'm sure with enough staring and dictionary help I'll get 
it.

Thanks,
Owen

On Aug 21, 2012, at 8:25 PM, Henry Rich wrote:

> If you have a matrix a of standard normal deviates, you can make it symmetric 
> with
> 
> asymm =: (+ |:) a
> 
> but what is the variance of the items of a?
> 
> The variance of values off the principal diagonal will be the sum of the 
> variance of two independent standard normal deviates. i.e. 2.
> 
> To return these values to variance 1 you need to divide by sqrt(2).
> 
> But the variance of values ON the principal diagonal will be the sum of two 
> perfectly correlated random variables, i. e. 4.
> 
> So you need to treat the principal diagonal differently.  You can reduce its 
> variance by scaling it differently after the conversion to symmetric, 
> dividing the diagonal by sqrt(4) and the rest by sqrt(2):
> 
> asymmgood =: asymm % %: +: >: e. i. # asymm
> 
> (The e. i. bit is a standard idiom for making an identity matrix. Another one 
> you see around is   = i.  but I avoid that because I think monad = was 
> wrongly defined and should be assigned for other purposes)
> 
> If I've made a statistical blunder I'm sure someone will tell me.
> 
> Henry Rich
> 
> On 8/21/2012 3:10 PM, Owen Marschall wrote:
>> Ah, just what I needed. Thanks!
>> 
>> On Aug 21, 2012, at 1:06 PM, Ric Sherlock wrote:
>> 
>>> The primitive ( |: ) is transpose. E.g. :
>>> 
>>>   |: i. 3 4
>>> 0 4  8
>>> 1 5  9
>>> 2 6 10
>>> 3 7 11
>>> On Aug 22, 2012 6:55 AM, "Owen Marschall" <[email protected]> wrote:
>>> 
>>>> Anyone know of an easy way to create a random symmetric matrix (more
>>>> specifically, a matrix whose entires are each picked from a standard
>>>> Gaussian distribution)? I can start by doing
>>>> 
>>>> load 'stats'
>>>> R=:normalrand N N
>>>> 
>>>> but this is not symmetric, and I don't know of any way to symmetrize it
>>>> without thinking in loops, which I'm training myself not to. If I could
>>>> somehow take a transpose, that would solve the problem, but I don't know
>>>> how to do that either.
>>>> 
>>>> Thanks,
>>>> Owen
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>> 
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>> 
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>> 
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to