[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: covariance matrix
Re: covariance matrix
Tue, 20 Feb 2007 09:54:57 +0100
Thunderbird 22.214.171.124 (X11/20070103)
John W. Eaton wrote:
On 19-Feb-2007, baptiste Auguié wrote:
| I was trying to use a Matlab code (SCEM-UA, Monte Carlo
| optimization), and I ended up correcting for all the
| incompatibilities I could understand:
| - filenames and function names do not seem to be case sensitive in
| Matlab, whereas Octave would not find a filename with random Upper/
| lower case
| - more concerning is this one: I have two vectors X and Y of same
| length, and using cov(X,Y) returns a scalar (same thing with cov
| (X',Y'))! The program - and myself after reading the documentation,
| expects a covariance matrix. Is that a bug?
| I changed this line to cov(X(:),Y(:)), which seems to work, but I
| would like to know whether this is normal?
The Matlab documentation says that if cov is given two matrix
arguments with the same number of elements, it computes
cov ([X(:), Y(:)])
(not quite what you have above). This expression will always compute
a 2x2 matrix. Octave's cov function does this if X and Y are
If each row of X and Y is an observation and each column is a
variable, the (I, J)-th entry of `cov (X, Y)' is the covariance
between the I-th variable in X and the J-th variable in Y.
and this will compute an NxN matrix with N == columns(X) == columns(Y).
I don't know why we have the difference. Has Matlab always behaved
this way? If so, then I'm surprised that you are the first to
notice. Hmm. Should we change Octave to be compatible? What will
this break? Should we try to preserve the old behavior? If so, how?
Hmm. It seems corrcoeff also has similar problems.
Will someone who understands what should be happening here please fix
cov and corrcoef and submit a patch?
Help-octave mailing list
Octave is doing the most sensible thing. Matlab's behavior is less intuitive and
less useful. I like Octave's method better since it preserves the information
that is implied by the fact that the data are organized as two matrices. Matlab
throws this information away. Most programmers who are not previously
brainwashed will probably think that the shape the data is put into implies
something that should not be thrown away when calculating a covariance, and they
will be surprised to discover this "feature". This is one of those "bug
compatibility" decisions, in my opinion.