tests/testthat/test-MANOVA.R

context("MANOVA")

test_that("MANOVA works correctly for default homoscedastic Gaussian models", {

  Agestrg <- substring(AbaloneIdt@ObsNames,first=3)
  AbalClass <- factor(ifelse(Agestrg=="1-3"|Agestrg=="4-6"|Agestrg=="7-9","Young",
                             ifelse(Agestrg=="10-12"|Agestrg=="13-15"|Agestrg=="16-18","Adult","Old")
                             )
                  )

  n <- nrow(AbaloneIdt)
  q <- 2*ncol(AbaloneIdt)            # Total number of MidPoints and LogRanges
  k <- length(levels(AbalClass))
    
  for (Cv in 1:4) {
    AbMANOVA <- MANOVA(AbaloneIdt,AbalClass,CovCase=Cv)
    AbMANOVAH0 <- H0res(AbMANOVA)
    AbaIdtmle <- mle(AbaloneIdt,CovCase=Cv)
    expect_equal(AbaIdtmle,AbMANOVAH0)
    AbMANOVAH1 <- H1res(AbMANOVA)
    SSCP <- matrix(0.,nrow=q,ncol=q)
    rownames(SSCP) <- colnames(SSCP) <- c(names(MidPoints(AbaloneIdt)),names(LogRanges(AbaloneIdt)))
    for (grp in levels(AbalClass)) {
      grpIdt <- AbaloneIdt[AbalClass==grp,]
      grpmle <- mle(grpIdt,CovCase=Cv)
      expect_equal(mean(grpmle),mean(AbMANOVAH1)[grp,])
      SSCP <- SSCP + nrow(grpIdt)*var(grpmle)
    }
    S <- SSCP/n
    expect_equal(S,var(AbMANOVAH1))
  }
  
} )

test_that("MANOVA  computes correct standar errors for default homoscedastic Gaussian models", {
  
  Agestrg <- substring(AbaloneIdt@ObsNames,first=3)
  AbalClass <- factor(ifelse(Agestrg=="1-3"|Agestrg=="4-6"|Agestrg=="7-9","Young",
                             ifelse(Agestrg=="10-12"|Agestrg=="13-15"|Agestrg=="16-18","Adult","Old")
  )
  )
  
  n <- nrow(AbaloneIdt)
  q <- 2*ncol(AbaloneIdt)            # Total number of MidPoints and LogRanges
  k <- length(levels(AbalClass))
  
  for (Cv in 1:4) {
    AbMANOVA <- MANOVA(AbaloneIdt,AbalClass,CovCase=Cv)
    AbMANOVAH0 <- H0res(AbMANOVA)
    
    AbmeanStder <- sd(AbMANOVAH0) / sqrt(n)
    expect_equal(stdEr(AbMANOVAH0)$mu,AbmeanStder)
    vcovb_AbmeanStder <- sqrt(diag(vcov(AbMANOVAH0)[1:q,1:q]))
    names(vcovb_AbmeanStder) <- names(AbmeanStder) <- NULL
    expect_equal(vcovb_AbmeanStder,AbmeanStder)
  
    mlecov <- var(AbMANOVAH0)
    mlecov[mlecov==0.] <- NA
    mlevar <- diag(mlecov)
    AbcovStder <- sqrt( (mlecov^2 + outer(mlevar,mlevar)) / (n-1) )   
    expect_equal(stdEr(AbMANOVAH0)$Sigma,AbcovStder)
  
    if (Cv==1) {  # Implement later vcov checks for other configurations
      vcovb_AbcovStder <- matrix(nrow=q,ncol=q)
      vcovb_AbcovStder[lower.tri(vcovb_AbcovStder,diag=TRUE)] <- sqrt(diag(vcov(AbMANOVAH0)[-(1:q),-(1:q)]))
      vcovb_AbcovStder[upper.tri(vcovb_AbcovStder)] <- t(vcovb_AbcovStder)[upper.tri(t(vcovb_AbcovStder))]
      dimnames(vcovb_AbcovStder) <- dimnames(AbcovStder)
      expect_equal(vcovb_AbcovStder,AbcovStder)
    }  
    
    AbMANOVAH1 <- H1res(AbMANOVA)
    nk <- as.numeric(table(AbalClass))

    SSCP <- matrix(0.,nrow=q,ncol=q)
    rownames(SSCP) <- colnames(SSCP) <- c(names(MidPoints(AbaloneIdt)),names(LogRanges(AbaloneIdt)))
    for (grp in levels(AbalClass)) {
      grpIdt <- AbaloneIdt[AbalClass==grp,]
      grpmle <- mle(grpIdt,CovCase=Cv)
      SSCP <- SSCP + nrow(grpIdt)*var(grpmle)
    }
    S <- SSCP/n
    AbH1meannames <- list( levels(AbalClass), c(names(MidPoints(AbaloneIdt)),names(LogRanges(AbaloneIdt))) )
    AbmeanStder <- matrix( rep(sqrt(diag(S)),each=k) / rep(sqrt(nk),q), nrow=k, ncol=q, dimnames=AbH1meannames )
    expect_equal(AbmeanStder,stdEr(AbMANOVAH1)$mu)
    vcovb_AbmeanStder <- matrix( sqrt(diag(vcov(AbMANOVAH1)[1:(k*q),1:(k*q)])), byrow=TRUE, nrow=k, ncol=q, dimnames=AbH1meannames )
    expect_equal(vcovb_AbmeanStder,AbmeanStder)
     
    mlecov <- var(AbMANOVAH1)
    mlecov[mlecov==0.] <- NA
    mlevar <- diag(mlecov)
    AbcovStder <- sqrt( (mlecov^2 + outer(mlevar,mlevar)) / (n-k) )   
    expect_equal(stdEr(AbMANOVAH1)$Sigma,AbcovStder)
     
    if (Cv==1) {  # Implement later vcov checks for other configurations
      vcovb_AbcovStder <- matrix(nrow=q,ncol=q)
      vcovb_AbcovStder[lower.tri(vcovb_AbcovStder,diag=TRUE)] <- sqrt(diag(vcov(AbMANOVAH1)[-(1:(k*q)),-(1:(k*q))]))
      vcovb_AbcovStder[upper.tri(vcovb_AbcovStder)] <- t(vcovb_AbcovStder)[upper.tri(t(vcovb_AbcovStder))]
      dimnames(vcovb_AbcovStder) <- dimnames(AbcovStder)
      expect_equal(vcovb_AbcovStder,AbcovStder)
    }  
  }
  
} )  
  
test_that("MANOVA works correctly for heteroscedastic Gaussian models", {
    
    Agestrg <- substring(AbaloneIdt@ObsNames,first=3)
    AbalClass <- factor(ifelse(Agestrg=="1-3"|Agestrg=="4-6"|Agestrg=="7-9","Young",
                               ifelse(Agestrg=="10-12"|Agestrg=="13-15"|Agestrg=="16-18","Adult","Old")
                        )
    )
    
    n <- nrow(AbaloneIdt)
    q <- 2*ncol(AbaloneIdt)            # Total number of MidPoints and LogRanges
    k <- length(levels(AbalClass))
    
    for (Cv in 1:4) {
      AbMANOVA <- MANOVA(AbaloneIdt,AbalClass,Mxt="Het",CovCase=Cv)
      AbMANOVAH0 <- H0res(AbMANOVA)
      AbaIdtmle <- mle(AbaloneIdt,CovCase=Cv)
      expect_equal(AbaIdtmle,AbMANOVAH0)
      AbMANOVAH1 <- H1res(AbMANOVA)
      for (grp in levels(AbalClass)) {
        grpIdt <- AbaloneIdt[AbalClass==grp,]
        grpmle <- mle(grpIdt,CovCase=Cv)
        expect_equal(mean(grpmle),mean(AbMANOVAH1)[grp,])
        expect_equal(var(grpmle),var(AbMANOVAH1)[,,grp])
      }
    }  
    
} )
  
test_that("MANOVA  computes correct standar errors for heteroscedastic Gaussian models", {
    
  Agestrg <- substring(AbaloneIdt@ObsNames,first=3)
  AbalClass <- factor(ifelse(Agestrg=="1-3"|Agestrg=="4-6"|Agestrg=="7-9","Young",
                              ifelse(Agestrg=="10-12"|Agestrg=="13-15"|Agestrg=="16-18","Adult","Old")
                            )
                     )
    
    n <- nrow(AbaloneIdt)
    q <- 2*ncol(AbaloneIdt)            # Total number of MidPoints and LogRanges
    k <- length(levels(AbalClass))
    
    for (Cv in 1:4) {
      AbMANOVA <- MANOVA(AbaloneIdt,AbalClass,Mxt="Het",CovCase=Cv)
      AbMANOVAH0 <- H0res(AbMANOVA)
      
      AbmeanStder <- sd(AbMANOVAH0) / sqrt(n)
      expect_equal(stdEr(AbMANOVAH0)$mu,AbmeanStder)
      vcovb_AbmeanStder <- sqrt(diag(vcov(AbMANOVAH0)[1:q,1:q]))
      names(vcovb_AbmeanStder) <- names(AbmeanStder) <- NULL
      expect_equal(vcovb_AbmeanStder,AbmeanStder)
      
      mlecov <- var(AbMANOVAH0)
      mlecov[mlecov==0.] <- NA
      mlevar <- diag(mlecov)
      AbcovStder <- sqrt( (mlecov^2 + outer(mlevar,mlevar)) / (n-1) )   
      expect_equal(stdEr(AbMANOVAH0)$Sigma,AbcovStder)
      
      if (Cv==1) {  # Implement later vcov checks for other configurations
        vcovb_AbcovStder <- matrix(nrow=q,ncol=q)
        vcovb_AbcovStder[lower.tri(vcovb_AbcovStder,diag=TRUE)] <- sqrt(diag(vcov(AbMANOVAH0)[-(1:q),-(1:q)]))
        vcovb_AbcovStder[upper.tri(vcovb_AbcovStder)] <- t(vcovb_AbcovStder)[upper.tri(t(vcovb_AbcovStder))]
        dimnames(vcovb_AbcovStder) <- dimnames(AbcovStder)
        expect_equal(vcovb_AbcovStder,AbcovStder)
      }  
      
      AbMANOVAH1 <- H1res(AbMANOVA)
      nk <- as.numeric(table(AbalClass))
      
      AbH1meannames <- list( levels(AbalClass), c(names(MidPoints(AbaloneIdt)),names(LogRanges(AbaloneIdt))) )
      AbmeanStder <- matrix( nrow=k, ncol=q, dimnames=AbH1meannames )
      for (g in 1:k) AbmeanStder[g,] <- sqrt( diag(var(AbMANOVAH1)[,,g]) / nk[g] ) 
      expect_equal(AbmeanStder,stdEr(AbMANOVAH1)$mu)
      vcovb_AbmeanStder <- matrix( nrow=k, ncol=q, dimnames=AbH1meannames )
      for (g in 1:k) vcovb_AbmeanStder[g,] <- sqrt( diag(suppressWarnings(vcov(AbMANOVAH1))[1:q,1:q,g]) ) 
      expect_equal(vcovb_AbmeanStder,AbmeanStder)
      
      mlecov <- var(AbMANOVAH1)
      mlecov[mlecov==0.] <- NA
      for (g in 1:k) {
        mlevar <- diag(mlecov[,,g])
        AbcovStder <- sqrt( (mlecov[,,g]^2 + outer(mlevar,mlevar)) / (nk[g]-1) )   
        expect_equal(stdEr(AbMANOVAH1)$Sigma[,,g],AbcovStder)
        if (Cv==1) {  # Implement later vcov checks for other configurations
          vcovb_AbcovStder <- matrix(nrow=q,ncol=q)
          vcovb_AbcovStder[lower.tri(vcovb_AbcovStder,diag=TRUE)] <- sqrt( diag(suppressWarnings(vcov(AbMANOVAH1))[-(1:q),-(1:q),g]) )
          vcovb_AbcovStder[upper.tri(vcovb_AbcovStder)] <- t(vcovb_AbcovStder)[upper.tri(t(vcovb_AbcovStder))]
          dimnames(vcovb_AbcovStder) <- dimnames(AbcovStder)
          expect_equal(vcovb_AbcovStder,AbcovStder)
        }  
      }  
      
    }  
    
} )

Try the MAINT.Data package in your browser

Any scripts or data that you put into this service are public.

MAINT.Data documentation built on April 4, 2023, 9:09 a.m.