rmatrixmanova

Extract error matrix from manova analysis in r


I used car package to perform anova analysis. Here I got sum of squares for error and factor (=Site) in the form of matrix. Code is here

library(car)
## One-Way MANOVA
anv<-summary(Anova(lm(cbind(Al, Fe, Mg, Ca, Na) ~ Site, data=Pottery)))
anv

Now I want to extract these two matrices from this result for next analysis. My desired output is like this-

 >err_ss

       Al          Fe          Mg          Ca         Na
Al 48.2881429  7.08007143  0.60801429  0.10647143 0.58895714
Fe  7.0800714 10.95084571  0.52705714 -0.15519429 0.06675857
Mg  0.6080143  0.52705714 15.42961143  0.43537714 0.02761571
Ca  0.1064714 -0.15519429  0.43537714  0.05148571 0.01007857
Na  0.5889571  0.06675857  0.02761571  0.01007857 0.19929286



>Site_ss 

        Al          Fe          Mg         Ca         Na
Al  175.610319 -149.295533 -130.809707 -5.8891637 -5.3722648
Fe -149.295533  134.221616  117.745035  4.8217866  5.3259491
Mg -130.809707  117.745035  103.350527  4.2091613  4.7105458
Ca   -5.889164    4.821787    4.209161  0.2047027  0.1547830
Na   -5.372265    5.325949    4.710546  0.1547830  0.2582456

After using the following code I got the result of error matrix but I failed to extract the last one.

str(anv)
err_ss<-anv$"SSPE"
> err_ss
       Al          Fe          Mg          Ca         Na
Al 48.2881429  7.08007143  0.60801429  0.10647143 0.58895714
Fe  7.0800714 10.95084571  0.52705714 -0.15519429 0.06675857
Mg  0.6080143  0.52705714 15.42961143  0.43537714 0.02761571
Ca  0.1064714 -0.15519429  0.43537714  0.05148571 0.01007857
Na  0.5889571  0.06675857  0.02761571  0.01007857 0.19929286

Could anyone please help me to do it? Thanks in advance.


Solution

  • We need to extract based on the structure. If we look at the str(anv), it is a list of 7 elements. The "SSPE", "SSPH" elements come under the "Site" element of "multivariate.tests". So extract both of them with either $ of [[ and then get both the matrices

    out <- anv$multivariate.tests$Site[c("SSPE", "SSPH")]
    out
    #$SSPE
    #           Al          Fe          Mg          Ca         Na
    #Al 48.2881429  7.08007143  0.60801429  0.10647143 0.58895714
    #Fe  7.0800714 10.95084571  0.52705714 -0.15519429 0.06675857
    #Mg  0.6080143  0.52705714 15.42961143  0.43537714 0.02761571
    #Ca  0.1064714 -0.15519429  0.43537714  0.05148571 0.01007857
    #Na  0.5889571  0.06675857  0.02761571  0.01007857 0.19929286
    
    #$SSPH
    #            Al          Fe          Mg         Ca         Na
    #Al  175.610319 -149.295533 -130.809707 -5.8891637 -5.3722648
    #Fe -149.295533  134.221616  117.745035  4.8217866  5.3259491
    #Mg -130.809707  117.745035  103.350527  4.2091613  4.7105458
    #Ca   -5.889164    4.821787    4.209161  0.2047027  0.1547830
    #Na   -5.372265    5.325949    4.710546  0.1547830  0.2582456
    

    It is better to keep it in a list instead of having multiple objects.