## ---- include = FALSE--------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ---- echo=FALSE-------------------------------------------------------------- htmltools::img(src = knitr::image_uri(file.path("../man/figures", "logo.png")), alt = 'logo', style = 'position:absolute; top:50px; right:5px; padding:10px;height:200px') ## ----setup, message = FALSE--------------------------------------------------- library(tricycle) ## ----example, message=FALSE--------------------------------------------------- data(neurosphere_example) ## ----project, message = TRUE-------------------------------------------------- neurosphere_example <- project_cycle_space(neurosphere_example) neurosphere_example ## ----plot_projection, message = FALSE----------------------------------------- library(ggplot2) library(scattermore) library(scater) scater::plotReducedDim(neurosphere_example, dimred = "tricycleEmbedding") + labs(x = "Projected PC1", y = "Projected PC2") + ggtitle(sprintf("Projected cell cycle space (n=%d)", ncol(neurosphere_example))) + theme_bw(base_size = 14) ## ----tricyclePosition, message = TRUE----------------------------------------- neurosphere_example <- estimate_cycle_position(neurosphere_example) names(colData(neurosphere_example)) ## ----loess, message = TRUE---------------------------------------------------- top2a.idx <- which(rowData(neurosphere_example)$Gene == 'Top2a') fit.l <- fit_periodic_loess(neurosphere_example$tricyclePosition, assay(neurosphere_example, 'logcounts')[top2a.idx,], plot = TRUE, x_lab = "Cell cycle position \u03b8", y_lab = "log2(Top2a)", fig.title = paste0("Expression of Top2a along \u03b8 (n=", ncol(neurosphere_example), ")")) names(fit.l) fit.l$fig + theme_bw(base_size = 14) ## ----stage, message = TRUE---------------------------------------------------- neurosphere_example <- estimate_Schwabe_stage(neurosphere_example, gname.type = 'ENSEMBL', species = 'mouse') scater::plotReducedDim(neurosphere_example, dimred = "tricycleEmbedding", colour_by = "CCStage") + labs(x = "Projected PC1", y = "Projected PC2", title = paste0("Projected cell cycle space (n=", ncol(neurosphere_example), ")")) + theme_bw(base_size = 14) ## ----density, message = TRUE-------------------------------------------------- plot_ccposition_den(neurosphere_example$tricyclePosition, neurosphere_example$sample, 'sample', bw = 10, fig.title = "Kernel density of \u03b8") + theme_bw(base_size = 14) plot_ccposition_den(neurosphere_example$tricyclePosition, neurosphere_example$sample, 'sample', type = "circular", bw = 10, fig.title = "Kernel density of \u03b8") + theme_bw(base_size = 14) ## ----cyclic, message = TRUE, fig.width = 10, fig.height = 7------------------- library(cowplot) p <- plot_emb_circle_scale(neurosphere_example, dimred = 1, point.size = 3.5, point.alpha = 0.9) + theme_bw(base_size = 14) legend <- circle_scale_legend(text.size = 5, alpha = 0.9) plot_grid(p, legend, ncol = 2, rel_widths = c(1, 0.4)) ## ----newRef, message = TRUE--------------------------------------------------- set.seed(100) gocc_sce.o <- run_pca_cc_genes(neurosphere_example, exprs_values = "logcounts", species = "mouse") new.ref <- attr(reducedDim(gocc_sce.o, 'PCA'), 'rotation')[, seq_len(2)] head(new.ref) new_sce <- estimate_cycle_position(neurosphere_example, ref.m = new.ref, dimred = 'tricycleEmbedding2') ## ----cor, message = TRUE------------------------------------------------------ cor(neurosphere_example$tricyclePosition, new_sce$tricyclePosition) CircStats::circ.cor(neurosphere_example$tricyclePosition, new_sce$tricyclePosition) qplot(x = neurosphere_example$tricyclePosition,y = new_sce$tricyclePosition) + labs(x = "Original \u03b8", y = "New \u03b8", title = paste0("Comparison of two \u03b8 (n=", ncol(neurosphere_example), ")")) + theme_bw(base_size = 14) ## ----batch, eval = FALSE, echo = TRUE----------------------------------------- # # suppose we have a count matrix containing all cells across batches; we first subset the matrix to GO cell cycle genes # library(org.Mm.eg.db) # library(AnnotationDbi) # cc.genes <- AnnotationDbi::select(org.Mm.eg.db, keytype = "GOALL", # keys = "GO:0007049", # columns = "ENSEMBL")[, "ENSEMBL"] # count_cc.m <- count.m[ensembl.ids %in% cc.genes, ] # ensembl.ids is the ensembl.ids for each row of count.m # # # we then construct a Seurat object using the subset matrix and set the batch variable # library(Seurat) # seurat.o <- CreateSeuratObject(counts = count_cc.m) # seurat.o[["batch"]] <- batch.v # # # make a Seurat list and normalize for each batch separately # # variable features definition is required for FindIntegrationAnchors function # seurat.list <- lapply(SplitObject(seurat.o, split.by = "batch"), # function(x) FindVariableFeatures(NormalizeData(x))) # # # find anchors and merge data # seurat.anchors <- FindIntegrationAnchors(object.list = seurat.list) # seurat.integrated <- IntegrateData(anchorset = seurat.anchors) # corrected.m <- seurat.integrated@assays$integrated@data # # # run PCA on the batch effects corrected matrix and get the rotaions scores for the top 2 PCs # pca.m <- scater::calculatePCA(corrected.m, ntop = 500) # new.ref <- attr(pca.m, 'rotation')[, seq_len(2)] # ## ----sessionInfo, echo=FALSE-------------------------------------------------- sessionInfo() ## ----ref, message = FALSE----------------------------------------------------- data(neuroRef) head(neuroRef)