tests/testthat/test-predictFromParameters.R

context("predictFromParameters")

test_that("test_lag",{
  l1 <- LagEffect(Lag.T=3,L.Ctr.median=6.5,L.HazardRatio=0.7)
  
  expect_equal(3,l1@Lag.T)
  expect_equal(6.5,l1@ctrlSpec@median)
  expect_equal(0.7,l1@L.HazardRatio)
  
  expect_error(LagEffect(Lag.T=-5,L.Ctr.median=6.5,L.HazardRatio=0.7))
  expect_error(LagEffect(Lag.T=5,L.Ctr.median=-4,L.HazardRatio=0.7))
  expect_error(LagEffect(Lag.T=5,L.Ctr.median=4,L.HazardRatio=1.3))
  expect_error(LagEffect(Lag.T=5,L.Ctr.median=4,L.HazardRatio=-0.4))
  expect_error(LagEffect(Lag.T=5,L.Ctr.median=4,L.HazardRatio="sedf"))
  expect_warning(LagEffect(Lag.T=c(1,5),L.Ctr.median=4,L.HazardRatio=0.4))
  
  l4 <- LagEffect(Lag.T=5.2,L.Ctr.median=4)
  expect_true(is.na(l4@L.HazardRatio))
  expect_error(LagEffect(Lag.T=5,L.Ctr.median=as.numeric(NA),L.HazardRatio=as.numeric(NA)))
  
  l2 <- NullLag()
  l3 <- LagEffect(Lag.T=0)

  expect_true(isNullLag(l2))
  expect_true(isNullLag(l3))
  expect_false(isNullLag(l1))
  
  expect_output(print(l2),"No Lag")
  expect_output(print(l4),"5.2 months of lag during which\ncontrol group survival median=4 months")
  expect_output(print(l1),"3 months of lag during which\ncontrol group survival median=6.5 months\nand the hazard ratio is 0.7 ")
})



test_that("valid_single_arm_study",{
  s1 <- SingleArmStudy(N=100,study.duration=10,ctrl.median=3,k=1.5,acc.period=5,shape=2)
  
  expect_equal(NullLag(),s1@lag.settings)
  expect_equal(100,s1@N)
  expect_equal(10,s1@study.duration)
  expect_equal(3,s1@ctrlSpec@median)
  expect_equal(1.5,s1@k)
  expect_equal(5,s1@acc.period)
  expect_equal(2,s1@shape)
  
  expect_true(is.na(s1@HR))
  expect_true(is.na(s1@alpha))
  expect_true(is.na(s1@power))
    
  expect_true(isSingleArm(s1))
  
  
  l1 <- LagEffect(Lag.T=5,L.Ctr.median=3)
  s2 <- SingleArmStudy(N=100,study.duration=20,ctrl.median=10.2,k=0.5,acc.period=10.5,lag.settings=l1)
  expect_equal(1,s2@shape)
  expect_equal(5,s2@lag.settings@Lag.T)
})


test_that("invalid_single_arm_study",{
  expect_error(SingleArmStudy(N=0,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=2))
  expect_error(SingleArmStudy(N="as",study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=2))
  expect_error(SingleArmStudy(N=c(3,4),study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=2))
  expect_error(SingleArmStudy(N=100,study.duration=0,ctrl.median=3,k=1.5,acc.period=10.5,shape=2))
  expect_error(SingleArmStudy(N=100,study.duration=-1,ctrl.median=3,k=1.5,acc.period=10.5,shape=2))
  expect_error(SingleArmStudy(N=100,study.duration=100,ctrl.median=-1,k=1.5,acc.period=10.5,shape=2))
  expect_error(SingleArmStudy(N=100,study.duration=100,ctrl.median=10,k=0,acc.period=10.5,shape=2))
  expect_error(SingleArmStudy(N=100,study.duration=100,ctrl.median=10,k=-2,acc.period=10.5,shape=2))
  expect_error(SingleArmStudy(N=100,study.duration=100,ctrl.median=10,k=2,acc.period=10.5,shape=0))
  expect_error(SingleArmStudy(N=100,study.duration=100,ctrl.median=10,k=2,acc.period=-10.5,shape=2))
  expect_error(SingleArmStudy(N=100,study.duration=100,ctrl.median=10,k=2,acc.period=0,shape=2))
  expect_error(SingleArmStudy(N=100,study.duration=2.5,ctrl.median=10,k=2,acc.period=5))
  expect_error(SingleArmStudy(N=100.5,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=2))
  
  expect_error(SingleArmStudy(N=100,study.duration=20,ctrl.median=10.2,k=0.5,acc.period=10.5,lag.settings=4))
  
  l1 <- LagEffect(Lag.T=5,L.Ctr.median=3,L.HazardRatio=0.8)
  #cannot have HR in single arm study
  expect_error(SingleArmStudy(N=100,study.duration=20,ctrl.median=10.2,k=0.5,acc.period=10.5,lag.settings=l1))
  
  
})


test_that("valid_two_arm",{
  #Note only the extra arguments not used in SingleArm study are tested here 
  
  s1 <- Study(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=1.2,
              alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=1.3)
  
  expect_equal(0.05,s1@alpha)
  expect_equal(0.6,s1@power)
  expect_equal(0.75,s1@HR)
  expect_equal(1.3,s1@r)
  expect_equal(1.2,s1@shape)
  expect_true(s1@two.sided)
  
  
  s2 <- Study(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,
              alpha=0.95,power=0.1,two.sided=FALSE,HR=0.9,r=0.85)
  
  expect_false(s2@two.sided)
  expect_equal(1,s2@shape)
  
  expect_equal(s2@dropout.shape,1)
  expect_true(is.infinite(s2@dropout[[1]]@median))
  expect_true(is.infinite(s2@dropout[[2]]@median))
  
})

test_that("invalid_two_arm",{
  #Note only the extra arguments not used in SingleArm study are tested here  
  
  #cannot have lag without HR in 2 arm study
  l1 <- LagEffect(Lag.T=5,L.Ctr.median=3)
  expect_error(Study(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,
                     alpha=0.95,power=0.1,two.sided=FALSE,HR=0.9,r=0.85,lag.settings=l1))
  
  
  expect_error(Study(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=1.2,
              alpha=1.2,power=0.6,two.sided=TRUE,HR=0.75,r=1.3))
  
  expect_error(Study(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=1.2,
              alpha=0,power=0.6,two.sided=TRUE,HR=0.75,r=1.3))
  
  expect_error(Study(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=1.2,
              alpha=0.05,power=-1,two.sided=TRUE,HR=0.75,r=1.3))
  
  expect_error(Study(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=1.2,
              alpha=0.05,power=1.0,two.sided=TRUE,HR=0.75,r=1.3))
  
  expect_error(Study(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=1.2,
              alpha=0.05,power=0.6,two.sided=TRUE,HR=1,r=1.3))
  
  expect_error(Study(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=1.2,
              alpha=0.05,power=0.6,two.sided=TRUE,HR=0,r=1.3))
  
  expect_error(Study(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=1.2,
              alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=0))
  
  expect_error(Study(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=1.2,
              alpha=0.05,power=0.6,two.sided=TRUE,HR=-0.75,r=1.3))
})


test_that("invalid_arguments_to_predict",{
  
  s <- Study(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,
              alpha=0.95,power=0.1,two.sided=FALSE,HR=0.9,r=0.85)
  
  expect_error(predict(s,time.pred=NA))
  expect_error(predict(s,time.pred="awe"))
  expect_error(predict(s,time.pred=c(-3,5)))
  expect_warning(predict(s,time.pred=c(12,15))) #critical number of events too high
  expect_error(predict(s,event.pred="ef"))
  expect_error(predict(s,event.pred=-4))  
  expect_error(predict(s,event.pred=c(NA,10)))
  expect_warning(predict(s,event.pred=101)) 
  expect_error(predict(s,event.pred=12.5))
  
  expect_error(predict(s,step.size=0))
  expect_error(predict(s,step.size=-2))
  expect_warning(predict(s,step.size=11)) #critical number of events too high
  expect_error(predict(s,step.size=c(0.1,3)))
  expect_error(predict(s,step.size="gre"))
})


test_that("CRGI_study",{
  #focusing testing on arguments which differ from Study constructor
  #see tests on ctrlSpec for validity tests on  ctrl.median type arguments
  
  #give ctrl.median
  expect_error( CRGIStudy(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=1.2,
                      alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=1.3))
  #no follow up
  expect_error( CRGIStudy(N=100,study.duration=100,ctrl.time=8,ctrl.proportion=0.5,k=1.5,acc.period=10.5,shape=1.2,
                          alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=1.3))
  
  #follow up negative
  expect_error( CRGIStudy(N=100,study.duration=100,ctrl.time=8,ctrl.proportion=0.5,k=1.5,acc.period=10.5,shape=1.2,
                          alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=1.3,followup=-5))
  
  expect_error( CRGIStudy(N=100,study.duration=100,ctrl.time=8,ctrl.proportion=0.5,k=1.5,acc.period=10.5,shape=1.2,
                          alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=1.3,followup=c(4,5,6)))
  

  expect_error(SingleArmCRGIStudy(N=100,study.duration=100,ctrl.median=3,k=1.5,acc.period=10.5,shape=2)  )
  expect_error(SingleArmCRGIStudy(N=100,study.duration=100,ctrl.time=8,ctrl.proportion=0.5,k=1.5,acc.period=10.5,shape=2)  )
  
 
  
})


test_that("valid_dropout_input",{
  
  dropout=list(time=-2,proportion=c(0.05,0.05))
  expect_error(CRGIStudy(N=100,study.duration=100,ctrl.time=8,ctrl.proportion=0.5,k=1.5,acc.period=10.5,shape=1.2,
            alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=1.3,followup=10,dropout=dropout))
  
  dropout="boo"
  expect_error(CRGIStudy(N=100,study.duration=100,ctrl.time=8,ctrl.proportion=0.5,k=1.5,acc.period=10.5,shape=1.2,
                         alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=1.3,followup=10,dropout=dropout))
  
  dropout=list(atimes=2,proportion=c(0.05,0.05))
  expect_error(Study(N=100,study.duration=100,ctrl.median=4,k=1.5,acc.period=10.5,shape=1.2,
                         alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=1.3,dropout=dropout))
  
  dropout=list(times=2,proportion=c(1.0,0.5))
  expect_error(Study(N=100,study.duration=100,ctrl.median=4,k=1.5,acc.period=10.5,shape=1.2,
                     alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=1.3,dropout=dropout))
  
  
  dropout=list(times=2,proportion=c(0.8,0.8),shape=-3)
  expect_error(Study(N=100,study.duration=100,ctrl.median=4,k=1.5,acc.period=10.5,shape=1.2,
                     alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=1.3,dropout=dropout))
  
  
  dropout=list(times=2,proportion=c(0.5,0.5),shape=3)
  s <- Study(N=100,study.duration=100,ctrl.median=4,k=1.5,acc.period=10.5,shape=1.2,
             alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=1.3,dropout=dropout)
  
  expect_equal(3,s@dropout.shape)
  expect_equal(2,s@dropout[[1]]@median)
  
  
  dropout=list(times=2,proportion=c(0.75,0.75))
  s <- Study(N=100,study.duration=100,ctrl.median=4,k=1.5,acc.period=10.5,shape=1.2,
             alpha=0.05,power=0.6,two.sided=TRUE,HR=0.75,r=1.3,dropout=dropout)
  
  expect_equal(1,s@dropout.shape)
  expect_equal(1,s@dropout[[1]]@median)
  
  
  
})
scientific-computing-solutions/eventPrediction documentation built on May 29, 2019, 3:44 p.m.