For future reference, let’s tabulate the unique sections which are in the basic science realm. This can be used to label basic sections in the future. N=10
scores %>%
filter(basic == 1) %>%
count(subcat) %>%
arrange(desc(n))
## # A tibble: 10 x 2
## subcat n
## <chr> <int>
## 1 IBD: Genomics and Gene Function 22
## 2 IBD: Microbiome Role in Intestinal Inflammation 18
## 3 Animal Models: Pre-Clinical Treatment of Intestinal Inflammation 17
## 4 IBD: Cytokines, Signaling and Receptors 15
## 5 Intestinal Inflammation, Fibrosis and Regeneration 15
## 6 Role of the Gut Microbiome and Pathogens in Immune and Inflammatory Di… 14
## 7 IBD: Innate and Adaptive Host Defenses 11
## 8 Mucosal Innate Function and Innate Host Defense: Inflammatory Bowel Di… 5
## 9 Non-Immune Cells in Intestinal Inflammation: Epithelium and Stroma 5
## 10 Viral, Eukaryote, and Prokaryote Members of the Gut Microbiome 1
Now let us do clinical subcategories, N =20
scores %>%
filter(clinical == 1) %>%
count(subcat) %>%
arrange(desc(n))
## # A tibble: 20 x 2
## subcat n
## <chr> <int>
## 1 IBD: Natural History and Outcomes 45
## 2 IBD: Epidemiology 44
## 3 IBD: Disease Activity Assessment 39
## 4 IBD: Disease Complications 39
## 5 IBD: Uncontrolled Therapeutic Observations in Humans Biologic 38
## 6 IBD: Controlled Clinical Trials in Humans 36
## 7 IBD: Therapeutic Monitoring 31
## 8 IBD: Practice Management, Quality of Care, Quality Assurance 23
## 9 IBD: Quality of Life and Psychosocial Care 23
## 10 IBD: Comparative Effectiveness Studies 21
## 11 IBD: Special Populations, Conception, Adolescent, and Older 21
## 12 IBD: Adverse Events Related to Therapy 20
## 13 COVID and GI 17
## 14 IBD: Diagnostics in IBD 14
## 15 Diarrheal Disorders: Bacterial Overgrowth - Drug Induced and Other Ent… 11
## 16 IBD: Uncontrolled Therapeutic Observations in Humans Non-Biologic 10
## 17 Pediatric IBD: Clinical and Translational Studies 6
## 18 Microbial-Based Therapy 4
## 19 Health Care Delivery and Policy (Practice Management Including Telehea… 2
## 20 Health Disparities and Global Health 2
Now let us do cross-sectional subcategories, N =10
scores %>%
filter(cross_sectional == 1) %>%
select(subcat) %>%
distinct(subcat)
## # A tibble: 10 x 1
## subcat
## <chr>
## 1 COVID and GI
## 2 Diarrheal Disorders: Bacterial Overgrowth - Drug Induced and Other Enterocol…
## 3 Health Care Delivery and Policy (Practice Management Including Telehealth & …
## 4 Health Disparities and Global Health
## 5 IBD: Microbiome Role in Intestinal Inflammation
## 6 IBD: Special Populations, Conception, Adolescent, and Older
## 7 Intestinal Inflammation, Fibrosis and Regeneration
## 8 Microbial-Based Therapy
## 9 Pediatric IBD: Clinical and Translational Studies
## 10 Role of the Gut Microbiome and Pathogens in Immune and Inflammatory Diseases
Let’s see who got closest to a mean of 4 and SD of 4.7, and count the N for each subcategory
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 30 x 4
## subcat mean sd n
## <chr> <dbl> <dbl> <int>
## 1 Microbial-Based Therapy 4.6 0.327 4
## 2 Health Care Delivery and Policy (Practice Management Inclu… 4.5 0.354 2
## 3 Pediatric IBD: Clinical and Translational Studies 4.02 0.436 6
## 4 COVID and GI 4.59 0.507 17
## 5 IBD: Special Populations, Conception, Adolescent, and Older 4.65 0.529 21
## 6 IBD: Natural History and Outcomes 4.45 0.569 45
## 7 Animal Models: Pre-Clinical Treatment of Intestinal Inflam… 3.86 0.638 17
## 8 IBD: Cytokines, Signaling and Receptors 4.46 0.651 15
## 9 IBD: Uncontrolled Therapeutic Observations in Humans Biolo… 4.41 0.672 38
## 10 IBD: Disease Complications 4.89 0.675 39
## # … with 20 more rows
Let’s plot these compared to our goal of mean =4, SD = 1.5.
scores %>%
group_by(subcat) %>%
summarize(mean = mean(avg),
sd = sd(avg),
n = n()) %>%
ggplot(aes(x = mean,
y = fct_reorder(stringr::str_wrap(subcat, 75), mean, .desc = TRUE))) +
geom_point() +
geom_errorbar(aes(xmin = mean - sd, xmax = mean + sd)) +
xlim(2,6) +
labs(y = "",
title = "Mean and Standard Deviation by Subcategory within IMIBD",
subtitle = "goal of mean = 4, SD = 1.5") +
theme_linedraw(base_size = 14) +
theme(plot.title.position = "plot",
plot.caption = element_text(hjust=0),
plot.caption.position = "plot") +
geom_vline(xintercept = 2.5) +
geom_vline(xintercept = 5.5) +
geom_vline(xintercept = 4, color = "blue")
## `summarise()` ungrouping output (override with `.groups` argument)
Let’s check
scores %>%
group_by(basic) %>%
summarize(mean = mean(avg))
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 2 x 2
## basic mean
## <dbl> <dbl>
## 1 0 4.51
## 2 1 4.10
# basic abstracts have lower (better) scores - avg 4.10 vs 4.51 clinical
scores %>%
infer::t_test(response = avg,
explanatory = basic)
## Warning: The statistic is based on a difference or ratio; by default, for
## difference-based statistics, the explanatory variable is subtracted in the order
## "0" - "1", or divided in the order "0" / "1" for ratio-based statistics. To
## specify this order yourself, supply `order = c("0", "1")`.
## # A tibble: 1 x 6
## statistic t_df p_value alternative lower_ci upper_ci
## <dbl> <dbl> <dbl> <chr> <dbl> <dbl>
## 1 4.66 183. 0.00000607 two.sided 0.237 0.585
# and this is a significant difference
We will adjust the scores within each group to a mean of 4 and SD of 1.5 to produce adjusted scores.
Two of the adjusted scores are so good (so much better than their competition) that they end up in the negative.
scores %>%
group_by(subcat) %>%
summarize(mean_subcat = mean(avg),
sd_subcat = sd(avg),
n_subcat = n()) %>%
right_join(scores, by = "subcat") %>%
mutate(z_score = (avg - mean_subcat)/sd_subcat) %>%
mutate(adj_score = 4 + z_score*1.5) %>%
select(-cat, -all_decisions, -c(x21:x28)) %>%
relocate(id, adj_score, avg, title) ->
scores
## `summarise()` ungrouping output (override with `.groups` argument)
Planning for picking abstracts for the Big Plenaries (Clinical and Basic) and the IMIBD Plenary.
Nominate 1-2 basic, 2-3 clinical for Big Plenaries,
Pick another 3 for the IMIBD Plenary.
Now to sort and filter these.
# best adjusted scores
scores %>%
arrange(adj_score) %>%
filter(previous_presentation_or_submission_y_n == "AGA Previous Presentation No") %>%
slice(1:10)->
best_adj
# best raw scores
scores %>%
arrange(avg) %>%
filter(previous_presentation_or_submission_y_n == "AGA Previous Presentation No") %>%
slice(1:10) ->
best_raw
# print any that mention plenary
scores %>%
filter(str_detect(last_decision, "lenary")) %>%
filter(previous_presentation_or_submission_y_n == "AGA Previous Presentation No") %>%
arrange(adj_score) %>%
slice(1:10) ->
mention_plenary
# top basic
scores %>%
arrange(adj_score) %>%
filter(previous_presentation_or_submission_y_n == "AGA Previous Presentation No") %>%
filter(basic == 1) %>%
slice(1:10) ->
top_basic
Let’s get started
# build vectors
adj_vec <- best_adj %>%
pull(id)
raw_vec <- best_raw %>%
pull(id)
plenary_vec <- mention_plenary %>%
pull(id)
top_basic <- top_basic %>%
pull(id)
scores %>%
mutate(best_adj = 0,
best_raw = 0,
mention_plenary = 0,
best_basic = 0) %>%
mutate(best_adj = case_when(id %in% adj_vec ~ 1,
TRUE ~0),
best_raw = case_when(id %in% raw_vec ~ 1,
TRUE ~0),
mention_plenary= case_when(id %in% plenary_vec ~ 1,
TRUE ~0),
best_basic = case_when(id %in% top_basic ~ 1,
TRUE ~0)) ->
scores
Now filter for Plenary Contenders
and write to Excel
scores %>%
filter(best_adj == 1| best_raw == 1 | best_basic == 1 | mention_plenary == 1) ->
plenary
plenary %>%
arrange(cross_sectional, adj_score) %>%
select(id, subcat, adj_score, avg, title, presenter, best_adj:best_basic, cross_sectional) %>%
print(n=22)
## # A tibble: 22 x 11
## id subcat adj_score avg title presenter best_adj best_raw
## <dbl> <chr> <dbl> <dbl> <chr> <chr> <dbl> <dbl>
## 1 3.53e6 IBD: … -0.264 2.5 HIGH… Andres Y… 1 0
## 2 3.52e6 IBD: … 0.0677 1.4 IDEN… Yuval It… 1 1
## 3 3.52e6 IBD: … 0.236 3.2 MEGA… Michelle… 1 0
## 4 3.52e6 IBD: … 0.318 2.75 A CO… Ryan Ung… 1 0
## 5 3.53e6 IBD: … 0.427 2.2 LOW … Chung Sa… 1 1
## 6 3.53e6 IBD: … 0.427 2.2 CLIN… Jeffrey … 1 1
## 7 3.52e6 IBD: … 0.462 2.6 IMPA… Ryan Ung… 1 0
## 8 3.52e6 IBD: … 0.462 2.6 RISK… Adam Che… 1 0
## 9 3.52e6 IBD: … 0.625 1.33 DISC… Sine Buh… 0 1
## 10 3.52e6 IBD: … 0.874 2.33 EXPO… Florence… 0 1
## 11 3.53e6 IBD: … 0.902 2 <br>… Mark Dal… 0 1
## 12 3.52e6 Anima… 1.29 2.71 IN V… Elizabet… 0 0
## 13 3.53e6 IBD: … 1.60 2 HOST… Sun-Ho L… 0 1
## 14 3.53e6 IBD: … 1.74 2.6 IBD … Kyle Get… 0 0
## 15 3.52e6 IBD: … 1.96 3.57 THE … Beatriz … 0 0
## 16 3.52e6 IBD: … 2.10 2.5 THE … Geert Dâ… 0 1
## 17 3.52e6 Diarr… -0.208 2.2 SING… Molly Th… 1 1
## 18 3.52e6 COVID… 0.487 3.4 MULT… John Spe… 1 0
## 19 3.52e6 IBD: … 1.26 3 IBD-… Jonathan… 0 0
## 20 3.52e6 IBD: … 1.54 3.14 FOOD… Mark Mor… 0 0
## 21 3.53e6 Intes… 1.65 2.29 A NO… Hon Wai … 0 1
## 22 3.53e6 Role … 1.97 3.2 RELA… Kevin Ji… 0 0
## # … with 3 more variables: mention_plenary <dbl>, best_basic <dbl>,
## # cross_sectional <dbl>
plenary %>%
arrange(adj_score) %>%
print(n=22) %>%
writexl::write_xlsx("plenary_contenders.xlsx")
## # A tibble: 22 x 30
## id adj_score avg title subcat mean_subcat sd_subcat n_subcat type
## <dbl> <dbl> <dbl> <chr> <chr> <dbl> <dbl> <int> <chr>
## 1 3.53e6 -0.264 2.5 HIGH… IBD: … 4.41 0.672 38 AGA …
## 2 3.52e6 -0.208 2.2 SING… Diarr… 4.57 0.844 11 AGA …
## 3 3.52e6 0.0677 1.4 IDEN… IBD: … 4.23 1.08 22 AGA …
## 4 3.52e6 0.236 3.2 MEGA… IBD: … 4.89 0.675 39 AGA …
## 5 3.52e6 0.318 2.75 A CO… IBD: … 4.77 0.821 23 AGA …
## 6 3.53e6 0.427 2.2 LOW … IBD: … 4.44 0.939 23 AGA …
## 7 3.53e6 0.427 2.2 CLIN… IBD: … 4.44 0.939 23 AGA …
## 8 3.52e6 0.462 2.6 IMPA… IBD: … 4.54 0.823 31 AGA …
## 9 3.52e6 0.462 2.6 RISK… IBD: … 4.54 0.823 31 AGA …
## 10 3.52e6 0.487 3.4 MULT… COVID… 4.59 0.507 17 AGA …
## 11 3.52e6 0.625 1.33 DISC… IBD: … 4.02 1.19 36 AGA …
## 12 3.52e6 0.874 2.33 EXPO… IBD: … 4.42 1.00 20 AGA …
## 13 3.53e6 0.902 2 <br>… IBD: … 4.23 1.08 22 AGA …
## 14 3.52e6 1.26 3 IBD-… IBD: … 4.37 0.752 18 AGA …
## 15 3.52e6 1.29 2.71 IN V… Anima… 3.86 0.638 17 AGA …
## 16 3.52e6 1.54 3.14 FOOD… IBD: … 4.37 0.752 18 AGA …
## 17 3.53e6 1.60 2 HOST… IBD: … 3.82 1.14 11 AGA …
## 18 3.53e6 1.65 2.29 A NO… Intes… 3.68 0.887 15 AGA …
## 19 3.53e6 1.74 2.6 IBD … IBD: … 4.23 1.08 22 AGA …
## 20 3.52e6 1.96 3.57 THE … IBD: … 4.46 0.651 15 AGA …
## 21 3.53e6 1.97 3.2 RELA… Role … 4.2 0.740 14 AGA …
## 22 3.52e6 2.10 2.5 THE … IBD: … 4.02 1.19 36 AGA …
## # … with 21 more variables: presenter <chr>, presenter_email <chr>,
## # career_stage <chr>, previous_presentation_or_submission_y_n <chr>,
## # previous_presentation_meeting <chr>, case_report_y_n <chr>,
## # chair_override <chr>, last_decision <chr>, dev <dbl>, med <dbl>,
## # comments <chr>, review_count <dbl>, individual_scores <chr>,
## # cross_sectional <dbl>, basic <dbl>, clinical <dbl>, z_score <dbl>,
## # best_adj <dbl>, best_raw <dbl>, mention_plenary <dbl>, best_basic <dbl>
now rank top 2 in each subcat
scores %>%
group_by(subcat) %>%
arrange(subcat, avg) %>%
mutate(rank = row_number()) %>%
slice(1:2) %>%
writexl::write_xlsx("top2_bysubcat.xlsx")
We have to select the following, in order
The clinical abstract sessions typically have 6 abstracts. This can go up to 8 or 9 if you shorten the presentations and there is no question time (when we do this virtually) - up to you. Note that the Cross-sectional topics have already been picked over for the cross-sectional sessions.
scores %>%
filter(clinical == 1) %>%
select(subcat, cross_sectional) %>%
group_by(subcat) %>%
mutate(n= n()) %>%
distinct(subcat, .keep_all = TRUE) %>%
arrange(desc(n))
## # A tibble: 20 x 3
## # Groups: subcat [20]
## subcat cross_sectional n
## <chr> <dbl> <int>
## 1 IBD: Natural History and Outcomes 0 45
## 2 IBD: Epidemiology 0 44
## 3 IBD: Disease Activity Assessment 0 39
## 4 IBD: Disease Complications 0 39
## 5 IBD: Uncontrolled Therapeutic Observations in Humans B… 0 38
## 6 IBD: Controlled Clinical Trials in Humans 0 36
## 7 IBD: Therapeutic Monitoring 0 31
## 8 IBD: Practice Management, Quality of Care, Quality Ass… 0 23
## 9 IBD: Quality of Life and Psychosocial Care 0 23
## 10 IBD: Comparative Effectiveness Studies 0 21
## 11 IBD: Special Populations, Conception, Adolescent, and … 1 21
## 12 IBD: Adverse Events Related to Therapy 0 20
## 13 COVID and GI 1 17
## 14 IBD: Diagnostics in IBD 0 14
## 15 Diarrheal Disorders: Bacterial Overgrowth - Drug Induc… 1 11
## 16 IBD: Uncontrolled Therapeutic Observations in Humans N… 0 10
## 17 Pediatric IBD: Clinical and Translational Studies 1 6
## 18 Microbial-Based Therapy 1 4
## 19 Health Care Delivery and Policy (Practice Management I… 1 2
## 20 Health Disparities and Global Health 1 2
These are the usual suspects, which are somewhat shaped by the abstract review descriptors we use. But feel free to shake this up, and create hybrids across abstract descriptors. I find it helpful to sort the top abstracts, and just scan the titles, looking for new themes. Completely up to you.
Note that there are only 7 sessions to work with. Some will be thin this year, and may require some creativity, possibly including the return of “IBD Potpourri”
Depending on the number of abstracts per session, you will need ~ 42-63 abstracts to fill these sessions, on top of the ~ 12 for the clinical plenary, IMIBD plenary, and fill-in abstracts for hybrid sessions.
So, let’s generate a top 80 (willing to do oral, not presented elsewhere, not cross-sectional, and clinical) abstracts by
# best adjusted scores
scores %>%
arrange(adj_score) %>%
filter(previous_presentation_or_submission_y_n == "AGA Previous Presentation No") %>%
filter(type == "AGA Institute Oral or Poster") %>%
filter(clinical == 1) %>%
filter(cross_sectional == 0) %>%
slice(1:80) %>%
writexl::write_xlsx("top80_clinical_adj.xlsx")
# best raw scores
scores %>%
arrange(avg) %>%
filter(previous_presentation_or_submission_y_n == "AGA Previous Presentation No") %>%
filter(type == "AGA Institute Oral or Poster") %>%
filter(cross_sectional == 0) %>%
filter(clinical == 1) %>%
slice(1:80) %>%
writexl::write_xlsx("top80_clinical_raw.xlsx")
Excluding previous presentations, poster-only, and cross-sectional
# best raw scores
scores %>%
arrange(avg) %>%
filter(previous_presentation_or_submission_y_n == "AGA Previous Presentation No") %>%
filter(type == "AGA Institute Oral or Poster") %>%
filter(cross_sectional == 0) %>%
filter(clinical ==1) %>%
group_by(subcat) %>%
slice_max(order_by = adj_score , n= 6) %>%
relocate(id, subcat, adj_score, avg, title, mention_plenary) %>%
writexl::write_xlsx("top6_bysubcat_clinical.xlsx")
We have to select the following, in order
The basic abstract sessions typically have 6 abstracts. This can go up to 8 or 9 if you shorten the presentations and there is no question time (when we do this virtually) - up to you. Note that the Cross-sectional topics have already been picked over for the cross-sectional sessions.
scores %>%
filter(basic == 1) %>%
select(subcat, cross_sectional) %>%
group_by(subcat) %>%
mutate(n= n()) %>%
distinct(subcat, .keep_all = TRUE) %>%
arrange(desc(n))
## # A tibble: 10 x 3
## # Groups: subcat [10]
## subcat cross_sectional n
## <chr> <dbl> <int>
## 1 IBD: Genomics and Gene Function 0 22
## 2 IBD: Microbiome Role in Intestinal Inflammation 1 18
## 3 Animal Models: Pre-Clinical Treatment of Intestinal In… 0 17
## 4 IBD: Cytokines, Signaling and Receptors 0 15
## 5 Intestinal Inflammation, Fibrosis and Regeneration 1 15
## 6 Role of the Gut Microbiome and Pathogens in Immune and… 1 14
## 7 IBD: Innate and Adaptive Host Defenses 0 11
## 8 Mucosal Innate Function and Innate Host Defense: Infla… 0 5
## 9 Non-Immune Cells in Intestinal Inflammation: Epitheliu… 0 5
## 10 Viral, Eukaryote, and Prokaryote Members of the Gut Mi… 0 1
These are the usual suspects, which are somewhat shaped by the abstract review descriptors we use. But feel free to shake this up, and create hybrids across abstract descriptors. I find it helpful to sort the top abstracts, and just scan the titles, looking for new themes. Completely up to you.
One fundamental issue with basic topics in IMIBD is that MMT has cut out the heart of microbiome. We have a handshake agreement that clinical trials in humans with microbiome therapies will go to IMIBD, but anything and everything preclinical goes to MMT. So there is not much left for microbiome in IMIBD.
Note that there are only 3-4 sessions to work with. Some will be thin this year, and may require some creativity, possibly including the return of “IBD Potpourri”
Depending on the number of abstracts per session, you will need ~ 21-27 abstracts to fill these sessions, on top of the ~ 12 for the clinical plenary, IMIBD plenary, and fill-in abstracts for hybrid sessions.
So, let’s generate a top 50 (willing to do oral, not presented elsewhere, not cross-sectional, and clinical) abstracts by
# best adjusted scores
scores %>%
arrange(adj_score) %>%
filter(previous_presentation_or_submission_y_n == "AGA Previous Presentation No") %>%
filter(type == "AGA Institute Oral or Poster") %>%
filter(basic == 1) %>%
filter(cross_sectional == 0) %>%
slice(1:50) %>%
relocate(id, adj_score, avg, cross_sectional, title, presenter) %>%
writexl::write_xlsx("top50_basic_adj.xlsx")
# best raw scores
scores %>%
arrange(avg) %>%
filter(previous_presentation_or_submission_y_n == "AGA Previous Presentation No") %>%
filter(type == "AGA Institute Oral or Poster") %>%
filter(cross_sectional == 0) %>%
filter(basic == 1) %>%
slice(1:50) %>%
writexl::write_xlsx("top50_basic_raw.xlsx")
Excluding previous presentations, poster-only, and cross-sectional
# best raw scores
scores %>%
arrange(avg) %>%
filter(previous_presentation_or_submission_y_n == "AGA Previous Presentation No") %>%
filter(type == "AGA Institute Oral or Poster") %>%
filter(basic ==1) %>%
group_by(subcat) %>%
slice_max(order_by = adj_score , n= 6) %>%
relocate(id, subcat, adj_score, avg, title, mention_plenary) %>%
writexl::write_xlsx("top6_bysubcat_basic.xlsx")