tests/testthat/test-da.R

context("discriminant analysis methods")

test_that("lda works correctly", {

  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")
                             )
                  )

  ldares <- lda(AbaloneIdt,AbalClass)
  ldapred <- predict(ldares,AbaloneIdt)
  PPsums <- rowSums(ldapred$posterior)
  names(PPsums) <- NULL
  expect_equal( PPsums, rep(1.,nrow(AbaloneIdt)) )
  
  PPpred <- as.factor(levels(AbalClass)[apply(ldapred$posterior,1,which.max)])
  names(PPpred) <- rownames(AbaloneIdt)
  expect_equal(PPpred,ldapred$class)
  
  Trueldapred <- factor(c("Adult","Adult","Adult","Old","Old","Old","Young","Young","Young","Adult","Adult","Adult",
                          "Old","Young","Young","Young","Adult","Adult","Adult","Old","Old","Old","Young","Young"))
  names(Trueldapred) <- rownames(AbaloneIdt)
  expect_equal(Trueldapred,ldapred$class)
  
} )

test_that("qda works correctly", {
  
  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")
  )
  )
  
  qdares <- qda(AbaloneIdt[,2],AbalClass)        # Note: using lower-dimensionality data set in order to avoid singular covariance matrices
  qdapred <- predict(qdares,AbaloneIdt[,2])
  PPsums <- rowSums(qdapred$posterior)
  names(PPsums) <- NULL
  expect_equal( PPsums, rep(1.,nrow(AbaloneIdt)) )
  
  PPpred <- as.factor(levels(AbalClass)[apply(qdapred$posterior,1,which.max)])
  names(PPpred) <- rownames(AbaloneIdt[,2])
  expect_equal(PPpred,qdapred$class)
  
  Trueqdapred <- factor(c("Adult","Old","Old","Old","Old","Old","Young","Young","Young","Young","Young","Adult",
                          "Adult","Young","Young","Young","Adult","Adult","Old","Old","Old","Old","Young","Young"))
  names(Trueqdapred) <- rownames(AbaloneIdt)
  expect_equal(Trueqdapred,qdapred$class)
  
} )

test_that("leave-one-out cross-validation works correctly", {
   
   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")
                             )
                      )
   
   looldares <- DACrossVal(AbaloneIdt,AbalClass,lda,loo=TRUE)
   Nk <- colSums(looldares[,,"Nk"])  
   TrueNk <- as.numeric(table(AbalClass))
   names(TrueNk) <- levels(AbalClass)
   expect_equal(Nk,TrueNk)

   looerrors <- colSums(looldares[,,"Nk"] * looldares[,,"Clerr"], na.rm=TRUE)  
   Turelooerrors <- c(2,3,4)
   names(Turelooerrors) <- levels(AbalClass)
   expect_equal(Turelooerrors,looerrors)
   
   looerrest <- looerrors /Nk
   Glooerrest <- sum(looerrors)/sum(Nk)
   names(Glooerrest) <- "Global"
   expect_equal(c(looerrest,Glooerrest),attr(looldares,"errestimates"))
   
} )

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.