── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.2.0 ✔ readr 2.2.0
✔ forcats 1.0.1 ✔ stringr 1.6.0
✔ ggplot2 4.0.2 ✔ tibble 3.3.1
✔ lubridate 1.9.5 ✔ tidyr 1.3.2
✔ purrr 1.2.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(future)library(mice)
Attaching package: 'mice'
The following object is masked from 'package:stats':
filter
The following objects are masked from 'package:base':
cbind, rbind
# Calculate general frequencies and proportions### Bad mental health daysdf |>filter(!is.na(mhdays)) |>summarize(median =median(mhdays),mean =mean(mhdays),sd =sd(mhdays),mad =mad(mhdays),rangemin =min(mhdays),rangemax =max(mhdays),IQR =IQR(mhdays) )
median mean sd mad rangemin rangemax IQR
1 5 8.254532 8.235722 7.413 0 30 10
### Proportion of all sample who reported any gamblingsum(df$gcq_items_missing !=8) /nrow(df)
[1] 0.4177186
### Proportion of all sample who reported any gambling consequencessum(df$gcq_count !=0, na.rm =TRUE) /nrow(df)
[1] 0.04301075
### Proportion all sample who reported any gambling behaviors who reported any gambling consequencessum(df$gcq_count !=0, na.rm =TRUE) /sum(df$gcq_items_missing !=8)
### Proportion of each latent class who reported any gambling consequencesdf |>group_by(lca_class) |>filter(gcq_count !=0, na.rm =TRUE) |>summarize(n_any_gcq =n()) |>mutate(prop_latent_class = (n_any_gcq / total_latent_class_membership) *100)
## Age by latent classdf |>group_by(lca_class, age_cat) |>summarize(n =n()) |>mutate(prop = (n /sum(n)) *100)
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and age_cat.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, age_cat))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and ethnicity_cat.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, ethnicity_cat))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and race_cat.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, race_cat))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
# A tibble: 18 × 4
# Groups: lca_class [3]
lca_class race_cat n prop
<fct> <fct> <int> <dbl>
1 3 White 2426 74.9
2 3 Asian 336 10.4
3 3 Black/African American 179 5.53
4 3 Multiracial 149 4.60
5 3 Other 117 3.61
6 3 <NA> 32 0.988
7 1 White 274 85.9
8 1 Asian 13 4.08
9 1 Black/African American 18 5.64
10 1 Multiracial 7 2.19
11 1 Other 6 1.88
12 1 <NA> 1 0.313
13 2 White 609 84.6
14 2 Asian 30 4.17
15 2 Black/African American 25 3.47
16 2 Multiracial 34 4.72
17 2 Other 17 2.36
18 2 <NA> 5 0.694
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and gender_cat.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, gender_cat))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
# A tibble: 11 × 4
# Groups: lca_class [3]
lca_class gender_cat n prop
<fct> <fct> <int> <dbl>
1 3 Female 2165 66.8
2 3 Male 862 26.6
3 3 Other 189 5.84
4 3 <NA> 23 0.710
5 1 Female 82 25.7
6 1 Male 232 72.7
7 1 Other 5 1.57
8 2 Female 436 60.6
9 2 Male 252 35
10 2 Other 31 4.31
11 2 <NA> 1 0.139
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and studentstatus_cat.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, studentstatus_cat))` for per-operation
grouping (`?dplyr::dplyr_by`) instead.
# A tibble: 9 × 4
# Groups: lca_class [3]
lca_class studentstatus_cat n prop
<fct> <fct> <int> <dbl>
1 3 Full time 3109 96.0
2 3 Part time 122 3.77
3 3 <NA> 8 0.247
4 1 Full time 306 95.9
5 1 Part time 12 3.76
6 1 <NA> 1 0.313
7 2 Full time 684 95
8 2 Part time 34 4.72
9 2 <NA> 2 0.278
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and residence_cat.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, residence_cat))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
# A tibble: 8 × 4
# Groups: lca_class [3]
lca_class residence_cat n prop
<fct> <fct> <int> <dbl>
1 3 On campus 1661 51.3
2 3 Off campus 1577 48.7
3 3 <NA> 1 0.0309
4 1 On campus 173 54.2
5 1 Off campus 146 45.8
6 2 On campus 397 55.1
7 2 Off campus 322 44.7
8 2 <NA> 1 0.139
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and greekmem_cat.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, greekmem_cat))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
## Any alcohol use in the monthdf |>group_by(lca_class, alcmo_dich) |>summarize(n =n()) |>mutate(prop = (n /sum(n)) *100)
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and alcmo_dich.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, alcmo_dich))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
## Any marijuana use in the monthdf |>group_by(lca_class, marmo_dich) |>summarize(n =n()) |>mutate(prop = (n /sum(n)) *100)
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and marmo_dich.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, marmo_dich))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
## Any e-cigarette use in the monthdf |>group_by(lca_class, ecigmo_dich) |>summarize(n =n()) |>mutate(prop = (n /sum(n)) *100)
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and ecigmo_dich.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, ecigmo_dich))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
## Any smoking use in the monthdf |>group_by(lca_class, smokmo_dich) |>summarize(n =n()) |>mutate(prop = (n /sum(n)) *100)
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and smokmo_dich.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, smokmo_dich))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
## Any cigar use in the monthdf |>group_by(lca_class, cigarmo_dich) |>summarize(n =n()) |>mutate(prop = (n /sum(n)) *100)
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and cigarmo_dich.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, cigarmo_dich))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
## Any prescription stimulant use in the monthdf |>group_by(lca_class, rxstmo_dich) |>summarize(n =n()) |>mutate(prop = (n /sum(n)) *100)
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and rxstmo_dich.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, rxstmo_dich))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
## Any prescription painkiller use in the monthdf |>group_by(lca_class, rxpkmo_dich) |>summarize(n =n()) |>mutate(prop = (n /sum(n)) *100)
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and rxpkmo_dich.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, rxpkmo_dich))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
## Any prescription sedative use in the monthdf |>group_by(lca_class, rxsedmo_dich) |>summarize(n =n()) |>mutate(prop = (n /sum(n)) *100)
`summarise()` has regrouped the output.
ℹ Summaries were computed grouped by lca_class and rxsedmo_dich.
ℹ Output is grouped by lca_class.
ℹ Use `summarise(.groups = "drop_last")` to silence this message.
ℹ Use `summarise(.by = c(lca_class, rxsedmo_dich))` for per-operation grouping
(`?dplyr::dplyr_by`) instead.
compute_or_table <-function(pooled_model, model_label, ref_class =3) { s <-summary(pooled_model)# number of rows per outcome contrast n_params_per_contrast <-length(unique(s$term)) n_contrasts <-nrow(s) / n_params_per_contrast# use the actual non-reference class labels, not ref_class + 1, +2, ... all_classes <-seq_len(n_contrasts +1) nonref_classes <- all_classes[all_classes != ref_class]if (length(nonref_classes) != n_contrasts) {stop("Mismatch between detected contrasts and class labels.") } s$contrast <-rep(paste0("Class ", nonref_classes, " vs. Class ", ref_class),each = n_params_per_contrast ) s |> dplyr::mutate(OR =round(exp(estimate), 3),CI_lower =round(exp(estimate -1.96* std.error), 3),CI_upper =round(exp(estimate +1.96* std.error), 3),p_value =round(p.value, 4),sig = dplyr::case_when( p.value < .001~"***", p.value < .01~"**", p.value < .05~"*", p.value < .10~".",TRUE~"" ),model = model_label ) |> dplyr::select(model, contrast, term, OR, CI_lower, CI_upper, p_value, sig)}or_1 <-compute_or_table(pooled1, "Model 1")or_2 <-compute_or_table(pooled2, "Model 2")or_3 <-compute_or_table(pooled3, "Model 3")or_4 <-compute_or_table(pooled4, "Model 4")all_or <-bind_rows("Model 1"= or_1,"Model 2"= or_2,"Model 3"= or_3,"Model 4"= or_4,)all_or
model contrast term OR CI_lower
1 Model 1 Class 1 vs. Class 3 (Intercept) 0.098 0.088
2 Model 1 Class 2 vs. Class 3 (Intercept) 0.222 0.205
3 Model 2 Class 1 vs. Class 3 (Intercept) 0.054 0.041
4 Model 2 Class 1 vs. Class 3 age_cat<21 0.626 0.483
5 Model 2 Class 1 vs. Class 3 gender_catMale 7.658 5.856
6 Model 2 Class 1 vs. Class 3 gender_catOther 0.754 0.301
7 Model 2 Class 1 vs. Class 3 race_catAsian 0.244 0.136
8 Model 2 Class 1 vs. Class 3 race_catBlack/African American 0.937 0.551
9 Model 2 Class 1 vs. Class 3 race_catMultiracial 0.444 0.201
10 Model 2 Class 1 vs. Class 3 race_catOther 0.495 0.205
11 Model 2 Class 1 vs. Class 3 ethnicity_catHispanic/Latino 0.804 0.521
12 Model 2 Class 1 vs. Class 3 studentstatus_catPart time 0.911 0.479
13 Model 2 Class 1 vs. Class 3 residence_catOff campus 0.741 0.563
14 Model 2 Class 1 vs. Class 3 greekmem_catGreek membership 2.539 1.848
15 Model 2 Class 2 vs. Class 3 (Intercept) 0.260 0.222
16 Model 2 Class 2 vs. Class 3 age_cat<21 0.793 0.666
17 Model 2 Class 2 vs. Class 3 gender_catMale 1.547 1.296
18 Model 2 Class 2 vs. Class 3 gender_catOther 0.815 0.549
19 Model 2 Class 2 vs. Class 3 race_catAsian 0.326 0.221
20 Model 2 Class 2 vs. Class 3 race_catBlack/African American 0.580 0.377
21 Model 2 Class 2 vs. Class 3 race_catMultiracial 0.919 0.623
22 Model 2 Class 2 vs. Class 3 race_catOther 0.614 0.357
23 Model 2 Class 2 vs. Class 3 ethnicity_catHispanic/Latino 0.931 0.716
24 Model 2 Class 2 vs. Class 3 studentstatus_catPart time 1.138 0.764
25 Model 2 Class 2 vs. Class 3 residence_catOff campus 0.842 0.703
26 Model 2 Class 2 vs. Class 3 greekmem_catGreek membership 1.514 1.189
27 Model 3 Class 1 vs. Class 3 (Intercept) 0.022 0.014
28 Model 3 Class 1 vs. Class 3 age_cat<21 0.865 0.654
29 Model 3 Class 1 vs. Class 3 gender_catMale 6.756 5.068
30 Model 3 Class 1 vs. Class 3 gender_catOther 0.738 0.293
31 Model 3 Class 1 vs. Class 3 race_catAsian 0.361 0.198
32 Model 3 Class 1 vs. Class 3 race_catBlack/African American 1.147 0.661
33 Model 3 Class 1 vs. Class 3 race_catMultiracial 0.472 0.212
34 Model 3 Class 1 vs. Class 3 race_catOther 0.501 0.201
35 Model 3 Class 1 vs. Class 3 ethnicity_catHispanic/Latino 0.832 0.532
36 Model 3 Class 1 vs. Class 3 studentstatus_catPart time 0.946 0.491
37 Model 3 Class 1 vs. Class 3 residence_catOff campus 0.787 0.592
38 Model 3 Class 1 vs. Class 3 greekmem_catGreek membership 1.833 1.307
39 Model 3 Class 1 vs. Class 3 alcmo_dichAny 1.331 0.901
40 Model 3 Class 1 vs. Class 3 marmo_dichAny 1.087 0.789
41 Model 3 Class 1 vs. Class 3 ecigmo_dichAny 1.964 1.389
42 Model 3 Class 1 vs. Class 3 smokmo_dichAny 1.167 0.823
43 Model 3 Class 1 vs. Class 3 cigarmo_dichAny 2.326 1.669
44 Model 3 Class 2 vs. Class 3 (Intercept) 0.191 0.149
45 Model 3 Class 2 vs. Class 3 age_cat<21 0.893 0.741
46 Model 3 Class 2 vs. Class 3 gender_catMale 1.496 1.243
47 Model 3 Class 2 vs. Class 3 gender_catOther 0.802 0.538
48 Model 3 Class 2 vs. Class 3 race_catAsian 0.376 0.254
49 Model 3 Class 2 vs. Class 3 race_catBlack/African American 0.631 0.409
50 Model 3 Class 2 vs. Class 3 race_catMultiracial 0.928 0.627
51 Model 3 Class 2 vs. Class 3 race_catOther 0.618 0.358
52 Model 3 Class 2 vs. Class 3 ethnicity_catHispanic/Latino 0.944 0.725
53 Model 3 Class 2 vs. Class 3 studentstatus_catPart time 1.142 0.765
54 Model 3 Class 2 vs. Class 3 residence_catOff campus 0.854 0.711
55 Model 3 Class 2 vs. Class 3 greekmem_catGreek membership 1.356 1.058
56 Model 3 Class 2 vs. Class 3 alcmo_dichAny 1.062 0.845
57 Model 3 Class 2 vs. Class 3 marmo_dichAny 1.100 0.887
58 Model 3 Class 2 vs. Class 3 ecigmo_dichAny 1.257 0.996
59 Model 3 Class 2 vs. Class 3 smokmo_dichAny 1.166 0.909
60 Model 3 Class 2 vs. Class 3 cigarmo_dichAny 1.467 1.128
61 Model 4 Class 1 vs. Class 3 (Intercept) 0.025 0.016
62 Model 4 Class 1 vs. Class 3 age_cat<21 0.928 0.696
63 Model 4 Class 1 vs. Class 3 gender_catMale 5.906 4.390
64 Model 4 Class 1 vs. Class 3 gender_catOther 0.775 0.299
65 Model 4 Class 1 vs. Class 3 race_catAsian 0.262 0.136
66 Model 4 Class 1 vs. Class 3 race_catBlack/African American 1.074 0.607
67 Model 4 Class 1 vs. Class 3 race_catMultiracial 0.445 0.196
68 Model 4 Class 1 vs. Class 3 race_catOther 0.522 0.203
69 Model 4 Class 1 vs. Class 3 ethnicity_catHispanic/Latino 0.777 0.493
70 Model 4 Class 1 vs. Class 3 studentstatus_catPart time 0.907 0.458
71 Model 4 Class 1 vs. Class 3 residence_catOff campus 0.752 0.561
72 Model 4 Class 1 vs. Class 3 greekmem_catGreek membership 1.702 1.198
73 Model 4 Class 1 vs. Class 3 alcmo_dichAny 1.445 0.964
74 Model 4 Class 1 vs. Class 3 marmo_dichAny 1.114 0.798
75 Model 4 Class 1 vs. Class 3 ecigmo_dichAny 1.970 1.379
76 Model 4 Class 1 vs. Class 3 smokmo_dichAny 1.159 0.807
77 Model 4 Class 1 vs. Class 3 cigarmo_dichAny 2.228 1.582
78 Model 4 Class 1 vs. Class 3 rxstmo_dichAny 1.745 0.975
79 Model 4 Class 1 vs. Class 3 rxpkmo_dichAny 1.340 0.606
80 Model 4 Class 1 vs. Class 3 rxsedmo_dichAny 0.597 0.220
81 Model 4 Class 1 vs. Class 3 mhdays 0.962 0.944
82 Model 4 Class 1 vs. Class 3 gcq_count 3.885 2.923
83 Model 4 Class 2 vs. Class 3 (Intercept) 0.179 0.137
84 Model 4 Class 2 vs. Class 3 age_cat<21 0.912 0.755
85 Model 4 Class 2 vs. Class 3 gender_catMale 1.447 1.195
86 Model 4 Class 2 vs. Class 3 gender_catOther 0.739 0.489
87 Model 4 Class 2 vs. Class 3 race_catAsian 0.317 0.209
88 Model 4 Class 2 vs. Class 3 race_catBlack/African American 0.602 0.386
89 Model 4 Class 2 vs. Class 3 race_catMultiracial 0.870 0.582
90 Model 4 Class 2 vs. Class 3 race_catOther 0.646 0.373
91 Model 4 Class 2 vs. Class 3 ethnicity_catHispanic/Latino 0.914 0.699
92 Model 4 Class 2 vs. Class 3 studentstatus_catPart time 1.146 0.761
93 Model 4 Class 2 vs. Class 3 residence_catOff campus 0.851 0.706
94 Model 4 Class 2 vs. Class 3 greekmem_catGreek membership 1.352 1.050
95 Model 4 Class 2 vs. Class 3 alcmo_dichAny 1.081 0.856
96 Model 4 Class 2 vs. Class 3 marmo_dichAny 1.060 0.849
97 Model 4 Class 2 vs. Class 3 ecigmo_dichAny 1.234 0.972
98 Model 4 Class 2 vs. Class 3 smokmo_dichAny 1.135 0.880
99 Model 4 Class 2 vs. Class 3 cigarmo_dichAny 1.406 1.075
100 Model 4 Class 2 vs. Class 3 rxstmo_dichAny 1.649 1.058
101 Model 4 Class 2 vs. Class 3 rxpkmo_dichAny 1.637 0.935
102 Model 4 Class 2 vs. Class 3 rxsedmo_dichAny 0.914 0.474
103 Model 4 Class 2 vs. Class 3 mhdays 0.999 0.988
104 Model 4 Class 2 vs. Class 3 gcq_count 3.129 2.398
CI_upper p_value sig
1 0.110 0.0000 ***
2 0.241 0.0000 ***
3 0.071 0.0000 ***
4 0.810 0.0004 ***
5 10.016 0.0000 ***
6 1.890 0.5473
7 0.437 0.0000 ***
8 1.594 0.8109
9 0.982 0.0451 *
10 1.198 0.1190
11 1.243 0.3269
12 1.730 0.7749
13 0.975 0.0326 *
14 3.489 0.0000 ***
15 0.303 0.0000 ***
16 0.943 0.0086 **
17 1.846 0.0000 ***
18 1.212 0.3124
19 0.481 0.0000 ***
20 0.893 0.0133 *
21 1.357 0.6721
22 1.057 0.0785 .
23 1.210 0.5940
24 1.696 0.5238
25 1.010 0.0635 .
26 1.929 0.0008 ***
27 0.035 0.0000 ***
28 1.143 0.3072
29 9.006 0.0000 ***
30 1.860 0.5191
31 0.659 0.0009 ***
32 1.991 0.6267
33 1.054 0.0670 .
34 1.246 0.1372
35 1.300 0.4184
36 1.823 0.8681
37 1.048 0.1010
38 2.570 0.0004 ***
39 1.968 0.1512
40 1.498 0.6097
41 2.776 0.0001 ***
42 1.653 0.3858
43 3.242 0.0000 ***
44 0.243 0.0000 ***
45 1.075 0.2304
46 1.802 0.0000 ***
47 1.195 0.2774
48 0.557 0.0000 ***
49 0.973 0.0374 *
50 1.373 0.7089
51 1.067 0.0843 .
52 1.228 0.6658
53 1.705 0.5164
54 1.026 0.0922 .
55 1.737 0.0161 *
56 1.335 0.6038
57 1.363 0.3864
58 1.587 0.0545 .
59 1.495 0.2263
60 1.907 0.0043 **
61 0.041 0.0000 ***
62 1.237 0.6106
63 7.945 0.0000 ***
64 2.004 0.5986
65 0.507 0.0001 ***
66 1.902 0.8059
67 1.009 0.0525 .
68 1.343 0.1774
69 1.224 0.2774
70 1.797 0.7792
71 1.008 0.0567 .
72 2.420 0.0030 **
73 2.167 0.0748 .
74 1.555 0.5256
75 2.815 0.0002 ***
76 1.666 0.4238
77 3.140 0.0000 ***
78 3.124 0.0609 .
79 2.966 0.4696
80 1.616 0.3099
81 0.981 0.0001 ***
82 5.163 0.0000 ***
83 0.233 0.0000 ***
84 1.102 0.3418
85 1.753 0.0002 ***
86 1.115 0.1495
87 0.480 0.0000 ***
88 0.940 0.0256 *
89 1.299 0.4956
90 1.121 0.1203
91 1.196 0.5136
92 1.725 0.5142
93 1.026 0.0903 .
94 1.742 0.0196 *
95 1.366 0.5107
96 1.324 0.6047
97 1.567 0.0842 .
98 1.466 0.3297
99 1.840 0.0129 *
100 2.569 0.0271 *
101 2.867 0.0849 .
102 1.762 0.7873
103 1.009 0.8002
104 4.083 0.0000 ***
# Make forest plot for final modelor_4$labels <- dplyr::recode( or_4$term,"(Intercept)"="(Intercept)","age_cat<21"="Age: <21","gender_catMale"="Gender: Male","gender_catOther"="Gender: Other","race_catAsian"="Race: Asian","race_catBlack/African American"="Race: Black/African American","race_catMultiracial"="Race: Multiracial","race_catOther"="Race: Other","ethnicity_catHispanic/Latino"="Ethnicity: Hispanic/Latino","studentstatus_catPart time"="Student Status: Part Time","residence_catOff campus"="Residence: Off Campus","greekmem_catGreek membership"="Greek Life Membership","alcmo_dichAny"="Alcohol Use: Any","marmo_dichAny"="Marijuana Use: Any","ecigmo_dichAny"="E-Cigarette Use: Any","smokmo_dichAny"="Smoking Use: Any","cigarmo_dichAny"="Cigar Use: Any","rxstmo_dichAny"="Prescription Stimulant Use: Any","rxpkmo_dichAny"="Prescription Painkillers: Any","rxsedmo_dichAny"="Prescription Sedative Use: Any","mhdays"="Number of Poor Mental Health Days","gcq_count"="Number of Gambling Consequences")or_4 |>mutate(labels =fct_reorder(labels, desc(OR))) |>ggplot(aes(x = OR, y = labels, color = contrast)) +geom_vline(xintercept =1, linetype ="dashed", color ="gray50") +geom_pointrange(aes(xmin = CI_lower, xmax = CI_upper),position =position_dodge(width =0.5) ) +## scale_x_log10() +labs(title ="Forest Plot of Odds Ratios",x ="Odds Ratio",y =NULL,color ="Outcome Level" ) +theme_bw(base_size =11) +theme(strip.text =element_text(size =8.5),axis.text.y =element_text(size =9),panel.spacing =unit(0.8, "cm") )