## ---- echo=FALSE-------------------------------------------------------------- knitr::opts_chunk$set(error=FALSE, message=FALSE, warning=FALSE) library(BiocStyle) ## ----------------------------------------------------------------------------- library(scRNAseq) sce <- GrunPancreasData() # Quality control to remove bad cells. library(scuttle) qcstats <- perCellQCMetrics(sce) qcfilter <- quickPerCellQC(qcstats, sub.fields="altexps_ERCC_percent") sce <- sce[,!qcfilter$discard] # Normalization by library size. sce <- logNormCounts(sce) # Feature selection. library(scran) dec <- modelGeneVar(sce) hvgs <- getTopHVGs(dec, n=1000) # Dimensionality reduction. set.seed(1000) library(scater) sce <- runPCA(sce, ncomponents=20, subset_row=hvgs) # Clustering. library(bluster) mat <- reducedDim(sce) clust.info <- clusterRows(mat, NNGraphParam(), full=TRUE) clusters <- clust.info$clusters table(clusters) ## ----------------------------------------------------------------------------- sil <- approxSilhouette(mat, clusters) sil boxplot(split(sil$width, clusters)) ## ----------------------------------------------------------------------------- pure <- neighborPurity(mat, clusters) pure table(Max=pure$maximum, Assigned=clusters) boxplot(split(pure$purity, clusters)) ## ----------------------------------------------------------------------------- g <- clust.info$objects$graph ratio <- pairwiseModularity(g, clusters, as.ratio=TRUE) library(pheatmap) pheatmap(log10(ratio+1), cluster_cols=FALSE, cluster_rows=FALSE, col=rev(heat.colors(100))) ## ----------------------------------------------------------------------------- cluster.gr <- igraph::graph_from_adjacency_matrix(log2(ratio+1), mode="upper", weighted=TRUE, diag=FALSE) # Increasing the weight to increase the visibility of the lines. set.seed(1100101) plot(cluster.gr, edge.width=igraph::E(cluster.gr)$weight*5, layout=igraph::layout_with_lgl) ## ----------------------------------------------------------------------------- merged <- mergeCommunities(g, clusters, number=10) table(merged) ## ----------------------------------------------------------------------------- hclusters <- clusterRows(mat, HclustParam(cut.dynamic=TRUE)) pairwiseRand(clusters, hclusters, mode="index") ## ----------------------------------------------------------------------------- ratio <- pairwiseRand(clusters, hclusters, mode="ratio") library(pheatmap) pheatmap(ratio, cluster_cols=FALSE, cluster_rows=FALSE, col=viridis::viridis(100), breaks=seq(-1, 1, length=101)) ## ----------------------------------------------------------------------------- set.seed(1001010) ari <-bootstrapStability(mat, clusters=clusters, mode="index", BLUSPARAM=NNGraphParam()) ari ## ----------------------------------------------------------------------------- set.seed(1001010) ratio <-bootstrapStability(mat, clusters=clusters, mode="ratio", BLUSPARAM=NNGraphParam()) library(pheatmap) pheatmap(ratio, cluster_cols=FALSE, cluster_rows=FALSE, col=viridis::viridis(100), breaks=seq(-1, 1, length=101)) ## ----------------------------------------------------------------------------- sessionInfo()