tests/testthat/test-fromDataInput.R

context("dataInput")

data(event.data)

test_that("remove.0.time",{
  expect_error(EventData(data=event.data,
                         subject="subject",
                         site="site",
                         rand.date="randDate",
                         has.event="hasEvent",
                         withdrawn="withdrawn",
                         time="time",
                         remove.0.time=c(TRUE,5)
  ))
  
  expect_error(EventData(data=event.data,
                         subject="subject",
                         site="site",
                         rand.date="randDate",
                         has.event="hasEvent",
                         withdrawn="withdrawn",
                         time="time",
                         remove.0.time="TRUE"
  ))
  
  expect_error(EventData(data=event.data,
                         subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",
                         time="time", site="site",followup=-50)
  )
  
  expect_error(EventData(data=event.data,
                         subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",
                         time="time", site="site",followup=c(1,2,3))
  )
  
  e <- event.data
  e$time[1:25] <- NA
  e$time[26:50] <- 0
  
  expect_warning(r.false <- EventData(data=e,
                           subject="subject",
                           site="site",
                           rand.date="randDate",
                           has.event="hasEvent",
                           withdrawn="withdrawn",
                           time="time",
                           remove.0.time=FALSE
  ))

  expect_warning(r.true <- EventData(data=e,
                                    subject="subject",
                                    site="site",
                                    rand.date="randDate",
                                    has.event="hasEvent",
                                    withdrawn="withdrawn",
                                    time="time",
                                    remove.0.time=TRUE
  ))

  
  expect_warning(r.default <- EventData(data=e,
                                     subject="subject",
                                     site="site",
                                     rand.date="randDate",
                                     has.event="hasEvent",
                                     withdrawn="withdrawn",
                                     time="time"                                     
  ))
  
  expect_equal(r.false,r.default)
  expect_equal(nrow(r.false@subject.data),nrow(e))
  expect_equal(e[51:nrow(e),]$subject,r.true@subject.data$subject)
  
})


test_that("Column_names",{
  
  expect_error(EventData(data=event.data,
                         subject="subject",
                         site="site",
                         rand.date="randDate",
                         has.event="hasevent",
                         withdrawn="withdrawn",
                         time="time"))
  
  expect_error(EventData(data=event.data,
                         subject="subject",
                         site="site",
                         rand.date="randdate",
                         has.event="hasEvent",
                         withdrawn="withdrawn",
                         time=time))
  
  expect_error(EventData(data=event.data,
                         subject="sudbject",
                         site="site",
                         rand.date="randDate",
                         has.event="hasEvent",
                         withdrawn="withdrawn",
                         time="time"))
  
  expect_error(EventData(data=event.data,
                         subject="subject",
                         site="sited",
                         rand.date="randDate",
                         has.event="hasEvent",
                         withdrawn="withdrawn",
                         time="time"))
  
  expect_error(EventData(data=event.data,
                         subject="subject",
                         site="sited",
                         rand.date="randDate",
                         has.event="hasEvent",
                         withdrawn="withdrawn",
                         time="time"))
  
  expect_error(EventData(data=event.data,
                         subject="subject",
                         site="site",
                         rand.date="randDate",
                         has.event="hasEvent",
                         withdrawn="withdrawn"
                         ))
  
  expect_error(EventData(data=event.data,
                         subject="subject",
                         site="site",
                         rand.date="randDate",
                         has.event="hasEvent",
                         time="time"
                         ))
  
  expect_error(EventData(data=event.data,
                         subject="subject",
                         site="site",
                         has.event="hasEvent",
                         withdrawn="withdrawn",
                         time="time"
  ))
  
  expect_error(EventData(subject="subject",
                         site="site",
                         rand.date="randDate",
                         has.event="hasEvent",
                         withdrawn="withdrawn",
                         time="time"
  ))
  
  expect_error(EventData(data=event.data,
                         subject="subject",
                         site="site",
                         rand.date="randDate",
                         withdrawn="withdrawn",
                         time="time"
  ))
  
  expect_error(EventData(data=event.data,
                         subject="subject",
                         site="site",
                         rand.date="randDate",
                         withdrawn="withdrawn",
                         time="time",
                         event.type="dfg"
  ))
  
  
})

test_that("Invalid_data_in_df",{
  e <- event.data
  e$hasEvent[5] <- "3"
  
  expect_error(expect_watning(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time")))
  e <- event.data
  e$withdrawn[15] <- "NO"
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
  
  e <- event.data
  e$randDate[5] <- NA
  expect_warning(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
  
  e <- event.data
  e$hasEvent <- rep(0,nrow(e))
  expect_warning(a <- EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
  expect_error(fit(a))
  
  
  e <- event.data
  e$hasEvent <- rep(1,nrow(e))
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
  
  e <- event.data
  e$withdrawn[1] <- 1
  expect_warning(EventData(data=e, subject="subject", rand.date="randDate",
                           has.event="hasEvent", withdrawn="withdrawn",time="time"))
  
  
  e <- event.data
  e$subject[1] <- 505
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
  
  e <- event.data
  e$time[1] <- "refd"
  #also get a warning here as code thinks time is factor
  expect_error(expect_warning(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time")))
  
  e <- event.data
  e$time[1] <- 0
  expect_warning(EventData(data=e, subject="subject", rand.date="randDate",
                           has.event="hasEvent", withdrawn="withdrawn",time="time"))
  
 
  
  e <- event.data
  e$time[1] <- -5
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time"))

  
  e <- event.data
  e$randDate[1] <- "15/10/2015"
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
  
  
  e <- event.data
  e$randDate[1] <- "15 Jan 2015"
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
  
  
  e <- event.data
  e$randDate[1] <- "15-10-31"
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time"))
  
})


test_that("Derived_Time_Test",{
  
 test.data <- data.frame(Asubject=c(1:8,"",10:12),
             ArandDate=c("01/01/2015","01/01/2015","05/01/2015",
                         "08/01/2015","12/01/2015","15/01/2015",
                         "10/01/2015",          "","06/05/2015",
                         "04/02/2015","08/02/2015","12/03/2015"),
             Ahasevent=c(1,0,0,0,0,0,1,0,0,1,1,1),
             Awithdrawn=c(1,1,1,1,0,0,0,0,0,0,0,0),
             AprogDate=c("","","","10/01/2015","05/04/2015","",
                        "04/12/2015","","","","","05/08/2015"),
             AdthDate=c("04/05/2015","","","","","",
                       "03/05/2015","","","08/02/2015","",""),
             AlastDate=c("","06/06/2015","05/06/2015","",
               "04/04/2015","05/05/2015","","01/05/2015",
               "12/05/2015","05/02/2015","12/02/2015",""),
             AwithdrawnDate=c("01/10/2015","","06/06/2015","12/01/2015",
                             "","05/08/2015","","","","","","06/08/2015")
 )
 
 expect_warning(my.data <- EventData(data=test.data, subject="Asubject", rand.date="ArandDate",
           has.event="Ahasevent", withdrawn="Awithdrawn",
           time=list(last.date="AlastDate",prog.date="AprogDate",withdrawn.date="AwithdrawnDate",dth.date="AdthDate")))
 
 NA.fact <- as.factor(NA)
 
 indat <- data.frame(subject=c(1:7,10:12),
                     rand.date=FixDates(c("01/01/2015","01/01/2015","05/01/2015",
                                 "08/01/2015","12/01/2015","15/01/2015",
                                 "10/01/2015",
                                 "04/02/2015","08/02/2015","12/03/2015")),
                     time=c(124,157,153,5,83,111,114,5,5,147),
                     has.event=c(1,0,0,0,0,0,1,1,1,1),
                     withdrawn=c(0,1,1,1,0,0,0,0,0,0),
                     site=rep(NA,10),
                     event.type=c("Has Event",rep(NA.fact,5),"Has Event","Has Event",
                                  "Has Event","Has Event"),
                     censored.at.follow.up=rep(0,10))
 
  indat$subject <- factor(indat$subject,levels=levels(my.data@subject.data$subject)) 
  
  rownames(indat) <- NULL
  rownames(my.data@subject.data) <- NULL
  expect_equal(indat,my.data@subject.data)
})

test_that("Derived_Time",{
  e <- event.data
  
  
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",
                         time=list()))
  
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",
                         time=list(event.date="eD",last.date="lastDate")))
  
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",
                         time=list(event.date="eventDate")))
  
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",
                         time=list(last.date="lastDate",eventt.date="eventDate")))
  
  e$wDate <- rep(as.Date(NA),nrow(e))
  e$wDate[1] <-as.Date("2014-01-16")
  
  expect_warning(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",
                         time=list(last.date="lastDate",event.date="eventDate",withdrawn.date="wDate")))
  
  e <- event.data
  e$wDate <- rep(as.Date(NA),nrow(e))
  e$withdrawn[1] <- 1
  e$hasEvent[1] <- 0
  
  expect_warning(EventData(data=e, subject="subject", rand.date="randDate",
                           has.event="hasEvent", withdrawn="withdrawn",
                           time=list(last.date="lastDate",event.date="eventDate",withdrawn.date="wDate")))
  
})

test_that("CalculateDaysAtRisk",{
  e <- event.data
  e$time <- rep(4,nrow(e))
  my.data <- EventData(data=e,
                       subject="subject",
                       rand.date="randDate",
                       has.event="hasEvent",
                       withdrawn="withdrawn",
                       time="time",
                       site="site")
  
  expect_equal(4*nrow(e),CalculateDaysAtRisk(my.data))
  
})


test_that("Derived_Time_logic",{
  #this is a companion test to Derived_Time_Test above
  e <- event.data

  e$wDate <- rep(NA,nrow(e))
  e$dth.date <- rep(NA,nrow(e))
  e$prog.date <- rep(NA,nrow(e))
    
  e$hasEvent[1] <- 0
  e$eventDate[1] <- NA
  e$lastDate[1] <- "2014-01-14"
  e$hasEvent[2] <- 0
  e$eventDate[2] <- NA
  e$prog.date[2] <- "2014-02-01"
  e$lastDate[2] <- "2014-02-06"
  
  e$hasEvent[3:5] <- 0
  e$withdrawn[3:5] <- 1
  e$eventDate[3:4] <- NA
  e$lastDate[4] <- "2014-02-10"
  e$wDate[4] <- "2014-02-05"
  
  e$lastDate[5] <- "2014-02-20"
  e$wDate[5] <- "2014-03-05"
  
  e$lastDate[6] <- NA
  e$eventDate[7] <- NA
  e$dth.date[7] <- "2014-01-10"
  
  e$prog.date[8] <- "2014-12-03"
  e$eventDate[8] <- "2014-04-04"
  
  e$eventDate[9] <- NA
  e$wDate[9] <- "2014-02-28"
  
  e$withdrawn[10:11] <- 1
  e$eventDate[10:11] <- NA
  e$wdate[11] <- "2014-03-01"
  e$prog.date[11] <- "2014-05-05"
  
  
  expect_warning(a <- EventData(data=e, subject="subject", rand.date="randDate",
            has.event="hasEvent", withdrawn="withdrawn",
            time=list(last.date="lastDate",event.date="eventDate",withdrawn.date="wDate",dth.date="dth.date",
                      prog.date="prog.date")))
  
  expect_equal(c(4,17,45,28,37,41,1,76,26,42,94),a@subject.data$time[1:11])
  
  
})

test_that("prog_dth_warning",{
  
  #check if have both prog and dth date then get warning if dth is before prog
  e <- data.frame(subject=1:3,
                  has.event=c(1,1,0),
                  withdrawn=c(0,0,0),
                  rand.date=rep("2014-01-01",3),
                  last.date=c("","","2015-01-01"),
                  prog.date=c("2015-01-01","2015-01-01",""),
                  dth.date=c("2014-06-06","2015-01-01","")
                  )
  
  expect_warning(EventData(data=e, subject="subject", rand.date="rand.date",
                 has.event="has.event", withdrawn="withdrawn",
                 time=list(last.date="last.date",dth.date="dth.date",prog.date="prog.date")),
                 regexp ="Subjects 1 have progression date after death date. This is invalid and should be fixed" )
  
  
   
})


test_that("followup",{
  e <- data.frame(subject=1:6,
                  randDate=c("2015-01-01","2015-02-01","2015-03-01","2015-04-01","2015-05-01","2015-06-01"),
                  time=(1:6)*10,
                  hasEvent=c(1,1,1,0,1,0),
                  withdrawn=c(0,0,1,0,0,1))
  
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
            has.event="hasEvent", withdrawn="withdrawn",time="time",followup=0))
  
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time",followup=c(3,4)))
  
  expect_error(EventData(data=e, subject="subject", rand.date="randDate",
                         has.event="hasEvent", withdrawn="withdrawn",time="time",followup=-10))
  
  #warning for subject 3 having withdrawn and hasEvent=1
  expect_warning(inf.followup <- EventData(data=e, subject="subject", rand.date="randDate",
            has.event="hasEvent", withdrawn="withdrawn",time="time"))
  
  expect_equal(rep(0,6),inf.followup@subject.data$censored.at.follow.up)
  expect_true(is.infinite(inf.followup@followup))
  
  expect_warning(seventy.followup <- EventData(data=e, subject="subject", rand.date="randDate",
                                has.event="hasEvent", withdrawn="withdrawn",time="time",followup=70))
  
  expect_equal(70,seventy.followup@followup)
  expect_equal(inf.followup@subject.data,seventy.followup@subject.data)

  expect_warning(fifteen.followup <- EventData(data=e, subject="subject", rand.date="randDate",
                                               has.event="hasEvent", withdrawn="withdrawn",time="time",followup=15))

  expect_equal(c(1,0,0,0,0,0),fifteen.followup@subject.data$has.event)
  expect_equal(rep(0,6),fifteen.followup@subject.data$withdrawn)
  expect_equal(c(0,rep(1,5)),fifteen.followup@subject.data$censored.at.follow.up)
  
  expect_equal(c(10,rep(15,5)),fifteen.followup@subject.data$time)
  
  expect_warning(twenty.followup <- EventData(data=e, subject="subject", rand.date="randDate",
                                               has.event="hasEvent", withdrawn="withdrawn",time="time",followup=20))
  
  
  expect_equal(c(10,rep(20,5)),twenty.followup@subject.data$time)
  expect_equal(c(1,1,0,0,0,0),twenty.followup@subject.data$has.event)
  
})


test_that("CalculateProgEventTypes",{
  e <- c(0,1,1,1,1,1,1)
  p <- c("01/01/2015","01/01/2015","01/01/2015","01/01/2015","01/01/2015","","")
  d <- c("","","01/01/2014","01/01/2016","01/01/2015","02/01/2015","")  
  
  
  expect_equal(c(NA,"Progression (not death)","Death","Progression (not death)",
                 "Death","Death","Progression (unknown if death)"),
                 CalculateProgEventTypes(e,p,d))
  
  expect_error(CalculateProgEventTypes(c(e,1),p,d))
  expect_error(CalculateProgEventTypes(e,c(p,1),d))
  e[1] <- -3
  expect_error(CalculateProgEventTypes(e,p,d))
  e[1] <- 0
  p[1] <- 23
  expect_error(CalculateProgEventTypes(e,p,d))
  
}) 


test_that("EmptyEventData",{
  e <- EmptyEventData()
  expect_equal(Inf,e@followup)
  expect_equal(0,nrow(e@subject.data))
  e <- EmptyEventData(followup=10)
  expect_equal(10,e@followup)
  expect_error(EmptyEventData(followup=-10))
  expect_error(EmptyEventData(followup=c(1,2,3)))
})
scientific-computing-solutions/eventPrediction documentation built on May 29, 2019, 3:44 p.m.