BiocManager::install(c('BiocGenerics', 'DelayedArray', 'DelayedMatrixStats',
'limma', 'lme4', 'S4Vectors', 'SingleCellExperiment',
'SummarizedExperiment', 'batchelor', 'HDF5Array',
'terra', 'ggrastr'))
devtools::install_github('cole-trapnell-lab/monocle3')
install.packages('Seurat')
devtools::install_github("satijalab/seurat-wrappers")
library(monocle3)
library(Seurat)
files <- list.files('data')
files <- grep("2i|Dox", files, value = TRUE)
files <- grep("h5", files, value = TRUE)
files
input_files <- function(h5_path){
day <- sub("^.*_D([^_]*)_Dox.*$", "\\1", h5_path)
day <- sub("^.*_D([^_]*)_2i.*$", "\\1", day)
data <- Read10X_h5(paste0('data/', h5_path))
data <- CreateSeuratObject(data, min.cells = 0, min.features = 200)
data[["percent.mt"]] <- PercentageFeatureSet(data, pattern = "mt-")
lb <- quantile(data[["nFeature_RNA"]]$nFeature_RNA, probs = 0.02)
ub <- quantile(data[["nFeature_RNA"]]$nFeature_RNA, probs = 0.97)
data <- data[, data[["nFeature_RNA"]] > lb & data[["nFeature_RNA"]] < ub & data[["percent.mt"]] < 15]
data$day <- day
return(data)
}
data_list <- sapply(files, input_files)
data <- merge(data_list[1]$gene_bc_mat.h5, y = data_list[2:length(data_list)])
data <- merge(data_list[1]$gene_bc_mat.h5, y = data_list[2:length(data_list)])
data <- NormalizeData(object = data, verbose = FALSE)
data <- FindVariableFeatures(object = data, nfeatures = 2000, verbose = FALSE, selection.method = 'vst')
data <- ScaleData(data, verbose = FALSE)
data <- RunPCA(data, npcs = 30, verbose = FALSE)
data <- FindNeighbors(data, dims = 1:30)
data <- RunUMAP(data, reduction = "pca", dims = 1:30)
data@active.assay = 'RNA'
DimPlot(data, group.by = c("day"))
data$dayint <- data[[]]$day
data$dayint <- ifelse(data$dayint == "iPSC", 20, data$dayint)
data$dayint <- as.numeric(data$dayint)
FeaturePlot(data, "dayint")
FeaturePlot(data, "dayint")
cds <- SeuratWrappers::as.cell_data_set(data) #change to cds here
cds <- cluster_cells(cds)
plot_cells(cds, show_trajectory_graph = FALSE,
color_cells_by = "partition")
cds <- learn_graph(cds, use_partition = FALSE) #graph learned across all partitions
cds <- order_cells(cds)
plot_cells(cds, color_cells_by = "pseudotime", label_branch_points=FALSE, label_leaves=FALSE)
rowData(cds)$gene_name <- rownames(cds)
rowData(cds)$gene_short_name <- rowData(cds)$gene_name
plot_cells(cds,
genes=c('Sox2', 'Nanog', 'Col6a2'),
label_cell_groups=FALSE,
show_trajectory_graph=FALSE,
min_expr = 3)
cds_pt_res <- graph_test(cds, neighbor_graph="principal_graph", cores=8)
cds_pt_res <- readRDS("cds_pt_res.rds")
cds_pt_res
cds_pt_res <- na.omit(cds_pt_res)
cds_pt_res <- cds_pt_res[cds_pt_res$p_value < 0.05 & cds_pt_res$status == "OK", ]
cds_pt_res
cds_pt_res[order(-cds_pt_res$morans_test_statistic),]
plot_cells(cds, genes=c("Col1a2", "Uba52", "Serpine1", "Dppa5a"),
show_trajectory_graph=FALSE,
label_cell_groups=FALSE,
label_leaves=FALSE)
cds_subset <- choose_cells(cds)
cds_subset
cds_subset_pt_res <- graph_test(cds_subset, neighbor_graph="principal_graph", cores=8)
cds_subset_pt_res <- na.omit(cds_subset_pt_res)
cds_subset_pt_res <- cds_subset_pt_res[cds_subset_pt_res$p_value < 0.05 & cds_subset_pt_res$status == "OK", ]
cds_subset_pt_res
cds_subset_pt_res[order(-cds_subset_pt_res$morans_test_statistic),]
plot_cells(cds_subset, genes=c("Rpl7a", "Eef1a1", "Mgst1", "Lgals1"),
show_trajectory_graph=FALSE,
label_cell_groups=FALSE,
label_leaves=FALSE)
cds_subset_subset <- cds_subset[rowData(cds_subset)$gene_short_name %in% c("Rpl7a", "Eef1a1", "Mgst1", "Lgals1")]
plot_genes_in_pseudotime(cds_subset_subset,
color_cells_by="dayint",
min_expr=0.5)
Integration Example
features <- SelectIntegrationFeatures(object.list = data_list)
scale_pca <- function(x){
x <- ScaleData(x, features = features, verbose = FALSE)
x <- RunPCA(x, features = features, verbose = FALSE)
return(x)
}
data_list <- lapply(X = data_list, scale_pca)
anchors <- FindIntegrationAnchors(object.list = data_list, anchor.features = features, reduction = "rpca")
saveRDS(anchors, file = "integration_anchors.rds")
data <- IntegrateData(anchorset = anchors)
LS0tCnRpdGxlOiAiTW9ub2NsZTMgc2NyaXB0IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgoKYGBge3J9CkJpb2NNYW5hZ2VyOjppbnN0YWxsKGMoJ0Jpb2NHZW5lcmljcycsICdEZWxheWVkQXJyYXknLCAnRGVsYXllZE1hdHJpeFN0YXRzJywKICAgICAgICAgICAgICAgICAgICAgICAnbGltbWEnLCAnbG1lNCcsICdTNFZlY3RvcnMnLCAnU2luZ2xlQ2VsbEV4cGVyaW1lbnQnLAogICAgICAgICAgICAgICAgICAgICAgICdTdW1tYXJpemVkRXhwZXJpbWVudCcsICdiYXRjaGVsb3InLCAnSERGNUFycmF5JywKICAgICAgICAgICAgICAgICAgICAgICAndGVycmEnLCAnZ2dyYXN0cicpKQpgYGAKCmBgYHtyfQpkZXZ0b29sczo6aW5zdGFsbF9naXRodWIoJ2NvbGUtdHJhcG5lbGwtbGFiL21vbm9jbGUzJykKYGBgCgpgYGB7cn0KaW5zdGFsbC5wYWNrYWdlcygnU2V1cmF0JykKYGBgCgpgYGB7cn0KZGV2dG9vbHM6Omluc3RhbGxfZ2l0aHViKCJzYXRpamFsYWIvc2V1cmF0LXdyYXBwZXJzIikKYGBgCgoKCmBgYHtyfQpsaWJyYXJ5KG1vbm9jbGUzKQpsaWJyYXJ5KFNldXJhdCkKYGBgCgoKYGBge3J9CmZpbGVzIDwtIGxpc3QuZmlsZXMoJ2RhdGEnKQpmaWxlcyA8LSBncmVwKCIyaXxEb3giLCBmaWxlcywgdmFsdWUgPSBUUlVFKQpmaWxlcyA8LSBncmVwKCJoNSIsIGZpbGVzLCB2YWx1ZSA9IFRSVUUpCmZpbGVzCmBgYAoKCgpgYGB7cn0KaW5wdXRfZmlsZXMgPC0gZnVuY3Rpb24oaDVfcGF0aCl7CiAgZGF5IDwtIHN1YigiXi4qX0QoW15fXSopX0RveC4qJCIsICJcXDEiLCBoNV9wYXRoKQogIGRheSA8LSBzdWIoIl4uKl9EKFteX10qKV8yaS4qJCIsICJcXDEiLCBkYXkpCiAgCiAgZGF0YSA8LSBSZWFkMTBYX2g1KHBhc3RlMCgnZGF0YS8nLCBoNV9wYXRoKSkKICBkYXRhIDwtIENyZWF0ZVNldXJhdE9iamVjdChkYXRhLCBtaW4uY2VsbHMgPSAwLCBtaW4uZmVhdHVyZXMgPSAyMDApCiAgZGF0YVtbInBlcmNlbnQubXQiXV0gPC0gUGVyY2VudGFnZUZlYXR1cmVTZXQoZGF0YSwgcGF0dGVybiA9ICJtdC0iKQogIGxiIDwtIHF1YW50aWxlKGRhdGFbWyJuRmVhdHVyZV9STkEiXV0kbkZlYXR1cmVfUk5BLCBwcm9icyA9IDAuMDIpCiAgdWIgPC0gcXVhbnRpbGUoZGF0YVtbIm5GZWF0dXJlX1JOQSJdXSRuRmVhdHVyZV9STkEsIHByb2JzID0gMC45NykKICBkYXRhIDwtIGRhdGFbLCBkYXRhW1sibkZlYXR1cmVfUk5BIl1dID4gbGIgJiBkYXRhW1sibkZlYXR1cmVfUk5BIl1dIDwgdWIgJiBkYXRhW1sicGVyY2VudC5tdCJdXSA8IDE1XQogIAogIGRhdGEkZGF5IDwtIGRheQogIHJldHVybihkYXRhKQp9CmBgYAoKCmBgYHtyfQpkYXRhX2xpc3QgPC0gc2FwcGx5KGZpbGVzLCBpbnB1dF9maWxlcykKZGF0YSA8LSBtZXJnZShkYXRhX2xpc3RbMV0kZ2VuZV9iY19tYXQuaDUsIHkgPSBkYXRhX2xpc3RbMjpsZW5ndGgoZGF0YV9saXN0KV0pCmBgYAoKYGBge3J9CmRhdGEgPC0gbWVyZ2UoZGF0YV9saXN0WzFdJGdlbmVfYmNfbWF0Lmg1LCB5ID0gZGF0YV9saXN0WzI6bGVuZ3RoKGRhdGFfbGlzdCldKQpgYGAKCmBgYHtyfQpkYXRhIDwtIE5vcm1hbGl6ZURhdGEob2JqZWN0ID0gZGF0YSwgdmVyYm9zZSA9IEZBTFNFKQpkYXRhIDwtIEZpbmRWYXJpYWJsZUZlYXR1cmVzKG9iamVjdCA9IGRhdGEsIG5mZWF0dXJlcyA9IDIwMDAsIHZlcmJvc2UgPSBGQUxTRSwgc2VsZWN0aW9uLm1ldGhvZCA9ICd2c3QnKQpkYXRhIDwtIFNjYWxlRGF0YShkYXRhLCB2ZXJib3NlID0gRkFMU0UpCmRhdGEgPC0gUnVuUENBKGRhdGEsIG5wY3MgPSAzMCwgdmVyYm9zZSA9IEZBTFNFKQpkYXRhIDwtIEZpbmROZWlnaGJvcnMoZGF0YSwgZGltcyA9IDE6MzApCgpkYXRhIDwtIFJ1blVNQVAoZGF0YSwgcmVkdWN0aW9uID0gInBjYSIsIGRpbXMgPSAxOjMwKQoKCmRhdGFAYWN0aXZlLmFzc2F5ID0gJ1JOQScKYGBgCgoKCmBgYHtyfQpEaW1QbG90KGRhdGEsIGdyb3VwLmJ5ID0gYygiZGF5IikpCmBgYAoKCmBgYHtyfQpkYXRhJGRheWludCA8LSBkYXRhW1tdXSRkYXkKZGF0YSRkYXlpbnQgPC0gaWZlbHNlKGRhdGEkZGF5aW50ID09ICJpUFNDIiwgMjAsIGRhdGEkZGF5aW50KQpkYXRhJGRheWludCA8LSBhcy5udW1lcmljKGRhdGEkZGF5aW50KQpGZWF0dXJlUGxvdChkYXRhLCAiZGF5aW50IikKYGBgCgoKCmBgYHtyfQpGZWF0dXJlUGxvdChkYXRhLCAiZGF5aW50IikKYGBgCgoKYGBge3J9CmNkcyA8LSBTZXVyYXRXcmFwcGVyczo6YXMuY2VsbF9kYXRhX3NldChkYXRhKSAjY2hhbmdlIHRvIGNkcyBoZXJlCmBgYAoKCmBgYHtyfQpjZHMgPC0gY2x1c3Rlcl9jZWxscyhjZHMpCmBgYAoKCmBgYHtyfQpwbG90X2NlbGxzKGNkcywgc2hvd190cmFqZWN0b3J5X2dyYXBoID0gRkFMU0UsCiAgICAgICAgICAgY29sb3JfY2VsbHNfYnkgPSAicGFydGl0aW9uIikKYGBgCgoKCmBgYHtyfQpjZHMgPC0gbGVhcm5fZ3JhcGgoY2RzLCB1c2VfcGFydGl0aW9uID0gRkFMU0UpICNncmFwaCBsZWFybmVkIGFjcm9zcyBhbGwgcGFydGl0aW9ucwpgYGAKCgpgYGB7cn0KY2RzIDwtIG9yZGVyX2NlbGxzKGNkcykKYGBgCgoKCmBgYHtyfQpwbG90X2NlbGxzKGNkcywgY29sb3JfY2VsbHNfYnkgPSAicHNldWRvdGltZSIsIGxhYmVsX2JyYW5jaF9wb2ludHM9RkFMU0UsIGxhYmVsX2xlYXZlcz1GQUxTRSkKYGBgCgoKYGBge3J9CnJvd0RhdGEoY2RzKSRnZW5lX25hbWUgPC0gcm93bmFtZXMoY2RzKQpyb3dEYXRhKGNkcykkZ2VuZV9zaG9ydF9uYW1lIDwtIHJvd0RhdGEoY2RzKSRnZW5lX25hbWUKYGBgCgoKCmBgYHtyfQpwbG90X2NlbGxzKGNkcywKICAgICAgICAgICBnZW5lcz1jKCdTb3gyJywgJ05hbm9nJywgJ0NvbDZhMicpLAogICAgICAgICAgIGxhYmVsX2NlbGxfZ3JvdXBzPUZBTFNFLAogICAgICAgICAgIHNob3dfdHJhamVjdG9yeV9ncmFwaD1GQUxTRSwgCiAgICAgICAgICAgbWluX2V4cHIgPSAzKQpgYGAKCgpgYGB7cn0KY2RzX3B0X3JlcyA8LSBncmFwaF90ZXN0KGNkcywgbmVpZ2hib3JfZ3JhcGg9InByaW5jaXBhbF9ncmFwaCIsIGNvcmVzPTgpCmBgYAoKCmBgYHtyfQpjZHNfcHRfcmVzIDwtIHJlYWRSRFMoImNkc19wdF9yZXMucmRzIikKYGBgCgpgYGB7cn0KY2RzX3B0X3JlcwpgYGAKCmBgYHtyfQpjZHNfcHRfcmVzIDwtIG5hLm9taXQoY2RzX3B0X3JlcykKY2RzX3B0X3JlcyA8LSBjZHNfcHRfcmVzW2Nkc19wdF9yZXMkcF92YWx1ZSA8IDAuMDUgJiBjZHNfcHRfcmVzJHN0YXR1cyA9PSAiT0siLCBdCmNkc19wdF9yZXMKYGBgCgoKYGBge3J9CmNkc19wdF9yZXNbb3JkZXIoLWNkc19wdF9yZXMkbW9yYW5zX3Rlc3Rfc3RhdGlzdGljKSxdIApgYGAKCgpgYGB7cn0KcGxvdF9jZWxscyhjZHMsIGdlbmVzPWMoIkNvbDFhMiIsICJVYmE1MiIsICJTZXJwaW5lMSIsICJEcHBhNWEiKSwKICAgICAgICAgICBzaG93X3RyYWplY3RvcnlfZ3JhcGg9RkFMU0UsCiAgICAgICAgICAgbGFiZWxfY2VsbF9ncm91cHM9RkFMU0UsCiAgICAgICAgICAgbGFiZWxfbGVhdmVzPUZBTFNFKQpgYGAKCgoKYGBge3J9CmNkc19zdWJzZXQgPC0gY2hvb3NlX2NlbGxzKGNkcykKYGBgCgoKCmBgYHtyfQpjZHNfc3Vic2V0CmBgYAoKCmBgYHtyfQpjZHNfc3Vic2V0X3B0X3JlcyA8LSBncmFwaF90ZXN0KGNkc19zdWJzZXQsIG5laWdoYm9yX2dyYXBoPSJwcmluY2lwYWxfZ3JhcGgiLCBjb3Jlcz04KQpjZHNfc3Vic2V0X3B0X3JlcyA8LSBuYS5vbWl0KGNkc19zdWJzZXRfcHRfcmVzKQpjZHNfc3Vic2V0X3B0X3JlcyA8LSBjZHNfc3Vic2V0X3B0X3Jlc1tjZHNfc3Vic2V0X3B0X3JlcyRwX3ZhbHVlIDwgMC4wNSAmIGNkc19zdWJzZXRfcHRfcmVzJHN0YXR1cyA9PSAiT0siLCBdCmNkc19zdWJzZXRfcHRfcmVzCmBgYAoKCgoKYGBge3J9CmNkc19zdWJzZXRfcHRfcmVzW29yZGVyKC1jZHNfc3Vic2V0X3B0X3JlcyRtb3JhbnNfdGVzdF9zdGF0aXN0aWMpLF0gCmBgYAoKCmBgYHtyfQpwbG90X2NlbGxzKGNkc19zdWJzZXQsIGdlbmVzPWMoIlJwbDdhIiwgIkVlZjFhMSIsICJNZ3N0MSIsICJMZ2FsczEiKSwKICAgICAgICAgICBzaG93X3RyYWplY3RvcnlfZ3JhcGg9RkFMU0UsCiAgICAgICAgICAgbGFiZWxfY2VsbF9ncm91cHM9RkFMU0UsCiAgICAgICAgICAgbGFiZWxfbGVhdmVzPUZBTFNFKQpgYGAKCgoKYGBge3J9CmNkc19zdWJzZXRfc3Vic2V0IDwtIGNkc19zdWJzZXRbcm93RGF0YShjZHNfc3Vic2V0KSRnZW5lX3Nob3J0X25hbWUgJWluJSBjKCJScGw3YSIsICJFZWYxYTEiLCAiTWdzdDEiLCAiTGdhbHMxIildCmBgYAoKYGBge3J9CnBsb3RfZ2VuZXNfaW5fcHNldWRvdGltZShjZHNfc3Vic2V0X3N1YnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yX2NlbGxzX2J5PSJkYXlpbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgbWluX2V4cHI9MC41KQpgYGAKCgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgSW50ZWdyYXRpb24gRXhhbXBsZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpgYGB7cn0KZmVhdHVyZXMgPC0gU2VsZWN0SW50ZWdyYXRpb25GZWF0dXJlcyhvYmplY3QubGlzdCA9IGRhdGFfbGlzdCkKYGBgCgpgYGB7cn0KCnNjYWxlX3BjYSA8LSBmdW5jdGlvbih4KXsKICB4IDwtIFNjYWxlRGF0YSh4LCBmZWF0dXJlcyA9IGZlYXR1cmVzLCB2ZXJib3NlID0gRkFMU0UpCiAgeCA8LSBSdW5QQ0EoeCwgZmVhdHVyZXMgPSBmZWF0dXJlcywgdmVyYm9zZSA9IEZBTFNFKQogIHJldHVybih4KQp9CgoKZGF0YV9saXN0IDwtIGxhcHBseShYID0gZGF0YV9saXN0LCBzY2FsZV9wY2EpCmBgYAoKCmBgYHtyfQphbmNob3JzIDwtIEZpbmRJbnRlZ3JhdGlvbkFuY2hvcnMob2JqZWN0Lmxpc3QgPSBkYXRhX2xpc3QsIGFuY2hvci5mZWF0dXJlcyA9IGZlYXR1cmVzLCByZWR1Y3Rpb24gPSAicnBjYSIpCnNhdmVSRFMoYW5jaG9ycywgZmlsZSA9ICJpbnRlZ3JhdGlvbl9hbmNob3JzLnJkcyIpCgoKZGF0YSA8LSBJbnRlZ3JhdGVEYXRhKGFuY2hvcnNldCA9IGFuY2hvcnMpCgpgYGAKCgo=