Skip to content

Commit 11f9b1d

Browse files
authored
Merge pull request #12 from CDCgov/ep-aging
Add vital dynamics, update network fitting and validation scripts
2 parents 57ae3af + d3b5779 commit 11f9b1d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+8732
-4649
lines changed

.github/workflows/testing.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,5 @@ jobs:
2929
- uses: r-lib/actions/check-r-package@v2
3030
with:
3131
working-directory: ${{ matrix.r_package }}
32+
args: 'c("--no-manual", "--as-cran", "--no-build-vignettes")'
3233
error-on: '"error"'

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#####
22

33
# Specific to this repo
4+
archive/
45
data/surveys
56
data/*.rds
67

.lintr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
linters: linters_with_defaults(object_usage_linter = NULL,
22
line_length_linter(length = 120L),
3-
object_name_linter(styles = c("snake_case", "symbols", "camelCase")))
3+
object_name_linter(styles = c("snake_case", "symbols", "camelCase", "dotted.case")))
44
encoding: "UTF-8"

.pre-commit-config.yaml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ repos:
22
#####
33
# Basic file cleanliness
44
- repo: https://github.com/pre-commit/pre-commit-hooks
5-
rev: v4.5.0
5+
rev: v5.0.0
66
hooks:
77
- id: check-added-large-files
88
- id: check-yaml
@@ -13,31 +13,31 @@ repos:
1313
#####
1414
# Python
1515
- repo: https://github.com/psf/black
16-
rev: 23.10.0
16+
rev: 25.1.0
1717
hooks:
1818
- id: black
1919
args: ['--line-length', '79']
2020
- repo: https://github.com/PyCQA/isort
21-
rev: 5.12.0
21+
rev: 6.0.1
2222
hooks:
2323
- id: isort
2424
args: ['--profile', 'black',
2525
'--line-length', '79']
2626
- repo: https://github.com/astral-sh/ruff-pre-commit
27-
rev: v0.1.0
27+
rev: v0.11.8
2828
hooks:
2929
- id: ruff
3030
#####
3131
# R
3232
- repo: https://github.com/lorenzwalthert/precommit
33-
rev: v0.4.2
33+
rev: v0.4.3.9009
3434
hooks:
3535
- id: style-files
3636
- id: lintr
3737

3838
# Secrets
3939
- repo: https://github.com/Yelp/detect-secrets
40-
rev: v1.4.0
40+
rev: v1.5.0
4141
hooks:
4242
- id: detect-secrets
4343
args: ['--baseline', '.secrets.baseline']

data/nsfg_scripts/01_clean_nsfg_2017_2019.R

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -368,10 +368,18 @@ d <- d |> mutate(
368368
## Age Group (& 50 yr old adj) ------- #############
369369
# make all 50-year olds 49.9 (they were 49 at screener interview,)
370370
d <- d |>
371-
mutate(age = ifelse(age == 50, 49.9, age))
372-
373-
# make age groups
374-
d$age_group <- cut(round(d$age), 7)
371+
mutate(
372+
age = ifelse(age == 50, 49.9, age),
373+
age_group = dplyr::case_when(
374+
age < 20 ~ 1,
375+
age >= 20 & age < 25 ~ 2,
376+
age >= 25 & age < 30 ~ 3,
377+
age >= 30 & age < 35 ~ 4,
378+
age >= 35 & age < 40 ~ 5,
379+
age >= 40 & age < 45 ~ 6,
380+
age >= 45 ~ 7
381+
)
382+
)
375383

376384
d <- d |> ungroup()
377385

@@ -571,9 +579,18 @@ m <- m |> mutate(
571579

572580
# Age Group --------- ################
573581
m <- m |>
574-
mutate(age = ifelse(age == 50, 49.9, age))
575-
576-
m$age_group <- cut(round(m$age), 7)
582+
mutate(
583+
age = ifelse(age == 50, 49.9, age),
584+
age_group = dplyr::case_when(
585+
age < 20 ~ 1,
586+
age >= 20 & age < 25 ~ 2,
587+
age >= 25 & age < 30 ~ 3,
588+
age >= 30 & age < 35 ~ 4,
589+
age >= 35 & age < 40 ~ 5,
590+
age >= 40 & age < 45 ~ 6,
591+
age >= 45 ~ 7
592+
)
593+
)
577594

578595
m <- m |> ungroup()
579596

data/nsfg_scripts/02_convert_data_to_long.R

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
# and inst partners
55

66
# nolint start
7-
87
source(here::here("data", "nsfg_scripts", "egodata_functions.R"))
98

109
w <- readRDS(here::here("data", "nsfg_wide.rds"))
@@ -20,11 +19,11 @@ ego_vars <- c(
2019
"p_cond_month", "condom_use", "condom_use2"
2120
)
2221

23-
egos <- w |> select(all_of(ego_vars))
22+
egos <- w |> dplyr::select(dplyr::all_of(ego_vars))
2423

2524
# define alter variables in wide data
2625
alter_vars <- c(
27-
"ego", "weight", "race", "age_group", "age", "female", # ego chars
26+
"ego", "weight", "race", "age_group", "age", "female", "secu", "sest", # ego chars
2827
"once1", "rel1", "page1", "curr1", "partdur1", "prace1",
2928
"once2", "rel2", "page2", "curr2", "partdur2", "prace2",
3029
"once3", "rel3", "page3", "curr3", "partdur3", "prace3"
@@ -83,8 +82,17 @@ a3$alter_age[agemiss] <- predict(partner_age_glm, newdata = testdat, type = "res
8382

8483
a4 <- a3 |>
8584
dplyr::mutate(alter_age = ifelse(alter_age == 50, 49.9, alter_age)) |>
86-
dplyr::mutate(alter_age = ifelse(alter_age > 50, NA, alter_age)) |>
8785
dplyr::mutate(alter_age = ifelse(alter_age < 15, 15, alter_age)) |>
86+
dplyr::mutate(olderpartner = ifelse(alter_age > 50, 1, 0)) |>
87+
dplyr::mutate(alter_age_group = dplyr::case_when(
88+
alter_age < 20 ~ 1,
89+
alter_age >= 20 & alter_age < 25 ~ 2,
90+
alter_age >= 25 & alter_age < 30 ~ 3,
91+
alter_age >= 30 & alter_age < 35 ~ 4,
92+
alter_age >= 35 & alter_age < 40 ~ 5,
93+
alter_age >= 40 & alter_age < 45 ~ 6,
94+
alter_age >= 45 ~ 7
95+
)) |>
8896
dplyr::mutate( # race cat
8997
alter_race = ifelse(alter_race == 1, "H",
9098
ifelse(alter_race == 2, "W",
@@ -95,7 +103,7 @@ a4 <- a3 |>
95103
)
96104
)
97105

98-
a4$alter_age_group <- cut(round(a4$alter_age), 7)
106+
dat_oldpartners <- a4 |> dplyr::filter(olderpartner == 1)
99107

100108
a5 <- a4 |>
101109
dplyr::mutate(
@@ -117,10 +125,21 @@ a5 <- a4 |>
117125

118126

119127
# finally, remove any remaining rows with NA reponses in key variables
128+
# and remove any row with alter_age > 50
120129
a6 <- a5 |>
121-
dplyr::filter(!is.na(alter_age), !is.na(rel2), !is.na(alter_race))
130+
dplyr::filter(!is.na(alter_age), !is.na(rel2), !is.na(alter_race), alter_age < 50)
122131

123132
# save out
124133
saveRDS(a6, here::here("data", "nsfg_long.rds"))
125134

135+
# correct degree terms in wide data based on older partners, add older partner flag
136+
egos_main_olderpartner <- dat_oldpartners$ego[dat_oldpartners$rel2 == "Marriage/Cohab"]
137+
egos_cas_olderpartner <- dat_oldpartners$ego[dat_oldpartners$rel2 == "Casual/Other"]
138+
139+
w$deg_main[w$ego %in% egos_main_olderpartner] <- 0
140+
w$deg_casual[w$ego %in% egos_cas_olderpartner] <- 0
141+
w$olderpartner <- 0
142+
w$olderpartner[w$ego %in% egos_main_olderpartner] <- 1 # we really only care about mains bc casual parts are short
143+
144+
saveRDS(w, here::here("data", "nsfg_wide.rds"))
126145
# nolint end

epimodel-sti/DESCRIPTION

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,11 @@ Imports:
1818
networkDynamic (>= 0.11.3),
1919
statnet.common,
2020
progressr,
21+
tibble,
2122
dplyr,
2223
networkLite (>= 1.0.1),
2324
collections,
25+
rlang
2426
Suggests:
2527
quarto,
2628
testthat (>= 3.0.0),
@@ -32,3 +34,4 @@ Encoding: UTF-8
3234
Config/testthat/edition: 3
3335
Roxygen: list(markdown = TRUE)
3436
LazyData: true
37+
LazyDataCompression: xz

epimodel-sti/NAMESPACE

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,36 @@ export(calc_cross_network)
77
export(calc_edges)
88
export(calc_joint_nodefactor)
99
export(calc_nodecov_age)
10+
export(calc_nodematch)
1011
export(calc_single_attr_nodefactor)
1112
export(calc_targets)
1213
export(check_conditions)
1314
export(check_targets)
14-
export(control_mgen)
1515
export(generate_init_network)
1616
export(get_nw_attr_vecs)
17-
export(init_mgen)
1817
export(initialize_mgen)
1918
export(inst_correction)
2019
export(matrix_symmetrical)
21-
export(param_mgen)
20+
export(mgen_infection)
21+
export(mod_aging)
2222
export(progression_mgen)
23-
export(resim_nets_mgen)
24-
export(resimnet_updates)
23+
export(resimnet_updates_sti)
2524
export(testing_mgen)
2625
export(trackers_mgen)
27-
export(transmit_mgen)
2826
export(tx_mgen)
27+
importFrom(EpiModel,append_attr)
28+
importFrom(EpiModel,append_core_attr)
29+
importFrom(EpiModel,apportion_lr)
30+
importFrom(EpiModel,discord_edgelist)
31+
importFrom(EpiModel,get_attr)
32+
importFrom(EpiModel,get_edgelist)
33+
importFrom(EpiModel,get_epi)
34+
importFrom(EpiModel,get_param)
35+
importFrom(EpiModel,set_attr)
36+
importFrom(EpiModel,set_epi)
37+
importFrom(EpiModel,set_transmat)
38+
importFrom(network,"%v%")
39+
importFrom(network,list.vertex.attributes)
40+
importFrom(rlang,.data)
41+
importFrom(stats,rbinom)
42+
importFrom(stats,rpois)

0 commit comments

Comments
 (0)