Skip to content

Commit

Permalink
Merge pull request #5 from erikwestlund/protocol
Browse files Browse the repository at this point in the history
Rmd protocol for SemaglutideNaion study package
  • Loading branch information
cindyxcai authored Aug 13, 2024
2 parents 761e300 + 26a016b commit e2c6145
Show file tree
Hide file tree
Showing 19 changed files with 44,475 additions and 1 deletion.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@
.Rhistory
.RData
.Ruserdata
.idea/*
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Estimation of risk of NAION and other vision disorders from exposure to semaglut
- Study lead forums tag: **[[Cindy X. Cai]](https://forums.ohdsi.org/u/cindyxcai)**
- Study start date: **-**
- Study end date: **-**
- Protocol: **<a href="docs/Semaglutide and NAION Research Protocol.pdf">docs/Semaglutide and NAION Research Protocol.pdf</a>**
- Protocol: **<a href="docs/Protocol.html</a>**
- Publications: **-**
- Results explorer: **-**

Expand Down
4 changes: 4 additions & 0 deletions SemaglutideNaion.Rproj
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,7 @@ Encoding: UTF-8

RnwWeave: Sweave
LaTeX: pdfLaTeX

BuildType: Package
PackageUseDevtools: Yes
PackageInstallArgs: --no-multiarch --with-keep.source
30 changes: 30 additions & 0 deletions docs/Abbreviations.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
```{r abbreviations, echo=FALSE, message=FALSE}
abbreviations <- readr::read_delim(col_names = FALSE, delim = ";", trim_ws = TRUE, file = "
NAION; Non-arteritic ischemic optic neuropathy
DR; Diabetic retinopathy
PDR; Proliferative diabetic retinopathy
DME; Diabetic macular edema
VR; Vitreoretinal
GLP-1 RA; Glucagon-like peptide 1 receptor agonist
SGLT2; Sodium-glucose cotransporter -2
DPP4; Dipeptidyl peptidase-4
T2DM; Type 2 diabetes mellitus
VO; Vein occlusion
AO; Artery occlusion
AMD; Age-related macular degeneration
GCA; Giant cell arteritis
EASE; Expected Absolute Systematic Error
MDRR; Minimum Detectable Relative Risk
OHDSI; Observational Health Data Sciences and Informatics
ARVO; The Association for Research in Vision and Ophthalmology
")
tab <- kable(abbreviations, col.names = NULL, linesep = "", booktabs = TRUE)
if (knitr::is_latex_output()) {
tab %>% kable_styling(latex_options = c("striped", "hold_position"),
font_size = latex_table_font_size)
} else {
tab %>% kable_styling(bootstrap_options = "striped")
}
```
12 changes: 12 additions & 0 deletions docs/Abstract.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
**Background**: Despite its cardiovascular and kidney benefits, semaglutide has been recently linked to severe ophthalmic complications including non-arteritic ischemic optic neuropathy (NAION) as well as worsening of diabetic retinopathy (DR).

**Purpose**: To estimate the risk of these ophthalmic complications, NAION and DR worsening, with semaglutide use compared with other non-GLP-1 RA medications (including empagliflozin, sitagliptin, and glipizide) among adults with type 2 diabetes mellitus.

**Design**: Retrospective study employing an active comparator, new-user cohort design

**Subjects**: Adults (≥ 18 years) with type 2 diabetes mellitus who are new users of semaglutide (a GLP-1 RA), dulaglutide (a GLP-1 RA), exenatide (a GLP-1 RA), empagliflozin (an SGLT2 inhibitor), sitagliptin (a DPP4 inhibitor), or glipizide (a sulfonylurea)

**Methods**: Patients receiving semaglutide will be compared to propensity score matched patients with each of the other GLP-1 RA and non-GLP-1 RA medications. We will deploy the large-scale propensity score method that adjusts for a comprehensive range of baseline characteristics. Cox models will be used to compare the time to NAION or DR worsening between patients who receive semaglutide with patients who receive empagliflozin, sitagliptin, and glipizide. Similar comparisons will be made between the other GLP-1 RA (namely dulaglutide and exenatide) with each of the comparators.

**Conclusions**: Clarifying the risk of severe ophthalmic complications associated with semaglutide (and other GLP-1 RA) by 1) characterizing the incidence in the exposed population, and 2) estimating the risk of exposure will help guide the appropriate use of this medication.

166 changes: 166 additions & 0 deletions docs/Appendix.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
# Study Population Cohort Definitions

```{r study-population-cohorts, echo=FALSE, results="asis", warning=FALSE, message=FALSE}
printCohortDefinitionFromNameAndJson(name = "Persons with Type 2 diabetes mellitus and no prior T1DM or secondary diabetes",
json = SqlRender::readSql("../inst/cohorts/17795_Persons with Type 2 diabetes mellitus and no prior T1DM or secondary diabetes.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of semaglutide as 2nd-line treatment with prior T2DM and prior metformin",
json = SqlRender::readSql("../inst/cohorts/17793_New user of semaglutide as 2nd-line treatment with prior T2DM and prior metformin.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of semaglutide as 2nd-line treatment with prior T2DM Dec2017-Jan2020",
json = SqlRender::readSql("../inst/cohorts/17809_New user of semaglutide as 2nd-line treatment with prior T2DM Dec2017-Jan2020.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of semaglutide as 2nd-line treatment with prior T2DM Feb2020-Jun2021",
json = SqlRender::readSql("../inst/cohorts/17810_New user of semaglutide as 2nd-line treatment with prior T2DM Feb2020-Jun2021.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of semaglutide as 2nd-line treatment with prior T2DM Jul2021-Dec2023",
json = SqlRender::readSql("../inst/cohorts/17811_New user of semaglutide as 2nd-line treatment with prior T2DM Jul2021-Dec2023.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of semaglutide with prior T2DM and prior metformin and no insulin",
json = SqlRender::readSql("../inst/cohorts/17803_New user of semaglutide with prior T2DM and prior metformin and no insulin.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of dulaglutide as 2nd-line treatment with prior T2DM and prior metformin",
json = SqlRender::readSql("../inst/cohorts/17796_New user of dulaglutide as 2nd-line treatment with prior T2DM and prior metformin.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of dulaglutide with prior T2DM and prior metformin and no insulin",
json = SqlRender::readSql("../inst/cohorts/17807_New user of dulaglutide with prior T2DM and prior metformin and no insulin.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of exenatide as 2nd-line treatment with prior T2DM and prior metformin",
json = SqlRender::readSql("../inst/cohorts/17797_New user of exenatide as 2nd-line treatment with prior T2DM and prior metformin.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of exenatide with prior T2DM and prior metformin and no insulin",
json = SqlRender::readSql("../inst/cohorts/17808_New user of exenatide with prior T2DM and prior metformin and no insulin.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of empagliflozin as 2nd-line treatment with prior T2DM and prior metformin",
json = SqlRender::readSql("../inst/cohorts/17798_New user of empagliflozin as 2nd-line treatment with prior T2DM and prior metformin.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of empagliflozin as 2nd-line treatment with prior T2DM Dec2017-Jan2020",
json = SqlRender::readSql("../inst/cohorts/17812_New user of empagliflozin as 2nd-line treatment with prior T2DM Dec2017-Jan2020.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of empagliflozin as 2nd-line treatment with prior T2DM Feb2020-Jun2021",
json = SqlRender::readSql("../inst/cohorts/17813_New user of empagliflozin as 2nd-line treatment with prior T2DM Feb2020-Jun2021.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of empagliflozin as 2nd-line treatment with prior T2DM Jul2021-Dec2023",
json = SqlRender::readSql("../inst/cohorts/17814_New user of empagliflozin as 2nd-line treatment with prior T2DM Jul2021-Dec2023.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of empagliflozin with prior T2DM and prior metformin and no insulin",
json = SqlRender::readSql("../inst/cohorts/17804_New user of empagliflozin with prior T2DM and prior metformin and no insulin.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of sitagliptin as 2nd-line treatment with prior T2DM and prior metformin",
json = SqlRender::readSql("../inst/cohorts/17799_New user of sitagliptin as 2nd-line treatment with prior T2DM and prior metformin.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of sitagliptin with prior T2DM and prior metformin and no insulin",
json = SqlRender::readSql("../inst/cohorts/17805_New user of sitagliptin with prior T2DM and prior metformin and no insulin.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of glipizide as 2nd-line treatment with prior T2DM and prior metformin",
json = SqlRender::readSql("../inst/cohorts/17801_New user of glipizide as 2nd-line treatment with prior T2DM and prior metformin.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "New user of glipizide with prior T2DM and prior metformin and no insulin",
json = SqlRender::readSql("../inst/cohorts/17806_New user of glipizide with prior T2DM and prior metformin and no insulin.json"),
withConcepts = TRUE)
```

# Exposure Cohort Definitions


```{r exposure-cohorts, echo=FALSE, results="asis", warning=FALSE, message=FALSE}
printCohortDefinitionFromNameAndJson(name = "Semaglutide (GLP-1RA) exposure",
json = SqlRender::readSql("../inst/cohorts/17816_semaglutide exposures.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "Dulaglutide (GLP-1RA) exposure",
json = SqlRender::readSql("../inst/cohorts/17817_dulaglutide exposures.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "Exenatide (GLP-1RA) exposure",
json = SqlRender::readSql("../inst/cohorts/17818_exenatide exposures.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "Empagliflozin (SGLT2 inhibitor) exposure",
json = SqlRender::readSql("../inst/cohorts/17819_empagliflozin exposures.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "Sitagliptin (DPP4 inhibitor) exposure",
json = SqlRender::readSql("../inst/cohorts/17820_sitagliptin exposures.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "Glipizide (Sulfonylurea) exposure",
json = SqlRender::readSql("../inst/cohorts/17821_glipizide exposures.json"),
withConcepts = TRUE)
```

# Outcome Cohort Definitions

```{r outcome-cohorts, echo=FALSE, results="asis", warning=FALSE, message=FALSE}
printCohortDefinitionFromNameAndJson(name = "Nonarteric anterior ischemic neuropathy with index date correction and 2dxGCA",
json = SqlRender::readSql("../inst/cohorts/17760_Nonarteric anterior ischemic neuropathy with index date correction and 2dxGCA.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "Nonarteric anterior ischemic neuropathy with index date correction and 2nd dx and 2dxGCA",
json = SqlRender::readSql("../inst/cohorts/17761_Nonarteric anterior ischemic neuropathy with index date correction and 2nd dx and 2dxGCA.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "Proliferative diabetic retinopathy",
json = SqlRender::readSql("../inst/cohorts/17706_Proliferative diabetic retinopathy.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "Treatment-requiring Diabetic Retinopathy or Macular Edema",
json = SqlRender::readSql("../inst/cohorts/17815_Treatment-requiring Diabetic Retinopathy or Macular Edema.json"),
withConcepts = TRUE)
printCohortDefinitionFromNameAndJson(name = "Treatment-requiring Diabetic Retinopathy or Macular Edema including vitrectomy",
json = SqlRender::readSql("../inst/cohorts/17788_Treatment-requiring Diabetic Retinopathy or Macular Edema including vitrectomy.json"),
withConcepts = TRUE)
```

# Negative Control Concepts

\captionsetup{labelformat=empty}

```{r, echo=FALSE, warning=FALSE, message=FALSE}
negative_controls <- readr::read_csv("../inst/negativeControlOutcomes.csv") %>%
select(conceptid, conceptname) %>%
rename("Concept ID" = conceptid, "name" = conceptname) %>%
arrange(name)
colnames(negative_controls) <- c("", "Concept ID")
tab <- kable(negative_controls, booktabs = TRUE, linesep = "", longtable = TRUE,
caption = "Negative outcome controls specified through condition occurrences that map to (a descendent of) the indicated concept ID") %>%
kable_styling(bootstrap_options = "striped", latex_options = "striped")
if (knitr::is_latex_output()) {
tab %>%
column_spec(1, width = "40em") %>%
column_spec(2, width = "15em") %>%
kable_styling(font_size = latex_table_font_size,
latex_options = c("repeat_header"),
repeat_header_continued = "\\textit{(Continued on Next Page...)}")
} else {
tab
}
```
2 changes: 2 additions & 0 deletions docs/Disclosures.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
This study is undertaken within Observational Health Data Sciences and Informatics (OHDSI), an open collaboration.

Loading

0 comments on commit e2c6145

Please sign in to comment.