Lab Website -
https://fanzhanglab.org
Lab GitHub -
https://github.com/fanzhanglab
library(scLASER)
library(tidyverse)
# Helper: pick the NAM PC with the smallest LRT p-value and plot it on UMAP
plot_top_nam_pc_umap <- function(object,
p_col_candidates = c("lrt_pval", "lrt_p", "p.value", "pval"),
nam_col_candidates = c("NAMscore", "nam_pc", "pc", "NAM_PC", "score"),
umap_col_candidates = list(
x = c("UMAP1", "umap_1", "UMAP_1", "Dim1"),
y = c("UMAP2", "umap_2", "UMAP_2", "Dim2")
),
zscore = TRUE,
facet_by = "disease",
label_cell_types = TRUE,
cell_type_col = "cell_type",
label_size = 3) {
stopifnot(inherits(object, "scLASER"))
if (is.null(object@pipeline_output) || nrow(object@pipeline_output) == 0) {
stop("object@pipeline_output is empty. Run longAnalyses_plusModelSelection() first.")
}
if (is.null(object@umap) || nrow(object@umap) == 0) {
stop("object@umap is empty. Run compute_umap() first.")
}
if (is.null(object@nam_pcs) || nrow(object@nam_pcs) == 0) {
stop("object@nam_pcs is empty. Run association_nam_scLASER() first.")
}
# Require row alignment across slots
n_md <- nrow(object@metadata)
n_um <- nrow(object@umap)
n_nam <- nrow(object@nam_pcs)
if (!(n_md == n_um && n_md == n_nam)) {
stop(
"Row mismatch across slots:\n",
" nrow(metadata) = ", n_md, "\n",
" nrow(umap) = ", n_um, "\n",
" nrow(nam_pcs) = ", n_nam, "\n",
"These must match if you want to cbind() them."
)
}
po <- object@pipeline_output
# Find p-value column
p_col <- p_col_candidates[p_col_candidates %in% colnames(po)][1]
if (is.na(p_col)) {
stop("Could not find an LRT p-value column in pipeline_output. Tried: ",
paste(p_col_candidates, collapse = ", "))
}
# Find NAM PC identifier column
nam_col <- nam_col_candidates[nam_col_candidates %in% colnames(po)][1]
if (is.na(nam_col)) {
stop("Could not find a NAM PC identifier column in pipeline_output. Tried: ",
paste(nam_col_candidates, collapse = ", "))
}
po[[p_col]] <- as.numeric(po[[p_col]])
po <- po[is.finite(po[[p_col]]), , drop = FALSE]
if (nrow(po) == 0) stop("No finite p-values in pipeline_output.")
top_row <- po[which.min(po[[p_col]]), , drop = FALSE]
top_pc <- as.character(top_row[[nam_col]])
if (!top_pc %in% colnames(object@nam_pcs)) {
stop("Top NAM PC '", top_pc, "' not found in colnames(object@nam_pcs).")
}
# UMAP coordinate columns
um <- object@umap
um1 <- umap_col_candidates$x[umap_col_candidates$x %in% colnames(um)][1]
um2 <- umap_col_candidates$y[umap_col_candidates$y %in% colnames(um)][1]
if (is.na(um1) || is.na(um2)) {
stop("Could not find UMAP coordinate columns in object@umap.")
}
# Build plotting DF by row alignment
plot_df <- cbind(object@metadata, object@umap)
plot_df$nam_score <- as.numeric(object@nam_pcs[, top_pc])
if (zscore) {
plot_df$nam_score <- as.numeric(scale(plot_df$nam_score))
}
p <- ggplot2::ggplot(
plot_df,
ggplot2::aes(x = .data[[um1]], y = .data[[um2]], color = nam_score)
) +
ggplot2::geom_point(size = 0.6, alpha = 0.85) +
ggplot2::scale_color_gradient2(
low = "#2C7BB6", # blue
mid = "white",
high = "#D7191C", # red
midpoint = 0
) +
ggplot2::labs(
title = "Association Score (significant latent embedding, PC1)",
subtitle = paste0("min LRT p = ", signif(top_row[[p_col]], 3)),
x = "UMAP1",
y = "UMAP2",
color = if (zscore) paste0(top_pc, " (z)") else top_pc
) +
ggplot2::theme_classic()
# Facet (optional)
if (!is.null(facet_by) && facet_by %in% colnames(plot_df)) {
p <- p + ggplot2::facet_wrap(stats::as.formula(paste("~", facet_by)), nrow = 1)
}
# Add one label per cell type at median UMAP position
if (isTRUE(label_cell_types)) {
if (!cell_type_col %in% colnames(plot_df)) {
stop("cell_type_col '", cell_type_col, "' not found in metadata/plot_df.")
}
label_df <- plot_df %>%
dplyr::group_by(.data[[cell_type_col]]) %>%
dplyr::summarise(
.x = stats::median(.data[[um1]], na.rm = TRUE),
.y = stats::median(.data[[um2]], na.rm = TRUE),
.groups = "drop"
) %>%
dplyr::rename(label = !!cell_type_col)
p <- p +
ggplot2::geom_text(
data = label_df,
ggplot2::aes(x = .x, y = .y, label = label),
inherit.aes = FALSE,
size = label_size
)
}
p
}
obj <- scLASER(metadata = readRDS("/Users/juanvargas/Documents/GitHub/scLASER/vignettes/metadata.rds"), pcs = readRDS("/Users/juanvargas/Documents/GitHub/scLASER/vignettes/pcs.rds"))
obj
#> scLASER object
#> ---------------
#> Slots:
#> metadata: 110431 11
#> pcs: 110431 20
#> umap:
#> harmony:
#> nam_pcs:
#> NAM_matrix:
#> plsda_LV:
#> pipeline_output:
plot_celltype_proportions(
obj,
disease_var = "disease",
disease_labels = c("0" = "Non-responder", "1" = "Responder"),
disease_colors = c("Non-responder" = "#4DAF4A", "Responder" = "#984EA3"),
highlight_cell_types = NULL
)
A scLASER object is an S4 container that stores each
intermediate output of the pipeline in a dedicated
slot, so later steps can reuse results without
recomputing them. In this tutorial we populate the slots in the
following order:
@metadata — per-cell metadata (sample/subject IDs,
visit, disease, covariates, etc.). Created by
generate_dummy_data() and passed into
scLASER().@pcs — synthetic principal components used as the
working low-dimensional space. Created by
generate_pseudo_pcs_time() and stored when you call
scLASER(metadata=..., pcs=...).@umap — 2D UMAP embedding for visualization. Created by
compute_umap().@harmony — batch-corrected PC embedding. Created by
run_harmony().@nam_pcs — neighborhood abundance “PCs” (association
score vectors). Created by association_nam_scLASER().@NAM_matrix — neighborhood abundance matrix used to
derive @nam_pcs (also created by
association_nam_scLASER()).@pipeline_output — tidy results table from longitudinal
model selection (including LRT p-values). Created by
longAnalyses_plusModelSelection().obj <- compute_umap(obj, n_neighbors = 30, metric = "cosine", min_dist = 0.01)
obj <- run_harmony(
obj,
batch_col = "sample_id",
theta = 2,
epsilon.cluster = -Inf,
epsilon.harmony = -Inf,
max.iter.cluster = 30,
max.iter.harmony = 10,
plot_convergence = FALSE
)
saveRDS(obj, "obj_scLASER.rds")
The following 2 functions association_nam_scLASER and
longAnalyses_plusModelSelection are the main protagonist of
our pipeline. In the previous steps, the goal was to harmonize the pcs
to remove any batch effect. In these steps we create the Neighborhood
Abundance Matrix from those harmonized pcs. Further we determine which
of those NAM PCs or Association score vectors are associated with the
interaction of response status and visit.
obj = readRDS("obj_scLASER.rds")
obj@metadata$disease = as.numeric(obj@metadata$disease)
obj <- association_nam_scLASER(
obj = obj,
test_var = "disease",
samplem_key = "sample_id",
graph_use = "RNA_nn",
batches = "batch",
covs = c("age", "sex"),
Nnull = 1000,
local_test = TRUE,n_pcs = 20,
seed = 1234, return_nam = T, key = "NAM_"
)
# Align names for longitudinal analysis + plotting
rownames(obj@nam_pcs) <- obj@metadata$sample_id
obj <- scLASER_modeling(obj,
disease_var = "disease",
time_var = "visit",
covariates = c("age", "sex"),
subject_var = "subject_id",
sample_var = "sample_id"
)
obj@pipeline_output
#> NAMscore best_model coefficient Value
#> 1 PC1 time as categorical (Intercept) -2.534984e-04
#> 2 PC1 time as categorical disease1 3.596413e-05
#> 3 PC1 time as categorical visit_fac__tmp1 6.963603e-05
#> 4 PC1 time as categorical visit_fac__tmp2 2.649740e-05
#> 5 PC1 time as categorical age -1.763533e-06
#> 6 PC1 time as categorical sex 5.570523e-05
#> 7 PC1 time as categorical disease1:visit_fac__tmp1 1.511205e-03
#> 8 PC1 time as categorical disease1:visit_fac__tmp2 7.388751e-04
#> 9 PC2 time as continuous (Intercept) -2.101264e-04
#> 10 PC2 time as continuous disease1 3.655688e-04
#> 11 PC2 time as continuous visit 1.973819e-04
#> 12 PC2 time as continuous age 2.712114e-07
#> 13 PC2 time as continuous sex -1.699309e-05
#> 14 PC2 time as continuous disease1:visit -3.139720e-04
#> 15 PC3 time as continuous (Intercept) 3.994589e-04
#> 16 PC3 time as continuous disease1 -3.680073e-04
#> 17 PC3 time as continuous visit -2.165900e-04
#> 18 PC3 time as continuous age -1.959783e-08
#> 19 PC3 time as continuous sex -4.909294e-05
#> 20 PC3 time as continuous disease1:visit 2.488249e-04
#> 21 PC4 time as continuous (Intercept) 4.581861e-05
#> 22 PC4 time as continuous disease1 3.240621e-04
#> 23 PC4 time as continuous visit 7.408875e-05
#> 24 PC4 time as continuous age -5.875629e-07
#> 25 PC4 time as continuous sex 4.960529e-05
#> 26 PC4 time as continuous disease1:visit -2.244589e-04
#> 27 PC5 time as continuous (Intercept) -1.658504e-04
#> 28 PC5 time as continuous disease1 -5.443877e-05
#> 29 PC5 time as continuous visit 9.249382e-05
#> 30 PC5 time as continuous age -2.818307e-07
#> 31 PC5 time as continuous sex -2.249556e-05
#> 32 PC5 time as continuous disease1:visit 1.796596e-05
#> 33 PC6 time as continuous (Intercept) -6.950496e-05
#> 34 PC6 time as continuous disease1 1.740319e-04
#> 35 PC6 time as continuous visit -2.274678e-05
#> 36 PC6 time as continuous age -1.084537e-06
#> 37 PC6 time as continuous sex 2.161173e-05
#> 38 PC6 time as continuous disease1:visit -4.531346e-05
#> 39 PC7 time as continuous (Intercept) 7.762888e-06
#> 40 PC7 time as continuous disease1 -1.212577e-04
#> 41 PC7 time as continuous visit 1.788678e-06
#> 42 PC7 time as continuous age 6.550804e-08
#> 43 PC7 time as continuous sex 1.573229e-05
#> 44 PC7 time as continuous disease1:visit 2.182535e-04
#> 45 PC8 time as continuous (Intercept) -1.702020e-04
#> 46 PC8 time as continuous disease1 8.393644e-04
#> 47 PC8 time as continuous visit 2.705926e-04
#> 48 PC8 time as continuous age -4.849020e-07
#> 49 PC8 time as continuous sex 2.113245e-05
#> 50 PC8 time as continuous disease1:visit -6.787756e-04
#> 51 PC9 time as continuous (Intercept) -2.387438e-04
#> 52 PC9 time as continuous disease1 2.236261e-04
#> 53 PC9 time as continuous visit 1.128786e-04
#> 54 PC9 time as continuous age -8.191805e-07
#> 55 PC9 time as continuous sex 7.276104e-06
#> 56 PC9 time as continuous disease1:visit -1.261960e-04
#> 57 PC10 time as continuous (Intercept) 3.065227e-04
#> 58 PC10 time as continuous disease1 7.076614e-05
#> 59 PC10 time as continuous visit -1.652570e-04
#> 60 PC10 time as continuous age 3.582823e-07
#> 61 PC10 time as continuous sex 3.172823e-06
#> 62 PC10 time as continuous disease1:visit -3.639516e-05
#> 63 PC11 time as continuous (Intercept) -1.392867e-06
#> 64 PC11 time as continuous disease1 2.970147e-04
#> 65 PC11 time as continuous visit -2.374223e-05
#> 66 PC11 time as continuous age -2.793834e-07
#> 67 PC11 time as continuous sex 2.624115e-06
#> 68 PC11 time as continuous disease1:visit -3.102876e-04
#> 69 PC12 time as continuous (Intercept) -9.497552e-05
#> 70 PC12 time as continuous disease1 1.038499e-04
#> 71 PC12 time as continuous visit 9.729062e-05
#> 72 PC12 time as continuous age -1.815332e-07
#> 73 PC12 time as continuous sex 1.425610e-06
#> 74 PC12 time as continuous disease1:visit -5.771183e-05
#> 75 PC13 time as continuous (Intercept) 1.322772e-04
#> 76 PC13 time as continuous disease1 -4.604564e-05
#> 77 PC13 time as continuous visit 8.534059e-05
#> 78 PC13 time as continuous age 9.377048e-07
#> 79 PC13 time as continuous sex -1.956941e-05
#> 80 PC13 time as continuous disease1:visit -6.937589e-05
#> 81 PC14 time as continuous (Intercept) 3.841321e-05
#> 82 PC14 time as continuous disease1 7.616848e-05
#> 83 PC14 time as continuous visit -1.241501e-04
#> 84 PC14 time as continuous age 5.048552e-07
#> 85 PC14 time as continuous sex -1.160019e-05
#> 86 PC14 time as continuous disease1:visit 1.090295e-05
#> 87 PC15 time as continuous (Intercept) -1.315771e-04
#> 88 PC15 time as continuous disease1 3.479137e-04
#> 89 PC15 time as continuous visit 1.256489e-04
#> 90 PC15 time as continuous age -8.291946e-07
#> 91 PC15 time as continuous sex 1.008615e-05
#> 92 PC15 time as continuous disease1:visit -2.840735e-04
#> 93 PC16 time as continuous (Intercept) 1.679719e-06
#> 94 PC16 time as continuous disease1 -1.747562e-04
#> 95 PC16 time as continuous visit -2.898785e-05
#> 96 PC16 time as continuous age -6.953198e-08
#> 97 PC16 time as continuous sex -1.048454e-05
#> 98 PC16 time as continuous disease1:visit 1.123800e-04
#> 99 PC17 time as continuous (Intercept) 3.337832e-04
#> 100 PC17 time as continuous disease1 -7.005901e-04
#> 101 PC17 time as continuous visit -1.607460e-04
#> 102 PC17 time as continuous age 2.313437e-06
#> 103 PC17 time as continuous sex -1.011242e-04
#> 104 PC17 time as continuous disease1:visit 4.235897e-04
#> 105 PC18 time as continuous (Intercept) 2.545641e-04
#> 106 PC18 time as continuous disease1 -1.486479e-04
#> 107 PC18 time as continuous visit -2.711549e-05
#> 108 PC18 time as continuous age 9.179007e-07
#> 109 PC18 time as continuous sex -1.875965e-05
#> 110 PC18 time as continuous disease1:visit 5.226419e-05
#> 111 PC19 time as continuous (Intercept) 3.540963e-05
#> 112 PC19 time as continuous disease1 6.693938e-05
#> 113 PC19 time as continuous visit 1.932203e-05
#> 114 PC19 time as continuous age 4.744317e-08
#> 115 PC19 time as continuous sex 1.295340e-05
#> 116 PC19 time as continuous disease1:visit -1.021341e-04
#> 117 PC20 time as continuous (Intercept) 1.112908e-04
#> 118 PC20 time as continuous disease1 2.233681e-04
#> 119 PC20 time as continuous visit -2.119824e-04
#> 120 PC20 time as continuous age -1.845109e-06
#> 121 PC20 time as continuous sex 6.293556e-05
#> 122 PC20 time as continuous disease1:visit 3.345189e-05
#> Std.Error DF t.value p.value lrt_pval AIC
#> 1 4.231703e-05 110341 -5.990458275 2.098956e-09 1.945007e-46 -973631.1
#> 2 3.726268e-05 26 0.965151227 3.433611e-01 1.945007e-46 -973631.1
#> 3 3.573570e-05 56 1.948640495 5.635534e-02 1.945007e-46 -973631.1
#> 4 3.577758e-05 56 0.740614713 4.620212e-01 1.945007e-46 -973631.1
#> 5 8.626640e-07 26 -2.044287133 5.117560e-02 1.945007e-46 -973631.1
#> 6 2.355601e-05 26 2.364798733 2.578555e-02 1.945007e-46 -973631.1
#> 7 5.054925e-05 56 29.895702897 4.119089e-36 1.945007e-46 -973631.1
#> 8 5.059264e-05 56 14.604398648 9.500697e-21 1.945007e-46 -973631.1
#> 9 2.558825e-04 110341 -0.821182983 4.115438e-01 4.412870e-02 -973520.3
#> 10 2.115429e-04 26 1.728106582 9.583022e-02 4.412870e-02 -973520.3
#> 11 1.084433e-04 58 1.820138510 7.389901e-02 4.412870e-02 -973520.3
#> 12 5.409786e-06 26 0.050133481 9.603992e-01 4.412870e-02 -973520.3
#> 13 1.478494e-04 26 -0.114935123 9.093796e-01 4.412870e-02 -973520.3
#> 14 1.533617e-04 58 -2.047265235 4.517094e-02 4.412870e-02 -973520.3
#> 15 2.487114e-04 110341 1.606113970 1.082517e-01 1.327831e-01 -973890.0
#> 16 2.148137e-04 26 -1.713145853 9.858745e-02 1.327831e-01 -973890.0
#> 17 1.162771e-04 58 -1.862706332 6.757059e-02 1.327831e-01 -973890.0
#> 18 5.131792e-06 26 -0.003818904 9.969821e-01 1.327831e-01 -973890.0
#> 19 1.402515e-04 26 -0.350035145 7.291321e-01 1.327831e-01 -973890.0
#> 20 1.644403e-04 58 1.513162848 1.356687e-01 1.327831e-01 -973890.0
#> 21 2.724017e-04 110341 0.168202389 8.664244e-01 1.696784e-01 -974454.6
#> 22 2.245683e-04 26 1.443044925 1.609486e-01 1.696784e-01 -974454.6
#> 23 1.146738e-04 58 0.646082381 5.207743e-01 1.696784e-01 -974454.6
#> 24 5.767400e-06 26 -0.101876563 9.196363e-01 1.696784e-01 -974454.6
#> 25 1.576234e-04 26 0.314707596 7.554954e-01 1.696784e-01 -974454.6
#> 26 1.621730e-04 58 -1.384070968 1.716396e-01 1.696784e-01 -974454.6
#> 27 2.589828e-04 110341 -0.640391380 5.219195e-01 9.164478e-01 -974228.8
#> 28 2.236800e-04 26 -0.243377910 8.096227e-01 9.164478e-01 -974228.8
#> 29 1.210724e-04 58 0.763954855 4.479909e-01 9.164478e-01 -974228.8
#> 30 5.343806e-06 26 -0.052739686 9.583425e-01 9.164478e-01 -974228.8
#> 31 1.460461e-04 26 -0.154030545 8.787750e-01 9.164478e-01 -974228.8
#> 32 1.712219e-04 58 0.104927937 9.167950e-01 9.164478e-01 -974228.8
#> 33 2.639502e-04 110341 -0.263326026 7.922998e-01 7.964250e-01 -974302.8
#> 34 2.280325e-04 26 0.763189221 4.522203e-01 7.964250e-01 -974302.8
#> 35 1.234658e-04 58 -0.184235457 8.544714e-01 7.964250e-01 -974302.8
#> 36 5.445420e-06 26 -0.199165050 8.436830e-01 7.964250e-01 -974302.8
#> 37 1.488233e-04 26 0.145217351 8.856592e-01 7.964250e-01 -974302.8
#> 38 1.746067e-04 58 -0.259517260 7.961551e-01 7.964250e-01 -974302.8
#> 39 2.692844e-04 110341 0.028827845 9.770019e-01 2.222588e-01 -974706.8
#> 40 2.325786e-04 26 -0.521362124 6.065274e-01 2.222588e-01 -974706.8
#> 41 1.258890e-04 58 0.014208368 9.887125e-01 2.222588e-01 -974706.8
#> 42 5.556352e-06 26 0.011789755 9.906834e-01 2.222588e-01 -974706.8
#> 43 1.518553e-04 26 0.103600564 9.182813e-01 2.222588e-01 -974706.8
#> 44 1.780337e-04 58 1.225911509 2.251863e-01 2.222588e-01 -974706.8
#> 45 2.539249e-04 110341 -0.670284777 5.026777e-01 1.046753e-04 -975207.5
#> 46 2.190784e-04 26 3.831341977 7.246942e-04 1.046753e-04 -975207.5
#> 47 1.184395e-04 58 2.284647507 2.600986e-02 1.046753e-04 -975207.5
#> 48 5.242751e-06 26 -0.092489991 9.270177e-01 1.046753e-04 -975207.5
#> 49 1.432841e-04 26 0.147486338 8.838859e-01 1.046753e-04 -975207.5
#> 50 1.674985e-04 58 -4.052428682 1.527088e-04 1.046753e-04 -975207.5
#> 51 2.931764e-04 110341 -0.814335111 4.154548e-01 4.806252e-01 -975123.4
#> 52 2.440377e-04 26 0.916358632 3.679007e-01 4.806252e-01 -975123.4
#> 53 1.262582e-04 58 0.894029394 3.750011e-01 4.806252e-01 -975123.4
#> 54 6.176061e-06 26 -0.132638007 8.955009e-01 4.806252e-01 -975123.4
#> 55 1.687926e-04 26 0.043106769 9.659458e-01 4.806252e-01 -975123.4
#> 56 1.785558e-04 58 -0.706759656 4.825457e-01 4.806252e-01 -975123.4
#> 57 2.776253e-04 110341 1.104088000 2.695574e-01 8.406794e-01 -975369.3
#> 58 2.380016e-04 26 0.297334797 7.685736e-01 8.406794e-01 -975369.3
#> 59 1.277286e-04 58 -1.293814219 2.008582e-01 8.406794e-01 -975369.3
#> 60 5.753621e-06 26 0.062270753 9.508235e-01 8.406794e-01 -975369.3
#> 61 1.572469e-04 26 0.020177339 9.840560e-01 8.406794e-01 -975369.3
#> 62 1.806352e-04 58 -0.201484374 8.410248e-01 8.406794e-01 -975369.3
#> 63 2.714253e-04 110341 -0.005131676 9.959055e-01 8.637133e-02 -975042.9
#> 64 2.344154e-04 26 1.267044220 2.163718e-01 8.637133e-02 -975042.9
#> 65 1.268755e-04 58 -0.187130118 8.522117e-01 8.637133e-02 -975042.9
#> 66 5.600704e-06 26 -0.049883619 9.605964e-01 8.637133e-02 -975042.9
#> 67 1.530674e-04 26 0.017143522 9.864530e-01 8.637133e-02 -975042.9
#> 68 1.794288e-04 58 -1.729307746 8.907352e-02 8.637133e-02 -975042.9
#> 69 2.885282e-04 110341 -0.329172351 7.420260e-01 7.623351e-01 -975378.5
#> 70 2.491983e-04 26 0.416735978 6.802921e-01 7.623351e-01 -975378.5
#> 71 1.348829e-04 58 0.721296656 4.736247e-01 7.623351e-01 -975378.5
#> 72 5.953449e-06 26 -0.030492109 9.759075e-01 7.623351e-01 -975378.5
#> 73 1.627084e-04 26 0.008761750 9.930761e-01 7.623351e-01 -975378.5
#> 74 1.907530e-04 58 -0.302547437 7.633172e-01 7.623351e-01 -975378.5
#> 75 2.956061e-04 110341 0.447478044 6.545308e-01 7.147203e-01 -975913.1
#> 76 2.517351e-04 26 -0.182913078 8.562851e-01 7.147203e-01 -975913.1
#> 77 1.340404e-04 58 0.636677936 5.268396e-01 7.147203e-01 -975913.1
#> 78 6.149755e-06 26 0.152478403 8.799867e-01 7.147203e-01 -975913.1
#> 79 1.680736e-04 26 -0.116433529 9.082037e-01 7.147203e-01 -975913.1
#> 80 1.895615e-04 58 -0.365980902 7.157109e-01 7.147203e-01 -975913.1
#> 81 2.918280e-04 110341 0.131629633 8.952775e-01 9.549497e-01 -975638.3
#> 82 2.520524e-04 26 0.302193009 7.649092e-01 9.549497e-01 -975638.3
#> 83 1.364301e-04 58 -0.909990237 3.665939e-01 9.549497e-01 -975638.3
#> 84 6.021478e-06 26 0.083842406 9.338240e-01 9.549497e-01 -975638.3
#> 85 1.645677e-04 26 -0.070488875 9.443439e-01 9.549497e-01 -975638.3
#> 86 1.929411e-04 58 0.056509245 9.551304e-01 9.549497e-01 -975638.3
#> 87 2.892470e-04 110341 -0.454895396 6.491854e-01 1.394966e-01 -975526.5
#> 88 2.496355e-04 26 1.393686614 1.752117e-01 1.394966e-01 -975526.5
#> 89 1.350075e-04 58 0.930680920 3.558764e-01 1.394966e-01 -975526.5
#> 90 5.970886e-06 26 -0.138872962 8.906206e-01 1.394966e-01 -975526.5
#> 91 1.631850e-04 26 0.061808072 9.511884e-01 1.394966e-01 -975526.5
#> 92 1.909291e-04 58 -1.487847944 1.422080e-01 1.394966e-01 -975526.5
#> 93 2.976471e-04 110341 0.005643324 9.954973e-01 5.563899e-01 -975597.4
#> 94 2.533474e-04 26 -0.689788648 4.964383e-01 5.563899e-01 -975597.4
#> 95 1.348186e-04 58 -0.215013772 8.305108e-01 5.563899e-01 -975597.4
#> 96 6.193964e-06 26 -0.011225764 9.911290e-01 5.563899e-01 -975597.4
#> 97 1.692819e-04 26 -0.061935363 9.510880e-01 5.563899e-01 -975597.4
#> 98 1.906620e-04 58 0.589419916 5.578687e-01 5.563899e-01 -975597.4
#> 99 2.873651e-04 110341 1.161529837 2.454290e-01 2.237472e-02 -975634.2
#> 100 2.430453e-04 26 -2.882549152 7.812069e-03 2.237472e-02 -975634.2
#> 101 1.283393e-04 58 -1.252507850 2.154117e-01 2.237472e-02 -975634.2
#> 102 6.001419e-06 26 0.385481642 7.030165e-01 2.237472e-02 -975634.2
#> 103 1.640194e-04 26 -0.616537906 5.429008e-01 2.237472e-02 -975634.2
#> 104 1.814989e-04 58 2.333841247 2.309065e-02 2.237472e-02 -975634.2
#> 105 2.926137e-04 110341 0.869966379 3.843207e-01 7.853323e-01 -976002.3
#> 106 2.514431e-04 26 -0.591178885 5.595056e-01 7.853323e-01 -976002.3
#> 107 1.353104e-04 58 -0.200394824 8.418728e-01 7.853323e-01 -976002.3
#> 108 6.055918e-06 26 0.151570851 8.806954e-01 7.853323e-01 -976002.3
#> 109 1.655090e-04 26 -0.113345194 9.106276e-01 7.853323e-01 -976002.3
#> 110 1.913575e-04 58 0.273123372 7.857286e-01 7.853323e-01 -976002.3
#> 111 2.944118e-04 110341 0.120272480 9.042675e-01 6.003074e-01 -975685.2
#> 112 2.543155e-04 26 0.263213888 7.944605e-01 6.003074e-01 -975685.2
#> 113 1.376742e-04 58 0.140346077 8.888728e-01 6.003074e-01 -975685.2
#> 114 6.074343e-06 26 0.007810420 9.938279e-01 6.003074e-01 -975685.2
#> 115 1.660126e-04 26 0.078026630 9.384043e-01 6.003074e-01 -975685.2
#> 116 1.947004e-04 58 -0.524570356 6.018812e-01 6.003074e-01 -975685.2
#> 117 2.802551e-04 110341 0.397105449 6.912905e-01 8.567643e-01 -975434.6
#> 118 2.420377e-04 26 0.922864901 3.645631e-01 8.567643e-01 -975434.6
#> 119 1.309984e-04 58 -1.618206438 1.110441e-01 8.567643e-01 -975434.6
#> 120 5.782956e-06 26 -0.319059857 7.522304e-01 8.567643e-01 -975434.6
#> 121 1.580486e-04 26 0.398203825 6.937310e-01 8.567643e-01 -975434.6
#> 122 1.852594e-04 58 0.180567911 8.573362e-01 8.567643e-01 -975434.6
plot_top_nam_pc_umap(obj, facet_by = NULL,zscore = F )
saveRDS(obj, "obj_scLASER.rds")