使用SC3的R包进行单细胞聚类
sc3安装过程见链接
SC3源码及其安装过程
提醒:
(1)本主使用R3.6.3版本的R包(推荐使用,这样问题最少)。
(2)第一次尝试使用,会报少了啥啥包的错误,使用install.package(“包名”)一个个安装。
(3)scater包安不上,使用如下代码进行安装:
//sacter安装不了的解决方法(如果BiocManager装了,直接第二句话代码)
if (!requireNamespace(“BiocManager”, quietly = TRUE))
install.packages(“BiocManager”)
BiocManager::install(“sacter”)
需要注意的是,刚开始打开Rstudio用上述代码是装不上去的,需要你跑一组数据(缺少是scater不影响正常跑,但是会少一点东西),然后再用上述代码安装就能装上去(ps:不要问我为什么,我也是尝试出来的)
本主数据样式:
行为基因,列为细胞,label为标签
由于作者给出的实例不是那么清楚,使用自己的数据集合跑还要探究一番,所以下面直接上正常安装后能直接跑起来的代码:
rm(list = ls())
library(SingleCellExperiment)
library(SC3)
library(ggplot2)
library(scater)
#只需要修改数据文件名和标签文件名就可以轻松的换一个数据集合,不用关心其他参数的配置,很方便。
pbmc <- read.table(file = "E:\\single_data\\Liu_ready.txt")
pbmc_label <- read.table(file = "E:\\single_data\\Liu_ready_label.txt")
kp <- max(pbmc_label)
size_row <- nrow(pbmc )
pbmc <- t(pbmc)
pbmc_label <- t(pbmc_label)
colnames(pbmc) <- paste0("cell_", 1:size_row)
sce <- SingleCellExperiment(
assays = list(
counts = as.matrix(pbmc),
logcounts = log2(as.matrix(pbmc) + 1)
)
)
# define feature names in feature_symbol column
rowData(sce)$feature_symbol <- rownames(sce)
# remove features with duplicated names
sce <- sce[!duplicated(rowData(sce)$feature_symbol), ]
# define spike-ins
isSpike(sce, "ERCC") <- grepl("ERCC", rowData(sce)$feature_symbol)
#开始聚类
a <- kp - 1
b <- kp + 1
sce <- sc3(sce, ks = a:b, biology = TRUE)
#画降维后的分布
sc3_n_clusters <- paste0("sc3_", as.character(kp),"_clusters")
sc3_n_log2_outlier_score <- paste0("sc3_", as.character(kp), "_log2_outlier_score")
#sc3_n_clusters = "sc3_3_clusters"
#sc3_n_log2_outlier_score = "sc3_3_log2_outlier_score"
sc3_n_clusters
sc3_n_log2_outlier_score
plotPCA(
sce,
colour_by = sc3_n_clusters,
size_by = sc3_n_log2_outlier_score
)
#计算一致性矩阵
sc3_plot_consensus(
sce, k = kp,
show_pdata = c(
"cell_type1",
"log10_total_features",
sc3_n_clusters,
sc3_n_log2_outlier_score
)
)
#聚类对角性质的度量,对角线全部为红色 则为最好
sc3_plot_silhouette(sce, k = size_row)
#绘制相关聚类的基因表达量图谱
sc3_plot_expression(
sce, k = kp,
show_pdata = c(
"cell_type1",
"log10_total_features",
sc3_n_clusters,
sc3_n_log2_outlier_score
)
)
#计算簇内稳定性
sc3_plot_cluster_stability(sce, k = kp)
#并绘制了最低p值的50个基因的基因表达谱
sc3_plot_de_genes(sce, k = kp)
col_data <- colData(sce)
head(col_data[ , grep("sc3_", colnames(col_data))])
rezult_labels <- colData(sce)[[sc3_n_clusters, exact = FALSE]]
rezult_labels
pbmc_label
library("mclust")
if (require("mclust")) {
adjustedRandIndex(pbmc_label, rezult_labels)
}
也可以将上述代码写成函数,使用for循环,直接可以顺序的跑多个数据集合。
运行效果:
(1)
(2)
关注收藏哦~