--- title: "Contact Matrix Examples" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Contact Matrix Examples} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` This vignette demonstrates how to set up contact matrices for age- and school-structured models using examples. ```{r setup} library(multigroup.vaccine) library(socialmixr) ``` First we define the age groups we want to use, and the population sizes of each group: ```{r} # under 1, 1-4, 5-11, 12-13, 14-17, 18-24, 25-44, 45-69, 70 plus agelims <- c(0, 1, 5, 12, 14, 18, 25, 45, 70) agepops <- c(100, 400, 700, 200, 400, 700, 2000, 2400, 1000) ``` Here's how to generate a contact matrix using Polymod data, which is contact survey data from the well known "Polymod" study. When including the second argument to the `contactMatrixPolymod()` function, the contact matrix will be adjusted to fit the population distribution defined above in the `agepops` variable. ```{r} cmp <- contactMatrixPolymod(agelims, agepops) knitr::kable(round(cmp, 2), format = "markdown") ``` The sum of each row represents the relative overall contact rate of each group: ```{r} knitr::kable(round(rowSums(cmp), 2), format = "markdown", col.names = "total") ``` Those row sums can be factored out to generate the fraction of each group's contacts that are with each group: The sum of each row represents the relative overall contact rate of each group: ```{r} knitr::kable(round(cmp/rowSums(cmp), 2), format = "markdown") ``` Now we show how to split the age groups for elementary school (5-11), middle school (12-13), and high school (18-24) into two schools each: ```{r} schoolagegroups <- c(3, 3, 4, 4, 5, 5) #The indices of the age group for each school schoolpops <- c(350, 350, 100, 100, 200, 200) #The number of students in each school ``` The `socialmixr` R package includes functions that allow us to see the number of contacts of school-aged children that occurred overall vs. just at school: ```{r} cmAll <- suppressMessages( suppressWarnings(socialmixr::contact_matrix(socialmixr::polymod, age.limits = agelims)$matrix)) cmSchool <- suppressMessages( suppressWarnings(socialmixr::contact_matrix(socialmixr::polymod, age.limits = agelims, filter = list(cnt_school = 1))$matrix)) knitr::kable(round(cmAll, 2), format = "markdown") knitr::kable(round(cmSchool, 2), format = "markdown") ``` Based on comparing the diagonal elements for the school-aged children age groups, we have some basis for an assumption that 70% of a student's within-age-group contacts occur at their own school: ```{r} schportion <- 0.70 ``` Now we use the above ingredients to create a new matrix using the `contactMatrixAgeSchool()` function. We show the old age-structured model and the new age-and-school-structured model for comparison: ```{r} cmps <- contactMatrixAgeSchool(agelims, agepops, schoolagegroups, schoolpops, schportion) knitr::kable(round(cmp,2), format = "markdown") knitr::kable(round(cmps,2), format = "markdown") ```