Quality Control

Published

Sat Aug 12, 2023 07:28:10-05:00


[1] "2023-08-12 07:28:04 CDT"
[1] "America/Chicago"

Preparation

PROJECT_DIR <- file.path(
    "/Users/jialei/Dropbox/Data/Projects/UTSW",
    "/Cardiomyopathy/atac-seq"
)

Functions

Load required packages.

library(tidyverse)
## ── Attaching core tidyverse packages ─────────────────── tidyverse 2.0.0.9000 ──
## ✔ dplyr     1.1.2.9000     ✔ readr     2.1.4.9000
## ✔ forcats   1.0.0.9000     ✔ stringr   1.5.0.9000
## ✔ ggplot2   3.4.2.9000     ✔ tibble    3.2.1.9005
## ✔ lubridate 1.9.2.9000     ✔ tidyr     1.3.0.9000
## ✔ purrr     1.0.2.9000     
## ── 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(Matrix)
## 
## Attaching package: 'Matrix'
## 
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
library(patchwork)
library(extrafont)
## Registering fonts with R
source(
    file = file.path(
        SCRIPT_DIR,
        "utilities.R"
    )
)
`%+replace%` <- ggplot2::`%+replace%`

Python env

np <- reticulate::import("numpy", convert = TRUE)
cat("numpy version:", np$`__version__`, "\n")
numpy version: 1.24.3 
reticulate::py_config()
python:         /Users/jialei/.pyenv/shims/python
libpython:      /Users/jialei/.pyenv/versions/mambaforge-22.9.0-3/lib/libpython3.10.dylib
pythonhome:     /Users/jialei/.pyenv/versions/mambaforge-22.9.0-3:/Users/jialei/.pyenv/versions/mambaforge-22.9.0-3
version:        3.10.9 | packaged by conda-forge | (main, Feb  2 2023, 20:26:08) [Clang 14.0.6 ]
numpy:          /Users/jialei/.pyenv/versions/mambaforge-22.9.0-3/lib/python3.10/site-packages/numpy
numpy_version:  1.24.3
numpy:          /Users/jialei/.pyenv/versions/mambaforge-22.9.0-3/lib/python3.10/site-packages/numpy

NOTE: Python version was forced by RETICULATE_PYTHON

QC

TSS enrichment score

Code
fs::dir_ls(
    path = file.path(
        PROJECT_DIR,
        "qc",
        "tss_enrichment/raw/core_set_merged",
        "cut_site"
    ),
    regexp = "npy$"
) |>
    purrr::map(\(x) {
        np$load(file = x) |>
            {
                \(y) {
                    y / mean(c(y[1:100], y[4102:4201]))
                }
            }() |>
            tibble::enframe(name = "position", value = "score") |>
            dplyr::mutate(
                category = x |>
                    basename() |>
                    stringr::str_remove(
                        pattern = "Aligned_sorted_deduped_q10_"
                    ) |>
                    stringr::str_remove(
                        pattern = "_21_tss_flanking_0.npy"
                    )
            )
    }) |>
    dplyr::bind_rows() |>
    dplyr::mutate(
        category = category |> stringr::str_to_title(),
        category = dplyr::case_when(
            category == "Fresh_healthy" ~ "Healthy",
            category == "Fresh_icm" ~ "ICM",
            category == "Fresh_nicm" ~ "NICM",
            category == "Fresh_hcm" ~ "HCM"
        ),
        category = factor(
            category,
            levels = c("Healthy", "ICM", "NICM", "HCM")
        )
    ) |>
    ggplot2::ggplot(
        ggplot2::aes(
            x = position,
            y = score,
            color = category
        )
    ) +
    ggplot2::geom_line(size = 0.5) +
    ggplot2::scale_x_continuous(
        name = "Distance from TSS (bp)",
        breaks = c(101, 1101, 2101, 3101, 4100),
        labels = seq(-2000, 2000, 1000)
    ) +
    ggplot2::scale_y_continuous(
        name = "Normalized cut sites"
    ) +
    ggplot2::scale_color_manual(
        name = NULL,
        values = as.character(yarrr::piratepal(palette = "google"))
    ) +
    ggplot2::ggtitle(label = "TSS enrichment score") +
    ggplot2::theme_linedraw(base_size = 6, base_family = "Arial") +
    ggplot2::theme(
        legend.background = ggplot2::element_blank(),
        legend.margin = ggplot2::margin(
            t = 0, r = 0, b = 0, l = 0, unit = "mm"
        ),
        legend.spacing.y = grid::unit(0, "mm"),
        legend.key = ggplot2::element_blank(),
        legend.key.size = grid::unit(3, "mm"),
        legend.text = ggplot2::element_text(
            family = "Arial",
            size = 5,
            margin = ggplot2::margin(
                t = 0, r = 0, b = 0, l = -1, unit = "mm"
            )
        ),
        legend.position = c(0.7, 0.9),
        legend.justification = c(0, 1),
        plot.title = ggplot2::element_text(
            family = "Arial", size = 6, hjust = 0.5
        ),
        plot.background = ggplot2::element_blank()
    )

Figure 1: TSS enrichment score

List files.

fs::dir_ls(
    path = file.path(
        PROJECT_DIR,
        "qc",
        "tss_enrichment/raw/core_set_merged",
        "cut_site"
    ),
    regexp = "npy$"
)
/Users/jialei/Dropbox/Data/Projects/UTSW/Cardiomyopathy/atac-seq/qc/tss_enrichment/raw/core_set_merged/cut_site/Aligned_sorted_deduped_q10_fresh_hcm_21_tss_flanking_0.npy
/Users/jialei/Dropbox/Data/Projects/UTSW/Cardiomyopathy/atac-seq/qc/tss_enrichment/raw/core_set_merged/cut_site/Aligned_sorted_deduped_q10_fresh_healthy_21_tss_flanking_0.npy
/Users/jialei/Dropbox/Data/Projects/UTSW/Cardiomyopathy/atac-seq/qc/tss_enrichment/raw/core_set_merged/cut_site/Aligned_sorted_deduped_q10_fresh_icm_21_tss_flanking_0.npy
/Users/jialei/Dropbox/Data/Projects/UTSW/Cardiomyopathy/atac-seq/qc/tss_enrichment/raw/core_set_merged/cut_site/Aligned_sorted_deduped_q10_fresh_nicm_21_tss_flanking_0.npy

Inspect data.

fs::dir_ls(
    path = file.path(
        PROJECT_DIR,
        "qc",
        "tss_enrichment/raw/core_set_merged",
        "cut_site"
    ),
    regexp = "npy$"
) |>
    purrr::map(\(x) {
        np$load(file = x) |>
            {
                \(y) {
                    y / mean(c(y[1:100], y[4102:4201]))
                }
            }() |>
            tibble::enframe(name = "position", value = "score") |>
            dplyr::mutate(
                category = x |>
                    basename() |>
                    stringr::str_remove(
                        pattern = "Aligned_sorted_deduped_q10_"
                    ) |>
                    stringr::str_remove(
                        pattern = "_21_tss_flanking_0.npy"
                    )
            )
    }) |>
    dplyr::bind_rows() |>
    dplyr::mutate(
        category = category |> stringr::str_to_title(),
        category = dplyr::case_when(
            category == "Fresh_healthy" ~ "Healthy",
            category == "Fresh_icm" ~ "ICM",
            category == "Fresh_nicm" ~ "NICM",
            category == "Fresh_hcm" ~ "HCM"
        ),
        category = factor(
            category,
            levels = c("Healthy", "ICM", "NICM", "HCM")
        )
    ) |>
    head(n = 12)
# A tibble: 12 × 3
   position     score category
      <int> <dbl[1d]> <fct>   
 1        1     0.648 HCM     
 2        2     0.657 HCM     
 3        3     0.664 HCM     
 4        4     0.678 HCM     
 5        5     0.681 HCM     
 6        6     0.690 HCM     
 7        7     0.699 HCM     
 8        8     0.708 HCM     
 9        9     0.719 HCM     
10       10     0.729 HCM     
11       11     0.744 HCM     
12       12     0.748 HCM     

Mitochondrial percentage

Code
dataset |>
    dplyr::mutate(mt_ratio = num_reads_q10_mt / num_reads_q10) |>
    dplyr::mutate(
        category = factor(
            category,
            levels = c("Healthy", "ICM", "NICM", "HCM") |> rev()
        )
    ) |>
    ggplot2::ggplot(
        ggplot2::aes(
            x = mt_ratio, y = category, fill = category
        )
    ) +
    ggridges::geom_density_ridges(alpha = 0.8, color = NA) +
    ggplot2::scale_x_continuous(
        labels = scales::percent,
    ) +
    ggplot2::scale_fill_manual(
        values = yarrr::piratepal(palette = "google") |>
            as.character() |> rev(),
    ) +
    ggplot2::labs(x = "Mitochondrial read percentage", y = NULL) +
    ggplot2::guides(fill = "none") +
    ggplot2::ggtitle(label = "Mitochondrial percentage") +
    ggplot2::theme_linedraw(base_size = 6, base_family = "Arial") +
    ggplot2::theme(
        legend.background = ggplot2::element_blank(),
        plot.title = ggplot2::element_text(
            family = "Arial", size = 6, hjust = 0.5
        ),
        plot.background = ggplot2::element_blank()
    )

Figure 2: Mitochondrial percentage

Fragment size distribution

Code
fs::dir_ls(
    path = file.path(
        PROJECT_DIR,
        "qc",
        "fragment_sizes",
        "raw"
    ),
    regexp = "fresh.+_CollectInsertSizeMetrics.txt"
) |>
    purrr::map(\(x) {
        readr::read_delim(
            file = x,
            delim = "\t",
            skip = 11,
            show_col_types = FALSE
        ) |>
            normalize_fragment_sizes(
                category = x |>
                    basename() |>
                    stringr::str_remove(
                        pattern = "_CollectInsertSizeMetrics.txt"
                    ) |>
                    stringr::str_to_title()
            )
    }) |>
    dplyr::bind_rows() |>
    dplyr::mutate(
        category = dplyr::case_when(
            category == "Fresh_healthy" ~ "Healthy",
            category == "Fresh_icm" ~ "ICM",
            category == "Fresh_nicm" ~ "NICM",
            category == "Fresh_hcm" ~ "HCM"
        ),
        category = factor(
            category,
            levels = c(
                "Healthy", "ICM", "NICM", "HCM"
            )
        )
    ) |>
    ggplot2::ggplot(
        ggplot2::aes(
            x = insert_size,
            y = norm_count,
            color = category
        )
    ) +
    ggplot2::geom_line() +
    ggplot2::scale_x_continuous(
        name = "Fragment size (bp)",
        limits = c(0, 1000),
        breaks = seq(0, 1000, 200)
    ) +
    ggplot2::scale_y_continuous(
        name = "Norm. read density",
        labels = scales::math_format(10^.x)
    ) +
    ggplot2::annotation_logticks(base = 10, sides = "l", scaled = TRUE) +
    ggplot2::scale_color_manual(
        name = NULL,
        values = as.character(yarrr::piratepal(palette = "google"))
    ) +
    ggplot2::ggtitle(label = "Fragment size distribution") +
    ggplot2::theme_bw(base_size = 6, base_family = "Arial") +
    ggplot2::theme(
        legend.background = ggplot2::element_blank(),
        legend.margin = ggplot2::margin(
            t = 0, r = 0, b = 0, l = 0, unit = "mm"
        ),
        legend.spacing.y = ggplot2::unit(0, "mm"),
        legend.key = ggplot2::element_blank(),
        legend.key.size = ggplot2::unit(3, "mm"),
        legend.text = ggplot2::element_text(
            family = "Arial",
            size = 5,
            margin = ggplot2::margin(
                t = 0, r = 0, b = 0, l = -1, unit = "mm"
            )
        ),
        legend.position = c(0.7, 0.9),
        legend.justification = c(0, 1),
        legend.box.background = ggplot2::element_blank(),
        panel.background = ggplot2::element_blank(),
        plot.title = ggplot2::element_text(
            family = "Arial", size = 6, hjust = 0.5
        ),
        plot.background = ggplot2::element_blank()
    )

Figure 3: Fragment size distribution

List files.

fs::dir_ls(
    path = file.path(
        PROJECT_DIR,
        "qc",
        "fragment_sizes",
        "raw"
    ),
    regexp = "fresh.+_CollectInsertSizeMetrics.txt"
)
/Users/jialei/Dropbox/Data/Projects/UTSW/Cardiomyopathy/atac-seq/qc/fragment_sizes/raw/fresh_hcm_CollectInsertSizeMetrics.txt
/Users/jialei/Dropbox/Data/Projects/UTSW/Cardiomyopathy/atac-seq/qc/fragment_sizes/raw/fresh_healthy_CollectInsertSizeMetrics.txt
/Users/jialei/Dropbox/Data/Projects/UTSW/Cardiomyopathy/atac-seq/qc/fragment_sizes/raw/fresh_icm_CollectInsertSizeMetrics.txt
/Users/jialei/Dropbox/Data/Projects/UTSW/Cardiomyopathy/atac-seq/qc/fragment_sizes/raw/fresh_nicm_CollectInsertSizeMetrics.txt

Inspect data.

fs::dir_ls(
    path = file.path(
        PROJECT_DIR,
        "qc",
        "fragment_sizes",
        "raw"
    ),
    regexp = "fresh.+_CollectInsertSizeMetrics.txt"
) |>
    purrr::map(\(x) {
        readr::read_delim(
            file = x,
            delim = "\t",
            skip = 11,
            show_col_types = FALSE
        ) |>
            normalize_fragment_sizes(
                category = x |>
                    basename() |>
                    stringr::str_remove(
                        pattern = "_CollectInsertSizeMetrics.txt"
                    ) |>
                    stringr::str_to_title()
            )
    }) |>
    dplyr::bind_rows() |>
    dplyr::mutate(
        category = dplyr::case_when(
            category == "Fresh_healthy" ~ "Healthy",
            category == "Fresh_icm" ~ "ICM",
            category == "Fresh_nicm" ~ "NICM",
            category == "Fresh_hcm" ~ "HCM"
        ),
        category = factor(
            category,
            levels = c(
                "Healthy", "ICM", "NICM", "HCM"
            )
        )
    ) |>
    head(n = 12)
# A tibble: 12 × 6
   insert_size All_Reads.fr_count All_Reads.rf_count all_reads_count norm_count
         <dbl>              <dbl>              <dbl>           <dbl>      <dbl>
 1          20                 59                 62              59      -6.53
 2          21                 81                100              81      -6.40
 3          22                135                115             135      -6.17
 4          23                169                174             169      -6.08
 5          24                362                374             362      -5.75
 6          25               1357               1427            1357      -5.17
 7          26              23899              23859           23899      -3.93
 8          27              49856              49877           49856      -3.61
 9          28              46698              46688           46698      -3.64
10          29              46807              46847           46807      -3.63
11          30              42295              42213           42295      -3.68
12          31              36400              36158           36400      -3.74
# ℹ 1 more variable: category <fct>

Chromatin states

fragment_size <- fs::dir_ls(
    path = file.path(
        PROJECT_DIR,
        "qc",
        "fragment_sizes",
        "raw"
    ),
    regexp = "fresh.+_CollectInsertSizeMetrics.txt"
) |>
    purrr::map(\(x) {
        a <- readr::read_delim(
            file = x,
            delim = "\t",
            skip = 11,
            show_col_types = FALSE
        )
        a <- setNames(
            object = a$All_Reads.fr_count,
            nm = a$insert_size
        )
        a
    })

names(fragment_size) <- names(fragment_size) |>
    basename() |>
    stringr::str_remove(
        pattern = "_CollectInsertSizeMetrics.txt"
    )
Code
z <- c("Healthy", "ICM", "NICM", "HCM")

purrr::map2(
    c("fresh_healthy", "fresh_icm", "fresh_nicm", "fresh_hcm"), z, \(x, z) {
        sample_name <- x
        fragment_size_distribution <- fs::dir_ls(
            path = file.path(
                PROJECT_DIR,
                "qc/chromatin_states",
                "raw",
                sample_name
            ),
            regexp = "\\.txt"
        ) |>
            purrr::map(\(y) {
                sample_name <- stringr::str_remove(
                    string = basename(y),
                    pattern = ".+\\.bam_fragments_"
                ) |>
                    str_remove(
                        pattern = ".txt"
                    )

                readr::read_delim(
                    file = file.path(
                        y
                    ),
                    delim = "\t",
                    col_names = c("fragment_size", "count")
                ) |>
                    dplyr::filter(
                        fragment_size >= 50,
                        fragment_size <= 750
                    ) |>
                    dplyr::mutate(
                        category = sample_name
                    ) |>
                    dplyr::select(
                        fragment_size,
                        count,
                        category
                    )
            })

        fragment_size_distribution <- fragment_size_distribution |>
            purrr::map(\(x) {
                x[["percentage"]] <- (
                    x[["count"]] / (
                        fragment_size[[sample_name]]
                    )[x$fragment_size]
                )
                x[["value"]] <- as.vector(scale(x[["percentage"]]))

                x_limits <- quantile(x[["value"]], c(0.1, 0.9))
                x[["value"]][x[["value"]] <= x_limits[1]] <- x_limits[[1]]
                x[["value"]][x[["value"]] >= x_limits[2]] <- x_limits[[2]]
                x
            })

        fragment_size_distribution |>
            dplyr::bind_rows() |>
            dplyr::mutate(
                category = factor(
                    category,
                    levels = c(
                        "CTCF_binding_site",
                        "promoter",
                        "promoter_flanking_region",
                        "enhancer",
                        "TF_binding_site",
                        "open_chromatin_region"
                    ) |> rev()
                )
            ) |>
            ggplot2::ggplot(
                ggplot2::aes(
                    x = fragment_size,
                    y = category,
                    fill = value
                )
            ) +
            ggplot2::geom_tile(ggplot2::aes(fill = value)) +
            ggplot2::scale_fill_gradient2(name = NULL) +
            ggplot2::scale_x_continuous(
                name = "Fragment size (bp)",
                limits = c(50, 750),
                breaks = seq(50, 750, 175)
            ) +
            ggplot2::scale_y_discrete(name = NULL) +
            ggplot2::ggtitle(label = z) +
            ggplot2::theme_linedraw(base_size = 6, base_family = "Arial") +
            ggplot2::theme(
                legend.background = ggplot2::element_blank(),
                legend.margin = ggplot2::margin(
                    t = 0, r = 0, b = 0, l = 0, unit = "mm"
                ),
                legend.key = ggplot2::element_blank(),
                legend.key.height = ggplot2::unit(2, "mm"),
                legend.key.width = ggplot2::unit(2, "mm"),
                legend.text = ggplot2::element_text(
                    family = "Arial",
                    # size = 6,
                    margin = ggplot2::margin(
                        t = 0, r = 0, b = 0, l = -0.5, unit = "mm"
                    )
                ),
                legend.box.margin = ggplot2::margin(
                    t = 0, r = 0, b = 0, l = -1, unit = "mm"
                ),
                legend.box.background = ggplot2::element_blank(),
                #

                plot.title = ggplot2::element_text(
                    family = "Arial", size = 6, hjust = 0.5
                )
            )
    }
) |>
    purrr::reduce(`+`) +
    patchwork::plot_layout(ncol = 1) +
    patchwork::plot_annotation(
        theme = ggplot2::theme(plot.margin = ggplot2::margin())
    )

Figure 4: Chromatin states

R session info

devtools::session_info()
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.3.1 (2023-06-16)
 os       macOS Ventura 13.5
 system   aarch64, darwin22.4.0
 ui       unknown
 language (EN)
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       America/Chicago
 date     2023-08-12
 pandoc   2.19.2 @ /Users/jialei/.pyenv/shims/ (via rmarkdown)

─ Packages ───────────────────────────────────────────────────────────────────
 package       * version     date (UTC) lib source
 BayesFactor     0.9.12-4.4  2022-07-05 [1] CRAN (R 4.3.0)
 bit             4.0.5       2022-11-15 [1] CRAN (R 4.3.0)
 bit64           4.0.5       2020-08-30 [1] CRAN (R 4.3.0)
 cachem          1.0.8       2023-05-01 [1] CRAN (R 4.3.0)
 callr           3.7.3       2022-11-02 [1] CRAN (R 4.3.0)
 circlize        0.4.15      2022-05-10 [1] CRAN (R 4.3.0)
 cli             3.6.1       2023-03-23 [1] CRAN (R 4.3.0)
 coda            0.19-4      2020-09-30 [1] CRAN (R 4.3.0)
 colorspace      2.1-0       2023-01-23 [1] CRAN (R 4.3.0)
 crayon          1.5.2       2022-09-29 [1] CRAN (R 4.3.0)
 devtools        2.4.5.9000  2023-08-11 [1] Github (r-lib/devtools@163c3f2)
 digest          0.6.33      2023-07-07 [1] CRAN (R 4.3.1)
 dplyr         * 1.1.2.9000  2023-07-19 [1] Github (tidyverse/dplyr@c963d4d)
 ellipsis        0.3.2       2021-04-29 [1] CRAN (R 4.3.0)
 evaluate        0.21        2023-05-05 [1] CRAN (R 4.3.0)
 extrafont     * 0.19        2023-01-18 [1] CRAN (R 4.3.0)
 extrafontdb     1.0         2012-06-11 [1] CRAN (R 4.3.0)
 fansi           1.0.4       2023-01-22 [1] CRAN (R 4.3.0)
 farver          2.1.1       2022-07-06 [1] CRAN (R 4.3.0)
 fastmap         1.1.1       2023-02-24 [1] CRAN (R 4.3.0)
 forcats       * 1.0.0.9000  2023-04-23 [1] Github (tidyverse/forcats@4a8525a)
 fs              1.6.3       2023-07-20 [1] CRAN (R 4.3.1)
 generics        0.1.3       2022-07-05 [1] CRAN (R 4.3.0)
 ggplot2       * 3.4.2.9000  2023-08-11 [1] Github (tidyverse/ggplot2@2cd0e96)
 ggridges        0.5.5       2023-04-24 [1] Github (wilkelab/ggridges@543a092)
 GlobalOptions   0.1.2       2020-06-10 [1] CRAN (R 4.3.0)
 glue            1.6.2.9000  2023-04-23 [1] Github (tidyverse/glue@cbac82a)
 gtable          0.3.3.9000  2023-04-23 [1] Github (r-lib/gtable@c56fd4f)
 hms             1.1.3       2023-03-21 [1] CRAN (R 4.3.0)
 htmltools       0.5.6       2023-08-10 [1] CRAN (R 4.3.1)
 htmlwidgets     1.6.2       2023-03-17 [1] CRAN (R 4.3.0)
 jpeg            0.1-10      2022-11-29 [1] CRAN (R 4.3.0)
 jsonlite        1.8.7       2023-06-29 [1] CRAN (R 4.3.1)
 knitr           1.43        2023-05-25 [1] CRAN (R 4.3.0)
 labeling        0.4.2       2020-10-20 [1] CRAN (R 4.3.0)
 lattice         0.21-8      2023-04-05 [2] CRAN (R 4.3.1)
 lifecycle       1.0.3       2022-10-07 [1] CRAN (R 4.3.0)
 lubridate     * 1.9.2.9000  2023-07-22 [1] Github (tidyverse/lubridate@cae67ea)
 magrittr        2.0.3       2022-03-30 [1] CRAN (R 4.3.0)
 Matrix        * 1.6-0       2023-07-08 [2] CRAN (R 4.3.1)
 MatrixModels    0.5-2       2023-07-10 [1] CRAN (R 4.3.1)
 memoise         2.0.1       2021-11-26 [1] CRAN (R 4.3.0)
 munsell         0.5.0       2018-06-12 [1] CRAN (R 4.3.0)
 mvtnorm         1.2-2       2023-06-08 [1] CRAN (R 4.3.0)
 patchwork     * 1.1.2.9000  2023-08-11 [1] Github (thomasp85/patchwork@bd57553)
 pbapply         1.7-2       2023-06-27 [1] CRAN (R 4.3.1)
 pillar          1.9.0       2023-03-22 [1] CRAN (R 4.3.0)
 pkgbuild        1.4.2       2023-06-26 [1] CRAN (R 4.3.1)
 pkgconfig       2.0.3       2019-09-22 [1] CRAN (R 4.3.0)
 pkgload         1.3.2.9000  2023-07-05 [1] Github (r-lib/pkgload@3cf9896)
 png             0.1-8       2022-11-29 [1] CRAN (R 4.3.0)
 prettyunits     1.1.1.9000  2023-04-23 [1] Github (r-lib/prettyunits@8706d89)
 processx        3.8.2       2023-06-30 [1] CRAN (R 4.3.1)
 ps              1.7.5       2023-04-18 [1] CRAN (R 4.3.0)
 purrr         * 1.0.2.9000  2023-08-11 [1] Github (tidyverse/purrr@ac4f5a9)
 R.cache         0.16.0      2022-07-21 [1] CRAN (R 4.3.0)
 R.methodsS3     1.8.2       2022-06-13 [1] CRAN (R 4.3.0)
 R.oo            1.25.0      2022-06-12 [1] CRAN (R 4.3.0)
 R.utils         2.12.2      2022-11-11 [1] CRAN (R 4.3.0)
 R6              2.5.1.9000  2023-04-23 [1] Github (r-lib/R6@e97cca7)
 ragg            1.2.5       2023-01-12 [1] CRAN (R 4.3.0)
 Rcpp            1.0.11      2023-07-06 [1] CRAN (R 4.3.1)
 readr         * 2.1.4.9000  2023-08-03 [1] Github (tidyverse/readr@80e4dc1)
 remotes         2.4.2.9000  2023-06-09 [1] Github (r-lib/remotes@8875171)
 reticulate      1.31        2023-08-10 [1] CRAN (R 4.3.1)
 rlang           1.1.1.9000  2023-06-09 [1] Github (r-lib/rlang@c55f602)
 rmarkdown       2.23.4      2023-07-27 [1] Github (rstudio/rmarkdown@054d735)
 rstudioapi      0.15.0.9000 2023-07-19 [1] Github (rstudio/rstudioapi@feceaef)
 Rttf2pt1        1.3.12      2023-01-22 [1] CRAN (R 4.3.0)
 scales          1.2.1       2022-08-20 [1] CRAN (R 4.3.0)
 sessioninfo     1.2.2       2021-12-06 [1] CRAN (R 4.3.0)
 shape           1.4.6       2021-05-19 [1] CRAN (R 4.3.0)
 stringi         1.7.12      2023-01-11 [1] CRAN (R 4.3.0)
 stringr       * 1.5.0.9000  2023-08-11 [1] Github (tidyverse/stringr@08ff36f)
 styler        * 1.10.1      2023-07-17 [1] Github (r-lib/styler@aca7223)
 systemfonts     1.0.4       2022-02-11 [1] CRAN (R 4.3.0)
 textshaping     0.3.6       2021-10-13 [1] CRAN (R 4.3.0)
 tibble        * 3.2.1.9005  2023-05-28 [1] Github (tidyverse/tibble@4de5c15)
 tidyr         * 1.3.0.9000  2023-04-23 [1] Github (tidyverse/tidyr@0764e65)
 tidyselect      1.2.0       2022-10-10 [1] CRAN (R 4.3.0)
 tidyverse     * 2.0.0.9000  2023-04-23 [1] Github (tidyverse/tidyverse@8ec2e1f)
 timechange      0.2.0       2023-01-11 [1] CRAN (R 4.3.0)
 tzdb            0.4.0       2023-05-12 [1] CRAN (R 4.3.0)
 usethis         2.2.2.9000  2023-07-11 [1] Github (r-lib/usethis@467ff57)
 utf8            1.2.3       2023-01-31 [1] CRAN (R 4.3.0)
 vctrs           0.6.3       2023-06-14 [1] CRAN (R 4.3.0)
 vroom           1.6.3.9000  2023-04-30 [1] Github (tidyverse/vroom@89b6aac)
 withr           2.5.0       2022-03-03 [1] CRAN (R 4.3.0)
 xfun            0.40        2023-08-09 [1] CRAN (R 4.3.1)
 yaml            2.3.7       2023-01-23 [1] CRAN (R 4.3.0)
 yarrr           0.1.6       2023-04-23 [1] Github (ndphillips/yarrr@e2e4488)

 [1] /opt/homebrew/lib/R/4.3/site-library
 [2] /opt/homebrew/Cellar/r/4.3.1/lib/R/library

─ Python configuration ───────────────────────────────────────────────────────
 python:         /Users/jialei/.pyenv/shims/python
 libpython:      /Users/jialei/.pyenv/versions/mambaforge-22.9.0-3/lib/libpython3.10.dylib
 pythonhome:     /Users/jialei/.pyenv/versions/mambaforge-22.9.0-3:/Users/jialei/.pyenv/versions/mambaforge-22.9.0-3
 version:        3.10.9 | packaged by conda-forge | (main, Feb  2 2023, 20:26:08) [Clang 14.0.6 ]
 numpy:          /Users/jialei/.pyenv/versions/mambaforge-22.9.0-3/lib/python3.10/site-packages/numpy
 numpy_version:  1.24.3
 numpy:          /Users/jialei/.pyenv/versions/mambaforge-22.9.0-3/lib/python3.10/site-packages/numpy
 
 NOTE: Python version was forced by RETICULATE_PYTHON

──────────────────────────────────────────────────────────────────────────────


Citation

BibTeX citation:
@article{bhattacharyya2023,
  author = {Bhattacharyya, Samadrita and Duan, Jialei and J. Vela, Ryan
    and Bhakta, Minoti and Bajona, Pietro and P.A. Mammen, Pradeep and
    C. Hon, Gary and V. Munshi, Nikhil},
  publisher = {American Heart Association},
  title = {Accurate {Classification} of {Cardiomyopathy} {Diagnosis} by
    {Chromatin} {Accessibility}},
  journal = {Circulation},
  volume = {146},
  number = {11},
  pages = {878 - 881},
  date = {2023-08-12},
  url = {https://doi.org/10.1161/CIRCULATIONAHA.122.059659},
  doi = {10.1161/CIRCULATIONAHA.122.059659},
  langid = {en}
}
For attribution, please cite this work as:
Bhattacharyya, Samadrita, Jialei Duan, Ryan J. Vela, Minoti Bhakta, Pietro Bajona, Pradeep P.A. Mammen, Gary C. Hon, and Nikhil V. Munshi. 2023. “Accurate Classification of Cardiomyopathy Diagnosis by Chromatin Accessibility.” Circulation 146 (11): 878–81. https://doi.org/10.1161/CIRCULATIONAHA.122.059659.