# Assign categories as per race/ethnicity, age group and gender identity

## N.B. See Excel sheet "agent population updated"  at: 
## /cche-lab/data/p2m_parameters_chicago/population_estimates/anna_population_estimation/output/Population estimates_ACS_2011_2015_chicago_updated_021220.xlsx

rm(list=ls())

library(ergm)
## Loading required package: network
## network: Classes for Relational Data
## Version 1.15 created on 2019-04-01.
## copyright (c) 2005, Carter T. Butts, University of California-Irvine
##                     Mark S. Handcock, University of California -- Los Angeles
##                     David R. Hunter, Penn State University
##                     Martina Morris, University of Washington
##                     Skye Bender-deMoll, University of Washington
##  For citation information, type citation("network").
##  Type help("network-package") to get started.
## 
## ergm: version 3.10.4, created on 2019-06-10
## Copyright (c) 2019, Mark S. Handcock, University of California -- Los Angeles
##                     David R. Hunter, Penn State University
##                     Carter T. Butts, University of California -- Irvine
##                     Steven M. Goodreau, University of Washington
##                     Pavel N. Krivitsky, University of Wollongong
##                     Martina Morris, University of Washington
##                     with contributions from
##                     Li Wang
##                     Kirk Li, University of Washington
##                     Skye Bender-deMoll, University of Washington
##                     Chad Klumb
## Based on "statnet" project software (statnet.org).
## For license and citation information see statnet.org/attribution
## or type citation("ergm").
## NOTE: Versions before 3.6.1 had a bug in the implementation of the
## bd() constriant which distorted the sampled distribution somewhat.
## In addition, Sampson's Monks datasets had mislabeled vertices. See
## the NEWS and the documentation for more details.
## NOTE: Some common term arguments pertaining to vertex attribute
## and level selection have changed in 3.10.0. See terms help for
## more details. Use 'options(ergm.term=list(version="3.9.4"))' to
## use old behavior.
library(network)

n <- 5000

net <- network.initialize(n, directed = FALSE)


# Assign categories in proportion to age/race/gender
net %v% "cat" <- 0

## Record proprtions as per empirical targets: categories 1-32
## 12 rows Age groups 18-24, 25-34, 35-44, 45-64 for... 
## ...NHWhite, NH Black, Hispanic/LatinX,  Other/Unknown
## the next 20 rows are all zeros: 
##  4 zeros coresspond to age groups for "Other" MSM
##  16 zeros correspond to 4 age groups each for four race/ethnicities of transfemale

cats <- 1:36

# Data fomat for MSM, TGW, Cis-men


cat.props <- c(
# MSM
0.043873594,
0.051747259,
0.053086042,
0.128868039,
0.058334366,
0.080970067,
0.080740577,
0.051394902,
0.072878528,
0.126381807,
0.108923693,
0.087202456,
# TGW
0,
0.003920247,
0.00402167,
0,
0.00441927,
0.006134096,
0,
0.003893553,
0.005521101,
0,
0.008251795,
0.006606247,
# HRH
0,
0.000703025,
0.000721213,
0,
0.000792516,
0.001100038,
0,
0.000698238,
0.000990109,
0,
0.001479809,
0.0011847
)

length(cat.props)
## [1] 36
cat.vals <- sample(cats, size=n, replace=TRUE, prob=cat.props)
net %v% "cat" <- cat.vals
table(net %v% "cat")
## 
##   1   2   3   4   5   6   7   8   9  10  11  12  14  15  17  18  20  21 
## 227 289 272 625 304 377 429 234 343 620 569 439  22  22  21  33  24  40 
##  23  24  26  27  29  30  32  33  35  36 
##  41  27   7   4   3   5   2   9   7   5
## set vertex attributes in accordance to these proportions

net %v% "race" <- 0
net %v% "age_group" <- 0
net %v% "identity" <- 0

for (i in 1:network.size(net)){
  
  #MSM
  if ((net %v% "cat")[i] == 1){
    set.vertex.attribute(net, "race", v=i, value="White")
    set.vertex.attribute(net, "age_group", v=i, value="18-24")
    set.vertex.attribute(net, "identity", v=i, value="MSM")
  }
  
  else if ((net %v% "cat")[i] == 2){
    set.vertex.attribute(net, "race", v=i, value="Black")
    set.vertex.attribute(net, "age_group", v=i, value="18-24")
    set.vertex.attribute(net, "identity", v=i, value="MSM")
  }
  
  else if ((net %v% "cat")[i] == 3){
    set.vertex.attribute(net, "race", v=i, value="Hispanic")
    set.vertex.attribute(net, "age_group", v=i, value="18-24")
    set.vertex.attribute(net, "identity", v=i, value="MSM")
  }
  
  else if ((net %v% "cat")[i] == 4){
    set.vertex.attribute(net, "race", v=i, value="White")
    set.vertex.attribute(net, "age_group", v=i, value="25-34")
    set.vertex.attribute(net, "identity", v=i, value="MSM")
  }
  
  else if ((net %v% "cat")[i] == 5){
    set.vertex.attribute(net, "race", v=i, value="Black")
    set.vertex.attribute(net, "age_group", v=i, value="25-34")
    set.vertex.attribute(net, "identity", v=i, value="MSM")
  }
  
  else if ((net %v% "cat")[i] == 6){
    set.vertex.attribute(net, "race", v=i, value="Hispanic")
    set.vertex.attribute(net, "age_group", v=i, value="25-34")
    set.vertex.attribute(net, "identity", v=i, value="MSM")
  }
  
  else if ((net %v% "cat")[i] == 7){
    set.vertex.attribute(net, "race", v=i, value="White")
    set.vertex.attribute(net, "age_group", v=i, value="35-44")
    set.vertex.attribute(net, "identity", v=i, value="MSM")
  }
  
  else if ((net %v% "cat")[i] == 8){
    set.vertex.attribute(net, "race", v=i, value="Black")
    set.vertex.attribute(net, "age_group", v=i, value="35-44")
    set.vertex.attribute(net, "identity", v=i, value="MSM")
  }
  
  else if ((net %v% "cat")[i] == 9){
    set.vertex.attribute(net, "race", v=i, value="Hispanic")
    set.vertex.attribute(net, "age_group", v=i, value="35-44")
    set.vertex.attribute(net, "identity", v=i, value="MSM")
  }
  
  else if ((net %v% "cat")[i] == 10){
    set.vertex.attribute(net, "race", v=i, value="White")
    set.vertex.attribute(net, "age_group", v=i, value="45-64")
    set.vertex.attribute(net, "identity", v=i, value="MSM")
  }
  
  else if ((net %v% "cat")[i] == 11){
    set.vertex.attribute(net, "race", v=i, value="Black")
    set.vertex.attribute(net, "age_group", v=i, value="45-64")
    set.vertex.attribute(net, "identity", v=i, value="MSM")
  }
  
  else if ((net %v% "cat")[i] == 12){
    set.vertex.attribute(net, "race", v=i, value="Hispanic")
    set.vertex.attribute(net, "age_group", v=i, value="45-64")
    set.vertex.attribute(net, "identity", v=i, value="MSM")
  }
  
  #TGW
  else if ((net %v% "cat")[i] == 13){
    set.vertex.attribute(net, "race", v=i, value="White")
    set.vertex.attribute(net, "age_group", v=i, value="18-24")
    set.vertex.attribute(net, "identity", v=i, value="TGW")
  }
  
  else if ((net %v% "cat")[i] == 14){
    set.vertex.attribute(net, "race", v=i, value="Black")
    set.vertex.attribute(net, "age_group", v=i, value="18-24")
    set.vertex.attribute(net, "identity", v=i, value="TGW")
  }
  
  else if ((net %v% "cat")[i] == 15){
    set.vertex.attribute(net, "race", v=i, value="Hispanic")
    set.vertex.attribute(net, "age_group", v=i, value="18-24")
    set.vertex.attribute(net, "identity", v=i, value="TGW")
  }
  
  else if ((net %v% "cat")[i] == 16){
    set.vertex.attribute(net, "race", v=i, value="White")
    set.vertex.attribute(net, "age_group", v=i, value="25-34")
    set.vertex.attribute(net, "identity", v=i, value="TGW")
  }
  
  else if ((net %v% "cat")[i] == 17){
    set.vertex.attribute(net, "race", v=i, value="Black")
    set.vertex.attribute(net, "age_group", v=i, value="25-34")
    set.vertex.attribute(net, "identity", v=i, value="TGW")
  }
  
  else if ((net %v% "cat")[i] == 18){
    set.vertex.attribute(net, "race", v=i, value="Hispanic")
    set.vertex.attribute(net, "age_group", v=i, value="25-34")
    set.vertex.attribute(net, "identity", v=i, value="TGW")
  }
  
  else if ((net %v% "cat")[i] == 19){
    set.vertex.attribute(net, "race", v=i, value="White")
    set.vertex.attribute(net, "age_group", v=i, value="35-44")
    set.vertex.attribute(net, "identity", v=i, value="TGW")
  }
  
  else if ((net %v% "cat")[i] == 20){
    set.vertex.attribute(net, "race", v=i, value="Black")
    set.vertex.attribute(net, "age_group", v=i, value="35-44")
    set.vertex.attribute(net, "identity", v=i, value="TGW")
  }
  
  else if ((net %v% "cat")[i] == 21){
    set.vertex.attribute(net, "race", v=i, value="Hispanic")
    set.vertex.attribute(net, "age_group", v=i, value="35-44")
    set.vertex.attribute(net, "identity", v=i, value="TGW")
  }
  
  else if ((net %v% "cat")[i] == 22){
    set.vertex.attribute(net, "race", v=i, value="White")
    set.vertex.attribute(net, "age_group", v=i, value="45-64")
    set.vertex.attribute(net, "identity", v=i, value="TGW")
  }
  
  else if ((net %v% "cat")[i] == 23){
    set.vertex.attribute(net, "race", v=i, value="Black")
    set.vertex.attribute(net, "age_group", v=i, value="45-64")
    set.vertex.attribute(net, "identity", v=i, value="TGW")
  }
  
  else if ((net %v% "cat")[i] == 24){
    set.vertex.attribute(net, "race", v=i, value="Hispanic")
    set.vertex.attribute(net, "age_group", v=i, value="45-64")
    set.vertex.attribute(net, "identity", v=i, value="TGW")
  }
  
  #HRH
  else if ((net %v% "cat")[i] == 25){
    set.vertex.attribute(net, "race", v=i, value="White")
    set.vertex.attribute(net, "age_group", v=i, value="18-24")
    set.vertex.attribute(net, "identity", v=i, value="HRH")
  }
  
  else if ((net %v% "cat")[i] == 26){
    set.vertex.attribute(net, "race", v=i, value="Black")
    set.vertex.attribute(net, "age_group", v=i, value="18-24")
    set.vertex.attribute(net, "identity", v=i, value="HRH")
  }
  
  else if ((net %v% "cat")[i] == 27){
    set.vertex.attribute(net, "race", v=i, value="Hispanic")
    set.vertex.attribute(net, "age_group", v=i, value="18-24")
    set.vertex.attribute(net, "identity", v=i, value="HRH")
  }
  
  else if ((net %v% "cat")[i] == 28){
    set.vertex.attribute(net, "race", v=i, value="White")
    set.vertex.attribute(net, "age_group", v=i, value="25-34")
    set.vertex.attribute(net, "identity", v=i, value="HRH")
  }
  
  else if ((net %v% "cat")[i] == 29){
    set.vertex.attribute(net, "race", v=i, value="Black")
    set.vertex.attribute(net, "age_group", v=i, value="25-34")
    set.vertex.attribute(net, "identity", v=i, value="HRH")
  }
  
  else if ((net %v% "cat")[i] == 30){
    set.vertex.attribute(net, "race", v=i, value="Hispanic")
    set.vertex.attribute(net, "age_group", v=i, value="25-34")
    set.vertex.attribute(net, "identity", v=i, value="HRH")
  }
  
  else if ((net %v% "cat")[i] == 31){
    set.vertex.attribute(net, "race", v=i, value="White")
    set.vertex.attribute(net, "age_group", v=i, value="35-44")
    set.vertex.attribute(net, "identity", v=i, value="HRH")
  }
  
  else if ((net %v% "cat")[i] == 32){
    set.vertex.attribute(net, "race", v=i, value="Black")
    set.vertex.attribute(net, "age_group", v=i, value="35-44")
    set.vertex.attribute(net, "identity", v=i, value="HRH")
  }
  
  else if ((net %v% "cat")[i] == 33){
    set.vertex.attribute(net, "race", v=i, value="Hispanic")
    set.vertex.attribute(net, "age_group", v=i, value="35-44")
    set.vertex.attribute(net, "identity", v=i, value="HRH")
  }
  
  else if ((net %v% "cat")[i] == 34){
    set.vertex.attribute(net, "race", v=i, value="White")
    set.vertex.attribute(net, "age_group", v=i, value="45-64")
    set.vertex.attribute(net, "identity", v=i, value="HRH")
  }
  
  else if ((net %v% "cat")[i] == 35){
    set.vertex.attribute(net, "race", v=i, value="Black")
    set.vertex.attribute(net, "age_group", v=i, value="45-64")
    set.vertex.attribute(net, "identity", v=i, value="HRH")
  }
  
  else if ((net %v% "cat")[i] == 36){
    set.vertex.attribute(net, "race", v=i, value="Hispanic")
    set.vertex.attribute(net, "age_group", v=i, value="45-64")
    set.vertex.attribute(net, "identity", v=i, value="HRH")
  }
}

table(net %v% "cat")
## 
##   1   2   3   4   5   6   7   8   9  10  11  12  14  15  17  18  20  21 
## 227 289 272 625 304 377 429 234 343 620 569 439  22  22  21  33  24  40 
##  23  24  26  27  29  30  32  33  35  36 
##  41  27   7   4   3   5   2   9   7   5
table(net %v% "race")
## 
##    Black Hispanic    White 
##     1523     1576     1901
table(net %v% "age_group")
## 
## 18-24 25-34 35-44 45-64 
##   843  1368  1081  1708
table(net %v% "identity")
## 
##  HRH  MSM  TGW 
##   42 4728  230
save.image(file="init-pop-atts.RData")