f = open('../Data/cnmf/patients_5Kvargenes_cnmf_obj.pckl', 'rb')
cnmf_obj = pickle.load(f)
f.close()
selected_k = 5
cnmf_obj.consensus(k=selected_k, density_threshold=0.1)
usage_norm, gep_scores, gep_tpm, topgenes = cnmf_obj.load_results(K=selected_k, density_threshold=0.1)
#Add to seurat metadata:

library(reticulate)
all_metagenes= py$usage_norm
#Make metagene names
for (i in 1:ncol(all_metagenes)) {
  colnames(all_metagenes)[i] = "metagene." %>% paste0(i)
}

#add each metagene to metadata
for (i in 1:ncol(all_metagenes)) {
  metage_metadata = all_metagenes %>% select(i)
  lung = AddMetaData(object = lung,metadata = metage_metadata)
}
FeaturePlot(object = lung,features = colnames(all_metagenes))

Enrichment analysis by top 200 genes of each program

gep_scores = py$gep_scores
# saveRDS(object = gep_scores,file = "../Data/models_harmony_gep_scores.rds")
#or:
# gep_scores = readRDS(file = "../Data/models_harmony_gep_scores.rds")

for (i in 1:ncol(gep_scores)) {
  top_genes = gep_scores  %>%  arrange(gep_scores[i]) #sort by score a
   top = head(rownames(top_genes),200) #take top top_genes_num
   genes_vec_enrichment(genes = top,background = rownames(gep_scores),gene_sets = "homer_hallmark",title = i,convert_background = T,add_msigdb_to_set = T,add_bg = F)
}

 [23%] Downloaded 7616 bytes...
 [31%] Downloaded 10332 bytes...
 [39%] Downloaded 13048 bytes...
 [46%] Downloaded 15498 bytes...
 [55%] Downloaded 18205 bytes...
 [63%] Downloaded 20921 bytes...
 [71%] Downloaded 23637 bytes...
 [79%] Downloaded 26353 bytes...
 [88%] Downloaded 29069 bytes...
 [96%] Downloaded 31785 bytes...
 [100%] Downloaded 32990 bytes...

 [0%] Downloaded 16375 bytes...
 [0%] Downloaded 32750 bytes...
 [0%] Downloaded 49152 bytes...
 [0%] Downloaded 65527 bytes...
 [0%] Downloaded 81902 bytes...
 [0%] Downloaded 98304 bytes...
 [0%] Downloaded 114679 bytes...
 [0%] Downloaded 131072 bytes...
 [1%] Downloaded 147447 bytes...
 [1%] Downloaded 163822 bytes...
 [1%] Downloaded 180197 bytes...
 [1%] Downloaded 196608 bytes...
 [1%] Downloaded 212983 bytes...
 [1%] Downloaded 229358 bytes...
 [1%] Downloaded 245733 bytes...
 [1%] Downloaded 262144 bytes...
 [2%] Downloaded 278519 bytes...
 [2%] Downloaded 294894 bytes...
 [2%] Downloaded 311269 bytes...
 [2%] Downloaded 344055 bytes...
 [2%] Downloaded 360430 bytes...
 [2%] Downloaded 376805 bytes...
 [2%] Downloaded 393216 bytes...
 [3%] Downloaded 425966 bytes...
 [3%] Downloaded 442341 bytes...
 [3%] Downloaded 458752 bytes...
 [3%] Downloaded 475127 bytes...
 [3%] Downloaded 491502 bytes...
 [3%] Downloaded 524288 bytes...
 [4%] Downloaded 606199 bytes...
 [4%] Downloaded 655360 bytes...
 [5%] Downloaded 720896 bytes...
 [5%] Downloaded 737271 bytes...
 [5%] Downloaded 753646 bytes...
 [5%] Downloaded 770021 bytes...
 [5%] Downloaded 819182 bytes...
 [6%] Downloaded 835557 bytes...
 [6%] Downloaded 884718 bytes...
 [6%] Downloaded 917504 bytes...
 [6%] Downloaded 950254 bytes...
 [7%] Downloaded 983040 bytes...
 [7%] Downloaded 1015790 bytes...
 [7%] Downloaded 1048576 bytes...
 [7%] Downloaded 1097701 bytes...
 [8%] Downloaded 1161829 bytes...
 [9%] Downloaded 1243776 bytes...
 [9%] Downloaded 1292901 bytes...
 [9%] Downloaded 1374848 bytes...
 [10%] Downloaded 1489509 bytes...
 [10%] Downloaded 1505920 bytes...
 [11%] Downloaded 1636992 bytes...
 [12%] Downloaded 1735278 bytes...
 [13%] Downloaded 1899136 bytes...
 [14%] Downloaded 1964672 bytes...
 [14%] Downloaded 2030208 bytes...
 [15%] Downloaded 2095744 bytes...
 [16%] Downloaded 2259566 bytes...
 [26%] Downloaded 3580151 bytes...
 [29%] Downloaded 4104439 bytes...
 [30%] Downloaded 4219136 bytes...
 [33%] Downloaded 4612352 bytes...
 [43%] Downloaded 5954222 bytes...
 [49%] Downloaded 6813605 bytes...
 [55%] Downloaded 7597413 bytes...
 [64%] Downloaded 8934510 bytes...
 [68%] Downloaded 9398208 bytes...
 [77%] Downloaded 10730222 bytes...
 [87%] Downloaded 12062053 bytes...
 [89%] Downloaded 12258661 bytes...
 [98%] Downloaded 13580654 bytes...
 [100%] Downloaded 13762817 bytes...
|--------------------------------------------------|
|==================================================|

 [100%] Downloaded 32990 bytes...

 [7%] Downloaded 987959 bytes...
 [7%] Downloaded 1020709 bytes...
 [8%] Downloaded 1151781 bytes...
 [9%] Downloaded 1299264 bytes...
 [9%] Downloaded 1315639 bytes...
 [10%] Downloaded 1381175 bytes...
 [11%] Downloaded 1594158 bytes...
 [12%] Downloaded 1708855 bytes...
 [14%] Downloaded 1933111 bytes...
 [14%] Downloaded 2015022 bytes...
 [15%] Downloaded 2157349 bytes...
 [16%] Downloaded 2206510 bytes...
 [17%] Downloaded 2435904 bytes...
 [17%] Downloaded 2468663 bytes...
 [18%] Downloaded 2517815 bytes...
 [24%] Downloaded 3425088 bytes...
 [26%] Downloaded 3654464 bytes...
 [26%] Downloaded 3670848 bytes...
 [27%] Downloaded 3851072 bytes...
 [28%] Downloaded 3916608 bytes...
 [29%] Downloaded 4047680 bytes...
 [31%] Downloaded 4293312 bytes...
 [31%] Downloaded 4309696 bytes...
 [31%] Downloaded 4342464 bytes...
 [38%] Downloaded 5230894 bytes...
 [45%] Downloaded 6271735 bytes...
 [54%] Downloaded 7538204 bytes...
 [62%] Downloaded 8629431 bytes...
 [68%] Downloaded 9478775 bytes...
 [69%] Downloaded 9560704 bytes...
 [77%] Downloaded 10723968 bytes...
 [87%] Downloaded 12067109 bytes...
 [87%] Downloaded 12083520 bytes...
 [97%] Downloaded 13416768 bytes...
 [100%] Downloaded 13762817 bytes...
|--------------------------------------------------|
|==================================================|

 [100%] Downloaded 32990 bytes...

 [0%] Downloaded 81032 bytes...
 [9%] Downloaded 1360942 bytes...
 [19%] Downloaded 2661422 bytes...
 [28%] Downloaded 3951836 bytes...
 [37%] Downloaded 5213221 bytes...
 [46%] Downloaded 6465847 bytes...
 [54%] Downloaded 7505472 bytes...
 [63%] Downloaded 8751644 bytes...
 [72%] Downloaded 10019374 bytes...
 [80%] Downloaded 11138432 bytes...
 [87%] Downloaded 12104887 bytes...
 [94%] Downloaded 12968119 bytes...
 [100%] Downloaded 13762817 bytes...
|--------------------------------------------------|
|==================================================|

 [100%] Downloaded 32990 bytes...

 [8%] Downloaded 1216055 bytes...
 [14%] Downloaded 1974656 bytes...
 [15%] Downloaded 2154880 bytes...
 [23%] Downloaded 3176805 bytes...
 [30%] Downloaded 4207616 bytes...
 [34%] Downloaded 4682725 bytes...
 [35%] Downloaded 4846592 bytes...
 [38%] Downloaded 5295104 bytes...
 [47%] Downloaded 6469614 bytes...
 [48%] Downloaded 6661120 bytes...
 [49%] Downloaded 6824960 bytes...
 [56%] Downloaded 7731008 bytes...
 [63%] Downloaded 8676160 bytes...
 [70%] Downloaded 9757504 bytes...
 [80%] Downloaded 11084599 bytes...
 [90%] Downloaded 12423717 bytes...
 [99%] Downloaded 13701495 bytes...
 [100%] Downloaded 13762817 bytes...

 [100%] Downloaded 32990 bytes...

 [8%] Downloaded 1135397 bytes...
 [15%] Downloaded 2117056 bytes...
 [22%] Downloaded 3062190 bytes...
 [29%] Downloaded 4012288 bytes...
 [38%] Downloaded 5238446 bytes...
 [45%] Downloaded 6319607 bytes...
 [52%] Downloaded 7283648 bytes...
 [59%] Downloaded 8156910 bytes...
 [66%] Downloaded 9120887 bytes...
 [73%] Downloaded 10092471 bytes...
 [80%] Downloaded 11028709 bytes...
 [89%] Downloaded 12345710 bytes...
 [99%] Downloaded 13685148 bytes...
 [100%] Downloaded 13762817 bytes...

Enrichment analysis by selecting genes using “max” method

gep_scores = py$gep_scores

library(NMF)
top_features = extractFeatures(object = gep_scores %>% data.matrix(),method ="max")
for (i in 1:length(top_features)) {
  top_features[[i]]= rownames(gep_scores)[top_features[[i]]]
}

for (i in 1:ncol(gep_scores)) {
top = top_features[i] %>% unlist()
try({ res = genes_vec_enrichment(genes = top,background = rownames(gep_scores),gene_sets = "homer_hallmark",title = i,convert_background = T,add_msigdb_to_set = T,add_bg = F)}, silent=TRUE)
print(res)
}

LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3B5dGhvbn0KZiA9IG9wZW4oJy4uL0RhdGEvY25tZi9wYXRpZW50c181S3ZhcmdlbmVzX2NubWZfb2JqLnBja2wnLCAncmInKQpjbm1mX29iaiA9IHBpY2tsZS5sb2FkKGYpCmYuY2xvc2UoKQpgYGAKCmBgYHtweXRob259CnNlbGVjdGVkX2sgPSA1CmNubWZfb2JqLmNvbnNlbnN1cyhrPXNlbGVjdGVkX2ssIGRlbnNpdHlfdGhyZXNob2xkPTAuMSkKdXNhZ2Vfbm9ybSwgZ2VwX3Njb3JlcywgZ2VwX3RwbSwgdG9wZ2VuZXMgPSBjbm1mX29iai5sb2FkX3Jlc3VsdHMoSz1zZWxlY3RlZF9rLCBkZW5zaXR5X3RocmVzaG9sZD0wLjEpCmBgYAoKCmBgYHtyIGZpZy5oZWlnaHQ9MTAsIGZpZy53aWR0aD0xMH0KI0FkZCB0byBzZXVyYXQgbWV0YWRhdGE6CgpsaWJyYXJ5KHJldGljdWxhdGUpCmFsbF9tZXRhZ2VuZXM9IHB5JHVzYWdlX25vcm0KI01ha2UgbWV0YWdlbmUgbmFtZXMKZm9yIChpIGluIDE6bmNvbChhbGxfbWV0YWdlbmVzKSkgewogIGNvbG5hbWVzKGFsbF9tZXRhZ2VuZXMpW2ldID0gIm1ldGFnZW5lLiIgJT4lIHBhc3RlMChpKQp9CgojYWRkIGVhY2ggbWV0YWdlbmUgdG8gbWV0YWRhdGEKZm9yIChpIGluIDE6bmNvbChhbGxfbWV0YWdlbmVzKSkgewogIG1ldGFnZV9tZXRhZGF0YSA9IGFsbF9tZXRhZ2VuZXMgJT4lIHNlbGVjdChpKQogIGx1bmcgPSBBZGRNZXRhRGF0YShvYmplY3QgPSBsdW5nLG1ldGFkYXRhID0gbWV0YWdlX21ldGFkYXRhKQp9CmBgYAoKCmBgYHtyIGZpZy5oZWlnaHQ9MTAsIGZpZy53aWR0aD0xMH0KRmVhdHVyZVBsb3Qob2JqZWN0ID0gbHVuZyxmZWF0dXJlcyA9IGNvbG5hbWVzKGFsbF9tZXRhZ2VuZXMpKQpgYGAKCiMjIEVucmljaG1lbnQgYW5hbHlzaXMgYnkgdG9wIDIwMCBnZW5lcyBvZiBlYWNoIHByb2dyYW0KYGBge3J9CmdlcF9zY29yZXMgPSBweSRnZXBfc2NvcmVzCiMgc2F2ZVJEUyhvYmplY3QgPSBnZXBfc2NvcmVzLGZpbGUgPSAiLi4vRGF0YS9tb2RlbHNfaGFybW9ueV9nZXBfc2NvcmVzLnJkcyIpCiNvcjoKIyBnZXBfc2NvcmVzID0gcmVhZFJEUyhmaWxlID0gIi4uL0RhdGEvbW9kZWxzX2hhcm1vbnlfZ2VwX3Njb3Jlcy5yZHMiKQoKZm9yIChpIGluIDE6bmNvbChnZXBfc2NvcmVzKSkgewogIHRvcF9nZW5lcyA9IGdlcF9zY29yZXMgICU+JSAgYXJyYW5nZShnZXBfc2NvcmVzW2ldKSAjc29ydCBieSBzY29yZSBhCiAgIHRvcCA9IGhlYWQocm93bmFtZXModG9wX2dlbmVzKSwyMDApICN0YWtlIHRvcCB0b3BfZ2VuZXNfbnVtCiAgIGdlbmVzX3ZlY19lbnJpY2htZW50KGdlbmVzID0gdG9wLGJhY2tncm91bmQgPSByb3duYW1lcyhnZXBfc2NvcmVzKSxnZW5lX3NldHMgPSAiaG9tZXJfaGFsbG1hcmsiLHRpdGxlID0gaSxjb252ZXJ0X2JhY2tncm91bmQgPSBULGFkZF9tc2lnZGJfdG9fc2V0ID0gVCxhZGRfYmcgPSBGKQp9CmBgYAojIyBFbnJpY2htZW50IGFuYWx5c2lzIGJ5IHNlbGVjdGluZyBnZW5lcyB1c2luZyAibWF4IiBtZXRob2QKYGBge3IgcmVzdWx0cz0naGlkZSd9CmdlcF9zY29yZXMgPSBweSRnZXBfc2NvcmVzCgpsaWJyYXJ5KE5NRikKdG9wX2ZlYXR1cmVzID0gZXh0cmFjdEZlYXR1cmVzKG9iamVjdCA9IGdlcF9zY29yZXMgJT4lIGRhdGEubWF0cml4KCksbWV0aG9kID0ibWF4IikKZm9yIChpIGluIDE6bGVuZ3RoKHRvcF9mZWF0dXJlcykpIHsKICB0b3BfZmVhdHVyZXNbW2ldXT0gcm93bmFtZXMoZ2VwX3Njb3JlcylbdG9wX2ZlYXR1cmVzW1tpXV1dCn0KCmZvciAoaSBpbiAxOm5jb2woZ2VwX3Njb3JlcykpIHsKdG9wID0gdG9wX2ZlYXR1cmVzW2ldICU+JSB1bmxpc3QoKQp0cnkoeyByZXMgPSBnZW5lc192ZWNfZW5yaWNobWVudChnZW5lcyA9IHRvcCxiYWNrZ3JvdW5kID0gcm93bmFtZXMoZ2VwX3Njb3JlcyksZ2VuZV9zZXRzID0gImhvbWVyX2hhbGxtYXJrIix0aXRsZSA9IGksY29udmVydF9iYWNrZ3JvdW5kID0gVCxhZGRfbXNpZ2RiX3RvX3NldCA9IFQsYWRkX2JnID0gRil9LCBzaWxlbnQ9VFJVRSkKcHJpbnQocmVzKQp9CmBgYAoK