# Case study – UpSet plot

Suppose you'd like to visualize some **common comorbidities** for asthma in FinnGen population. Perhaps the most intuitive method to see them is an **UpSet plot.**

There are two important parameters that shape the UpSet plot:

* `nsets`, the number of sets to look at (default `nsets = 5`)
* nintersects, the number of intersections to plot (default `nintersects = 40`)

If `nintersects` is set to `NA`, all intersections will be plotted.

```r
# function to get a character vector of FINNDENIDs for a group of endpoints

# function to get character vector of FINNGENID's for a list of endpoints
get_endpoint_ids <- function(...){
  endpoints <- list(...)
  sql<-paste0(
    "SELECT DISTINCT FINNGENID ",
    "FROM finngen-production-library.sandbox_tools_r10.endpoint_cohorts_r10_v1 ",
    "WHERE ENDPOINT IN (", paste0("'", endpoints, "'", collapse = ","), ")" 
  )
  tb <- bq_project_query(projectid, sql)
  df <- bq_table_download(tb) 
  pull(df, FINNGENID) 
}

asthma_cohort <- get_endpoint_ids('J10_ASTHMA', 'ASTHMA_MIXED')
chronic_rhinitis_cohort <- get_endpoint_ids('J10_CHRONRHINITIS')
sinusitis_cohort <- get_endpoint_ids('J10_SINUSITIS', 'J10_CHRONSINUSITIS', 'J10_UPPERINFEC')
reflux_cohort <- get_endpoint_ids('K11_REFLUX')
obesity_cohort <- get_endpoint_ids('ASTHMA_OBESITY')
sleep_apnea_cohort <- get_endpoint_ids('G6_SLEEPAPNO')

all <- unique(c(asthma_cohort, chronic_rhinitis_cohort, sinusitis_cohort, reflux_cohort, obesity_cohort, sleep_apnea_cohort))

asthma_cohort <- as.numeric(factor(asthma_cohort, levels = all))
chronic_rhinitis_cohort <- as.numeric(factor(chronic_rhinitis_cohort, levels = all))
sinusitis_cohort <- as.numeric(factor(sinusitis_cohort, levels = all))
reflux_cohort <- as.numeric(factor(reflux_cohort, levels = all))
obesity_cohort <- as.numeric(factor(obesity_cohort, levels = all))
sleep_apnea_cohort <- as.numeric(factor(sleep_apnea_cohort, levels = all))

inputList <- list(
  ASTHMA = asthma_cohort,
  RHINITIS = chronic_rhinitis_cohort,
  SINUSITIS = sinusitis_cohort,
  REFLUX = reflux_cohort,
  OBESITY = obesity_cohort,
  SLEEP_APNEA = sleep_apnea_cohort
)

UpSetR::upset(
  UpSetR::fromList(inputList),
  nsets = 6,
  nintersects = NA, 
  order.by = 'freq', 
  mb.ratio = c(0.7, .3), 
  text.scale = c(1.3, 1.3, 1.3, 0.8, 1.3, 1),
  set_size.show = TRUE, 
  set_size.angles = 0,
  number.angles = 35,
  set_size.scale_max = 240000
)

```

<figure><img src="/files/dacwZvaWL1B0sZmrlYMp" alt=""><figcaption></figcaption></figure>

**Location of the script's in the Sandbox**

Below is a path to the R Markdown file in Sandbox. This R Markdown file can be converted to an html page using "knit" command. The R Markdown is a plain text file, so you can copy code snippets that you need.

`/finngen/library-green/scripts/code_snippets/BigQuery_Templates_release.Rmd`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.finngen.fi/working-in-the-sandbox/which-tools-are-available/miscellaneous-helper-scripts-tools/bigquery-connection-r/case-study-upset-plot.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
