Setup knitr and load utility functions

knitr::opts_chunk$set(echo = TRUE)
knitr::opts_knit$set(root.dir="E:/DISC/reproducibility")
utilities_path = "./source/utilities.r"
source(utilities_path)
Registered S3 method overwritten by 'dplyr':
  method           from
  print.rowwise_df     
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.

Filter cells as Seurat tutorial

Following Seurat tutorial, we download the original PBMC_3k data and perform cell filtering.
The original PBMC data can be found at https://support.10xgenomics.com/single-cell-gene-expression/datasets/1.1.0/frozen_pbmc_donor_a (the original page of 10X) and https://s3-us-west-2.amazonaws.com/10x.files/samples/cell/pbmc3k/pbmc3k_filtered_gene_bc_matrices.tar.gz (the link in Seurat tutorial). We cached this dataset in our github, which can be found at https://github.com/iyhaoo/DISC_data_availability/tree/master/PBMC/filtered_gene_bc_matrices/hg19.

if(!file.exists("./data/PBMC/raw.loom")){
  temp <- tempfile()
  download.file("http://cf.10xgenomics.com/samples/cell-exp/1.1.0/frozen_pbmc_donor_a/frozen_pbmc_donor_a_filtered_gene_bc_matrices.tar.gz", temp)
  exdir = "./data/PBMC"
  untar(temp, exdir = exdir)
  unlink(temp)
  original_data <- Read10X(data.dir = paste0(exdir, "/filtered_gene_bc_matrices/hg19/"))
  save_h5("./data/PBMC/original.loom", as.matrix(t(original_data)))
  seurat_obj <- CreateSeuratObject(counts = as.data.frame(original_data), min.cells = 3, min.features = 200)
  seurat_obj[["percent.mt"]] <- PercentageFeatureSet(seurat_obj, pattern = "^MT-")
  seurat_obj <- subset(seurat_obj, subset = nFeature_RNA > 200 & nFeature_RNA < 2500 & percent.mt < 5)
  keep_cell_names = colnames(seurat_obj[["RNA"]]@counts)
  keep_gene_names = rownames(seurat_obj[["RNA"]]@counts)
  saveRDS(keep_gene_names, "./results/PBMC/used_gene_names.rds")
  raw_data = as.matrix(original_data[, keep_cell_names])
  save_h5("./data/PBMC/raw.loom", t(raw_data))
}else{
  raw_data = readh5_loom("./data/PBMC/raw.loom")
  keep_gene_names = readRDS("./results/PBMC/used_gene_names.rds")
}
[1] "./data/PBMC/raw.loom"
[1] 32738  2638

Identify cells as Seurat tutorial

Following Seurat tutorial, we identify cells.

if(!file.exists("./data/PBMC/cell_type.rds")){
  cell_type_identification = seurat_classification(gene_bc_mat = raw_data[gsub(pattern = "_", replacement = "-", rownames(raw_data)) %in% keep_gene_names, ], pca_dim = 10, res = 0.5, min_pct = 0.25, show_plots = T, cell_type_identification_fun = cell_type_identification_pbmc)
  cell_type= cell_type_identification$assignment
  saveRDS(cell_type, "./data/PBMC/cell_type.rds")
}else{
  cell_type = readRDS("./data/PBMC/cell_type.rds")
}
Feature names cannot have underscores ('_'), replacing with dashes ('-')Performing log-normalization
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating gene variances
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Calculating feature variances of standardized and clipped values
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
PC_ 1 
Positive:  MALAT1, LTB, IL32, IL7R, CD2, B2M, ACAP1, CD27, STK17A, CTSW 
       CD247, GIMAP5, AQP3, CCL5, SELL, TRAF3IP3, GZMA, MAL, CST7, ITM2A 
       MYC, GIMAP7, HOPX, BEX2, LDLRAP1, GZMK, ETS1, ZAP70, TNFAIP8, RIC3 
Negative:  CST3, TYROBP, LST1, AIF1, FTL, FTH1, LYZ, FCN1, S100A9, TYMP 
       FCER1G, CFD, LGALS1, S100A8, CTSS, LGALS2, SERPINA1, IFITM3, SPI1, CFP 
       PSAP, IFI30, SAT1, COTL1, S100A11, NPC2, GRN, LGALS3, GSTP1, PYCARD 
PC_ 2 
Positive:  NKG7, PRF1, CST7, GZMB, GZMA, FGFBP2, CTSW, GNLY, B2M, SPON2 
       CCL4, GZMH, FCGR3A, CCL5, CD247, XCL2, CLIC3, AKR1C3, SRGN, HOPX 
       TTC38, APMAP, CTSC, S100A4, IGFBP7, ANXA1, ID2, IL32, XCL1, RHOC 
Negative:  CD79A, MS4A1, TCL1A, HLA-DQA1, HLA-DQB1, HLA-DRA, LINC00926, CD79B, HLA-DRB1, CD74 
       HLA-DMA, HLA-DPB1, HLA-DQA2, CD37, HLA-DRB5, HLA-DMB, HLA-DPA1, FCRLA, HVCN1, LTB 
       BLNK, P2RX5, IGLL5, IRF8, SWAP70, ARHGAP24, FCGR2B, SMIM14, PPP1R14A, C16orf74 
PC_ 3 
Positive:  PPBP, PF4, SDPR, SPARC, GNG11, NRGN, GP9, RGS18, TUBB1, CLU 
       HIST1H2AC, AP001189.4, ITGA2B, CD9, TMEM40, PTCRA, CA2, ACRBP, MMD, TREML1 
       NGFRAP1, F13A1, SEPT5, RUFY1, TSC22D1, MPP1, CMTM5, RP11-367G6.3, MYL9, GP1BA 
Negative:  HLA-DQA1, CD79A, CD79B, HLA-DQB1, HLA-DPB1, HLA-DPA1, CD74, MS4A1, HLA-DRB1, HLA-DRA 
       HLA-DRB5, HLA-DQA2, TCL1A, LINC00926, HLA-DMB, HLA-DMA, CD37, HVCN1, FCRLA, IRF8 
       PLAC8, BLNK, MALAT1, SMIM14, PLD4, LAT2, IGLL5, P2RX5, SWAP70, FCGR2B 
PC_ 4 
Positive:  HLA-DQA1, CD79B, CD79A, MS4A1, HLA-DQB1, CD74, HLA-DPB1, HIST1H2AC, PF4, TCL1A 
       SDPR, HLA-DPA1, HLA-DRB1, HLA-DQA2, HLA-DRA, PPBP, LINC00926, GNG11, HLA-DRB5, SPARC 
       GP9, AP001189.4, CA2, PTCRA, CD9, NRGN, RGS18, GZMB, CLU, TUBB1 
Negative:  VIM, IL7R, S100A6, IL32, S100A8, S100A4, GIMAP7, S100A10, S100A9, MAL 
       AQP3, CD2, CD14, FYB, LGALS2, GIMAP4, ANXA1, CD27, FCN1, RBP7 
       LYZ, S100A11, GIMAP5, MS4A6A, S100A12, FOLR3, TRABD2A, AIF1, IL8, IFI6 
PC_ 5 
Positive:  GZMB, NKG7, S100A8, FGFBP2, GNLY, CCL4, CST7, PRF1, GZMA, SPON2 
       GZMH, S100A9, LGALS2, CCL3, CTSW, XCL2, CD14, CLIC3, S100A12, CCL5 
       RBP7, MS4A6A, GSTP1, FOLR3, IGFBP7, TYROBP, TTC38, AKR1C3, XCL1, HOPX 
Negative:  LTB, IL7R, CKB, VIM, MS4A7, AQP3, CYTIP, RP11-290F20.3, SIGLEC10, HMOX1 
       PTGES3, LILRB2, MAL, CD27, HN1, CD2, GDI2, ANXA5, CORO1B, TUBA1B 
       FAM110A, ATP1A1, TRADD, PPA1, CCDC109B, ABRACL, CTD-2006K23.1, WARS, VMO1, FYB 
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck

Number of nodes: 2638
Number of edges: 96033

Running Louvain algorithm...
0%   10   20   30   40   50   60   70   80   90   100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
Maximum modularity in 10 random starts: 0.8720
Number of communities: 9
Elapsed time: 0 seconds

LS0tDQp0aXRsZTogIkNlbGwgdHlwZSBpZGVudGlmaWNhdGlvbiBpbXByb3ZlbWVudCINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQojIyMgU2V0dXAga25pdHIgYW5kIGxvYWQgdXRpbGl0eSBmdW5jdGlvbnMNCmBgYHtyIHNldHVwfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0Ka25pdHI6Om9wdHNfa25pdCRzZXQocm9vdC5kaXI9IkU6L0RJU0MvcmVwcm9kdWNpYmlsaXR5IikNCmBgYA0KYGBge3J9DQp1dGlsaXRpZXNfcGF0aCA9ICIuL3NvdXJjZS91dGlsaXRpZXMuciINCnNvdXJjZSh1dGlsaXRpZXNfcGF0aCkNCmBgYA0KIyMjIEZpbHRlciBjZWxscyBhcyBTZXVyYXQgdHV0b3JpYWwNCkZvbGxvd2luZyA8YSBocmVmPSJodHRwczovL3NhdGlqYWxhYi5vcmcvc2V1cmF0L3YzLjAvcGJtYzNrX3R1dG9yaWFsLmh0bWwiPlNldXJhdCB0dXRvcmlhbDwvYT4sIHdlIGRvd25sb2FkIHRoZSBvcmlnaW5hbCBQQk1DXzNrIGRhdGEgYW5kIHBlcmZvcm0gY2VsbCBmaWx0ZXJpbmcuPC9icj4NClRoZSBvcmlnaW5hbCBQQk1DIGRhdGEgY2FuIGJlIGZvdW5kIGF0IGh0dHBzOi8vc3VwcG9ydC4xMHhnZW5vbWljcy5jb20vc2luZ2xlLWNlbGwtZ2VuZS1leHByZXNzaW9uL2RhdGFzZXRzLzEuMS4wL2Zyb3plbl9wYm1jX2Rvbm9yX2EgKHRoZSBvcmlnaW5hbCBwYWdlIG9mIDEwWCkgYW5kIGh0dHBzOi8vczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20vMTB4LmZpbGVzL3NhbXBsZXMvY2VsbC9wYm1jM2svcGJtYzNrX2ZpbHRlcmVkX2dlbmVfYmNfbWF0cmljZXMudGFyLmd6ICh0aGUgbGluayBpbiBTZXVyYXQgdHV0b3JpYWwpLg0KV2UgY2FjaGVkIHRoaXMgZGF0YXNldCBpbiBvdXIgZ2l0aHViLCB3aGljaCBjYW4gYmUgZm91bmQgYXQgaHR0cHM6Ly9naXRodWIuY29tL2l5aGFvby9ESVNDX2RhdGFfYXZhaWxhYmlsaXR5L3RyZWUvbWFzdGVyL1BCTUMvZmlsdGVyZWRfZ2VuZV9iY19tYXRyaWNlcy9oZzE5Lg0KYGBge3J9DQppZighZmlsZS5leGlzdHMoIi4vZGF0YS9QQk1DL3Jhdy5sb29tIikpew0KICB0ZW1wIDwtIHRlbXBmaWxlKCkNCiAgZG93bmxvYWQuZmlsZSgiaHR0cDovL2NmLjEweGdlbm9taWNzLmNvbS9zYW1wbGVzL2NlbGwtZXhwLzEuMS4wL2Zyb3plbl9wYm1jX2Rvbm9yX2EvZnJvemVuX3BibWNfZG9ub3JfYV9maWx0ZXJlZF9nZW5lX2JjX21hdHJpY2VzLnRhci5neiIsIHRlbXApDQogIGV4ZGlyID0gIi4vZGF0YS9QQk1DIg0KICB1bnRhcih0ZW1wLCBleGRpciA9IGV4ZGlyKQ0KICB1bmxpbmsodGVtcCkNCiAgb3JpZ2luYWxfZGF0YSA8LSBSZWFkMTBYKGRhdGEuZGlyID0gcGFzdGUwKGV4ZGlyLCAiL2ZpbHRlcmVkX2dlbmVfYmNfbWF0cmljZXMvaGcxOS8iKSkNCiAgc2F2ZV9oNSgiLi9kYXRhL1BCTUMvb3JpZ2luYWwubG9vbSIsIGFzLm1hdHJpeCh0KG9yaWdpbmFsX2RhdGEpKSkNCiAgc2V1cmF0X29iaiA8LSBDcmVhdGVTZXVyYXRPYmplY3QoY291bnRzID0gYXMuZGF0YS5mcmFtZShvcmlnaW5hbF9kYXRhKSwgbWluLmNlbGxzID0gMywgbWluLmZlYXR1cmVzID0gMjAwKQ0KICBzZXVyYXRfb2JqW1sicGVyY2VudC5tdCJdXSA8LSBQZXJjZW50YWdlRmVhdHVyZVNldChzZXVyYXRfb2JqLCBwYXR0ZXJuID0gIl5NVC0iKQ0KICBzZXVyYXRfb2JqIDwtIHN1YnNldChzZXVyYXRfb2JqLCBzdWJzZXQgPSBuRmVhdHVyZV9STkEgPiAyMDAgJiBuRmVhdHVyZV9STkEgPCAyNTAwICYgcGVyY2VudC5tdCA8IDUpDQogIGtlZXBfY2VsbF9uYW1lcyA9IGNvbG5hbWVzKHNldXJhdF9vYmpbWyJSTkEiXV1AY291bnRzKQ0KICBrZWVwX2dlbmVfbmFtZXMgPSByb3duYW1lcyhzZXVyYXRfb2JqW1siUk5BIl1dQGNvdW50cykNCiAgc2F2ZVJEUyhrZWVwX2dlbmVfbmFtZXMsICIuL2RhdGEvUEJNQy91c2VkX2dlbmVfbmFtZXMucmRzIikNCiAgcmF3X2RhdGEgPSBhcy5tYXRyaXgob3JpZ2luYWxfZGF0YVssIGtlZXBfY2VsbF9uYW1lc10pDQogIHNhdmVfaDUoIi4vZGF0YS9QQk1DL3Jhdy5sb29tIiwgdChyYXdfZGF0YSkpDQp9ZWxzZXsNCiAgcmF3X2RhdGEgPSByZWFkaDVfbG9vbSgiLi9kYXRhL1BCTUMvcmF3Lmxvb20iKQ0KICBrZWVwX2dlbmVfbmFtZXMgPSByZWFkUkRTKCIuL2RhdGEvUEJNQy91c2VkX2dlbmVfbmFtZXMucmRzIikNCn0NCmBgYA0KIyMjIElkZW50aWZ5IGNlbGxzIGFzIFNldXJhdCB0dXRvcmlhbA0KRm9sbG93aW5nIDxhIGhyZWY9Imh0dHBzOi8vc2F0aWphbGFiLm9yZy9zZXVyYXQvdjMuMC9wYm1jM2tfdHV0b3JpYWwuaHRtbCI+U2V1cmF0IHR1dG9yaWFsPC9hPiwgd2UgaWRlbnRpZnkgY2VsbHMuDQpgYGB7ciBmaWcuaGVpZ2h0PTgsIGZpZy53aWR0aD0xMX0NCmlmKCFmaWxlLmV4aXN0cygiLi9kYXRhL1BCTUMvY2VsbF90eXBlLnJkcyIpKXsNCiAgY2VsbF90eXBlX2lkZW50aWZpY2F0aW9uID0gc2V1cmF0X2NsYXNzaWZpY2F0aW9uKGdlbmVfYmNfbWF0ID0gcmF3X2RhdGFbZ3N1YihwYXR0ZXJuID0gIl8iLCByZXBsYWNlbWVudCA9ICItIiwgcm93bmFtZXMocmF3X2RhdGEpKSAlaW4lIGtlZXBfZ2VuZV9uYW1lcywgXSwgcGNhX2RpbSA9IDEwLCByZXMgPSAwLjUsIG1pbl9wY3QgPSAwLjI1LCBzaG93X3Bsb3RzID0gVCwgY2VsbF90eXBlX2lkZW50aWZpY2F0aW9uX2Z1biA9IGNlbGxfdHlwZV9pZGVudGlmaWNhdGlvbl9wYm1jKQ0KICBjZWxsX3R5cGU9IGNlbGxfdHlwZV9pZGVudGlmaWNhdGlvbiRhc3NpZ25tZW50DQogIHNhdmVSRFMoY2VsbF90eXBlLCAiLi9kYXRhL1BCTUMvY2VsbF90eXBlLnJkcyIpDQp9ZWxzZXsNCiAgY2VsbF90eXBlID0gcmVhZFJEUygiLi9kYXRhL1BCTUMvY2VsbF90eXBlLnJkcyIpDQp9DQpgYGANCg==