Update to *C+=C$g* *# this is not working*
It was not working since '+=' needs the right matrix structure in before.
Now I have the code to get the 'variance' within the the groups:
<hansl>
loop for i=2..rows(G) -q
     if G[i]<>G[i-1]
         Ns[i]=i
     endif
endloop
eval Ns
matrix Ns =uniq(Ns)
matrix C=zeros(cols(Y),cols(Y))
loop for g=1..rows(Ns)
     if g<rows(Ns)
C$g=mcov(Y[Ns[g]:Ns[g+1]-1,])*(rows(Y[Ns[g]:Ns[g+1]-1,])-1)
     else
         C$g=mcov(Y[Ns[g]:rows(G),])*(rows(Y[Ns[g]:rows(G),])-1)
     endif
     C+=C$g
endloop
eval C
<hansl>
Am 25.10.2012 12:50, schrieb Pindar:
 Hi there,
 I'm trying to do multivariate ANOVA and have a bit trouble with the 
 following code:
 <hansl>
 nulldata 8
 matrix Y={9,4;10,2;11,0;2,3;4,4;6,5;1,5;5,9}
 matrix G={1;1;1;2;2;2;3;3}
 matrix T=mcov(Y)*(rows(Y)-1)
 eval T
 matrix Ns =zeros(rows(uniq(G)),1)
 #*How to get to the Sum of squared residuals?*
 matrix Y_g1=Y[1:3,]
 matrix Y_g2=Y[4:6,]
 matrix Y_g3=Y[7:8,]
 matrix C={}
 matrix C1=mcov(Y_g1)*(rows(Y_g1)-1)
 matrix C2=mcov(Y_g2)*(rows(Y_g2)-1)
 matrix C3=mcov(Y_g3)*(rows(Y_g3)-1)
 matrix C=C1+C2+C3
 eval C
 matrix C={}
 loop for g=1..rows(Ns)
     #C+=mcov(Y_g$g)*(rows(Y_g$g)-1)
 *    C+=C$g* *# this is not working*
 endloop
 eval C
 <hansl>
 Up until now I did not find a way to get to know the number of obs per 
 group or the indices for the the matrices matrix Y_g*.
 Should work with some loop construction. However, what do you thing of 
 giving the function cdemean a second argument that demeans the columns
 according to the structure of the groups as in G: 
 *C=cdemean(Y,G)'cdemean(Y,G)'
 *
 Cheers
 Leon Unger*
 *