## For other simulations, just use a different file here.
## However, do keep the name sim.
suppressPackageStartupMessages(library(tidyverse))
options(dplyr.summarise.inform = FALSE)
## Set path to model run you want to get diagnostics for:
# sim <- readRDS("../../../Data/EpiModelSims/ergm3_ca_nohiv_sim_with15yo_boost.rds")
if (params$sim == "None") {
  sim <- readRDS("../../../EpiModel/AE/sim_epimodel3/sim_at_2033_jan12.rds")
}else{
  sim <- params$sim
}
## Registered S3 method overwritten by 'tergm':
##   method                   from
##   simulate_formula.network ergm
## Creating the netest object (make sure it is the same as what was 
## used to run the simulation).
## No HIV
# netest_mc <- readRDS("../../../Data/stergmFits/netest_mc_nohiv_ca_whamp3.rds")
# load("../../../Data/stergmFits/netest_inst_nohiv_whamp3.rda")
## HIV
if (params$netest == "None") {
  netest_mc <- readRDS("../../../Data/stergmFits/netest_mc_hiv_caxr_whamp3.rds")
  load("../../../Data/stergmFits/netest_inst_hiv_caxr_whamp3.rda")
  netest_obj <- list("main" = netest_mc$main,
                     "casl" = netest_mc$casl,
                     "inst" = netest_inst)
}else{
  netest_obj <- params$netest
}

make_mean_deg_plot <- function(sim, var_type = "race", 
                               nest_obj = NULL, simnum = 1){
  edge_counts <- sim$epi[[simnum]]$demog_edge_counts
  edge_counts$at[edge_counts$at == 1] <- 
    min(edge_counts$at[edge_counts$at != 1]) - 1
  edge_counts[, "col_var"] <- edge_counts[, var_type]
  f_edg_cnts <- edge_counts %>% filter(ptype == 0) %>%
    mutate(rep = 3) %>% uncount(rep, .id = "ptype")
  edge_counts <- bind_rows(
    edge_counts %>% filter(ptype != 0),
    f_edg_cnts
  )
  
  cmpr_edges <- pivot_wider(
    edge_counts, 
     values_from = "count", names_from = "type",
    id_cols = colnames(edge_counts)
    ) %>% filter(age.grp != 6) %>%
    group_by(ptype, col_var, at) %>%
    summarise(partner = sum(partner, na.rm = TRUE),
              total = sum(total, na.rm = TRUE)) %>%
    mutate(
      "mean_deg" = partner / total, 
      "year"  = round(
        (at - sim$control$start) / 52 + sim$control$year_start, 4
        )
      )
  cmpr_edges$ptype <- factor(cmpr_edges$ptype, levels = 1:3,
                             labels = c("Main",  "Casl", "Inst"))
  if (is.null(nest_obj)) {
    cmpr_edges %>% ungroup() %>% 
     ggplot(aes(x = year, y = mean_deg, 
                color = as.character(col_var))) + 
     geom_point(alpha = 0.5) + geom_smooth() + 
     facet_wrap(~ ptype, scales = "free_y" ) + 
     geom_vline(xintercept = 2019, color = "black") +
     scale_colour_discrete(var_type) + ylab("Mean Degree") +
     xlab("Year") + theme(legend.position = "bottom")
  }else{
    degs <- lapply(nest_obj, "[[", "fit") %>% lapply("[[", "newnetwork") %>%
      sapply(sna::degree)
    ego_dat <- ergm.ego::as.egodata(nest_obj$main$fit$newnetwork)$egos
    ego_dat <- data.frame(ego_dat, degs) %>%
      filter(age.grp != 6) %>%
      select(age.grp, race, region, 
             "Main" = main, "Casl" = casl, "Inst" = inst)
    ego_dat[, "col_var"] <- ego_dat[, var_type]
    long_dat <- pivot_longer(
      ego_dat, names_to = "ptype", values_to = "deg",
      # id_cols = c("age.grp", "race", "region", "col_var"),
      cols = c("Main", "Casl", "Inst")
        )
    mean_degs <- long_dat %>% group_by(ptype, col_var) %>%
      summarise(Mean_deg = mean(deg) / 2)
    mean_degs$ptype <- factor(mean_degs$ptype,
                              levels = c("Main",  "Casl", "Inst"),
                              labels = c("Main",  "Casl", "Inst"))
    
    cmpr_edges %>% ungroup() %>% 
     ggplot(aes(x = year, y = mean_deg, 
                color = as.character(col_var))) + 
     geom_point(alpha = 0.5) + geom_smooth() +
     geom_hline(data = mean_degs, aes(yintercept = Mean_deg,
                                      color = as.factor(col_var))) +
     facet_wrap(~ ptype, scales = "free_y" ) + 
     geom_vline(xintercept = 2019, color = "black") +
     scale_colour_discrete(var_type) + ylab("Mean Degree") +
     xlab("Year") + theme(legend.position = "bottom")
  }
}

make_mean_agextime <- function(sim, var_type = "race",
                               yrs = NULL, targ_year = 2019,
                               nest_obj = NULL,
                               plot_dif = FALSE){
  if (length(targ_year) != 1) {stop("Must specify one target year")}
  edge_counts <- sim$epi[[1]]$demog_edge_counts
  if (var_type == "none") {
    edge_counts[, "facet_var"] <- "pooled"
  }else{
    edge_counts[, "facet_var"] <- edge_counts[, var_type]
  }
  f_edg_cnts <- edge_counts %>% filter(ptype == 0) %>%
    mutate(rep = 3) %>% uncount(rep, .id = "ptype")
  edge_counts <- bind_rows(
    edge_counts %>% filter(ptype != 0),
    f_edg_cnts
  )
  cmpr_edges <- pivot_wider(
    edge_counts, 
     values_from = "count", names_from = "type",
    id_cols = colnames(edge_counts)
    ) %>% group_by(ptype, age, at, facet_var) %>%
    summarise(partner = sum(partner, na.rm = TRUE),
              total = sum(total, na.rm = TRUE)) %>%
    mutate(
      "mean_deg" = partner / total, 
      "year"  = round(
        (at - sim$control$start) / 52 + sim$control$year_start
        )
      )
  cmpr_edges$ptype <- factor(cmpr_edges$ptype, levels = 1:3,
                             labels = c("Main",  "Casl", "Inst"))
  all_yrs <- sort(unique(cmpr_edges$year), decreasing = FALSE)[-1]
  if (is.null(yrs)) {
    keep_yrs <- c(min(all_yrs), all_yrs[all_yrs %% 10 == 0])
  }else{
    keep_yrs <- yrs
  }
  keep_yrs <- unique(c(yrs, targ_year))
  cmpr_edges <- cmpr_edges %>% filter(year %in% keep_yrs, 
                                      year < 2031)
  cmpr_edges$year <- factor(
    cmpr_edges$year, 
    levels = sort(cmpr_edges$year), 
    labels = sort(cmpr_edges$year)
    )
  if (is.null(nest_obj)) {
   cmpr_edges %>% ungroup() %>% 
     ggplot(aes(x = age, y = mean_deg, col = facet_var)) + 
     # geom_line(alpha = 0.5) +
     geom_smooth(se = FALSE, span = 4) + #, size = 2) + 
     facet_grid(year~ptype) + 
     geom_vline(xintercept = 2019, color = "black") +
     scale_colour_discrete("Partnership Type") +
     ylab("Mean Degree") +
     xlab("Age") + theme(legend.position = "bottom")
  }else{
    degs <- lapply(nest_obj, "[[", "fit") %>% lapply("[[", "newnetwork") %>%
      sapply(sna::degree)
    ego_dat <- ergm.ego::as.egodata(nest_obj$main$fit$newnetwork)$egos
    ego_dat <- data.frame(ego_dat, degs) %>%
      select(age, race, region, 
             "Main" = main, "Casl" = casl, "Inst" = inst) %>%
      mutate(age = floor(age))
    if (var_type == "none") {
      ego_dat[, "facet_var"] <- "pooled"
    }else{
      ego_dat[, "facet_var"] <- ego_dat[, var_type]
    }
    long_dat <- pivot_longer(
      ego_dat, names_to = "ptype", values_to = "deg",
      cols = c("Main", "Casl", "Inst")
        )
    mean_degs <- long_dat %>% group_by(ptype, age, facet_var) %>%
      summarise(mean_deg = mean(deg) / 2)
    mean_degs$ptype <- factor(mean_degs$ptype,
                              levels = c("Main",  "Casl", "Inst"),
                              labels = c("Main",  "Casl", "Inst"))
    r_mean_degs <- mean_degs %>% mutate(rep = length(keep_yrs)) %>%
      uncount(rep, .id = "year") %>% mutate(year = keep_yrs[year]) %>%
      filter(year < 2031)
    r_mean_degs$year <- factor(
    r_mean_degs$year,
    levels = sort(r_mean_degs$year),
    labels = sort(r_mean_degs$year)
    )
    if (var_type == "none") {alph <- 0.3}else{alph = 0}
    all_md <- bind_rows(
      bind_cols(cmpr_edges, "type" = "Simulated"),
      bind_cols(r_mean_degs, "type" = "Start/Target  (from netest$newnetwork)")
    ) 
    if (plot_dif) {
      wd <- all_md %>% ungroup() %>% select(type, facet_var, 
                              mean_deg, ptype, year, age, highlight) %>% 
        pivot_wider(names_from = type, 
                    values_from = mean_deg) %>%
        mutate(dif = Simulated - `Start/Target (from netest$newnetwork)` )
     wd %>%
     ggplot(aes(x = age, y = dif, 
                col = facet_var)) + 
     geom_hline(yintercept = 0, color = "black") +
     geom_vline(xintercept = 65, color = "gray") +
     
     geom_smooth(se = FALSE) + #, size = 2, span = 2.5) + 
     facet_wrap(~ptype + year, scales = "free_y", dir = "v", 
                ncol = 3) + 
     scale_colour_discrete(var_type) +
     coord_cartesian(ylim = c(-0.6, 0.4)) +
     ylab("Mean Degree (Observed - Target)") +
     xlab("Age") + theme(legend.position = "bottom")
    }else{
      fac_df <- expand.grid(year = unique(all_md$year), 
                            ptype = unique(all_md$ptype))
      fac_df$highl <- as.numeric(fac_df$year == targ_year)
      all_md %>% ungroup() %>% 
        ggplot() +
        # geom_point(alpha = alph) +
        geom_rect(data = fac_df %>% filter(highl == 1),
                  aes(fill = as.factor(highl)),
                  xmin = -Inf, xmax = Inf,
                  ymin = -Inf, ymax = Inf, alpha = 0.3) +
        geom_vline(xintercept = 65, color = "gray") +
        geom_smooth(aes(x = age, y = mean_deg, 
                        color = facet_var,
                   linetype = type), 
                   se = FALSE) + #, size = 2, span = 2.5) + 
        facet_grid(ptype ~ year, scales = "free_y") + 
        scale_colour_discrete(var_type) +
        scale_fill_manual(values = "black") +
        ylab("Mean Degree") + guides(fill = FALSE) +
        xlab("Age") + theme(legend.position = "bottom") + 
        coord_cartesian(ylim = c(0, NA))
    } 
  }
}

0.1 Mean Degree plots

0.1.1 Within race group

make_mean_deg_plot(sim, var_type = "race", nest_obj = netest_obj)

0.1.2 Within Region

make_mean_deg_plot(sim, var_type = "region", netest_obj)

0.2 Mean Degree across Age

0.2.1 Within race group

make_mean_agextime(sim, "race", yrs = c(2005, 2015, 2019, 2025, 2030), 
                   nest_obj = netest_obj)

0.2.2 Within Region

make_mean_agextime(sim, "region", yrs = c(2005, 2015, 2019, 2025, 2030), 
                   nest_obj = netest_obj)

0.3 Session Info

sessionInfo()
## R version 4.0.2 (2020-06-22)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS  10.16
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRblas.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] forcats_0.5.0   stringr_1.4.0   dplyr_1.0.2     purrr_0.3.4    
## [5] readr_1.3.1     tidyr_1.1.2     tibble_3.0.4    ggplot2_3.3.2  
## [9] tidyverse_1.3.0
## 
## loaded via a namespace (and not attached):
##  [1] nlme_3.1-148             fs_1.4.2                 lubridate_1.7.9         
##  [4] doParallel_1.0.15        RColorBrewer_1.1-2       httr_1.4.2              
##  [7] rprojroot_1.3-2          tools_4.0.2              backports_1.1.10        
## [10] R6_2.5.0                 mgcv_1.8-31              DBI_1.1.0               
## [13] lazyeval_0.2.2           colorspace_1.4-1         withr_2.3.0             
## [16] tidyselect_1.1.0         compiler_4.0.2           ergm.multi_4.0-3965     
## [19] cli_2.2.0                rvest_0.3.6              xml2_1.3.2              
## [22] network_1.17.0-585       labeling_0.3             scales_1.1.1            
## [25] DEoptimR_1.0-8           robustbase_0.93-6        digest_0.6.27           
## [28] ergm.ego_0.5-471         rmarkdown_2.4            networkDynamic_0.10.2   
## [31] pkgconfig_2.0.3          htmltools_0.5.0          egonet_0.0.1.0          
## [34] dbplyr_1.4.4             rlang_0.4.9              readxl_1.3.1            
## [37] rstudioapi_0.11          farver_2.0.3             generics_0.1.0          
## [40] jsonlite_1.7.1           statnet.common_4.4.0-300 magrittr_2.0.1          
## [43] Matrix_1.2-18            Rcpp_1.0.5               munsell_0.5.0           
## [46] fansi_0.4.1              ape_5.4-1                lifecycle_0.2.0         
## [49] stringi_1.5.3            yaml_2.2.1               MASS_7.3-51.6           
## [52] grid_4.0.2               blob_1.2.1               parallel_4.0.2          
## [55] crayon_1.3.4             lattice_0.20-41          haven_2.3.1             
## [58] splines_4.0.2            hms_0.5.3                sna_2.5                 
## [61] knitr_1.30               pillar_1.4.7             EpiModel_2.0.3          
## [64] codetools_0.2-16         lpSolve_5.6.15           rle_0.9.2-223           
## [67] srvyr_0.3.10             reprex_0.3.0             glue_1.4.2              
## [70] evaluate_0.14            trust_0.1-8              mitools_2.4             
## [73] modelr_0.1.8             deSolve_1.28             vctrs_0.3.6             
## [76] foreach_1.5.0            cellranger_1.1.0         gtable_0.3.0            
## [79] assertthat_0.2.1         tergmLite_2.2.0          tergm_4.0.0-2013        
## [82] xfun_0.18                broom_0.7.1              survey_4.0              
## [85] ergm_4.0-5824            coda_0.19-4              survival_3.2-7          
## [88] iterators_1.0.12         ellipsis_0.3.1           here_0.1