## ----load R package, echo=TRUE------------------------------------------------
library(gscounts)

## ---- echo=TRUE---------------------------------------------------------------
out <- design_gsnb(rate1 = 0.0875, rate2 = 0.125, dispersion = 5, 
                   ratio_H0 = 1, power = 0.8, sig_level = 0.025, 
                   timing = c(0.4, 0.7, 1), esf = obrien, study_period = 4, 
                   accrual_period = 1.25, random_ratio = 1)
out

## ---- echo=FALSE--------------------------------------------------------------
str(out)

## ---- echo=TRUE---------------------------------------------------------------
out2 <- design_gsnb(rate1 = 0.0875, rate2 = 0.125, dispersion = 5, 
                    ratio_H0 = 1, power = 0.8, sig_level = 0.025, 
                    timing = c(0.4, 0.7, 1), esf = obrien, study_period = 4, 
                    accrual_period = 1.25, random_ratio = 1, 
                    futility = "binding", esf_futility = obrien)
out2


## ---- results='hold'----------------------------------------------------------
out3 <- design_gsnb(rate1 = 4.2, rate2 = 8.4, dispersion = 3, ratio_H0 = 1, 
                   power = 0.8, sig_level = 0.025, timing = c(0.5, 1), 
                   esf = pocock, followup_max = 0.5, random_ratio = 1)
out3$n
out3$n1
out3$n2

## ---- results='hold'----------------------------------------------------------
out4 <- design_gsnb(rate1 = 4.2, rate2 = 8.4, dispersion = 3, ratio_H0 = 1, 
                   power = 0.8, sig_level = 0.025, timing = c(0.5, 1), 
                   esf = pocock, followup_max = 0.5, random_ratio = 2,
                   futility = "nonbinding", esf_futility = obrien)
out4$n
out4$n1
out4$n2

## -----------------------------------------------------------------------------
recruit <- seq(0, 1.25, length.out = 1042)
out5 <- design_gsnb(rate1 = 0.0875, rate2 = 0.125, dispersion = 5, 
                   power = 0.8, timing = c(0.5, 1), esf = obrien,
                   ratio_H0 = 1, sig_level = 0.025, 
                   t_recruit1 = recruit, t_recruit2 = recruit)
out5$study_period

## ---- results='hold'----------------------------------------------------------
out6 <- design_gsnb(rate1 = 4.2, rate2 = 8.4, dispersion = 3, ratio_H0 = 1, 
                   power = 0.8, sig_level = 0.025, timing = c(0.5, 1), 
                   esf = obrien, followup_max = 1, random_ratio = 1)
out6$n1
out6$n2

## ----hospitalizations---------------------------------------------------------
head(hospitalizations, n = 10)

## ----info-monitoring, results='hide', message=FALSE---------------------------
library(dplyr)
# Filter data to obtain all the events which happened prior to t = 1.2906
t <- 1.2972
rawdata_interim <- dplyr::filter(hospitalizations, t_recruit <= t, 
                       (is.na(eventtime) | eventtime <= t))
# Calculate the number of events of every patient until t
events_interim <- rawdata_interim %>% 
  group_by(treatment, pat, t_recruit) %>% 
  summarise(count = sum(eventtime <= t, na.rm = TRUE)) 
# Exposure time = time of patient with study
events_interim$t_expose <- t - events_interim$t_recruit
# Negative binomial regression
glm_out <- MASS::glm.nb(formula = count ~ treatment + offset(log(t_expose)) - 1, 
                        data = events_interim)
rates <- exp(glm_out$coefficients)
followup1 <- dplyr::filter(events_interim, treatment == 'experiment')$t_expose
followup2 <- dplyr::filter(events_interim, treatment == 'control')$t_expose
# Information level at calendar time t
info_interim <- get_info_gsnb(rate1 = rates["treatmentexperiment"],
                              rate2 = rates["treatmentcontrol"],
                              dispersion = 1/glm_out$theta, 
                              followup1 = followup1, 
                              followup2 = followup2)


## -----------------------------------------------------------------------------
glm_interim1 <- MASS::glm.nb(formula = count ~ treatment + offset(log(t_expose)), 
                        data = events_interim)
summary(glm_interim1)$coefficients

## ----fixed_design, echo=TRUE--------------------------------------------------
out_fix <- design_nb(rate1 = 0.0875, rate2 = 0.125, dispersion = 5, 
                 ratio_H0 = 1, power = 0.8, sig_level = 0.025, 
                 study_period = 4, accrual_period = 1.25, random_ratio = 1)
out_fix

## ----nb_stucture--------------------------------------------------------------
str(out_fix)

