# Load library
library(Seurat)
library(princurve)
library(monocle)
library(parallel)
library(seriation)
library(dplyr)
library(reshape2)
library(ggplot2)
library(cowplot)
library(ggExtra)
library(patchwork)
library(RColorBrewer)
library(wesanderson)
#Set ggplot theme as classic
theme_set(theme_classic())
# Load the full annotated dataset
<- readRDS("./Clustered.cells.RDS") Allcells.data
<- c("#969696", "#68b041", "#e3c148", "#b7d174", "#83c3b8", "#009fda", "#3E69ac", "#e46b6b",
colors "#ec756d", "#c773a7", "#7293c8", "#b79f0b", "#3ca73f","#31b6bd", "#ebcb2e", "#9ec22f",
"#a9961b", "#cc3a1b", "#cc8778" , "#d14c8d", "#4cabdc", "#5ab793", "#e7823a","#e6bb9b",
"#046c9a", "#4784a2" , "#4990c9")
DimPlot(Allcells.data,
reduction.use = "spring",
dim.1 = 1,
dim.2 = 2,
do.label=T,
label.size = 2,
no.legend = T,
no.axes = T,
cols.use = colors)
# Calculate pallial BP scores
<- c("Eomes", "Neurog2", "Neurog1", "Prmt8", "Nrp1")
Pal.BP.genes <- list(Pal.BP.genes)
genes.list <- "Pal.BP_signature"
enrich.name <- AddModuleScore(Allcells.data, genes.list = genes.list, genes.pool = NULL, n.bin = 5,
Allcells.data seed.use = 1, ctrl.size = length(genes.list), use.k = FALSE, enrich.name = enrich.name ,
random.seed = 1)
# Calculate subpallial BP scores
<- c("Dlx1", "Dlx2", "Dlx5","Ascl1", "Gsx2")
SP.BP.genes <- list(SP.BP.genes)
genes.list <- "SP.BP_signature"
enrich.name <- AddModuleScore(Allcells.data, genes.list = genes.list, genes.pool = NULL, n.bin = 5,
Allcells.data seed.use = 1, ctrl.size = length(genes.list), use.k = FALSE, enrich.name = enrich.name ,
random.seed = 1)
set.seed(100)
# Run Kmeans clustering
<- kmeans(cbind(Allcells.data@meta.data$SP_signature1,
cl @meta.data$Pal_signature1,
Allcells.data@meta.data$SP.BP_signature1,
Allcells.data@meta.data$Pal.BP_signature1), 4)
Allcells.data
@meta.data$kmeanClust <- paste0("Clust.",cl$cluster) Allcells.data
<- wes_palette("GrandBudapest1", 4, type = "discrete")
col.pal
<- ggplot(Allcells.data@meta.data, aes(x=SP_signature1, y=Pal_signature1, colour = kmeanClust)) +
p1 scale_color_manual(values=col.pal) +
geom_point() +
theme(legend.position="none")
ggMarginal(p1, type = "histogram", fill="lightgrey")
DimPlot(Allcells.data,
group.by = "kmeanClust",
reduction.use = "spring",
cols.use = col.pal,
dim.1 = 1,
dim.2 = 2,
do.label=T,
no.axes = T,
label.size = 4,
no.legend = F)
# Extract subpallial cells
<- aggregate(SP_signature1 ~ kmeanClust, Allcells.data@meta.data, mean)
meankclust.sp.score <- meankclust.sp.score %>% filter(SP_signature1 == max(SP_signature1)) %>% pull(kmeanClust)
SPclust
<- Allcells.data@meta.data %>%
SPcells filter( kmeanClust == SPclust ) %>%
pull(Barcodes)
<- as.data.frame(Allcells.data@dr$spring@cell.embeddings[SPcells, 1:2])
SubPalldata $Lineage <- "SubPallial" SubPalldata
# Extract Pallial cells
<- aggregate(Pal_signature1 ~ kmeanClust, Allcells.data@meta.data, mean)
meankclust.p.score <- meankclust.p.score %>% filter(Pal_signature1 == max(Pal_signature1)) %>% pull(kmeanClust)
Pclust
<- aggregate(Pal.BP_signature1 ~ kmeanClust, Allcells.data@meta.data, mean)
meankclust.pbp.score <- meankclust.pbp.score%>% filter(Pal.BP_signature1 == max(Pal.BP_signature1)) %>% pull(kmeanClust)
Pbpclust
<- Allcells.data@meta.data %>%
Palcells filter(kmeanClust %in% c(Pclust,Pbpclust)) %>%
pull(Barcodes)
<- as.data.frame(Allcells.data@dr$spring@cell.embeddings[Palcells,1:2])
Pal.data $Lineage <- "Pallial" Pal.data
# Extract AP cells
<- Allcells.data@meta.data %>%
APcells filter(Cluster.ident %in% grep("*AP", unique(Allcells.data@meta.data$Cluster.ident), value = T)) %>%
filter(!Barcodes %in% c(rownames(Pal.data), rownames(SubPalldata))) %>%
select(Barcodes,Cluster.ident)
<- as.data.frame(Allcells.data@dr$spring@cell.embeddings[APcells$Barcodes,1:2])
AP.data
$Lineage <- sapply(as.character(APcells$Cluster.ident),
AP.datafunction(x) if(x %in% c("AP.Dorsal.Pallium", "AP.lateral.Pallium.1", "AP.lateral.Pallium.2", "AP.Ventral.Pallium")){x= "Pallial"}
else{x= "SubPallial"})
<- rbind(AP.data,
Pseudotime.data
Pal.data,
SubPalldata)
<- SubsetData(Allcells.data, cells.use = rownames(Pseudotime.data), subset.raw = T, do.clean = F)
Allcells.data
<- Pseudotime.data[rownames(Allcells.data@meta.data),]
Pseudotime.data $Barcode <- rownames(Pseudotime.data)
Pseudotime.data
@meta.data$Lineage <- Pseudotime.data$Lineage Allcells.data
DimPlot(Allcells.data,
reduction.use = "spring",
group.by = "Lineage",
dim.1 = 1,
dim.2 = 2,
do.label=T,
label.size = 2,
no.legend = T,
no.axes = T)
#Fit a principal curve to the global trajectory
<- Pseudotime.data %>%
Pal.data filter(Lineage == "Pallial")
<- principal_curve(as.matrix(Pal.data[,1:2]),
fit smoother='lowess',
trace=TRUE,
f = .7,
stretch=0)
## Starting curve---distance^2: 77550139277
## Iteration 1---distance^2: 14983435
## Iteration 2---distance^2: 14563895
## Iteration 3---distance^2: 14248808
## Iteration 4---distance^2: 14111673
## Iteration 5---distance^2: 14101215
<- as.data.frame(fit$s[order(fit$lambda),])
pc.line
$PseudotimeScore <- fit$lambda/max(fit$lambda)
Pal.data
# Direction of the maturation score using Hmga2 expression (revert if positive correlation)
if (cor(Pal.data$PseudotimeScore, Allcells.data@data['Hmga2', Pal.data$Barcode]) > 0) {
$PseudotimeScore <- -(Pal.data$PseudotimeScore - max(Pal.data$PseudotimeScore))
Pal.data }
#Fit a principal curve to the global trajectory
<- Pseudotime.data %>%
SubPal.data filter(Lineage == "SubPallial")
<- principal_curve(as.matrix(SubPal.data[,1:2]),
fit smoother='lowess',
trace=TRUE,
f = .7,
stretch=0)
## Starting curve---distance^2: 24540041253
## Iteration 1---distance^2: 9085033
## Iteration 2---distance^2: 8834074
## Iteration 3---distance^2: 8940886
## Iteration 4---distance^2: 9103039
## Iteration 5---distance^2: 9215219
## Iteration 6---distance^2: 9230882
## Iteration 7---distance^2: 9204650
## Iteration 8---distance^2: 9183524
## Iteration 9---distance^2: 9164620
## Iteration 10---distance^2: 9159798
<- as.data.frame(fit$s[order(fit$lambda),])
pc.line
$PseudotimeScore <- fit$lambda/max(fit$lambda)
SubPal.data
# Direction of the maturation score using Hmga2 expression (revert if positive correlation)
if (cor(SubPal.data$PseudotimeScore, Allcells.data@data['Hmga2', SubPal.data$Barcode]) > 0) {
$PseudotimeScore <- -(SubPal.data$PseudotimeScore - max(SubPal.data$PseudotimeScore))
SubPal.data }
<- rbind(Pal.data,
Pseudotime.data
SubPal.data)
rownames(Pseudotime.data) <- Pseudotime.data$Barcode
<- Pseudotime.data[rownames(Allcells.data@meta.data),]
Pseudotime.data
@meta.data$PseudotimeScore <- Pseudotime.data$PseudotimeScore Allcells.data
FeaturePlot(object = Allcells.data,
features.plot = c("PseudotimeScore"),
cols.use = rev(colorRampPalette(brewer.pal(n =11, name = "Spectral"))(100)),
no.axes = T,
reduction.use = "spring",
no.legend = T)
# Keep only genes detected in more than 300 cells
<- Matrix::rowSums(Allcells.data@raw.data > 0)
num.cells <- names(x = num.cells[which(x = num.cells >= 300)])
genes.use @raw.data <- Allcells.data@raw.data[genes.use, ]
Allcells.data
# Normalization and variable genes selection
<- NormalizeData(object = Allcells.data,
Allcells.data normalization.method = "LogNormalize",
scale.factor = round(median(Allcells.data@meta.data$nUMI)),
display.progress = F)
<- FindVariableGenes(object = Allcells.data,
Allcells.data mean.function = ExpMean,
dispersion.function = LogVMR,
x.low.cutoff = 0.03,
x.high.cutoff = 4,
y.cutoff = 0.9, do.plot = F,
display.progress = F)
rm(list = ls()[!ls() %in% "Allcells.data"])
# Transfer metadata
<- data.frame(barcode = rownames(Allcells.data@meta.data),
meta.data Cluster = Allcells.data@meta.data$Cluster.ident,
Lineage = Allcells.data@meta.data$Lineage,
Pseudotime.Score = Allcells.data@meta.data$PseudotimeScore,
row.names = rownames(Allcells.data@meta.data))
<- new('AnnotatedDataFrame', data = meta.data)
Annot.data
# Transfer counts data
= data.frame(gene_short_name = rownames(Allcells.data@raw.data),
count.data row.names = rownames(Allcells.data@raw.data))
<- new('AnnotatedDataFrame', data = count.data)
feature.data
# Create the CellDataSet object
<- newCellDataSet(as.matrix(Allcells.data@raw.data),
gbm_cds phenoData = Annot.data,
featureData = feature.data,
lowerDetectionLimit = 1,
expressionFamily = negbinomial())
<- estimateSizeFactors(gbm_cds)
gbm_cds <- estimateDispersions(gbm_cds)
gbm_cds <- detectGenes(gbm_cds, min_expr = 0.1) gbm_cds
rm(list = ls()[!ls() %in% c("Allcells.data", "gbm_cds")])
# Exclude cell cycle associated genes
<- as.character(read.table("./Progenitors/CellCycleGenes.csv", sep = "\t", header = F)[,1])
CCgenes <- Allcells.data@var.genes[!Allcells.data@var.genes %in% CCgenes] Input.genes
# Split pallial and subpallial cells for gene expression fitting
#Pallial cells
<- Allcells.data@meta.data %>%
Pallialcells filter(Lineage == "Pallial") %>%
pull(Barcodes)
# Sub-pallial cells
<- Allcells.data@meta.data %>%
SubPallialcells filter(Lineage == "SubPallial") %>%
pull(Barcodes)
<- differentialGeneTest(gbm_cds[Input.genes, Pallialcells],
Pseudotime.diff.Pall fullModelFormulaStr = "~sm.ns(Pseudotime.Score, df = 3)",
reducedModelFormulaStr = "~1",
cores = detectCores() - 2)
#Filter based on FDR
<- Pseudotime.diff.Pall %>% filter(qval < 1e-3) Pseudotime.diff.Pall.filtered
<- differentialGeneTest(gbm_cds[Input.genes, SubPallialcells],
Pseudotime.diff.SubPallial fullModelFormulaStr = "~sm.ns(Pseudotime.Score, df = 3)",
reducedModelFormulaStr = "~1",
cores = detectCores() - 2)
#Filter based on FDR
<- Pseudotime.diff.SubPallial %>% filter(qval < 1e-3) Pseudotime.diff.SubPallial.filtered
<- intersect(Pseudotime.diff.Pall.filtered$gene_short_name, Pseudotime.diff.SubPallial.filtered$gene_short_name) commonGenes
# Create a new pseudo-DV vector of 200 points
<- 200
nPoints
= list()
new_data for (Lineage in unique(pData(gbm_cds)$Lineage)){
length(new_data) + 1]] = data.frame(Pseudotime.Score = seq(min(pData(gbm_cds)$Pseudotime.Score), max(pData(gbm_cds)$Pseudotime.Score), length.out = nPoints), Lineage=Lineage)
new_data[[
}
= do.call(rbind, new_data)
new_data
# Smooth gene expression
<- genSmoothCurves(gbm_cds[as.character(commonGenes),],
curve_matrix trend_formula = "~sm.ns(Pseudotime.Score, df = 3)*Lineage",
relative_expr = TRUE,
new_data = new_data,
cores= detectCores() - 2)
# Extract genes with person's cor > 0.6 between the 2 trajectories
<- scale(t(curve_matrix[,c(201:400)])) #Pallial points
Pallial.smoothed <- scale(t(curve_matrix[,c(1:200)])) #SubPallial points
SubPallial.smoothed
<- cor(Pallial.smoothed, SubPallial.smoothed, method = "pearson")
mat
<- diag(mat)
Gene.Cor hist(Gene.Cor,breaks = 100)
abline(v=0.6,col=c("blue"))
<- names(Gene.Cor[Gene.Cor > 0.6]) PanNeuro.genes
# We further filter genes detected in less than 300 or 100 cells along Pallial or Subpallial lineages, respectively
<- Matrix::rowSums(Allcells.data@raw.data[,Pallialcells] > 0)
num.cells <- names(x = num.cells[which(x = num.cells >= 300)])
PallGenes
<- Matrix::rowSums(Allcells.data@raw.data[,SubPallialcells] > 0)
num.cells <- names(x = num.cells[which(x = num.cells >= 100)])
SubPallGenes
<- PanNeuro.genes[PanNeuro.genes %in% intersect(PallGenes, SubPallGenes)] PanNeuro.genes
# Order rows using seriation
<- as.dist((1-cor(scale(t(curve_matrix[PanNeuro.genes,c(1:200)])), method = "pearson")))
dst <- seriate(dst, method ="OLO_complete")
row.ser <- PanNeuro.genes[get_order(row.ser)]
gene.order
<- list(lineage = c(Pallial="#026c9a",SubPallial="#cc391b"))
anno.colors
::pheatmap(curve_matrix[rev(gene.order),
pheatmapc(400:201, #Pallial points
1:200)], #SubPallial points
scale = "row",
cluster_rows = F,
cluster_cols = F,
annotation_col = data.frame(lineage = rep(c("SubPallial","Pallial"), each=200)),
annotation_colors = anno.colors,
show_colnames = F,
show_rownames = T,
fontsize_row = 2,
color = viridis::viridis(9),
breaks = seq(-2.5,2.5, length.out = 9),
main = "")
write.table(rev(gene.order), "./Trajectories/PanNeuroGenes.csv", sep = ";", quote = F)
source("./functions/TrajectoriesPlotFunctions.R")
Plot.Genes.trend(Allcells.data,
genes = c("Sox2", "Hmga2",
"Hes6","Mfng",
"St18", "Myt1",
"Neurog2","Slc17a6",
"Dlx1", "Gad2"),
color.by = "lineage",
Use.scale.data = F)
<- FeaturePlot(object = Allcells.data,
plot features.plot = c("Sox2", "Hmga2",
"Hes6", "Mfng",
"St18","Myt1"),
cols.use = c("grey90", brewer.pal(9,"YlGnBu")),
reduction.use = "spring",
no.legend = T,
pt.size = 1,
overlay = F,
dark.theme = F,
do.return =T,
no.axes = T)
for (i in 1:length(plot)){
$data <- plot[[i]]$data[order(plot[[i]]$data$gene),]
plot[[i]] }
::plot_grid(plotlist = plot[1:6], ncol =2) cowplot
<- differentialGeneTest(gbm_cds[Input.genes,],
Pseudotime.lineages.diff fullModelFormulaStr = "~sm.ns(Pseudotime.Score, df = 3)*Lineage",
reducedModelFormulaStr = "~sm.ns(Pseudotime.Score, df = 3)",
cores = detectCores() - 2)
# Filter genes based on FDR
<- Pseudotime.lineages.diff %>% filter(qval < 1e-3) Pseudotime.lineages.diff.filtered
# Create a new pseudo-DV vector of 200 points
<- 200
nPoints
= list()
new_data for (Lineage in unique(pData(gbm_cds)$Lineage)){
length(new_data) + 1]] = data.frame(Pseudotime.Score = seq(min(pData(gbm_cds)$Pseudotime.Score), max(pData(gbm_cds)$Pseudotime.Score), length.out = nPoints), Lineage=Lineage)
new_data[[
}
= do.call(rbind, new_data)
new_data
# Smooth gene expression
<- genSmoothCurves(gbm_cds[as.character(Pseudotime.lineages.diff.filtered$gene_short_name),],
Diff.curve_matrix trend_formula = "~sm.ns(Pseudotime.Score, df = 3)*Lineage",
relative_expr = TRUE,
new_data = new_data,
cores= detectCores() - 2)
<- Diff.curve_matrix[, 1:nPoints] #SubPallial points
SubPallial_curve_matrix <- Diff.curve_matrix[, (nPoints + 1):(2 * nPoints)] #Pallial points
Pallial_curve_matrix
<- SubPallial_curve_matrix - Pallial_curve_matrix # Direction of the comparison : postive ABCs <=> Upregulated in SubPallial lineage
ABCs_res <- log2(SubPallial_curve_matrix/ (Pallial_curve_matrix + 0.1)) # Average logFC between the 2 curves
ILR_res
<- apply(ABCs_res, 1, function(x, nPoints) {
ABCs_res <- (x[1:(nPoints - 1)] + x[2:(nPoints)])/2
avg_delta_x <- (100/(nPoints - 1))
step <- round(sum(avg_delta_x * step), 3)
res return(res)},
nPoints = nPoints) # Compute the area below the curve
<- cbind(ABCs_res, ILR_res[,ncol(ILR_res)])
ABCs_res colnames(ABCs_res)<- c("ABCs", "Endpoint_ILR")
# Import ABC values into the DE test results table
<- cbind(Pseudotime.lineages.diff.filtered[,1:4],
Pseudotime.lineages.diff.filtered
ABCs_res,5:6]) Pseudotime.lineages.diff.filtered[,
# Extract Pallial neurons trajectory genes
<- as.data.frame(Pseudotime.lineages.diff.filtered[Pseudotime.lineages.diff.filtered$ABCs < 0,])
Pallial.res <- row.names(Pallial.res)
Pallial.genes
# We further filter genes detected in less than 300 and more than 250 cells among Pallial and Subpallial lineages, respectively
<- Matrix::rowSums(Allcells.data@raw.data[Pallial.genes, Pallialcells] > 0)
num.cells <- names(x = num.cells[which(x = num.cells >= 300)])
Pallial.genes
<- Matrix::rowSums(Allcells.data@raw.data[Pallial.genes, SubPallialcells] > 0)
num.cells <- names(x = num.cells[which(x = num.cells >= 250)])
filtered
<- Pallial.genes[!Pallial.genes %in% filtered]
Pallial.genes
<- Pallial_curve_matrix[Pallial.genes, ] Pallial_curve_matrix
# Order rows using seriation
<- as.dist((1-cor(scale(t(Pallial_curve_matrix)), method = "pearson")))
dst <- seriate(dst, method ="GW")
row.ser <- rownames(Pallial_curve_matrix[get_order(row.ser),])
gene.order
<- list(lineage = c(Pallial="#026c9a",SubPallial="#cc391b"))
anno.colors
::pheatmap(Diff.curve_matrix[gene.order,
pheatmapc(400:201, #Pallial points
1:200)], #SubPallial points
scale = "row",
cluster_rows = F,
cluster_cols = F,
annotation_col = data.frame(lineage = rep(c("SubPallial","Pallial"), each=200)),
annotation_colors = anno.colors,
show_colnames = F,
show_rownames = T,
fontsize_row = 8,
color = viridis::viridis(9),
breaks = seq(-2.5,2.5, length.out = 9),
main = "")
<- Pseudotime.lineages.diff.filtered[Pseudotime.lineages.diff.filtered$gene_short_name %in% Pallial.genes, ]
Pallial.Common
write.table(Pallial.Common[gene.order,], "./Trajectories/Pallial_Common_Genes.csv", sep = ";", quote = F)
# Extract subPallial neurons trajectory genes
<- as.data.frame(Pseudotime.lineages.diff.filtered[Pseudotime.lineages.diff.filtered$ABCs > 0,])
SubPallial.res <- row.names(SubPallial.res)
SubPallial.genes <- SubPallial_curve_matrix[SubPallial.genes, ] SubPallial_curve_matrix
# Extract subPallial neurons trajectory genes
<- as.data.frame(Pseudotime.lineages.diff.filtered[Pseudotime.lineages.diff.filtered$ABCs > 0,])
SubPallial.res <- row.names(SubPallial.res)
SubPallial.genes
# We further filter genes detected in less than 100 and more than 300 cells among Subpallial and Pallial lineages, respectively
<- Matrix::rowSums(Allcells.data@raw.data[SubPallial.genes, SubPallialcells] > 0)
num.cells <- names(x = num.cells[which(x = num.cells >= 100)])
SubPallial.genes
<- Matrix::rowSums(Allcells.data@raw.data[SubPallial.genes, Pallialcells] > 0)
num.cells <- names(x = num.cells[which(x = num.cells >= 300)])
filtered
<- SubPallial.genes[!SubPallial.genes%in% filtered]
SubPallial.genes
<- SubPallial_curve_matrix[SubPallial.genes, ] SubPallial_curve_matrix
# Order rows using seriation
<- as.dist((1-cor(scale(t(SubPallial_curve_matrix)), method = "pearson")))
dst <- seriate(dst, method ="GW")
row.ser <- rownames(SubPallial_curve_matrix[get_order(row.ser),])
gene.order
<- list(lineage = c(Pallial="#026c9a",SubPallial="#cc391b"))
anno.colors
::pheatmap(Diff.curve_matrix[gene.order,
pheatmapc(400:201, #Pallial points
1:200)], #SubPallial points
scale = "row",
cluster_rows = F,
cluster_cols = F,
annotation_col = data.frame(lineage = rep(c("SubPallial","Pallial"), each=200)),
annotation_colors = anno.colors,
show_colnames = F,
show_rownames = T,
fontsize_row = 8,
color = viridis::viridis(9),
breaks = seq(-2.5,2.5, length.out = 9),
main = "")
<- Pseudotime.lineages.diff.filtered[Pseudotime.lineages.diff.filtered$gene_short_name %in% SubPallial.genes, ]
SubPallial.Common
write.table(SubPallial.Common[gene.order,], "./Trajectories/SubPallial_Common_Genes.csv", sep = ";", quote = F)
#date
format(Sys.time(), "%d %B, %Y, %H,%M")
## [1] "03 mai, 2021, 11,51"
#Packages used
sessionInfo()
## R version 3.6.3 (2020-02-29)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 18.04.5 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/atlas/libblas.so.3.10.3
## LAPACK: /usr/lib/x86_64-linux-gnu/atlas/liblapack.so.3.10.3
##
## locale:
## [1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=fr_FR.UTF-8 LC_COLLATE=fr_FR.UTF-8
## [5] LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8
## [7] LC_PAPER=fr_FR.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] splines stats4 parallel stats graphics grDevices utils
## [8] datasets methods base
##
## other attached packages:
## [1] wesanderson_0.3.6 RColorBrewer_1.1-2 patchwork_0.0.1
## [4] ggExtra_0.9 reshape2_1.4.3 dplyr_0.8.3
## [7] seriation_1.2-9 monocle_2.14.0 DDRTree_0.1.5
## [10] irlba_2.3.3 VGAM_1.1-2 Biobase_2.46.0
## [13] BiocGenerics_0.32.0 princurve_2.1.4 Seurat_2.3.4
## [16] Matrix_1.2-17 cowplot_1.0.0 ggplot2_3.2.1
##
## loaded via a namespace (and not attached):
## [1] snow_0.4-3 backports_1.1.5 Hmisc_4.3-0
## [4] plyr_1.8.4 igraph_1.2.5 lazyeval_0.2.2
## [7] densityClust_0.3 fastICA_1.2-2 digest_0.6.25
## [10] foreach_1.4.7 htmltools_0.5.0 viridis_0.5.1
## [13] lars_1.2 gdata_2.18.0 magrittr_1.5
## [16] checkmate_1.9.4 cluster_2.1.0 gclus_1.3.2
## [19] mixtools_1.1.0 ROCR_1.0-7 limma_3.42.0
## [22] matrixStats_0.55.0 R.utils_2.9.0 docopt_0.6.1
## [25] colorspace_1.4-1 ggrepel_0.8.1 xfun_0.18
## [28] sparsesvd_0.2 crayon_1.4.0 jsonlite_1.7.0
## [31] zeallot_0.1.0 survival_2.44-1.1 zoo_1.8-6
## [34] iterators_1.0.12 ape_5.3 glue_1.4.1
## [37] registry_0.5-1 gtable_0.3.0 kernlab_0.9-29
## [40] prabclus_2.3-1 DEoptimR_1.0-8 scales_1.1.0
## [43] pheatmap_1.0.12 bibtex_0.4.2 miniUI_0.1.1.1
## [46] Rcpp_1.0.5 metap_1.1 dtw_1.21-3
## [49] xtable_1.8-4 viridisLite_0.3.0 htmlTable_1.13.2
## [52] reticulate_1.18 foreign_0.8-72 bit_4.0.4
## [55] proxy_0.4-23 mclust_5.4.5 SDMTools_1.1-221.1
## [58] Formula_1.2-3 tsne_0.1-3 htmlwidgets_1.5.1
## [61] httr_1.4.1 FNN_1.1.3 gplots_3.0.1.1
## [64] fpc_2.2-3 acepack_1.4.1 modeltools_0.2-22
## [67] ica_1.0-2 farver_2.0.1 pkgconfig_2.0.3
## [70] R.methodsS3_1.7.1 flexmix_2.3-15 nnet_7.3-14
## [73] labeling_0.3 later_1.0.0 tidyselect_0.2.5
## [76] rlang_0.4.7 munsell_0.5.0 tools_3.6.3
## [79] ggridges_0.5.1 fastmap_1.0.1 evaluate_0.14
## [82] stringr_1.4.0 yaml_2.2.1 npsurv_0.4-0
## [85] knitr_1.26 bit64_4.0.2 fitdistrplus_1.0-14
## [88] robustbase_0.93-5 caTools_1.17.1.2 purrr_0.3.3
## [91] RANN_2.6.1 pbapply_1.4-2 nlme_3.1-141
## [94] mime_0.7 slam_0.1-46 R.oo_1.23.0
## [97] hdf5r_1.3.2.9000 compiler_3.6.3 rstudioapi_0.11
## [100] png_0.1-7 lsei_1.2-0 tibble_2.1.3
## [103] stringi_1.4.6 lattice_0.20-41 HSMMSingleCell_1.6.0
## [106] vctrs_0.2.0 pillar_1.4.2 lifecycle_0.1.0
## [109] combinat_0.0-8 Rdpack_0.11-0 lmtest_0.9-37
## [112] data.table_1.12.6 bitops_1.0-6 gbRd_0.4-11
## [115] httpuv_1.5.2 R6_2.4.1 latticeExtra_0.6-28
## [118] promises_1.1.0 TSP_1.1-10 KernSmooth_2.23-15
## [121] gridExtra_2.3 codetools_0.2-16 MASS_7.3-53
## [124] gtools_3.8.1 assertthat_0.2.1 withr_2.1.2
## [127] qlcMatrix_0.9.7 diptest_0.75-7 doSNOW_1.0.18
## [130] grid_3.6.3 rpart_4.1-15 tidyr_1.0.0
## [133] class_7.3-17 rmarkdown_2.5 segmented_1.0-0
## [136] Rtsne_0.15 shiny_1.4.0 base64enc_0.1-3
Institute of Psychiatry and Neuroscience of Paris, INSERM U1266, 75014, Paris, France, matthieu.moreau@inserm.fr↩︎