单细胞数据分析——ICITools使用流程

2022-07-09 11:57:14 浏览数 (1)

近期看了一些在植物上发表的单细胞的文章,大家在进行细胞分群注释之后,都会选择ICITools这个方法来对分群的结果进行验证,由于最近的人工鉴定分群的结果已经结束,为了确定分群结果的可靠性,我准备也选用文献的这个内容进行尝试,验证一下相关的结果。

在上个月的时候,其实已经看到了这个方法,但是翻了原文,并没有给github的链接,没有找到,很幸运的是在组会上午的时候在github翻到了软件解读的界面,就是感觉最近的课题进展都是靠的运气,才逐渐的往前不断的推进。

因此下面先对这个软件的使用进行尝试,然后将我们的结果放进去,去验证我们的结果的可靠性。

github链接地址

目前在bing上搜索有没有中文版的教程方法,还没有找到。目前的github的链接地址:https://github.com/b-coli/ICITools。

软件自带的数据集的试运行

首先是安装没有报错,基本上就是将devtools进行了一个更新。

代码语言:javascript复制
devtools::install_github("b-coli/ICITools")

然后是根据github上作者给的数据范例。

代码语言:javascript复制
library(ICITools)
##将data里面的数据下载下来,然后读入
expression_data <- test_spec
head(expression_data)

可以通过使用默认参数运行函数 compute_spec_table() 来计算映射表。

代码语言:javascript复制
compute_spec_table(expression_data = expression_data)

得到了与官网上一致的结果。目前是已经获得了映射数据集的bin值。

随后读入需要进行打分的数据集ICI数据集。

代码语言:javascript复制
expression_data <- test_ici
head(expression_data)
代码语言:javascript复制
simple_bin <- function(expression_data, n_bins = 10, ...) {
  bins <- cut(expression_data$Expression, n_bins, labels = FALSE)
  new_expression_data <- dplyr::mutate(expression_data, bin = bins)
  return(new_expression_data)
}

simple_mean <- function(expression_data, ...) {
  means_raw <- tapply(expression_data$Expression, expression_data$Cell_Type, mean)
  means <- tibble::enframe(means_raw, "Cell_Type", "mean_expr")
  return(means)
}

spec_table <- compute_spec_table(expression_data = expression_data, 
                   bin_method = simple_bin, 
                   mean_method = simple_mean, 
                   n_bins = 10)
head(spec_table)

选用compute_ici_scores计算标记基因。

代码语言:javascript复制
ici_scores <- compute_ici_scores(expression_data = expression_data, 
                   spec_table = spec_table, 
                   sig = TRUE, 
                   n_iterations = 1000, 
                   information_level = 20, 
                   min_spec_score = 0.15)
head(ici_scores)

由于在安装的时候软件包安装的主函数比较少,因此在做这个分析的时候,需要打开R下面的compute_ici.R文件,复制粘贴到R下面,然后才能调用剩余的一些函数,否则就会出现有几个函数找不到的报错内容。

目前是复制粘贴后没有问题。

图片.png图片.png

并行化

代码语言:javascript复制
## Time without parallel processing
future::plan(strategy = "sequential")
time <- Sys.time()
ici_scores <- compute_ici_scores(expression_data, spec_table = spec_table, sig = TRUE, n_iterations = 5000)
Sys.time() - time

## Time using 2 processors:
future::plan(strategy = "multiprocess", workers = 2)
time <- Sys.time()
ici_scores <- compute_ici_scores(expression_data, spec_table = spec_table, sig = TRUE, n_iterations = 5000)
Sys.time() - time

可以发现在前面计算ici-score时候也会出现这个报错,因此是将这个函数进行edit,我每次为了防止覆盖掉源文件,都是新给一个命名。主要的原因是包相对是比较老的,然后有一部分的函数在后来进行了更新,所以我也是第一次对R包的底层代码进行修改。

图片.png图片.png

Optimization

寻找具有高信号和低方差的信息分数的优化函数,最初在 Efroni 等人中概述。 (2016),也可在此包中使用。在这里,您可以在广泛的信息分数范围内生成 ICI 分数,并指定最低规格分数。此外,您可以选择在您的 expression_data 数据集中进行二次采样以加速优化(默认 100 个样本)。

上面是直接对网页的翻译结果,但是我想要获得是上面的ici-cores的评分结果,所以这里是这个软件包的教程的最后一步,我也是按照相关的内容进行吧。

代码语言:javascript复制
library(dplyr)
library(ggplot2)
info <- gather_information_level_data(expression_data, 
                                      spec_table = spec_table, 
                                      information_range = seq(0, 5, 0.05), 
                                      min_spec_score = 0.15, 
                                      n_samples = 10)

ici_signal <- extract_signal_from_info_data(info)
ici_var <- extract_var_from_info_data(info)

info_summary <- dplyr::inner_join(ici_var, ici_signal)

head(info_summary)

发现这里还是出现上面的报错,因此还是哪里的底层源码还要进行更改,也许以后要进行底层源码的学习啦。

目前可以发现在function中需要加载这些函数的源码。

图片.png图片.png

总结

通过对ICITOOLS的学习,发现软件学习的内容要紧跟着作者给的示例进行,我以前非常喜欢按照自己的想法进行,导致浪费了很多的时间,如果出现了问题,一定要从第一个error进行查看,先去百度这个报错的中文的概念是什么,然后在去看看作者有没有对这个报错进行解释,现在我可以用自己的数据集进行尝试啦。

0 人点赞