Onecut3 affected cells

Author

Evgenii O. Tretiakov

Load data and setup parameters

Code
# Load tidyverse infrastructure packages
library(here)
library(tidyverse)
library(magrittr)
library(future)
library(furrr)

# Load packages for scRNA-seq analysis and visualisation
library(Seurat)
library(SeuratWrappers)
library(SeuratDisk)
library(ggplot2)
library(cowplot)
library(UpSetR)
library(patchwork)
library(grid)
library(Nebulosa)
library(sctransform)
library(OmnipathR)
library(dnet)
library(gprofiler2)
library(scCustomize)

Set paths

Code
src_dir <- here::here("code")
data_dir <- here::here("data")
output_dir <- here::here("outputs")
plots_dir <- here::here(output_dir, "figures")
tables_dir <- here::here(output_dir, "tables")

Load helper functions and gene-sets

Code
source(here::here(src_dir, "main.R"))
source(here::here(src_dir, "load.R"))
source(here::here(src_dir, "genes.R"))

Set fixed variables

Code
# set seed
reseed <- 42
set.seed(seed = reseed)

# available RAM in kB
ram <- CheckRAM()

# available cores
n.cores <- AvailableCores(prop2use = .1)

# Parameters for parallel execution
plan("multisession", workers = n.cores)
options(
  future.globals.maxSize = ram,
  future.rng.onMisuse = "ignore"
)
plan()
multisession:
- args: function (..., workers = 25, envir = parent.frame())
- tweaked: TRUE
- call: plan("multisession", workers = n.cores)
Code
# bpparam <- BiocParallel::MulticoreParam(workers = n.cores)
Code
# thresholds
threshold.max.p.value <- 5e-3
threshold.min.baseMean <- 1
threshold.min.log2FoldChange <- 2
threshold.max.log2FoldChange <- -0.45

# Params
param.merged.vst.variable.features.n <- param.integrated.vst.variable.features.n <- 7000
param.merged.vst.ncells <- param.integrated.vst.ncells <- 10000
param.merged.vst.vars.to.regress <- param.integrated.vst.vars.to.regress <- c("log_umi_per_gene")
param.merged.vst.return.only.var.genes <- param.integrated.vst.return.only.var.genes <- FALSE

param.merged.dm.pcs.slct.pca.n <- param.integrated.dm.pcs.slct.pca <- 100
param.merged.dm.pcs.slct.snn.dims <- param.integrated.dm.pcs.slct.snn <- 1:100
param.merged.dm.pcs.slct.umap.dims <- param.integrated.dm.pcs.slct.umap.dims <- 1:100

param.merged.dm.umap.reduction <- param.integrated.dm.umap.reduction <- "pca"
param.merged.dm.umap.return.model <- param.integrated.dm.umap.return.model <- TRUE
param.merged.dm.umap.slot <- param.integrated.dm.umap.slot <- "data"
param.merged.dm.umap.umap.method <- param.integrated.dm.umap.umap.method <- "uwot"
param.merged.dm.umap.reduction.model <- param.integrated.dm.umap.reduction.model <- NULL
param.merged.dm.umap.return.model <- param.integrated.dm.umap.return.model <- FALSE
param.merged.dm.umap.n.neighbors <- param.integrated.dm.umap.n.neighbors <- 30L
param.merged.dm.umap.n.components <- param.integrated.dm.umap.n.components <- 2L
param.merged.dm.umap.metric <- param.integrated.dm.umap.metric <- "cosine"

param.sp.vst.variable.features.n <- 3000
param.sp.vst.ncells <- 4000
param.sp.vst.vars.to.regress <- c("log_umi_per_gene")
param.sp.vst.return.only.var.genes <- FALSE
param.sp.dm.pcs.slct.pca <- 30
param.sp.dm.pcs.slct.snn <- 1:30
param.sp.dm.pcs.slct.umap.dims <- 1:30
param.sp.dm.umap.reduction <- "pca"
param.sp.dm.umap.return.model <- TRUE
param.sp.dm.umap.slot <- "data"
param.sp.dm.umap.umap.method <- "uwot"
param.sp.dm.umap.reduction.model <- NULL
param.sp.dm.umap.return.model <- FALSE
param.sp.dm.umap.n.neighbors <- 20L
param.sp.dm.umap.n.components <- 2L
param.sp.dm.umap.metric <- "cosine"

# g1 <- 'Onecut2'
# g2 <- 'Onecut3'

# Subsets for Onecuts analysis
subsets_df <-
  tribble(
    ~srtfile,                        ~subname,            ~subdescript,
    #--|--|---
    "rar2020.srt.neuro",             "neuro",             "Neuronal clusters",
    "rar2020.srt.filt",              "filt",              "Filtered Neuronal clusters",
    "rar2020.srt.mb.onecut.related", "mb.onecut.related", "Neuronal clusters probably related to Onecut3",
    "rar2020.srt.published.onecuts", "published.onecuts", "Published Onecut2 and Onecut3 identified clusters",
    "rar2020.srt.cont.oc2or3",       "cont.oc2or3",       "Onecut2 OR Onecut3 pls-subset from Neuronal clusters",
    "rar2020.srt.cont.oc3",          "cont.oc3",          "Onecut3 pls-subset from Neuronal clusters"
  )

# Original clusters names for subsets
# TODO rename for consistent format with table
# [[I]] rewrite with do.call and strsplit or eval and parse to include all sets?
rar2020.clusters.non.neuro <-
  as.character(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 38, 42, 45))
rar2020.clusters.excl.draft <-
  as.character(c(32, 23, 30, 25, 29, 43, 26, 31, 24))
rar2020.clusters.incl.draft <-
  as.character(c(18, 16, 14, 15, 17, 13, 12, 34, 36, 41))

# Dev. Stages
rar2020.ages.all <- c("E15", "E17", "P00", "P02", "P10", "P23")
rar2020.ages.postnat <- c("P00", "P02", "P10", "P23")

Load published Seurat-object from Romanov et al. (2020) and colour-code for consistency

Code
samples_df <- read_tsv(here::here("data/samples.tsv"))
rar2020.srt.pub <- readr::read_rds(file.path(data_dir, "oldCCA_nae_srt.rds"))
rar2020.srt.pub %<>% UpdateSeuratObject()
colnames(rar2020.srt.pub@reductions$umap@cell.embeddings) <- c("UMAP_1", "UMAP_2")
colours <- readr::read_lines(here(data_dir, "colours_wtree.tsv"))
clrlev <- levels(rar2020.srt.pub$wtree)
names(colours) <- clrlev

Load results of DESeq2 analysis of Onecut3 in vitro overexpression experiment in Neuro2A cell line

Code
neuro2a <-
  readr::read_csv(
    here(
      data_dir,
      "neuro2a-onecut3-overexpression_rnaseq_deseq-global-contrast-gr.csv"
    )
  )

Prepare data subsets

Derive ages in Seurat object from cell names and mark postnatal stages

Code
rar2020.srt.pub$orig.ident <-
  rar2020.srt.pub %>%
  colnames() %>%
  str_split(pattern = ":", simplify = TRUE) %>%
  .[, 1] %>%
  plyr::mapvalues(
    x = .,
    from = samples_df$fullname,
    to = samples_df$sample
  )
rar2020.srt.pub$age <-
  plyr::mapvalues(
    x = rar2020.srt.pub$orig.ident,
    from = samples_df$sample,
    to = samples_df$age
  )
Idents(rar2020.srt.pub) <-
  factor(rar2020.srt.pub$age,
    levels  = rar2020.ages.all,
    ordered = TRUE
  )
rar2020.srt.pub$age <- Idents(rar2020.srt.pub)
rar2020.srt.pub$postnat <-
  rar2020.srt.pub$age %in% rar2020.ages.postnat

Create subsets from Seurat object for exploratory analysis

Code
Idents(rar2020.srt.pub) <- "wtree"

holder_srt <- subsets_df$srtfile %>%
  map(c) %>%
  setNames(subsets_df$srtfile)
holder_srt_split <- subsets_df$srtfile %>%
  map(c) %>%
  setNames(subsets_df$srtfile)

holder_srt[[1]] <- subsetSrt(
  dat.srt = rar2020.srt.pub,
  srt.name = subsets_df$subdescript[1],
  idents = rar2020.clusters.non.neuro,
  invert = TRUE
)

holder_srt[[5]] <- subset(x = holder_srt[[1]], subset = Onecut2 > 0 | Onecut3 > 0)
holder_srt[[5]]@project.name <- subsets_df$subdescript[5]

Select most promising genes from in vitro Onecut3 over-expression experiment.

Code
neuro2a %>%
  filter(
    padj < threshold.max.p.value,
    baseMean > threshold.min.baseMean,
    (log2FoldChange >= threshold.min.log2FoldChange | log2FoldChange <= threshold.max.log2FoldChange)
  ) %>%
  select(gene_name, baseMean, log2FoldChange, lfcSE, padj) %>%
  arrange(-log2FoldChange) -> neuro2a.sub

neuro2a.sub %>% knitr::kable()
gene_name baseMean log2FoldChange lfcSE padj
Onecut3 2.566847e+04 9.4825701 0.2021581 0.0000000
Uts2 3.576302e+01 7.5500575 1.1744736 0.0000000
Atp13a4 4.326759e+01 6.9163863 1.1669195 0.0000000
Pla2g2d 9.563099e+01 6.5979910 0.6667478 0.0000000
Gpnmb 4.485152e+01 6.3595647 1.0279639 0.0000000
Tns3 1.835797e+01 5.6944015 1.2142714 0.0000174
Aicda 9.631527e+00 5.6295291 1.2934371 0.0001112
Krt18 7.710241e+00 5.1954183 1.4623745 0.0006341
Btn1a1 2.287652e+01 5.0264926 0.9052171 0.0000036
Mep1a 6.555482e+00 4.8235899 1.6535449 0.0015375
Enpp2 6.553108e+00 4.8231089 1.6536941 0.0017111
Robo3 1.530657e+01 4.7692766 1.1433108 0.0001158
Nav2 1.047926e+01 4.6255816 1.6057992 0.0017726
Col5a1 1.395547e+01 4.5869179 1.2107552 0.0002587
Rnasel 1.387330e+01 4.5837092 1.2179147 0.0002702
Inava 6.092479e+00 4.5346820 1.8316075 0.0017893
Dok5 1.313822e+01 4.4924645 1.2375090 0.0003627
Abca8a 2.980160e+01 4.4903500 0.6215878 0.0000000
Ccdc80 1.581562e+01 4.4869340 0.9272581 0.0000429
Cd300a 9.749496e+00 4.4513241 1.6871202 0.0024966
Fcgbp 3.851741e+01 4.2635672 0.5129964 0.0000000
Hmgcs2 9.282358e+00 4.2330265 1.8166281 0.0036025
Ramp3 1.243662e+01 4.0484880 1.0528793 0.0005531
Lgr6 1.464627e+01 4.0212490 0.8751085 0.0001080
Ephb2 1.065564e+01 3.9024278 1.5831057 0.0042868
Lrrc15 2.288265e+01 3.8974134 0.6150118 0.0000000
Col1a1 2.046678e+02 3.8711684 0.2373334 0.0000000
Gsdma 2.206785e+01 3.8277084 0.6241420 0.0000001
Klb 2.409124e+01 3.6777896 0.5781942 0.0000000
Napsa 2.611302e+01 3.6376276 0.5641667 0.0000000
Gli1 1.680753e+02 3.5791301 0.2292389 0.0000000
Cemip 1.707480e+01 3.5782976 0.7089852 0.0000603
Oas2 4.050870e+01 3.5535095 0.4419886 0.0000000
Adcy5 1.752784e+01 3.4591966 0.6665688 0.0000077
Elovl3 1.092320e+01 3.4528391 1.0752791 0.0020589
Hba-a1 1.397219e+01 3.4455395 0.7993929 0.0006044
Chrna2 4.797299e+00 3.4269043 2.2726451 0.0046964
Tmem255a 1.463470e+01 3.3514989 0.7230162 0.0001099
Rgcc 4.899927e+01 3.2798083 0.3738403 0.0000000
Vsir 1.561047e+01 3.2764173 0.6798631 0.0000431
Id2 8.600826e+01 3.1746368 0.2720486 0.0000000
Ccnd2 3.107389e+01 3.1465288 0.4516910 0.0000000
Cnmd 4.146511e+01 3.1346735 0.3867457 0.0000000
Iffo2 2.186291e+01 3.0223522 0.5389123 0.0000051
Fibcd1 1.777831e+01 3.0211175 0.6116922 0.0000948
Rtp4 9.391453e+01 2.9807989 0.2603853 0.0000000
Fst 2.831187e+02 2.8247561 0.1549335 0.0000000
Trim12c 2.779289e+01 2.7095860 0.4603549 0.0000005
Ddx60 3.720612e+01 2.6472650 0.4068872 0.0000000
Wfdc1 3.436215e+01 2.6285033 0.4068434 0.0000000
Xaf1 1.246777e+02 2.5842174 0.2208252 0.0000000
Myh11 3.551432e+01 2.5771303 0.3966535 0.0000000
Ppl 1.617763e+01 2.5533742 0.6530466 0.0003627
Angpt2 2.027067e+02 2.4837492 0.1680342 0.0000000
Oas1g 3.081035e+02 2.4309620 0.1380667 0.0000000
Actn3 3.943567e+01 2.4256660 0.3823002 0.0000000
Gbp7 4.677136e+01 2.3661464 0.3400031 0.0000000
Irf7 5.208796e+02 2.3429517 0.1125816 0.0000000
Mmel1 5.666474e+01 2.3359727 0.3070266 0.0000000
Oas1a 2.377966e+02 2.3168755 0.1515249 0.0000000
Prss16 5.455953e+01 2.3157017 0.3026879 0.0000000
Tent5b 2.208709e+01 2.2766464 0.5200212 0.0001225
Nlrc5 2.915088e+01 2.2682699 0.4255217 0.0000048
Usp2 4.225483e+01 2.2473728 0.3665659 0.0000001
Myh7 1.292863e+01 2.1978633 0.9750005 0.0035381
Fos 3.492183e+02 2.1856028 0.1383600 0.0000000
Snx20 3.967236e+01 2.1019659 0.3808530 0.0000018
Tspan33 3.702228e+01 2.0959051 0.3613784 0.0000004
Gbp3 2.842574e+01 2.0651137 0.4209822 0.0000246
Cib2 2.696697e+01 2.0648020 0.4437731 0.0000587
Oas3 6.509119e+01 2.0551929 0.2736893 0.0000000
Lrp4 1.518820e+02 2.0157114 0.1853319 0.0000000
Axl 5.670119e+01 2.0121497 0.2936483 0.0000000
Nckap5los 3.395294e+02 -0.4510405 0.1759480 0.0007472
5430401H09Rik 1.942687e+02 -0.4812028 0.2028100 0.0009033
Gm13341 1.795072e+04 -0.4853780 0.0937359 0.0000000
Ovgp1 7.544007e+02 -0.4855046 0.1313155 0.0000243
Nags 2.359603e+02 -0.4894776 0.1750490 0.0004800
Gm13431 4.824839e+02 -0.5380966 0.1364246 0.0000129
Mfsd2b 1.515170e+02 -0.5410346 0.2271112 0.0020675
Gm13340 8.269480e+04 -0.5693516 0.0932658 0.0000000
Msh5 3.765577e+02 -0.5705829 0.1325347 0.0000025
mt-Co1 2.949108e+05 -0.5725768 0.0968816 0.0000000
Gm33148 9.249945e+01 -0.6420429 0.4401495 0.0049625
Ascl2 1.034699e+02 -0.6580709 0.2926764 0.0024956
Tmem191c 6.125862e+02 -0.6619891 0.1218598 0.0000000
1700029J07Rik 3.458456e+02 -0.6885587 0.1383063 0.0000002

Visualise selected genes for check on Seurat object

Code
param.plot.1.repel.box.padding <- 0.5
param.plot.1.filter.padj <- 0.01
param.plot.1.filter.baseMean <- 1
param.plot.1.point.colour.background <- "grey50"
DESeq2 <- neuro2a %>%
  select(gene_name, baseMean, log2FoldChange, lfcSE, padj) %>%
  filter(padj < param.plot.1.filter.padj, baseMean > param.plot.1.filter.baseMean) %>%
  mutate(gene_name = if_else(condition = gene_name %in% neuro2a.sub$gene_name, gene_name, "")) %>%
  ggplot(., aes(
    x = log2(baseMean + 1),
    y = log2FoldChange,
    label = gene_name,
    size = -log10(lfcSE))) +
  geom_vline(
    xintercept = 0,
    linetype = "solid",
    colour = "black",
    size = 0.5
  ) +
  geom_hline(
    yintercept = 0,
    linetype = "solid",
    colour = "black",
    size = 0.5
  ) +
  geom_point(
    data = neuro2a[!neuro2a$gene_name %in% neuro2a.sub$gene_name, ],
    color = param.plot.1.point.colour.background
  ) +
  ggrepel::geom_text_repel(
    aes(point.size = -log10(lfcSE)), # data point size
    size = 6, # font size in the text labels
    point.padding = 0, # additional padding around each point
    min.segment.length = 0, # draw all line segments
    max.time = 2, max.iter = 1e6, # stop after 1 second, or after 100,000 iterations
    seed = reseed,
    max.overlaps = Inf,
    box.padding = 0.5
  ) +
  geom_point(
    data = neuro2a[neuro2a$gene_name %in% neuro2a.sub$gene_name, ],
    color = "red"
  ) +
  labs(
    title = "Neuro2A cells after Onecut3 overexpression",
    subtitle = "Results of Differential Genes Expression Analysis",
    caption = sprintf(
      "Selected genes (red) with adjusted p-value < %s \n minimal expression value=%s and observed log2FoldChange value >%s or <%s",
      threshold.max.p.value,
      threshold.min.baseMean,
      threshold.min.log2FoldChange,
      threshold.max.log2FoldChange
    )
  )

DESeq2

Code
cowplot::save_plot(
  filename = paste0(plots_dir, "/plot_DEG_KI-N2a.pdf"),
  plot = DESeq2,
  base_height = 12,
  base_width = 14
)
Code
neuro2a %>%
  select(gene_name, baseMean, log2FoldChange, lfcSE, padj) %>%
  filter(padj < param.plot.1.filter.padj, baseMean > param.plot.1.filter.baseMean) %>%
  mutate(gene_name = if_else(condition = gene_name %in% neuro2a.sub$gene_name, gene_name, "")) %>%
  ggplot(., aes(
    x = log2FoldChange,
    y = -log10(padj),
    label = gene_name)) +
  geom_vline(
    xintercept = 0,
    linetype = "solid",
    colour = "black",
    size = 0.5
  ) +
  geom_hline(
    yintercept = 0,
    linetype = "solid",
    colour = "black",
    size = 0.5
  ) + 
  xlim(c(-12.5, 12.5)) +
  geom_point(
    data = neuro2a[!neuro2a$gene_name %in% neuro2a.sub$gene_name, ],
    color = param.plot.1.point.colour.background
  ) +
  ggrepel::geom_text_repel(
    size = 5, # font size in the text labels
    point.padding = 0, # additional padding around each point
    min.segment.length = 0.5, # draw all line segments
    max.time = 5, max.iter = 1e6, # stop after 1 second, or after 100,000 iterations
    seed = reseed,
    max.overlaps = Inf,
    box.padding = 0.2
  ) +
  geom_point(
    data = neuro2a[neuro2a$gene_name %in% neuro2a.sub$gene_name, ],
    color = "red"
  ) +
  labs(
    title = "Neuro2A cells after Onecut3 overexpression",
    subtitle = "Results of Differential Genes Expression Analysis",
    caption = sprintf(
      "Selected genes (red) with adjusted p-value < %s \n minimal expression value=%s and observed log2FoldChange value >%s or <%s",
      threshold.max.p.value,
      threshold.min.baseMean,
      threshold.min.log2FoldChange,
      threshold.max.log2FoldChange
    )
  ) +
  theme_light()

Knit interactions, that explains KI experiment results
Code
n2a.top <- neuro2a.sub %>%
  .[.$gene_name %in% rownames(GetAssayData(rar2020.srt.pub, slot = "scale.data")), ] %>%
  .$gene_name %>%
  .[-1]
svFeaturePLOT <- function(gene) {
  save_plot(
    filename = paste0(plots_dir, "/plot_feature_", gene, ".pdf"),
    plot = FeaturePlot(rar2020.srt.pub, features = gene),
    base_height = 6
  )
}
lapply(n2a.top, svFeaturePLOT)
[[1]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Uts2.pdf"

[[2]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Atp13a4.pdf"

[[3]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Pla2g2d.pdf"

[[4]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Gpnmb.pdf"

[[5]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Tns3.pdf"

[[6]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Aicda.pdf"

[[7]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Krt18.pdf"

[[8]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Btn1a1.pdf"

[[9]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Mep1a.pdf"

[[10]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Enpp2.pdf"

[[11]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Robo3.pdf"

[[12]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Nav2.pdf"

[[13]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Col5a1.pdf"

[[14]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Rnasel.pdf"

[[15]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Dok5.pdf"

[[16]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Abca8a.pdf"

[[17]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Ccdc80.pdf"

[[18]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Cd300a.pdf"

[[19]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Fcgbp.pdf"

[[20]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Hmgcs2.pdf"

[[21]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Ramp3.pdf"

[[22]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Lgr6.pdf"

[[23]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Ephb2.pdf"

[[24]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Lrrc15.pdf"

[[25]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Col1a1.pdf"

[[26]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Gsdma.pdf"

[[27]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Klb.pdf"

[[28]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Napsa.pdf"

[[29]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Gli1.pdf"

[[30]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Cemip.pdf"

[[31]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Oas2.pdf"

[[32]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Adcy5.pdf"

[[33]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Hba-a1.pdf"

[[34]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Chrna2.pdf"

[[35]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Tmem255a.pdf"

[[36]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Rgcc.pdf"

[[37]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Vsir.pdf"

[[38]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Id2.pdf"

[[39]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Ccnd2.pdf"

[[40]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Iffo2.pdf"

[[41]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Fibcd1.pdf"

[[42]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Rtp4.pdf"

[[43]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Fst.pdf"

[[44]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Trim12c.pdf"

[[45]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Ddx60.pdf"

[[46]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Wfdc1.pdf"

[[47]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Xaf1.pdf"

[[48]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Myh11.pdf"

[[49]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Ppl.pdf"

[[50]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Angpt2.pdf"

[[51]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Oas1g.pdf"

[[52]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Actn3.pdf"

[[53]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Gbp7.pdf"

[[54]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Irf7.pdf"

[[55]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Mmel1.pdf"

[[56]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Oas1a.pdf"

[[57]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Nlrc5.pdf"

[[58]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Usp2.pdf"

[[59]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Myh7.pdf"

[[60]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Fos.pdf"

[[61]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Snx20.pdf"

[[62]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Tspan33.pdf"

[[63]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Gbp3.pdf"

[[64]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Cib2.pdf"

[[65]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Oas3.pdf"

[[66]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Lrp4.pdf"

[[67]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Axl.pdf"

[[68]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Ovgp1.pdf"

[[69]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Nags.pdf"

[[70]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Gm13431.pdf"

[[71]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Mfsd2b.pdf"

[[72]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Msh5.pdf"

[[73]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_mt-Co1.pdf"

[[74]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Ascl2.pdf"

[[75]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_Tmem191c.pdf"

[[76]]
[1] "/data/src/deciphering-role-of-onecut3-transcription-factor-in-cell-fate-decisions/outputs/figures/plot_feature_1700029J07Rik.pdf"
Code
n2a.onecut3.plots <- n2a.top %>%
  map(~ plot_density(rar2020.srt.pub, c("Onecut3", .x), joint = TRUE, combine = FALSE) %>% .[[length(.)]]) %>%
  setNames(n2a.top)
plt_combdens <- plot_grid(
  plotlist = n2a.onecut3.plots,
  ncol = 3,
  byrow = TRUE
)
cowplot::save_plot(
  filename = paste0(plots_dir, "/plot_DEG__KI-N2a_density_combined_wt_Onecut3.pdf"),
  plot = plt_combdens,
  base_height = 138,
  base_width = 19.416,
  limitsize = FALSE
)
Code
SexScoring <- function(
    object,
    n = 10,
    ctrl = NULL,
    ...) {
  name <- "Sex.Score"
  features <- list(
    "female" = c("Tsix", "Xist") %>% .[. %in% rownames(object)], 
    "male" = c("Eif2s3y", "Ddx3y", "Uty", "Kdm5d", "Zfy", "Rps4y1", "Rps4y2", "Sry") %>% .[. %in% rownames(object)]
  )
  if (is.null(x = ctrl)) {
    ctrl <- min(vapply(X = features, FUN = length, FUN.VALUE = numeric(length = 1)))
  }
  object.cc <- AddModuleScore(
    object = object,
    features = features,
    name = name,
    ctrl = ctrl,
    ...
  )
  cc.columns <- grep(pattern = name, x = colnames(x = object.cc[[]]), value = TRUE)
  cc.scores <- object.cc[[cc.columns]]
  rm(object.cc)
  invisible(gc())
  colnames(x = cc.scores) <-
    str_c(c("female_score", "male_score"), n, sep = "_")
  rownames(x = cc.scores) <- colnames(object)
  cc.scores <-
    cc.scores[, str_c(c("female_score", "male_score"), n, sep = "_")]
  object[[colnames(x = cc.scores)]] <- cc.scores
  return(object)
}

rar2020.srt.pub <- SexScoring(
  rar2020.srt.pub,
  n = 5,
  assay = "RNA"
)
Code
p4 <- plot_density(rar2020.srt.pub, c("Onecut3", "Onecut2"), joint = TRUE)
p4 + plot_layout(ncol = 1)

Code
cowplot::save_plot(
  filename = paste0(plots_dir, "/plot_Onecut2_density_combined_wt_Onecut3.pdf"),
  plot = p4 + plot_layout(ncol = 1),
  base_height = 18,
  base_width = 6.472,
  limitsize = FALSE
)
Code
FeaturePlot_scCustom(rar2020.srt.pub, "male_score_5")

Code
male <- c("Eif2s3y", "Ddx3y", "Uty", "Kdm5d", "Zfy", "Rps4y1", "Rps4y2", "Sry")

Plot_Density_Custom(rar2020.srt.pub, c("male_score_5", "Onecut3"), joint = TRUE)

Code
Plot_Density_Custom(rar2020.srt.pub, c("male_score_5", "Eif2s3y"), joint = TRUE)

Code
Plot_Density_Custom(rar2020.srt.pub, c("male_score_5", "Uty"), joint = TRUE)

Code
Plot_Density_Custom(rar2020.srt.pub, c("male_score_5", "Kdm5d"), joint = TRUE)

Code
FeaturePlot(rar2020.srt.pub, c("male_score_5", "Onecut3"), blend = TRUE)

Code
FeaturePlot(rar2020.srt.pub, c("Onecut3", "Eif2s3y"), blend = TRUE)

Code
FeaturePlot(rar2020.srt.pub, c("Onecut3", "Uty"), blend = TRUE)

Code
FeaturePlot(rar2020.srt.pub, c("Onecut3", "Kdm5d"), blend = TRUE)

Code
p1 <- FeaturePlot_scCustom(rar2020.srt.pub, c("Eif2s3y"))

p2 <- FeaturePlot_scCustom(rar2020.srt.pub, c("Uty"))

p3 <- FeaturePlot_scCustom(rar2020.srt.pub, c("Kdm5d"))
p1 | p2 | p3

Code
FeaturePlot_scCustom(rar2020.srt.pub, "female_score_5")

Code
female <- c("Tsix", "Xist")

Plot_Density_Custom(rar2020.srt.pub, c("female_score_5", "Onecut3"), joint = TRUE)

Code
Plot_Density_Custom(rar2020.srt.pub, c("female_score_5", "Tsix"), joint = TRUE)

Code
Plot_Density_Custom(rar2020.srt.pub, c("female_score_5", "Xist"), joint = TRUE)

Code
FeaturePlot(rar2020.srt.pub, c("Onecut3", "Tsix"), blend = TRUE)

Code
FeaturePlot(rar2020.srt.pub, c("Onecut3", "Xist"), blend = TRUE)

Code
p1 <- FeaturePlot_scCustom(rar2020.srt.pub, c("Onecut3"))

p2 <- FeaturePlot_scCustom(rar2020.srt.pub, c("Tsix"))

p3 <- FeaturePlot_scCustom(rar2020.srt.pub, c("Xist"))

p1 | p2 | p3

Code
p5 <- plot_density(rar2020.srt.pub, c("Onecut3", "Ascl1"), joint = TRUE)
p5 + plot_layout(ncol = 1)

Code
cowplot::save_plot(
  filename = paste0(plots_dir, "/plot_Ascl1_density_combined_wt_Onecut3.pdf"),
  plot = p5 + plot_layout(ncol = 1),
  base_height = 18,
  base_width = 6.472,
  limitsize = FALSE
)
Code
p5 <- plot_density(rar2020.srt.pub, c("Onecut3", "Ascl2"), joint = TRUE)
p5 + plot_layout(ncol = 1)

Code
cowplot::save_plot(
  filename = paste0(plots_dir, "/plot_Ascl2_density_combined_wt_Onecut3.pdf"),
  plot = p5 + plot_layout(ncol = 1),
  base_height = 18,
  base_width = 6.472,
  limitsize = FALSE
)
Code
p_list <- plot_density(rar2020.srt.pub, c("Onecut3", "Slc32a1"), joint = TRUE, combine = FALSE)
p_list[[length(p_list)]]

Code
cowplot::save_plot(
  filename = paste0(plots_dir, "/plot_Slc32a1_density_combined_wt_Onecut3.pdf"),
  plot = p_list[[length(p_list)]],
  base_height = 6,
  base_width = 6.472,
  limitsize = FALSE
)
Code
p_list <- plot_density(rar2020.srt.pub, c("Onecut3", "Slc17a6"), joint = TRUE, combine = FALSE)
p_list[[length(p_list)]]

Code
cowplot::save_plot(
  filename = paste0(plots_dir, "/plot_Slc17a6_density_combined_wt_Onecut3.pdf"),
  plot = p_list[[length(p_list)]],
  base_height = 6,
  base_width = 6.472,
  limitsize = FALSE
)
Code
p_list <- plot_density(rar2020.srt.pub, c("Gad1", "Gad2"), joint = TRUE)
p_list + plot_layout(ncol = 1)

Code
cowplot::save_plot(
  filename = paste0(plots_dir, "/plot_Gad1_density_combined_wt_Gad2.pdf"),
  plot = p_list[[length(p_list)]],
  base_height = 6,
  base_width = 6.472,
  limitsize = FALSE
)
Code
p_list <- plot_density(rar2020.srt.pub, c("Slc32a1", "Slc17a6"), joint = TRUE)
p_list + plot_layout(ncol = 1)

Code
cowplot::save_plot(
  filename = paste0(plots_dir, "/plot_Slc17a6_density_combined_wt_Slc32a1.pdf"),
  plot = p_list[[length(p_list)]],
  base_height = 6,
  base_width = 6.472,
  limitsize = FALSE
)
Code
p1 <- FeaturePlot_scCustom(rar2020.srt.pub, c("Onecut3"))

p2 <- FeaturePlot_scCustom(rar2020.srt.pub, c("Slc32a1"))

p3 <- FeaturePlot_scCustom(rar2020.srt.pub, c("Slc17a6"))
p1 | p2 | p3

Code
p_list <- plot_density(rar2020.srt.pub, c("Onecut3", "Cnr1"), joint = TRUE, combine = FALSE)
p_list[[length(p_list)]]

Code
p_list <- plot_density(rar2020.srt.pub, c("Onecut3", "Th"), joint = TRUE, combine = FALSE)
p_list[[length(p_list)]]

Code
cowplot::save_plot(
  filename = paste0(plots_dir, "/plot_Th_density_combined_wt_Onecut3.pdf"),
  plot = p_list[[length(p_list)]],
  base_height = 6,
  base_width = 6.472,
  limitsize = FALSE
)
Code
p_list <- plot_density(rar2020.srt.pub, c("Onecut3", "Trh"), joint = TRUE, combine = FALSE)
p_list[[length(p_list)]]

Code
cowplot::save_plot(
  filename = paste0(plots_dir, "/plot_Trh_density_combined_wt_Onecut3.pdf"),
  plot = p_list[[length(p_list)]],
  base_height = 6,
  base_width = 6.472,
  limitsize = FALSE
)
Code
p1 <- FeaturePlot_scCustom(rar2020.srt.pub, c("Onecut3"))

p2 <- FeaturePlot_scCustom(rar2020.srt.pub, c("Th"))

p3 <- FeaturePlot_scCustom(rar2020.srt.pub, c("Trh"))
p1 | p2 | p3

Code
neurons <- subset(rar2020.srt.pub, subset = Rbfox3 > 0 | Elavl4 > 0 | Snap25 > 0 | Stmn2 > 0)
onecut <- subset(neurons, subset = Onecut3 > 0)

Idents(onecut, cells = WhichCells(onecut, expression = ((Gad1 < 2 & Gad2 < 2 & Slc32a1 < 2) & Slc17a6 > 1 & Th == 0 & Trh > 0))) <- "Trh_neurons"
Idents(onecut, cells = WhichCells(onecut, expression = ((Gad1 > 1 | Gad2 > 1 | Slc32a1 > 1) & Slc17a6 == 0 & Th > 0 & Trh == 0))) <- "Th_neurons"
Idents(onecut, cells = WhichCells(onecut, expression = ((Gad1 < 2 & Gad2 < 2 & Slc32a1 < 2) & Slc17a6 > 2 & Th == 0 & Trh == 0))) <- "Glutamate"
Idents(onecut, cells = WhichCells(onecut, expression = ((Gad1 > 0 & Gad2 > 0 & Slc32a1 > 0) & Slc17a6 == 0 & Th == 0 & Trh == 0))) <- "GABA"

onecut <- subset(onecut, idents = c("Trh_neurons", "Th_neurons", "Glutamate", "GABA"))
onecut$goi <- Idents(onecut)

onecut@meta.data %>% janitor::tabyl(goi, age)
Code
table(Idents(onecut))

       GABA   Glutamate  Th_neurons Trh_neurons 
         89          35          17          30 
Code
onecut <- FindVariableFeatures(onecut, selection.method = "vst", nfeatures = 5000)
onecut <- ScaleData(onecut)
Code
invisible(gc())
plan("sequential")
invisible(gc())
plan("multisession", workers = n.cores)
all_markers_genes <-
  FindAllMarkers(object = onecut, verbose = F, test.use = "LR", latent.vars = c("log_umi_per_gene"), only.pos = T, min.pct = 1e-2, logfc.threshold = 0, random.seed = reseed, min.cells.feature = 2, return.thresh = 1)
all_markers_genes <-
  all_markers_genes %>%
  Add_Pct_Diff()

write_csv(all_markers_genes, here(tables_dir, "all-marker-genes-goi.csv"))
all_markers_genes |> filter(p_val_adj <= 1e-02) |> arrange(desc(avg_log2FC)) |> group_by(cluster)
Code
top_5 <- Extract_Top_Markers(marker_dataframe = all_markers_genes, num_genes = 5, group_by = "cluster", gene_column = "gene", rank_by = "avg_log2FC", make_unique = TRUE, named_vector = FALSE)
Code
DotPlot_scCustom(seurat_object = onecut, colors_use = viridis::viridis(n = 30, alpha = .75, direction = -1, option = "E"), features = c("Onecut3", top_5), flip_axes = T, x_lab_rotate = TRUE)

Code
Stacked_VlnPlot(seurat_object = onecut, features = c("Onecut3", top_5), x_lab_rotate = TRUE)

Code
get_interaction_resources()
  [1] "ABS"                         "ACSN"                       
  [3] "ACSN_SignaLink3"             "Adhesome"                   
  [5] "AlzPathway"                  "ARACNe-GTEx_DoRothEA"       
  [7] "ARN"                         "Baccin2019"                 
  [9] "BEL-Large-Corpus_ProtMapper" "BioGRID"                    
 [11] "CA1"                         "CancerCellMap"              
 [13] "CancerDrugsDB"               "CellCall"                   
 [15] "CellChatDB"                  "CellChatDB-cofactors"       
 [17] "Cellinker"                   "CellPhoneDB"                
 [19] "CellPhoneDB_Cellinker"       "CellTalkDB"                 
 [21] "CollecTRI"                   "connectomeDB2020"           
 [23] "Cui2007"                     "CytReg_CollecTRI"           
 [25] "dbPTM"                       "DeathDomain"                
 [27] "DEPOD"                       "DIP"                        
 [29] "DLRP_Cellinker"              "DLRP_talklr"                
 [31] "DOMINO"                      "DoRothEA"                   
 [33] "DoRothEA-A_CollecTRI"        "DoRothEA-reviews_DoRothEA"  
 [35] "ELM"                         "EMBRACE"                    
 [37] "ENCODE_tf-mirna"             "ENCODE-distal"              
 [39] "ENCODE-proximal"             "ExTRI_CollecTRI"            
 [41] "FANTOM4_DoRothEA"            "Fantom5_LRdb"               
 [43] "GEREDB_CollecTRI"            "GOA_CollecTRI"              
 [45] "Guide2Pharma"                "Guide2Pharma_Cellinker"     
 [47] "Guide2Pharma_LRdb"           "Guide2Pharma_talklr"        
 [49] "HOCOMOCO_DoRothEA"           "HPMR"                       
 [51] "HPMR_Cellinker"              "HPMR_LRdb"                  
 [53] "HPMR_talklr"                 "HPRD"                       
 [55] "HPRD_KEA"                    "HPRD_LRdb"                  
 [57] "HPRD_MIMP"                   "HPRD_talklr"                
 [59] "HPRD-phos"                   "HTRI_CollecTRI"             
 [61] "HTRIdb"                      "HTRIdb_DoRothEA"            
 [63] "HuRI"                        "ICELLNET"                   
 [65] "InnateDB"                    "InnateDB_SignaLink3"        
 [67] "IntAct"                      "IntAct_CollecTRI"           
 [69] "IntAct_DoRothEA"             "iPTMnet"                    
 [71] "iTALK"                       "JASPAR_DoRothEA"            
 [73] "KEA"                         "KEGG-MEDICUS"               
 [75] "Kinexus_KEA"                 "Kirouac2010"                
 [77] "Li2012"                      "Lit-BM-17"                  
 [79] "LncRNADisease"               "LRdb"                       
 [81] "Macrophage"                  "MatrixDB"                   
 [83] "MIMP"                        "miR2Disease"                
 [85] "miRDeathDB"                  "miRecords"                  
 [87] "miRTarBase"                  "MPPI"                       
 [89] "NCI-PID_ProtMapper"          "ncRDeathDB"                 
 [91] "NetPath"                     "NetworKIN_KEA"              
 [93] "NFIRegulomeDB_DoRothEA"      "NRF2ome"                    
 [95] "NTNU.Curated_CollecTRI"      "ORegAnno"                   
 [97] "ORegAnno_DoRothEA"           "Pavlidis2021_CollecTRI"     
 [99] "PAZAR_DoRothEA"              "phosphoELM"                 
[101] "phosphoELM_KEA"              "phosphoELM_MIMP"            
[103] "PhosphoNetworks"             "PhosphoPoint"               
[105] "PhosphoSite"                 "PhosphoSite_KEA"            
[107] "PhosphoSite_MIMP"            "PhosphoSite_noref"          
[109] "PhosphoSite_ProtMapper"      "ProtMapper"                 
[111] "Ramilowski2015"              "Ramilowski2015_Baccin2019"  
[113] "REACH_ProtMapper"            "Reactome_LRdb"              
[115] "Reactome_ProtMapper"         "Reactome_SignaLink3"        
[117] "RegNetwork_DoRothEA"         "ReMap_DoRothEA"             
[119] "RLIMS-P_ProtMapper"          "scConnect"                  
[121] "SignaLink3"                  "SIGNOR"                     
[123] "SIGNOR_CollecTRI"            "SIGNOR_ProtMapper"          
[125] "Sparser_ProtMapper"          "SPIKE"                      
[127] "SPIKE_LC"                    "STRING_talklr"              
[129] "talklr"                      "TCRcuration_SignaLink3"     
[131] "TFactS_CollecTRI"            "TFactS_DoRothEA"            
[133] "TFe_DoRothEA"                "TransmiR"                   
[135] "TRED_DoRothEA"               "TRIP"                       
[137] "TRRD_DoRothEA"               "TRRUST_CollecTRI"           
[139] "TRRUST_DoRothEA"             "UniProt_LRdb"               
[141] "Wang"                        "Wojtowicz2020"              
Code
interactions_hs <-
  import_omnipath_interactions(resources = get_interaction_resources())
Code
interactions_hs$source_genesymbol %>%
  table() %>%
  length()
[1] 5336
Code
interactions_hs$target_genesymbol %>%
  table() %>%
  length()
[1] 6449
Code
interactions_all_mm <- import_all_interactions(organism = 10090) ## 123477 interactions
Code
interactions_all_mm$source_genesymbol %>%
  table() %>%
  length()
[1] 6375
Code
interactions_all_mm$target_genesymbol %>%
  table() %>%
  length()
[1] 14252
Code
print_interactions(head(interactions_all_mm))
Code
(interactions_Onecut3 <- dplyr::filter(
  interactions_all_mm,
  source_genesymbol == "Onecut3" |
    target_genesymbol == "Onecut3"
))
Code
(interactions_Onecut2 <- dplyr::filter(
  interactions_all_mm,
  source_genesymbol == "Onecut2" |
    target_genesymbol == "Onecut2"
))
Code
(interactions_Onecut1 <- dplyr::filter(
  interactions_all_mm,
  source_genesymbol == "Onecut1" |
    target_genesymbol == "Onecut1"
))
Code
(interactions_Nav1 <- dplyr::filter(
  interactions_all_mm,
  source_genesymbol == "Nav1" |
    target_genesymbol == "Nav1"
))
Code
(interactions_Nav2 <- dplyr::filter(
  interactions_all_mm,
  source_genesymbol == "Nav2" |
    target_genesymbol == "Nav2"
))
Code
## We transform the interactions data frame into a graph
OPI_g <- interaction_graph(interactions = interactions_all_mm)
Code
print_path_vs(all_shortest_paths(OPI_g,
  from = "Onecut1",
  to = "Nav1"
)$res, OPI_g)
Code
print_path_vs(all_shortest_paths(OPI_g,
  from = "Onecut2",
  to = "Nav1"
)$res, OPI_g)
Code
print_path_es(shortest_paths(OPI_g,
  from = "Onecut1", to = "Nav1",
  output = "epath"
)$epath[[1]], OPI_g)
Code
print_path_vs(all_shortest_paths(OPI_g,
  from = "Onecut1",
  to = "Nav2"
)$res, OPI_g)
Code
print_path_vs(all_shortest_paths(OPI_g,
  from = "Onecut2",
  to = "Nav2"
)$res, OPI_g)
Code
print_path_es(shortest_paths(OPI_g,
  from = "Onecut1", to = "Nav2",
  output = "epath"
)$epath[[1]], OPI_g)
Code
interactions_all_hs <- import_all_interactions() ## 164, 710
Code
interactions_all_hs$source_genesymbol %>%
  table() %>%
  length()
[1] 9823
Code
interactions_all_hs$target_genesymbol %>%
  table() %>%
  length()
[1] 17723
Code
print_interactions(head(interactions_all_hs))
Code
(interactions_Onecut3_hs <- dplyr::filter(
  interactions_all_hs,
  source_genesymbol == "ONECUT3" |
    target_genesymbol == "ONECUT3"
))
Code
(interactions_Onecut2_hs <- dplyr::filter(
  interactions_all_hs,
  source_genesymbol == "ONECUT2" |
    target_genesymbol == "ONECUT2"
))
Code
(interactions_Onecut1_hs <- dplyr::filter(
  interactions_all_hs,
  source_genesymbol == "ONECUT1" |
    target_genesymbol == "ONECUT1"
))
Code
(interactions_Nav1_hs <- dplyr::filter(
  interactions_all_hs,
  source_genesymbol == "NAV1" |
    target_genesymbol == "NAV1"
))
Code
(interactions_Nav2_hs <- dplyr::filter(
  interactions_all_hs,
  source_genesymbol == "NAV2" |
    target_genesymbol == "NAV2"
))
Code
## We transform the interactions data frame into a graph
OPI_g <- interaction_graph(interactions = interactions_all_hs)
Code
print_path_vs(all_shortest_paths(OPI_g,
  from = "ONECUT1",
  to = "NAV2"
)$res, OPI_g)
Code
print_path_vs(all_shortest_paths(OPI_g,
  from = "ONECUT2",
  to = "NAV2"
)$res, OPI_g)
Code
print_path_vs(all_shortest_paths(OPI_g,
  from = "ONECUT3",
  to = "NAV2"
)$res, OPI_g)
Code
print_path_es(shortest_paths(OPI_g,
  from = "ONECUT1", to = "NAV2",
  output = "epath"
)$epath[[1]], OPI_g)
Code
print_path_es(shortest_paths(OPI_g,
  from = "ONECUT2", to = "NAV2",
  output = "epath"
)$epath[[1]], OPI_g)
Code
print_path_es(shortest_paths(OPI_g,
  from = "ONECUT3", to = "NAV2",
  output = "epath"
)$epath[[1]], OPI_g)
Code
Idents(object = holder_srt$rar2020.srt.neuro, cells = colnames(holder_srt$rar2020.srt.cont.oc2or3)) <- "OC"
markOC3 <- FindMarkers(holder_srt$rar2020.srt.neuro, ident.1 = "OC", test.use = "MAST")
markOC3 %>%
  rownames_to_column(var = "gene") %>%
  write_csv(x = ., file = paste0(tables_dir, "/DEG_from_mm_dev_OC_positive_cells.csv"), col_names = T)
Code
select_to_test <- markOC3 %>%
  filter(p_val_adj < 0.0001, avg_log2FC > 0) %>%
  rownames_to_column(var = "gene") %>%
  .$gene

intersect_neuro2a <- neuro2a %>%
  filter(significant == "yes", gene_name %in% c(select_to_test, "Nav1", "Nav2")) %>%
  select(gene_name, log2FoldChange, padj) %>%
  mutate(gene_name = str_to_upper(gene_name))
intersect_neuro2a %>% write_csv(x = ., file = paste0(tables_dir, "/N2a_KI_Onecut3.csv"), col_names = F)
Code
svCorrDotPLOT <- function(dat) {
  selection <- markOC3 %>%
    rownames_to_column(var = "gene") %>%
    filter(
      p_val_adj < 0.0000000001,
      str_detect(string = gene, pattern = "^mt-", negate = T),
      str_detect(string = gene, pattern = "^Gm", negate = T)
    ) %>%
    top_n(n = 40, wt = avg_log2FC) %>%
    top_n(n = 20, wt = pct.1) %>%
    dplyr::arrange(desc(pct.1)) %>%
    .$gene
  selection2 <- markOC3 %>%
    rownames_to_column(var = "gene") %>%
    filter(
      p_val_adj < 0.0000000001,
      str_detect(string = gene, pattern = "^mt-", negate = T),
      str_detect(string = gene, pattern = "^Gm", negate = T)
    ) %>%
    top_n(n = 25, wt = p_val_adj) %>%
    top_n(n = 20, wt = pct.1) %>%
    top_n(n = 15, wt = avg_log2FC) %>%
    dplyr::arrange(desc(pct.1)) %>%
    .$gene

  srt_onecut_filtered_ages <-
    GetAssayData(dat, "data", "RNA") %>%
    as.data.frame() %>%
    t()
  filt_age_oc_sum <-
    colSums(srt_onecut_filtered_ages) %>%
    .[. > 10] %>%
    names() %>%
    .[. %in% c(
      selection,
      "Onecut1",
      "Onecut2",
      "Onecut3"
    )]
  srt_onecut_filtered_ages %<>% .[, filt_age_oc_sum]

  oc_age_corr_genes <- corrr::correlate(srt_onecut_filtered_ages)

  oc3_age_corr_genes <-
    oc_age_corr_genes %>%
    arrange(-Onecut3) %>%
    select(term, Onecut3, Onecut2)

  threshold.min.pct.Onecut2 <- .3
  threshold.min.pct.OC3 <- .3
  threshold.max.pct.Onecut2 <- .95
  threshold.max.pct.OC3 <- .95

  oc3_age_corr_genes_intersect_2 <-
    intersect(
      x = oc3_age_corr_genes %>%
        slice_min(
          order_by = Onecut2,
          prop = threshold.min.pct.Onecut2
        ),
      y = oc3_age_corr_genes %>%
        slice_min(
          order_by = Onecut3,
          prop = threshold.max.pct.OC3
        )
    )
  highlight_oc3_age_corr_genes <-
    union(
      oc3_age_corr_genes_intersect_2$term,
      selection2
    )
  additional_genes <-
    c(
      "Onecut2", "Pias2", "Tp53", "Trio", "Fas", "Rhoa", "Limk1", "Vegfa", "Bcar1",
      "Ywhab", "Nf1", "Eif4e", "Rb1", "Sp1", "Rps13", "Rps3a", "Traf6", "Fgfr1op",
      "Ifi16", "Irf3", "Emg1", "Myc", "Pten", "Sirt1", "E2f1", "Nr0b2", "Crp", "Erg",
      "Foxa1", "Spi1", "Nfkb1", "Nfkbia", "Pan2", "Eif4a1", "Gfra1", "Stat6", "Agt",
      "Onecut1", "Grb2",
      intersect_neuro2a$gene_name %>%
        str_to_sentence()
    ) %>%
    .[!. %in% highlight_oc3_age_corr_genes] %>%
    unique() %>%
    .[. %in% rownames(dat)]
  plot_dot_oc23_age_corr_genes <-
    DotPlot(
      dat,
      assay = "RNA",
      features = c(additional_genes, highlight_oc3_age_corr_genes),
      group.by = "age"
    ) + RotatedAxis()
  save_plot(
    filename = paste0(plots_dir, "/plot_dot_age_corrr_expression_wtin_OC23.pdf"),
    plot = plot_dot_oc23_age_corr_genes,
    base_height = 6,
    base_aspect_ratio = 2
  )

  return(highlight_oc3_age_corr_genes)
}

# oc_list <- Seurat::SplitObject(holder_srt$rar2020.srt.cont.oc2or3, split.by = "age")
Code
svCorrDotPLOT(holder_srt$rar2020.srt.cont.oc2or3)
[1] "Ptma"    "Onecut2" "Islr2"   "Tcf12"   "Eef2"    "Onecut3"
Code
sessioninfo::session_info()
─ Session info ───────────────────────────────────────────────────────────────
 setting  value
 version  R version 4.3.1 (2023-06-16)
 os       Ubuntu 22.04.3 LTS
 system   x86_64, linux-gnu
 ui       X11
 language en_US:en
 collate  en_US.UTF-8
 ctype    en_US.UTF-8
 tz       Etc/UTC
 date     2023-08-18
 pandoc   3.1.3 @ /opt/python/3.8.8/bin/ (via rmarkdown)

─ Packages ───────────────────────────────────────────────────────────────────
 package              * version    date (UTC) lib source
 abind                  1.4-5      2016-07-21 [1] RSPM (R 4.3.0)
 ape                    5.7-1      2023-03-13 [1] RSPM (R 4.3.0)
 backports              1.4.1      2021-12-13 [1] RSPM (R 4.3.0)
 beeswarm               0.4.0      2021-06-01 [1] RSPM (R 4.3.0)
 Biobase                2.60.0     2023-04-25 [1] RSPM (R 4.3.1)
 BiocGenerics           0.46.0     2023-04-25 [1] RSPM (R 4.3.1)
 BiocManager            1.30.22    2023-08-08 [1] RSPM (R 4.3.0)
 bit                    4.0.5      2022-11-15 [1] RSPM (R 4.3.0)
 bit64                  4.0.5      2020-08-30 [1] RSPM (R 4.3.0)
 bitops                 1.0-7      2021-04-24 [1] RSPM (R 4.3.0)
 callr                  3.7.3      2022-11-02 [1] RSPM (R 4.3.0)
 cellranger             1.1.0      2016-07-27 [1] RSPM (R 4.3.0)
 checkmate              2.2.0      2023-04-27 [1] RSPM (R 4.3.0)
 circlize               0.4.16     2023-08-17 [1] Github (jokergoo/circlize@11ddb74)
 cli                    3.6.1      2023-03-23 [1] RSPM (R 4.3.0)
 cluster                2.1.4      2022-08-22 [1] RSPM (R 4.3.0)
 codetools              0.2-19     2023-02-01 [1] RSPM (R 4.3.0)
 colorspace             2.1-0      2023-01-23 [1] RSPM (R 4.3.0)
 corrr                  0.4.4.9000 2023-08-17 [1] Github (tidymodels/corrr@bd5841d)
 cowplot              * 1.1.1      2020-12-30 [1] RSPM (R 4.3.0)
 crayon                 1.5.2      2022-09-29 [1] RSPM (R 4.3.0)
 curl                   5.0.2      2023-08-14 [1] RSPM (R 4.3.0)
 data.table             1.14.8     2023-02-17 [1] RSPM (R 4.3.0)
 DelayedArray           0.26.7     2023-07-28 [1] RSPM (R 4.3.1)
 deldir                 1.0-9      2023-05-17 [1] RSPM (R 4.3.0)
 desc                   1.4.2      2022-09-08 [1] RSPM (R 4.3.0)
 digest                 0.6.33     2023-07-07 [1] RSPM (R 4.3.0)
 dnet                 * 1.1.7      2020-02-20 [1] RSPM (R 4.3.1)
 dplyr                * 1.1.2      2023-04-20 [1] RSPM (R 4.3.0)
 ellipsis               0.3.2      2021-04-29 [1] RSPM (R 4.3.0)
 evaluate               0.21       2023-05-05 [1] RSPM (R 4.3.0)
 fansi                  1.0.4      2023-01-22 [1] RSPM (R 4.3.0)
 farver                 2.1.1      2022-07-06 [1] RSPM (R 4.3.0)
 fastmap                1.1.1      2023-02-24 [1] RSPM (R 4.3.0)
 fitdistrplus           1.1-11     2023-04-25 [1] RSPM (R 4.3.0)
 forcats              * 1.0.0      2023-01-29 [1] RSPM (R 4.3.0)
 furrr                * 0.3.1      2022-08-15 [1] RSPM (R 4.3.0)
 future               * 1.33.0     2023-07-01 [1] RSPM (R 4.3.0)
 future.apply           1.11.0     2023-05-21 [1] RSPM (R 4.3.0)
 generics               0.1.3      2022-07-05 [1] RSPM (R 4.3.0)
 GenomeInfoDb           1.36.1     2023-06-21 [1] RSPM (R 4.3.1)
 GenomeInfoDbData       1.2.10     2023-08-17 [1] RSPM (R 4.3.1)
 GenomicRanges          1.52.0     2023-04-25 [1] RSPM (R 4.3.1)
 ggbeeswarm             0.7.2      2023-08-17 [1] Github (eclarke/ggbeeswarm@3cf58a9)
 ggplot2              * 3.4.3      2023-08-14 [1] RSPM (R 4.3.0)
 ggprism                1.0.4      2023-08-17 [1] Github (csdaw/ggprism@0e411f4)
 ggrastr                1.0.2      2023-08-17 [1] Github (VPetukhov/ggrastr@50ca3e0)
 ggrepel                0.9.3      2023-08-17 [1] Github (slowkow/ggrepel@4584949)
 ggridges               0.5.4      2022-09-26 [1] RSPM (R 4.3.0)
 GlobalOptions          0.1.2      2020-06-10 [1] RSPM (R 4.3.0)
 globals                0.16.2     2022-11-21 [1] RSPM (R 4.3.0)
 glue                   1.6.2      2022-02-24 [1] RSPM (R 4.3.0)
 goftest                1.2-3      2021-10-07 [1] RSPM (R 4.3.0)
 gprofiler2           * 0.2.2      2023-06-14 [1] RSPM (R 4.3.0)
 graph                  1.78.0     2023-04-25 [1] RSPM (R 4.3.1)
 gridExtra              2.3        2017-09-09 [1] RSPM (R 4.3.0)
 gtable                 0.3.3      2023-03-21 [1] RSPM (R 4.3.0)
 hdf5r                  1.3.8      2023-01-21 [1] RSPM (R 4.3.1)
 here                 * 1.0.1      2020-12-13 [1] RSPM (R 4.3.0)
 hexbin               * 1.28.3     2023-03-21 [1] RSPM (R 4.3.0)
 highr                  0.10       2022-12-22 [1] RSPM (R 4.3.0)
 hms                    1.1.3      2023-03-21 [1] RSPM (R 4.3.0)
 htmltools              0.5.6      2023-08-10 [1] RSPM (R 4.3.0)
 htmlwidgets            1.6.2      2023-03-17 [1] RSPM (R 4.3.0)
 httpuv                 1.6.11     2023-05-11 [1] RSPM (R 4.3.0)
 httr                   1.4.7      2023-08-15 [1] RSPM (R 4.3.0)
 ica                    1.0-3      2022-07-08 [1] RSPM (R 4.3.0)
 igraph               * 1.5.1      2023-08-10 [1] RSPM (R 4.3.0)
 IRanges                2.34.1     2023-06-22 [1] RSPM (R 4.3.1)
 irlba                  2.3.5.1    2022-10-03 [1] RSPM (R 4.3.0)
 janitor                2.2.0.9000 2023-08-17 [1] Github (sfirke/janitor@b2700cf)
 jsonlite               1.8.7      2023-06-29 [1] RSPM (R 4.3.0)
 KernSmooth             2.23-22    2023-07-10 [1] RSPM (R 4.3.0)
 knitr                  1.43       2023-05-25 [1] RSPM (R 4.3.0)
 ks                     1.14.1     2023-08-10 [1] RSPM (R 4.3.0)
 labeling               0.4.2      2020-10-20 [1] RSPM (R 4.3.0)
 later                  1.3.1      2023-05-02 [1] RSPM (R 4.3.0)
 lattice                0.21-8     2023-04-05 [1] RSPM (R 4.3.0)
 lazyeval               0.2.2      2019-03-15 [1] RSPM (R 4.3.0)
 leiden                 0.4.3      2022-09-10 [1] RSPM (R 4.3.0)
 lifecycle              1.0.3      2022-10-07 [1] RSPM (R 4.3.0)
 listenv                0.9.0      2022-12-16 [1] RSPM (R 4.3.0)
 lmtest                 0.9-40     2022-03-21 [1] RSPM (R 4.3.0)
 logger                 0.2.2      2021-10-19 [1] RSPM (R 4.3.0)
 lubridate            * 1.9.2      2023-02-10 [1] RSPM (R 4.3.0)
 magrittr             * 2.0.3      2022-03-30 [1] RSPM (R 4.3.0)
 MASS                   7.3-60     2023-05-04 [1] CRAN (R 4.3.1)
 MAST                   1.26.0     2023-04-25 [1] RSPM (R 4.3.1)
 Matrix                 1.6-1      2023-08-14 [1] RSPM (R 4.3.0)
 MatrixGenerics         1.12.3     2023-07-30 [1] RSPM (R 4.3.1)
 matrixStats            1.0.0      2023-06-02 [1] RSPM (R 4.3.0)
 mclust                 6.0.0      2022-10-31 [1] RSPM (R 4.3.0)
 mime                   0.12       2021-09-28 [1] RSPM (R 4.3.0)
 miniUI                 0.1.1.1    2018-05-18 [1] RSPM (R 4.3.0)
 munsell                0.5.0      2018-06-12 [1] RSPM (R 4.3.0)
 mvtnorm                1.2-2      2023-06-08 [1] RSPM (R 4.3.0)
 Nebulosa             * 1.10.0     2023-04-25 [1] RSPM (R 4.3.1)
 nlme                   3.1-163    2023-08-09 [1] RSPM (R 4.3.0)
 OmnipathR            * 3.9.6      2023-08-18 [1] Github (saezlab/OmnipathR@8e94833)
 paletteer              1.5.0      2022-10-19 [1] RSPM (R 4.3.0)
 parallelly             1.36.0     2023-05-26 [1] RSPM (R 4.3.0)
 patchwork            * 1.1.3.9000 2023-08-17 [1] Github (thomasp85/patchwork@51a6eff)
 pbapply                1.7-2      2023-06-27 [1] RSPM (R 4.3.0)
 pillar                 1.9.0      2023-03-22 [1] RSPM (R 4.3.0)
 pkgbuild               1.4.2      2023-06-26 [1] RSPM (R 4.3.0)
 pkgconfig              2.0.3      2019-09-22 [1] RSPM (R 4.3.0)
 plotly                 4.10.2     2023-06-03 [1] RSPM (R 4.3.0)
 plyr                   1.8.8      2022-11-11 [1] RSPM (R 4.3.0)
 png                    0.1-8      2022-11-29 [1] RSPM (R 4.3.0)
 polyclip               1.10-4     2022-10-20 [1] RSPM (R 4.3.0)
 pracma                 2.4.2      2022-09-22 [1] RSPM (R 4.3.0)
 prettyunits            1.1.1      2020-01-24 [1] RSPM (R 4.3.0)
 prismatic              1.1.1      2022-08-15 [1] RSPM (R 4.3.0)
 processx               3.8.2      2023-06-30 [1] RSPM (R 4.3.0)
 progress               1.2.2      2019-05-16 [1] RSPM (R 4.3.0)
 progressr              0.14.0     2023-08-10 [1] RSPM (R 4.3.0)
 promises               1.2.1      2023-08-10 [1] RSPM (R 4.3.0)
 ps                     1.7.5      2023-04-18 [1] RSPM (R 4.3.0)
 purrr                * 1.0.2      2023-08-10 [1] RSPM (R 4.3.0)
 R.methodsS3            1.8.2      2022-06-13 [1] RSPM (R 4.3.0)
 R.oo                   1.25.0     2022-06-12 [1] RSPM (R 4.3.0)
 R.utils                2.12.2     2022-11-11 [1] RSPM (R 4.3.0)
 R6                     2.5.1      2021-08-19 [1] RSPM (R 4.3.0)
 ragg                   1.2.5      2023-01-12 [1] RSPM (R 4.3.0)
 RANN                   2.6.1      2019-01-08 [1] RSPM (R 4.3.0)
 rappdirs               0.3.3      2021-01-31 [1] RSPM (R 4.3.0)
 RColorBrewer           1.1-3      2022-04-03 [1] RSPM (R 4.3.0)
 Rcpp                   1.0.11     2023-07-06 [1] RSPM (R 4.3.0)
 RcppAnnoy              0.0.21     2023-07-02 [1] RSPM (R 4.3.0)
 RCurl                  1.98-1.12  2023-03-27 [1] RSPM (R 4.3.0)
 readr                * 2.1.4      2023-02-10 [1] RSPM (R 4.3.0)
 readxl                 1.4.3      2023-07-06 [1] RSPM (R 4.3.0)
 rematch2               2.1.2      2020-05-01 [1] RSPM (R 4.3.0)
 remotes                2.4.2.1    2023-07-18 [1] RSPM (R 4.3.0)
 reshape2               1.4.4      2020-04-09 [1] RSPM (R 4.3.0)
 reticulate             1.31       2023-08-10 [1] RSPM (R 4.3.0)
 Rgraphviz              2.44.0     2023-04-25 [1] RSPM (R 4.3.1)
 rlang                  1.1.1      2023-04-28 [1] RSPM (R 4.3.0)
 rmarkdown              2.24       2023-08-14 [1] RSPM (R 4.3.0)
 ROCR                   1.0-11     2020-05-02 [1] RSPM (R 4.3.0)
 rprojroot              2.0.3      2022-04-02 [1] RSPM (R 4.3.0)
 rstudioapi             0.15.0     2023-07-07 [1] RSPM (R 4.3.0)
 rsvd                   1.0.5      2021-04-16 [1] RSPM (R 4.3.0)
 Rtsne                  0.16       2022-04-17 [1] RSPM (R 4.3.0)
 rvest                  1.0.3      2022-08-19 [1] RSPM (R 4.3.0)
 S4Arrays               1.0.5      2023-07-24 [1] RSPM (R 4.3.1)
 S4Vectors              0.38.1     2023-05-02 [1] RSPM (R 4.3.1)
 scales                 1.2.1      2022-08-20 [1] RSPM (R 4.3.0)
 scattermore            1.2        2023-06-12 [1] RSPM (R 4.3.0)
 scCustomize          * 1.1.3      2023-08-17 [1] Github (samuel-marsh/scCustomize@2bb2b13)
 sctransform          * 0.3.5      2022-09-21 [1] RSPM (R 4.3.0)
 sessioninfo            1.2.2      2021-12-06 [1] RSPM (R 4.3.0)
 Seurat               * 4.3.0      2022-11-18 [1] RSPM (R 4.3.1)
 SeuratDisk           * 0.0.0.9020 2023-08-17 [1] Github (mojaveazure/seurat-disk@9b89970)
 SeuratObject         * 4.1.3      2022-11-07 [1] RSPM (R 4.3.0)
 SeuratWrappers       * 0.3.1      2023-08-17 [1] Github (satijalab/seurat-wrappers@d28512f)
 shape                  1.4.6      2021-05-19 [1] RSPM (R 4.3.0)
 shiny                  1.7.5      2023-08-12 [1] RSPM (R 4.3.0)
 SingleCellExperiment   1.22.0     2023-04-25 [1] RSPM (R 4.3.1)
 snakecase              0.11.0     2019-05-25 [1] RSPM (R 4.3.0)
 sp                     2.0-0      2023-06-22 [1] RSPM (R 4.3.0)
 spatstat.data          3.0-1      2023-03-12 [1] RSPM (R 4.3.0)
 spatstat.explore       3.2-1      2023-05-13 [1] RSPM (R 4.3.0)
 spatstat.geom          3.2-4      2023-07-20 [1] RSPM (R 4.3.0)
 spatstat.random        3.1-5      2023-05-11 [1] RSPM (R 4.3.0)
 spatstat.sparse        3.0-2      2023-06-25 [1] RSPM (R 4.3.0)
 spatstat.utils         3.0-3      2023-05-09 [1] RSPM (R 4.3.0)
 stringi                1.7.12     2023-01-11 [1] RSPM (R 4.3.0)
 stringr              * 1.5.0      2022-12-02 [1] RSPM (R 4.3.0)
 SummarizedExperiment   1.30.2     2023-06-06 [1] RSPM (R 4.3.1)
 supraHex             * 1.38.0     2023-04-25 [1] RSPM (R 4.3.1)
 survival               3.5-7      2023-08-14 [1] RSPM (R 4.3.0)
 systemfonts            1.0.4      2022-02-11 [1] RSPM (R 4.3.0)
 tensor                 1.5        2012-05-05 [1] RSPM (R 4.3.0)
 textshaping            0.3.6      2021-10-13 [1] RSPM (R 4.3.0)
 tibble               * 3.2.1      2023-03-20 [1] RSPM (R 4.3.0)
 tidyr                * 1.3.0      2023-01-24 [1] RSPM (R 4.3.0)
 tidyselect             1.2.0      2022-10-10 [1] RSPM (R 4.3.0)
 tidyverse            * 2.0.0.9000 2023-08-17 [1] Github (tidyverse/tidyverse@8ec2e1f)
 timechange             0.2.0      2023-01-11 [1] RSPM (R 4.3.0)
 tzdb                   0.4.0      2023-05-12 [1] RSPM (R 4.3.0)
 UpSetR               * 1.4.0      2023-08-17 [1] Github (hms-dbmi/UpSetR@b14854a)
 utf8                   1.2.3      2023-01-31 [1] RSPM (R 4.3.0)
 uwot                   0.1.16     2023-06-29 [1] RSPM (R 4.3.0)
 vctrs                  0.6.3      2023-06-14 [1] RSPM (R 4.3.0)
 vipor                  0.4.5      2017-03-22 [1] RSPM (R 4.3.0)
 viridis                0.6.4      2023-07-22 [1] RSPM (R 4.3.0)
 viridisLite            0.4.2      2023-05-02 [1] RSPM (R 4.3.0)
 vroom                  1.6.3      2023-04-28 [1] RSPM (R 4.3.0)
 withr                  2.5.0      2022-03-03 [1] RSPM (R 4.3.0)
 xfun                   0.40       2023-08-09 [1] RSPM (R 4.3.0)
 xml2                   1.3.5      2023-07-06 [1] RSPM (R 4.3.0)
 xtable                 1.8-4      2019-04-21 [1] RSPM (R 4.3.0)
 XVector                0.40.0     2023-04-25 [1] RSPM (R 4.3.1)
 yaml                   2.3.7      2023-01-23 [1] RSPM (R 4.3.0)
 zlibbioc               1.46.0     2023-04-25 [1] RSPM (R 4.3.1)
 zoo                    1.8-12     2023-04-13 [1] RSPM (R 4.3.0)

 [1] /opt/R/4.3.1/lib/R/library

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

References

Romanov, Roman A., Evgenii O. Tretiakov, Maria Eleni Kastriti, Maja Zupancic, Martin Häring, Solomiia Korchynska, Konstantin Popadin, et al. 2020. “Molecular Design of Hypothalamus Development.” Nature 582 (7811): 246–52. https://doi.org/10.1038/s41586-020-2266-0.