近期看了一些在植物上发表的单细胞的文章,大家在进行细胞分群注释之后,都会选择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下面,然后才能调用剩余的一些函数,否则就会出现有几个函数找不到的报错内容。
目前是复制粘贴后没有问题。
并行化
代码语言: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包的底层代码进行修改。
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中需要加载这些函数的源码。
总结
通过对ICITOOLS的学习,发现软件学习的内容要紧跟着作者给的示例进行,我以前非常喜欢按照自己的想法进行,导致浪费了很多的时间,如果出现了问题,一定要从第一个error进行查看,先去百度这个报错的中文的概念是什么,然后在去看看作者有没有对这个报错进行解释,现在我可以用自己的数据集进行尝试啦。