## ----include = FALSE----------------------------------------------------------

library(knitr)

knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## -----------------------------------------------------------------------------

set.seed(1)

library(rwicc)
library(dplyr)
library(ggplot2)
theta_true = c(0.986, -3.88)
hazard_alpha = 1
hazard_beta = 0.5
sim_data = simulate_interval_censoring(
  "theta" = theta_true,
  "study_cohort_size" = 4500,
  "preconversion_interval_length" = 365,
  "hazard_alpha" = hazard_alpha,
  "hazard_beta" = hazard_beta
)

# extract the participant-level and observation-level simulated data:
sim_participant_data = sim_data$pt_data
sim_obs_data = sim_data$obs_data


## -----------------------------------------------------------------------------
library(pander)
pander(head(sim_participant_data))

## -----------------------------------------------------------------------------
sim_participant_data |>
  mutate("Stratum" = 1) |> 
  build_event_date_possibilities_table(bin_width = 1) |> 
  dplyr::count(S) |> 
  ggplot(
    aes(x = S, y = n)
  ) +
  geom_line(alpha = .5) +
  theme_classic()

## -----------------------------------------------------------------------------
pander(head(sim_obs_data))

## -----------------------------------------------------------------------------
sim_data |> 
plot_censoring_data(
        included_IDs = 1:10,
        labelled_IDs = NULL,
        # xmax = lubridate::ymd("2003-01-01"),
        s_vjust = -1
    ) +
  theme(axis.ticks.y = element_blank())

## -----------------------------------------------------------------------------
EM_algorithm_outputs = fit_joint_model(
  obs_level_data = sim_obs_data,
  participant_level_data = sim_participant_data,
  bin_width = 7,
  EM_max_iterations = 150,
  verbose = FALSE)


## -----------------------------------------------------------------------------
names(EM_algorithm_outputs)

## -----------------------------------------------------------------------------

pander(EM_algorithm_outputs$Theta)

## -----------------------------------------------------------------------------
mu_est_EM = EM_algorithm_outputs$Mu
print(mu_est_EM)

## -----------------------------------------------------------------------------
omega_est_EM <- EM_algorithm_outputs$Omega

omega_est_EM |> graph_omega()


## -----------------------------------------------------------------------------
EM_algorithm_outputs$converged

## -----------------------------------------------------------------------------
EM_algorithm_outputs$iterations

## -----------------------------------------------------------------------------
pander(EM_algorithm_outputs$convergence_metrics)

## -----------------------------------------------------------------------------

theta_est_midpoint = fit_midpoint_model(
  obs_level_data = sim_obs_data,
  participant_level_data = sim_participant_data
)

pander(theta_est_midpoint)

## -----------------------------------------------------------------------------
# uniform imputation:
theta_est_uniform = fit_uniform_model(
  obs_level_data = sim_obs_data,
  participant_level_data = sim_participant_data
)

pander(theta_est_uniform)

## ----fig.width = 6, fig.asp = .75---------------------------------------------

plot1 = plot_CDF(
  true_hazard_alpha = hazard_alpha,
  true_hazard_beta = hazard_beta,
  omega_hat = EM_algorithm_outputs$Omega)

print(plot1)


## ----fig.width = 6, fig.asp = .8----------------------------------------------

plot2 = plot_phi_curves(
  theta_true = theta_true,
  theta.hat_uniform = theta_est_uniform,
  theta.hat_midpoint = theta_est_midpoint,
  theta.hat_joint = EM_algorithm_outputs$Theta)

print(plot2)

