Setup knitr and load utility functions

knitr::opts_chunk$set(echo = TRUE)
knitr::opts_knit$set(root.dir="E:/DISC/reproducibility")
source_path = "./source/trajectory_analysis.r"
source(source_path)
Registered S3 method overwritten by 'dplyr':
  method           from
  print.rowwise_df     
Registered S3 methods overwritten by 'htmltools':
  method               from         
  print.html           tools:rstudio
  print.shiny.tag      tools:rstudio
  print.shiny.tag.list tools:rstudio
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
reldist: Relative Distribution Methods
Version 1.6-6 created on 2016-10-07.
copyright (c) 2003, Mark S. Handcock, University of California-Los Angeles
 For citation information, type citation("reldist").
 Type help(package="reldist") to get started.

搼㸴搼㸸挼㸸攼㹢搼㸰攼㸸Ҫ戼㸵ij̼愼㹤戼㸰昼㹣愼㸳戼㹡Biobase
搼㸴搼㸸挼㸸攼㹢搼㸰攼㸸Ҫ戼㸵ij̼愼㹤戼㸰昼㹣愼㸳戼㹡BiocGenerics

搼㸴搼㸸挼㸸攼㹢戼㸳̼愼㹤戼㸰昼㹣愼㸳戼㹡愼㸱愼㹥BiocGenerics愼㸱愼㹦

The following objects are masked from 愼㸱愼㹥package:parallel愼㸱愼㹦:

    clusterApply, clusterApplyLB, clusterCall, clusterEvalQ, clusterExport, clusterMap, parApply, parCapply, parLapply,
    parLapplyLB, parRapply, parSapply, parSapplyLB

The following object is masked from 愼㸱愼㹥package:Matrix愼㸱愼㹦:

    which

The following objects are masked from 愼㸱愼㹥package:stats愼㸱愼㹦:

    IQR, mad, sd, var, xtabs

The following objects are masked from 愼㸱愼㹥package:base愼㸱愼㹦:

    anyDuplicated, append, as.data.frame, basename, cbind, colnames, dirname, do.call, duplicated, eval, evalq, Filter,
    Find, get, grep, grepl, intersect, is.unsorted, lapply, Map, mapply, match, mget, order, paste, pmax, pmax.int, pmin,
    pmin.int, Position, rank, rbind, Reduce, rownames, sapply, setdiff, sort, table, tapply, union, unique, unsplit,
    which, which.max, which.min

Welcome to Bioconductor

    Vignettes contain introductory material; view with 'browseVignettes()'. To cite Bioconductor, see
    'citation("Biobase")', and for packages 'citation("pkgname")'.

搼㸴搼㸸挼㸸攼㹢搼㸰攼㸸Ҫ戼㸵ij̼愼㹤戼㸰昼㹣愼㸳戼㹡VGAM
戼㸳̼愼㹤戼㸰昼㹣愼㸱愼㹥VGAM愼㸱愼㹦挼㹡挼㸷搼㸳挼㸳R戼㸰汾3.6.3 挼㸰戼㸴戼㹤愼㸸搼㸴攼㹣戼㸵挼㸴搼㸴搼㸸挼㸸攼㹢搼㸰攼㸸Ҫ戼㸵ij̼愼㹤戼㸰昼㹣愼㸳戼㹡stats4
搼㸴搼㸸挼㸸攼㹢搼㸰攼㸸Ҫ戼㸵ij̼愼㹤戼㸰昼㹣愼㸳戼㹡splines
搼㸴搼㸸挼㸸攼㹢搼㸰攼㸸Ҫ戼㸵ij̼愼㹤戼㸰昼㹣愼㸳戼㹡DDRTree
戼㸳̼愼㹤戼㸰昼㹣愼㸱愼㹥DDRTree愼㸱愼㹦挼㹡挼㸷搼㸳挼㸳R戼㸰汾3.6.3 挼㸰戼㸴戼㹤愼㸸搼㸴攼㹣戼㸵挼㸴搼㸴搼㸸挼㸸攼㹢搼㸰攼㸸Ҫ戼㸵ij̼愼㹤戼㸰昼㹣愼㸳戼㹡irlba

Settings.

method_names = c("Raw", "DISC", "scVI", "MAGIC", "DCA", "scScope", "DeepImpute", "VIPER", "scImpute")
method_color = c("#A5A5A5", "#E83828", "#278BC4", "#EADE36", "#198B41", "#920783", "#F8B62D", "#8E5E32", "#1E2B68")
names(method_color) = method_names
text_color = rep("black", length(method_names))
names(text_color) = method_names
cell_type = readRDS("./data/BONE_MARROW/cell_type.rds")
raw_mat = readh5_loom("./data/BONE_MARROW/raw.loom")
[1] "./data/BONE_MARROW/raw.loom"
[1] 32738  6939
raw_filt = raw_mat[gene_selection(raw_mat, 10), ]
dim(raw_filt) #  13813, 6939
[1] 13813  6939
used_genes = rownames(raw_filt)
result_list = list()

The percentage of correct order is calculated for every possible root state.

for(ii in method_names){
  switch(ii, 
         "Raw" = {
           gene_bc_filt = raw_filt
         },
         "DISC" = {
           gene_bc_mat = readh5_loom(paste0("./data/BONE_MARROW/", ii, ".loom"))
           gene_bc_filt = gene_bc_mat[used_genes, ]
         }, {
           gene_bc_mat = readh5_imputation(paste0("./data/BONE_MARROW/", ii, ".hdf5"))
           gene_bc_filt = gene_bc_mat[used_genes, ]
         }
  )
  used_cells = names(cell_type)[!is.na(cell_type)]
  cds = get_cds_monocle2(gene_bc_filt[, used_cells])
  result_mat = get_score_monocle2(cds, cell_type, correct_order = correct_order_all, wrong_order = wrong_order_all, type_level = type_level, show_interactively = T)
  print(ii)
  print(result_mat[which.max(result_mat[, 2]), ])
  result_list[[ii]] = result_mat
}
Removing 49 outliers
[1] "Reducing dimension..."
[1] "Looking for the root state..."
[1] "Raw"
 pair_number          acc 
3.301487e+06 7.783153e-01 
[1] "./data/BONE_MARROW/DISC.loom"
[1] 32738  6939
[1] "Reducing dimension..."
[1] "Looking for the root state..."
[1] "DISC"
 pair_number          acc 
1.815709e+06 8.165014e-01 
[1] "./data/BONE_MARROW/scVI.hdf5"
[1] 13813  6939
[1] "Reducing dimension..."
[1] "Looking for the root state..."
[1] "scVI"
 pair_number          acc 
4.316787e+06 8.392429e-01 
[1] "./data/BONE_MARROW/MAGIC.hdf5"
[1] 13813  6939
[1] "Reducing dimension..."
[1] "Looking for the root state..."
错误: 无法分配大小为170.3 Mb的矢量

We show results of DISC and no imputation here since our pc cannot not handle this analysis for the imputation results of some methods, the complete results are shown in our paper which were using a 128GB machine for computation. The highest percentage of correct orders is used for the comparison among methods.

percentage_value = sapply(result_list, function(x){
  return(x[which.max(x[, 2]), ])
})["acc", c(1, 2)]


barplot_usage(percentage_value, main = "", cex.main = 1.5, bar_color = method_color[c(1, 2)], text_color = text_color[c(1, 2)], use_data_order = T, ylab = "Percentage", cex.lab = 1.5, font.main = 1, ylim = c(-0.1, 1), use_border = F)

LS0tDQp0aXRsZTogIlBzZXVkb3RlbXBvcmFsIEFuYWx5c2lzIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCiMjIyBTZXR1cCBrbml0ciBhbmQgbG9hZCB1dGlsaXR5IGZ1bmN0aW9ucw0KYGBge3Igc2V0dXB9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQprbml0cjo6b3B0c19rbml0JHNldChyb290LmRpcj0iRTovRElTQy9yZXByb2R1Y2liaWxpdHkiKQ0KYGBgDQpgYGB7cn0NCnNvdXJjZV9wYXRoID0gIi4vc291cmNlL3RyYWplY3RvcnlfYW5hbHlzaXMuciINCnNvdXJjZShzb3VyY2VfcGF0aCkNCmBgYA0KU2V0dGluZ3MuDQpgYGB7cn0NCm1ldGhvZF9uYW1lID0gYygiUmF3IiwgIkRJU0MiLCAic2NWSSIsICJNQUdJQyIsICJEQ0EiLCAic2NTY29wZSIsICJEZWVwSW1wdXRlIiwgIlZJUEVSIiwgInNjSW1wdXRlIikNCm1ldGhvZF9jb2xvciA9IGMoIiNBNUE1QTUiLCAiI0U4MzgyOCIsICIjMjc4QkM0IiwgIiNFQURFMzYiLCAiIzE5OEI0MSIsICIjOTIwNzgzIiwgIiNGOEI2MkQiLCAiIzhFNUUzMiIsICIjMUUyQjY4IikNCm5hbWVzKG1ldGhvZF9jb2xvcikgPSBtZXRob2RfbmFtZQ0KdGV4dF9jb2xvciA9IHJlcCgiYmxhY2siLCBsZW5ndGgobWV0aG9kX25hbWUpKQ0KbmFtZXModGV4dF9jb2xvcikgPSBtZXRob2RfbmFtZQ0KY2VsbF90eXBlID0gcmVhZFJEUygiLi9kYXRhL0JPTkVfTUFSUk9XL2NlbGxfdHlwZS5yZHMiKQ0KcmF3X21hdCA9IHJlYWRoNV9sb29tKCIuL2RhdGEvQk9ORV9NQVJST1cvcmF3Lmxvb20iKQ0KcmF3X2ZpbHQgPSByYXdfbWF0W2dlbmVfc2VsZWN0aW9uKHJhd19tYXQsIDEwKSwgXQ0KZGltKHJhd19maWx0KSAjICAxMzgxMywgNjkzOQ0KdXNlZF9nZW5lcyA9IHJvd25hbWVzKHJhd19maWx0KQ0KcmVzdWx0X2xpc3QgPSBsaXN0KCkNCmBgYA0KVGhlIHBlcmNlbnRhZ2Ugb2YgY29ycmVjdCBvcmRlciBpcyBjYWxjdWxhdGVkIGZvciBldmVyeSBwb3NzaWJsZSByb290IHN0YXRlLg0KYGBge3IgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0NCmZvcihpaSBpbiBtZXRob2RfbmFtZSl7DQogIHN3aXRjaChpaSwgDQogICAgICAgICAiUmF3IiA9IHsNCiAgICAgICAgICAgZ2VuZV9iY19maWx0ID0gcmF3X2ZpbHQNCiAgICAgICAgIH0sDQogICAgICAgICAiRElTQyIgPSB7DQogICAgICAgICAgIGdlbmVfYmNfbWF0ID0gcmVhZGg1X2xvb20ocGFzdGUwKCIuL2RhdGEvQk9ORV9NQVJST1cvIiwgaWksICIubG9vbSIpKQ0KICAgICAgICAgICBnZW5lX2JjX2ZpbHQgPSBnZW5lX2JjX21hdFt1c2VkX2dlbmVzLCBdDQogICAgICAgICB9LCB7DQogICAgICAgICAgIGdlbmVfYmNfbWF0ID0gcmVhZGg1X2ltcHV0YXRpb24ocGFzdGUwKCIuL2RhdGEvQk9ORV9NQVJST1cvIiwgaWksICIuaGRmNSIpKQ0KICAgICAgICAgICBnZW5lX2JjX2ZpbHQgPSBnZW5lX2JjX21hdFt1c2VkX2dlbmVzLCBdDQogICAgICAgICB9DQogICkNCiAgdXNlZF9jZWxscyA9IG5hbWVzKGNlbGxfdHlwZSlbIWlzLm5hKGNlbGxfdHlwZSldDQogIGNkcyA9IGdldF9jZHNfbW9ub2NsZTIoZ2VuZV9iY19maWx0WywgdXNlZF9jZWxsc10pDQogIHJlc3VsdF9tYXQgPSBnZXRfc2NvcmVfbW9ub2NsZTIoY2RzLCBjZWxsX3R5cGUsIGNvcnJlY3Rfb3JkZXIgPSBjb3JyZWN0X29yZGVyX2FsbCwgd3Jvbmdfb3JkZXIgPSB3cm9uZ19vcmRlcl9hbGwsIHR5cGVfbGV2ZWwgPSB0eXBlX2xldmVsLCBzaG93X2ludGVyYWN0aXZlbHkgPSBUKQ0KICBwcmludChpaSkNCiAgcHJpbnQocmVzdWx0X21hdFt3aGljaC5tYXgocmVzdWx0X21hdFssIDJdKSwgXSkNCiAgcmVzdWx0X2xpc3RbW2lpXV0gPSByZXN1bHRfbWF0DQp9DQpgYGANCldlIHNob3cgcmVzdWx0cyBvZiBESVNDIGFuZCBubyBpbXB1dGF0aW9uIGhlcmUgc2luY2Ugb3VyIHBjIGNhbm5vdCBub3QgaGFuZGxlIHRoaXMgYW5hbHlzaXMgZm9yIHRoZSBpbXB1dGF0aW9uIHJlc3VsdHMgb2Ygc29tZSBtZXRob2RzLCB0aGUgY29tcGxldGUgcmVzdWx0cyBhcmUgc2hvd24gaW4gb3VyIHBhcGVyIHdoaWNoIHdlcmUgdXNpbmcgYSAxMjhHQiBtYWNoaW5lIGZvciBjb21wdXRhdGlvbi4NClRoZSBoaWdoZXN0IHBlcmNlbnRhZ2Ugb2YgY29ycmVjdCBvcmRlcnMgaXMgdXNlZCBmb3IgdGhlIGNvbXBhcmlzb24gYW1vbmcgbWV0aG9kcy4NCmBgYHtyIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTIuNX0NCnBlcmNlbnRhZ2VfdmFsdWUgPSBzYXBwbHkocmVzdWx0X2xpc3QsIGZ1bmN0aW9uKHgpew0KICByZXR1cm4oeFt3aGljaC5tYXgoeFssIDJdKSwgXSkNCn0pWyJhY2MiLCBjKDEsIDIpXQ0KDQoNCmJhcnBsb3RfdXNhZ2UocGVyY2VudGFnZV92YWx1ZSwgbWFpbiA9ICIiLCBjZXgubWFpbiA9IDEuNSwgYmFyX2NvbG9yID0gbWV0aG9kX2NvbG9yW2MoMSwgMildLCB0ZXh0X2NvbG9yID0gdGV4dF9jb2xvcltjKDEsIDIpXSwgdXNlX2RhdGFfb3JkZXIgPSBULCB5bGFiID0gIlBlcmNlbnRhZ2UiLCBjZXgubGFiID0gMS41LCBmb250Lm1haW4gPSAxLCB5bGltID0gYygtMC4xLCAxKSwgdXNlX2JvcmRlciA9IEYpDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==