[R] Help : generating correlation matrix with a particular structure
Peter Dalgaard
p.dalgaard at biostat.ku.dk
Sun Dec 12 14:58:38 CET 2004
Siew Leng TENG <siewlengteng at yahoo.com> writes:
> Hi,
>
> I would like to generate a correlation matrix with a
> particular structure. For example, a 3n x 3n matrix :
> A_(nxn) aI_(nxn) bI_(nxn)
> aI_(nxn) A_(nxn) cI_(nxn)
> aI_(nxn) cI_(nxn) A_(nxn)
>
> where
> - A_(nxn) is a *specified* symmetric, positive
> definite nxn matrix.
> - I_(nxn) is an identity matrix of order n
> - a, b, c are (any) real numbers
>
> Many attempts have been unsuccessful because a
> resulting matrix with any a, b, c may not be a
> positive definite one, and hence cannot qualify as a
> correlation matrix. Trying to first generate a
> covariance matrix however, does not guarantee a
> corresponding correlation matrix with the above
> structure.
Er, a correlation matrix *is* a covariance matrix with 1 down the
diagonal...
You need to sort out the parametrization issues. What you're trying to
achieve is quite hard. Consider the simpler case of two blocks and
n=2; what you're asking for is a covariance matrix of the form
1 r a 0
r 1 0 a
a 0 1 r
0 a r 1
so if this is the correlation matrix of (X1,Y1,X2,Y2) you want
X1 and Y1 correlated
X2 and Y2 correlated
X1 and X2 correlated
Y1 and Y2 correlated
but
X1 and Y2 uncorrelated
Y1 and X2 uncorrelated
One approach is to work out the conditional variance of (X2,Y2) given
(X1,Y1) and check for positive semidefiniteness. You do the math...
(Some preliminary experiments suggest that the criterion could be
abs(a)+abs(r) <= 1, but don't take my word for it)
> R-version used :
> ---------------
> Windows version
> R-1.8.1
> Running on Windows XP
You might want to upgrade, but it might not do anything for you in
this respect.
--
O__ ---- Peter Dalgaard Blegdamsvej 3
c/ /'_ --- Dept. of Biostatistics 2200 Cph. N
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
More information about the R-help
mailing list