Regulators of interferon-responsive microglia uncovered by Genome-wide CRISPRi screening.
The 5 matches
- [1] § Methods › RNA-sequencing ↔ R/wilcoxauc.R, lines 1–127 · score 0.75 · Wilcoxon rank sum, Benjamini Hochberg, Seurat, assay, RNA, cells
- [2] § Methods › RNA-sequencing ↔ R/scoring_de.R, lines 478–534 · score 0.73 · negative binomial, Mixscale scores, perturbation scores, regression, weight, vectors
- [3] § Methods › RNA-sequencing ↔ R/differential_expr_wilcoxon_BH.R, lines 3–25 · score 0.68 · Benjamini Hochberg correction, Seurat, Wilcoxon, DEGs, presto, assay
- [4] § Methods › CRISPRi screen analysis ↔ R/differential_expr_wilcoxon_BH.R, lines 3–25 · score 0.59 · Benjamini Hochberg, fold change, cutoff, libraries, RNAs, gene
- [5] § Methods › CRISPRi screen analysis ↔ R/wilcoxauc.R, lines 1–127 · score 0.57 · Benjamini Hochberg, fold change, Raw, RNAs, gene
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
R · 395 lines · 15 KB · no license · 2 matches
- #' Fast Wilcoxon rank-sum test and auROC across groups
- #'
- #' For every (feature, group) pair, computes the Wilcoxon rank-sum
- #' statistic comparing observations in that group against all other
- #' observations, and the area under the ROC curve as a measure of
- #' separability. P-values come from the standard Gaussian approximation
- #' to the U statistic with a tie correction. Returns one row per
- #' (feature, group) with effect-size and percent-expressed columns
- #' alongside the test statistics.
- #'
- #' Designed to be fast enough to run on whole-genome × hundred-thousand-
- #' cell single-cell matrices in seconds. Sparse `dgCMatrix` inputs are
- #' processed without densification. Convenience dispatchers extract the
- #' counts matrix and group labels from `Seurat` and
- #' `SingleCellExperiment` objects. See the `getting-started` vignette
- #' for an end-to-end example on a real dataset.
- #'
- #' @param X Input data. One of:
- #' \itemize{
- #' \item a numeric feature-by-observation matrix or `data.frame`,
- #' \item a sparse `dgCMatrix` of the same shape,
- #' \item a disk-backed `DelayedMatrix` (e.g. HDF5-backed, from the
- #' DelayedArray / HDF5Array packages), which is processed in feature
- #' blocks so the whole matrix never has to be loaded in memory,
- #' \item any other matrix-like class with an `as(., "dgCMatrix")`
- #' coercion method (e.g. BPCells), which is converted up front,
- #' \item a `Seurat` (v3+) object,
- #' \item a `SingleCellExperiment` object.
- #' }
- #' `X` must not contain `NA` values. Unlike [stats::wilcox.test()],
- #' which drops missing values per observation, `wilcoxauc()` errors on
- #' `NA` input rather than returning silently incorrect results; remove
- #' or impute missing values first.
- #' @param y For matrix input, a character/factor vector of group labels
- #' with length equal to `ncol(X)`. Ignored for `Seurat` /
- #' `SingleCellExperiment` input (use `group_by` instead).
- #' @param groups_use Optional character vector restricting the test to
- #' a subset of groups in `y` (or `group_by`). Default `NULL` tests
- #' every group.
- #' @param group_by For `Seurat` and `SingleCellExperiment` input, name
- #' of the metadata column that holds the group labels (e.g.
- #' `"cluster"`). For `Seurat`, defaults to `Idents(X)`.
- #' @param assay For `Seurat`, the layer name within the selected
- #' assay (e.g. `"data"`, `"counts"`, `"scale.data"`). For
- #' `SingleCellExperiment`, the assay name (e.g. `"logcounts"`,
- #' `"counts"`). Defaults pick a sensible value per input class.
- #' @param seurat_assay For `Seurat` input, the name of the assay to
- #' pull from (e.g. `"RNA"`). Default `"RNA"`.
- #' @param verbose Logical. Print warnings and informational messages.
- #' Default `TRUE`.
- #' @param nthreads Number of threads for the per-feature ranking of sparse
- #' (`dgCMatrix`) input. Default `1` (serial). Values above `1` split the
- #' ranking across threads; the result is identical regardless of the
- #' thread count. Only sparse input is parallelized -- dense matrix and
- #' `data.frame` input are always processed serially. When running under
- #' `R CMD check` or on CRAN, keep this at the default so no more than two
- #' cores are used.
- #' @param transposed Set to `TRUE` when your observations (cells,
- #' samples) are in the **rows** of `X` and the features in the
- #' columns -- i.e. `X` is the transpose of the default
- #' features-by-observations layout. The test then runs directly on
- #' that layout without materializing a transposed copy, which saves
- #' time and memory on large matrices. Same convention as the
- #' `transposed` argument of scater's `calculatePCA()` and
- #' `calculateUMAP()`. Only applies to matrix-like input (the `Seurat`
- #' / `SingleCellExperiment` dispatchers always extract
- #' features-by-observations). Default `FALSE`.
- #' @param ... Passed to the input-specific method.
- #'
- #' @examples
- #' ## generate a tiny toy dataset
- #' set.seed(42)
- #' exprs <- matrix(rpois(25 * 150, lambda = 2), nrow = 25,
- #' dimnames = list(paste0("G", 1:25), NULL))
- #' y <- rep(c("A", "B", "C"), each = 50)
- #'
- #' ## on a dense matrix
- #' head(wilcoxauc(exprs, y))
- #'
- #' ## restrict the comparison to a subset of groups
- #' head(wilcoxauc(exprs, y, c('A', 'B')))
- #'
- #' ## on a sparse matrix
- #' exprs_sparse <- as(exprs, 'dgCMatrix')
- #' head(wilcoxauc(exprs_sparse, y))
- #'
- #' ## on a Seurat object (>= v3)
- #' if (requireNamespace("Seurat", quietly = TRUE) &&
- #' packageVersion("Seurat") >= "3.0") {
- #' object_seurat <- toy_seurat()
- #' head(wilcoxauc(object_seurat, 'cell_type'))
- #' }
- #'
- #' ## on a SingleCellExperiment object
- #' if (requireNamespace("SingleCellExperiment", quietly = TRUE)) {
- #' object_sce <- toy_sce()
- #' head(wilcoxauc(object_sce, 'cell_type'))
- #' }
- #'
- #' @return table with the following columns:
- #' \itemize{
- #' \item \strong{feature} - feature name (e.g. gene name).
- #' \item \strong{group} - group name.
- #' \item \strong{avgExpr} - mean value of feature in group.
- #' \item \strong{logFC} - difference of mean feature values between
- #' observations in the group vs out of the group. When the input is
- #' log-transformed expression (e.g. Seurat's `"data"` layer or
- #' `logcounts`), this difference of means is a log fold change. On raw
- #' (untransformed) values it is a plain difference of means, not a fold
- #' change.
- #' \item \strong{statistic} - Wilcoxon rank sum U statistic.
- #' \item \strong{auc} - area under the receiver operator curve.
- #' \item \strong{pval} - nominal p value.
- #' \item \strong{padj} - Benjamini-Hochberg adjusted p value.
- #' \item \strong{pct_in} - Percent of observations in the group with non-zero
- #' feature value.
- #' \item \strong{pct_out} - Percent of observations out of the group with
- #' non-zero feature value.
- #' }
- #'
- #' @seealso [top_markers()] to summarize markers per group;
- #' [pseudobulk_deseq2()] for a count-based pseudobulk alternative.
- #'
- #' @export
- wilcoxauc <- function(X, ...) {
- UseMethod("wilcoxauc")
- }
- #' @rdname wilcoxauc
- #' @export
- wilcoxauc.seurat <- function(X, ...) {
- stop("wilcoxauc only implemented for Seurat Version 3, please upgrade to
- run.")
- }
- #' @rdname wilcoxauc
- #' @export
- wilcoxauc.Seurat <- function(
- X,
- group_by = NULL,
- assay = "data",
- groups_use = NULL,
- seurat_assay = "RNA",
- ...
- ) {
- requireNamespace("Seurat")
- X_matrix <- Seurat::GetAssayData(X, assay = seurat_assay, layer = assay)
- if (is.null(group_by)) {
- y <- Seurat::Idents(X)
- } else {
- y <- Seurat::FetchData(X, group_by) %>% unlist %>% as.character()
- }
- wilcoxauc(X_matrix, y, groups_use, ...)
- }
- #' @rdname wilcoxauc
- #' @export
- wilcoxauc.SingleCellExperiment <- function(
- X, group_by = NULL, assay = NULL, groups_use = NULL, ...
- ) {
- if (is.null(group_by)) {
- stop("Must specify group_by with SingleCellExperiment")
- } else if (!group_by %in% names(SummarizedExperiment::colData(X))) {
- stop("group_by value is not defined in colData.")
- }
- y <- SummarizedExperiment::colData(X)[[group_by]]
- if (is.null(assay)) {
- standard_assays <- c(
- "normcounts", "logcounts", "cpm", "tpm",
- "weights", "counts")
- available_assays <- intersect(
- standard_assays,
- SummarizedExperiment::assayNames(X)
- )
- if (length(available_assays) == 0) {
- stop("No assays in SingleCellExperiment object")
- } else {
- assay <- available_assays[1]
- }
- }
- X_matrix <- SummarizedExperiment::assay(X, assay)
- wilcoxauc(X_matrix, y, groups_use, ...)
- }
- #' @rdname wilcoxauc
- #' @export
- wilcoxauc.default <- function(X, y, groups_use = NULL, verbose = TRUE,
- nthreads = 1, transposed = FALSE, ...) {
- ## Check and possibly correct input values
- if (is(X, "dgeMatrix")) X <- as.matrix(X)
- if (is(X, "data.frame")) X <- as.matrix(X)
- if (is(X, "dgTMatrix")) X <- as(X, "dgCMatrix")
- if (is(X, "TsparseMatrix")) X <- as(X, "dgCMatrix")
- ## Other matrix-like classes (e.g. BPCells): try a sparse coercion so
- ## that anything with an as(., "dgCMatrix") method just works (#26).
- if (!is.matrix(X) && !is(X, "dgCMatrix") &&
- !inherits(X, "DelayedMatrix")) {
- X_class <- class(X)[1]
- X <- tryCatch(
- as(X, "dgCMatrix"),
- error = function(e) {
- stop(
- "wilcoxauc() does not know how to handle input of ",
- "class '", X_class, "'. Convert it to a matrix or ",
- "dgCMatrix first.",
- call. = FALSE
- )
- }
- )
- }
- n_obs_dim <- if (transposed) nrow(X) else ncol(X)
- if (n_obs_dim != length(y)) {
- ## If the other dimension matches length(y), the matrix is most
- ## likely in the other orientation: say exactly what to change.
- other_dim <- if (transposed) ncol(X) else nrow(X)
- hint <- ""
- if (other_dim == length(y)) {
- hint <- if (transposed) {
- paste0(
- "\nX has length(y) columns: if it is the default ",
- "features x observations layout, drop transposed = TRUE."
- )
- } else {
- paste0(
- "\nX has length(y) rows: if your matrix is ",
- "observations x features (samples in rows), call ",
- "wilcoxauc(X, y, transposed = TRUE)."
- )
- }
- }
- stop(
- "The number of observations in X (",
- if (transposed) "rows" else "columns", " = ", n_obs_dim,
- ") does not match length(y) (", length(y), ").", hint,
- call. = FALSE
- )
- }
- if (!is.null(groups_use)) {
- idx_use <- which(y %in% intersect(groups_use, y))
- y <- y[idx_use]
- X <- if (transposed) X[idx_use, ] else X[, idx_use]
- }
- y <- factor(y)
- idx_use <- which(!is.na(y))
- if (length(idx_use) < length(y)) {
- y <- y[idx_use]
- X <- if (transposed) X[idx_use, ] else X[, idx_use]
- if (verbose)
- message("Removing NA values from labels")
- }
- group.size <- as.numeric(table(y))
- if (length(group.size[group.size > 0]) < 2) {
- stop("Must have at least 2 groups defined.")
- }
- ## Feature names live on rows normally, on columns for transposed input.
- if (transposed) {
- if (is.null(colnames(X))) {
- colnames(X) <- paste0("Feature", seq_len(ncol(X)))
- }
- features <- colnames(X)
- } else {
- if (is.null(rownames(X))) {
- rownames(X) <- paste0("Feature", seq_len(nrow(X)))
- }
- features <- rownames(X)
- }
- ## Missing values in X would silently corrupt the ranks (the ranking
- ## code sorts values and cannot drop NAs the way stats::wilcox.test
- ## does), so fail loudly instead of returning wrong numbers. See #25.
- ## DelayedMatrix input is checked per realized block instead, to avoid
- ## an extra full pass over the on-disk data.
- if (!inherits(X, "DelayedMatrix") && anyNA(X)) {
- stop_wilcox_na()
- }
- ## Compute primary statistics. Group sizes are computed once here (via
- ## tabulate) and reused throughout instead of re-running table(y) at every
- ## use site.
- ngroups <- nlevels(y)
- group.size <- as.numeric(tabulate(y, ngroups))
- n_obs <- length(y)
- grp0 <- as.integer(y) - 1L
- n1n2 <- group.size * (n_obs - group.size)
- if (inherits(X, "DelayedMatrix")) {
- ## Disk-backed input (e.g. HDF5): realize and process feature
- ## blocks so the whole matrix never has to fit in memory (#26).
- st <- wilcox_stats_delayed(
- X, y, grp0, ngroups, group.size, n_obs,
- nthreads, transposed, verbose
- )
- } else {
- st <- wilcox_stats_matrix(
- X, y, grp0, ngroups, group.size, n_obs, nthreads, transposed
- )
- }
- ustat <- st$ustat
- group_sums <- st$group_sums
- group_nnz <- st$group_nnz
- ties <- st$ties
- auc <- t(ustat / n1n2)
- pvals <- compute_pval(ustat, ties, n_obs, n1n2)
- fdr <- apply(pvals, 2, function(x) p.adjust(x, "BH"))
- ### Auxiliary Statistics (AvgExpr, PctIn, LFC, etc)
- group_pct <- sweep(group_nnz, 1, group.size, "/") %>% t()
- group_pct_out <- -group_nnz %>%
- sweep(2, colSums(group_nnz), "+") %>%
- sweep(1, n_obs - group.size, "/") %>% t()
- group_means <- sweep(group_sums, 1, group.size, "/") %>% t()
- cs <- colSums(group_sums)
- lfc <- Reduce(cbind, lapply(seq_len(ngroups), function(g) {
- group_means[, g] - ((cs - group_sums[g, ]) / (n_obs - group.size[g]))
- }))
- res_list <- list(auc = auc,
- pval = pvals,
- padj = fdr,
- pct_in = 100 * group_pct,
- pct_out = 100 * group_pct_out,
- avgExpr = group_means,
- statistic = t(ustat),
- logFC = lfc)
- return(tidy_results(res_list, features, levels(y)))
- }
- #' Top markers per group from wilcoxauc results
- #'
- #' Filters and ranks the long-form output of [wilcoxauc()] to give the
- #' most distinguishing features per group. The filter arguments combine
- #' multiplicatively, then the top `n` features per group are kept by
- #' descending `auc` and pivoted into wide form. Counterpart to
- #' [top_markers_dds()] for DESeq2-based pseudobulk results.
- #'
- #' @param res Long-form results table from [wilcoxauc()].
- #' @param n Number of top markers to return per group. Default `10`.
- #' @param auc_min Drop features with `auc < auc_min`. Default `0`
- #' (no filter); set to `0.5` to keep only features that are positive
- #' markers (more highly expressed in-group than out).
- #' @param pval_max Drop features with raw `pval > pval_max`. Default `1`.
- #' @param padj_max Drop features with adjusted `padj > padj_max`.
- #' Default `1`.
- #' @param pct_in_min Minimum percent (0-100) of in-group observations
- #' with non-zero feature value. Default `0`.
- #' @param pct_out_max Maximum percent (0-100) of out-of-group
- #' observations with non-zero feature value. Default `100`.
- #'
- #' @return tibble in wide form: a `rank` column (1..`n`) and one
- #' column per group containing the feature name of the top-ranked
- #' marker at that rank. Cells are `NA` for groups with fewer than
- #' `n` features that pass the filters.
- #'
- #' @examples
- #' set.seed(42)
- #' exprs <- matrix(rpois(25 * 150, lambda = 2), nrow = 25,
- #' dimnames = list(paste0("G", 1:25), NULL))
- #' y <- rep(c("A", "B", "C"), each = 50)
- #'
- #' res <- wilcoxauc(exprs, y)
- #'
- #' ## top 10 markers per group, restricted to nominally significant,
- #' ## up-regulated features (auc > 0.5 means in-group > out-of-group).
- #' top_markers(res, n = 10, auc_min = 0.5, pval_max = 0.05)
- #'
- #' @seealso [wilcoxauc()], [top_markers_dds()]
- #'
- #' @export
- top_markers <- function(res, n = 10, auc_min = 0, pval_max = 1, padj_max = 1,
- pct_in_min = 0, pct_out_max = 100) {
- res %>%
- dplyr::filter(
- .data$pval <= pval_max &
- .data$padj <= padj_max &
- .data$auc >= auc_min &
- .data$pct_in >= pct_in_min &
- .data$pct_out <= pct_out_max
- ) %>%
- dplyr::group_by(.data$group) %>%
- dplyr::top_n(n = n, wt = .data$auc) %>%
- dplyr::mutate(rank = rank(-.data$auc, ties.method = "random")) %>%
- dplyr::ungroup() %>%
- dplyr::select("feature", "group", "rank") %>%
- dplyr::arrange(.data$rank) %>%
- tidyr::pivot_wider(
- names_from = "group", values_from = "feature", names_sort = TRUE
- )
- }
wilcoxauc.R at commit b5df6ee, no license · at the source
Overview
- Institute for Neurodegenerative Diseases, University of California,San Francisco, San Francisco, CA USA
- UC Berkeley-UCSF Graduate Program in Bioengineering, University of California,San Francisco, San Francisco, CA USA
- Engineering and Technology Department, City College of San Francisco,San Francisco, CA USA
- Biomedical Informatics Graduate Program, University of California,San Francisco, San Francisco, CA USA
- Medical Scientist Training Program, University of California,San Francisco, San Francisco, CA USA
- Biomedical Sciences Graduate Program, University of California,San Francisco, San Francisco, CA USA
- Department of Biochemistry and Biophysics, University of California,San Francisco, San Francisco, CA USA
Abstract
Microglia dynamically support brain health through the induction of specialized activation states in response to injury or disease. Activation of the interferon-responsive microglia (IRM) state has been identified across neurodevelopmental windows, age-related cognitive decline, and neurodegenerative diseases. Functionally, IRM have been linked to synaptic pruning, dead cell removal, and neuroinflammation, making this state critical to brain homeostasis. While the functional importance of this state is becoming increasingly clear, our understanding of the regulatory networks that govern IRM induction remain incomplete. To systematically identify genetic regulators of the IRM state, we conducted a genome-wide CRISPR interference screen in human iPSC-derived microglia using IFIT1 as a representative IRM marker. We identified 772 genes that modulate IRM, including canonical type I interferon signaling genes (IFNAR2, TYK2, STAT1/
Reproduced under the paper's license (CC BY), from the paper cited above.
Repositories
Its files are read in the Code ↔ Paper reader above, with 5 matches between paragraphs and lines of code.
immunogenomics/presto
b5df6ee6097eb62522f2e557aa93ac21bab2d05f, 20 September 2026Availability: 1 check, the latest on 26 September 2026: the link answers
- 26 September 2026: the link answers
32 files
- R/
RcppExports.R , R, 55 lines - R/
presto-package.R , R, 13 lines - R/
pseudobulk.R , R, 694 lines - R/
toy_data.R , R, 119 lines - R/
utils.R , R, 376 lines - R/
wilcoxauc.R , R, 395 lines, 2 matches - docs/
bootstrap-toc.js , JavaScript, 159 lines - docs/
deps/ , JavaScript, 7 linesbootstrap-5.3.1/ bootstrap.bundle.min.js - docs/
deps/ , JavaScript, 5 linesbootstrap-toc-1.0.1/ bootstrap-toc.min.js - docs/
deps/ , JavaScript, 7 linesclipboard.js-2.0.11/ clipboard.min.js - docs/
deps/ , JavaScript, 7 linesheadroom-0.11.0/ headroom.min.js - docs/
deps/ , JavaScript, 7 linesheadroom-0.11.0/ jQuery.headroom.min.js - docs/
deps/ , JavaScript, 7,407 linesjquery-3.6.0/ jquery-3.6.0.js - docs/
deps/ , JavaScript, 2 linesjquery-3.6.0/ jquery-3.6.0.min.js - docs/
deps/ , JavaScript, 7 linessearch-1.0.0/ autocomplete.jquery.min. js - docs/
deps/ , JavaScript, 9 linessearch-1.0.0/ fuse.min.js - docs/
deps/ , JavaScript, 7 linessearch-1.0.0/ mark.min.js - docs/
docsearch.js , JavaScript, 85 lines - docs/
katex-auto.js , JavaScript, 16 lines - docs/
lightswitch.js , JavaScript, 85 lines - docs/
pkgdown.js , JavaScript, 162 lines - src/
RcppExports.cpp , C++, 222 lines - src/
fast_wilcox.cpp , C++, 418 lines - tests/
testthat.R , R, 4 lines - tests/
testthat/ , R, 220 linestest_correctness.R - tests/
testthat/ , R, 182 linestest_datatypes.R - tests/
testthat/ , R, 44 linestest_pseudobulk.R - vignettes/
getting-started.Rmd , R, 219 lines - vignettes/
ircolitis.R , R, 147 lines - vignettes/
precompute.R , R, 41 lines - vignettes/
pseudobulk.Rmd , R, 357 lines - README.md, Text, 89 lines
reetm09/mixscale
b7515d40cf4301f1d7ef56fb115edd1cd0332d78, 31 March 2025Availability: 1 check, the latest on 26 September 2026: the link answers
- 26 September 2026: the link answers
13 files
- R/
decomposition.R , R, 955 lines - R/
differential_expr_wilcox , R, 62 lines, 2 matcheson_BH.R - R/
enrichment_test.R , R, 491 lines - R/
get_fold_change.R , R, 171 lines - R/
glm_gp_disp_only.R , R, 249 lines - R/
perturbation_scoring.R , R, 531 lines - R/
scoring_de.R , R, 1,032 lines, 1 match - R/
visualization.R , R, 829 lines - docs/
old/ , R, 271 linesNew_Vignette_2024Jan.Rmd - docs/
old/ , R, 378 linesindex copy 2.Rmd - docs/
old/ , R, 356 linesindex copy.Rmd - docs/
old/ , R, 349 linesindex.Rmd - README.md, Text, 23 lines
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 43 scripts, each with its path and the digest of its content;
- 5 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
No dataset and no data link were found in the paper.
Data availability
All processed data is included in supplemental tables for this manuscript. Genome-wide CRISPR screening data is also available through CRISPRbrain.org.
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 3, 28 September 2026
- Publisher: n/a → Springer Science+Business Media
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 12 authors, 4 keywords, 5 funders, 70 references.
Cite
This paper
McQuade, A., Castillo, V. C., Hagan, V., Liang, W., Ta, T., Mishra, R., Teter, O., Gomes, L., Gonzalez, B., Teyssier, N., Leng, K., & Kampmann, M. (2026). Regulators of interferon-responsive microglia uncovered by Genome-wide CRISPRi screening. NPJ dementia, 2(1), 75. https://
BibTeX
@article{mcquade2026regu
author = {McQuade, Amanda and Castillo, Vincent Cele and Hagan, Venus and Liang, Weiwei and Ta, Thomas and Mishra, Reet and Teter, Olivia and Gomes, Layla and Gonzalez, Bianca and Teyssier, Noam and Leng, Kun and Kampmann, Martin},
title = {{Regulators of interferon-responsive microglia uncovered by Genome-wide CRISPRi screening}},
journal = {NPJ dementia},
year = {2026},
month = sep,
volume = {2},
number = {1},
pages = {75},
publisher = {Springer Science+Business Media},
issn = {3005-1940},
doi = {10.1038/
url = {https://
pmid = {42694111},
pmcid = {PMC13538059}
}
RIS
TY - JOUR
AU - McQuade, Amanda
AU - Castillo, Vincent Cele
AU - Hagan, Venus
AU - Liang, Weiwei
AU - Ta, Thomas
AU - Mishra, Reet
AU - Teter, Olivia
AU - Gomes, Layla
AU - Gonzalez, Bianca
AU - Teyssier, Noam
AU - Leng, Kun
AU - Kampmann, Martin
TI - Regulators of interferon-responsive microglia uncovered by Genome-wide CRISPRi screening
T2 - NPJ dementia
J2 - NPJ Dement
PY - 2026
DA - 2026/
VL - 2
IS - 1
SP - 75
SN - 3005-1940
PB - Springer Science+Business Media
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "Regulators of interferon-responsive microglia uncovered by Genome-wide CRISPRi screening",
"container-title": "NPJ dementia",
"author": [
{
"family": "McQuade",
"given": "Amanda"
},
{
"family": "Castillo",
"given": "Vincent Cele"
},
{
"family": "Hagan",
"given": "Venus"
},
{
"family": "Liang",
"given": "Weiwei"
},
{
"family": "Ta",
"given": "Thomas"
},
{
"family": "Mishra",
"given": "Reet"
},
{
"family": "Teter",
"given": "Olivia"
},
{
"family": "Gomes",
"given": "Layla"
},
{
"family": "Gonzalez",
"given": "Bianca"
},
{
"family": "Teyssier",
"given": "Noam"
},
{
"family": "Leng",
"given": "Kun"
},
{
"family": "Kampmann",
"given": "Martin"
}
],
"container-title-short":
"volume": "2",
"issue": "1",
"page": "75",
"DOI": "10.1038/
"PMID": "42694111",
"PMCID": "PMC13538059",
"ISSN": "3005-1940",
"publisher": "Springer Science+Business Media",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
9,
2
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1038/s41467-026-73007-1 [code]
- Single-nucleus epigenomic dysregulation unmasks genetic risk-associated neurodegenerative glia states.Journal: Nature communicationsIn common: Seurat, data.table, ggplot2, 1 other tool, Alzheimer's / dementia, genetics / omics, cellular / molecular, 6 references
- [2] doi:10.1038/s41593-026-02367-0 [code]
- A reproducible three-dimensional model of human brain tissue to investigate physiological and disease-associated microglia phenotypes.Journal: Nature neuroscienceIn common: SingleCellExperiment, DESeq2, Seurat, 3 other tools, Alzheimer's / dementia, cellular / molecular, 3 references
- [3] doi:10.1038/s41467-026-74104-x [code]
- TNF-α induces type I IFN signalling to suppress neurogenesis and recruit T cells.Journal: Nature communicationsIn common: Seurat, ggplot2, tidyverse, 6 references
- [4] doi:10.1002/imt2.70163 [code]
- Spatial multi-omics unveils sphingolipid metabolic reprogramming within the retinal pathological niche.Journal: iMetaIn common: SingleCellExperiment, DESeq2, Seurat, 3 other tools, genetics / omics, cellular / molecular, 3 references
- [5] doi:10.1038/s41593-026-02384-z [code]
- cGAS-mediated type I IFN signaling contributes to disease progression in drug-refractory epilepsy.Journal: Nature neuroscienceIn common: SingleCellExperiment, Seurat, data.table, 2 other tools, cellular / molecular, 4 references
- [6] doi:10.1016/j.xcrm.2026.102766 [code]
- A longitudinal single-cell and spatial multiomic atlas of pediatric high-grade glioma.Journal: Cell reports. MedicineIn common: SingleCellExperiment, DESeq2, Seurat, 3 other tools, genetics / omics, cellular / molecular, 3 references
- [7] doi:10.1038/s41467-026-75882-0 [code]
- A massively parallel CRISPR-based screening platform for modifiers of neuronal depolarization.Journal: Nature communicationsIn common: cellular / molecular, 4 references, author Martin Kampmann
- [8] doi:10.1016/j.celrep.2026.117073 [code]
- Single-cell epigenomics uncovers heterochromatin instability and transcription factor dysfunction during mouse brain aging.Journal: Cell reportsIn common: broom, DESeq2, Seurat, 3 other tools, genetics / omics, cellular / molecular, 2 references
- [9] doi:10.1038/s42003-026-09948-6 [code]
- A scalable human-zebrafish xenotransplantation model reveals gastrosome-mediated processing of dying neurons by human microglia.Journal: Communications biologyIn common: SingleCellExperiment, ggplot2, tidyverse, cellular / molecular, 5 references
- [10] doi:10.1038/s41514-026-00391-9 [code]
- Region-specific transcriptional signatures of brain aging in the absence of neuropathology at the single-cell level.Journal: npj agingIn common: broom, Seurat, data.table, 2 other tools, genetics / omics, cellular / molecular, 4 references
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 2 repositories of the authors' code, each at its verified commit and with its license, 43 scripts, and 5 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:ba395b7342729ef8…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
