← All .science files
pmid:34252925
scPNMF: sparse gene encoding of single cells to facilitate gene selection for targeted gene profiling.
Dongyuan Song · Kexin Li · Zachary Hemminger · Roy Wollman · Jingyi Jessica Li
Bioinformatics (Oxford, England) · 2021 doi:10.1093/bioinformatics/btab273
Paper
complete
Experiment
partial
Data
partial
Analysis
partial
Execution
absent
Execution evidence has not yet been added to this .science file. Explore its methods, data and open questions to plan the next step.
Record details sci_version · id · kind · revision · content_hash · schema · created_at · updated_at · generator
paper object · 10 fields
authors array · 5 items
claims array · 2 items
[0] object · 6 fields
evidence array · 1 item
[0] object · 3 fields
gaps array · 0 items
experiment object · 8 fields
steps array · 3 items
[0] object · 13 fields
parameters object · 0 fields
inputs array · 1 item
outputs array · 1 item
instruments array · 0 items
reagents array · 0 items
[1] object · 13 fields
parameters object · 0 fields
inputs array · 0 items
outputs array · 1 item
instruments array · 0 items
reagents array · 0 items
[2] object · 13 fields
parameters object · 0 fields
inputs array · 0 items
outputs array · 1 item
instruments array · 0 items
reagents array · 0 items
materials array · 0 items
instruments array · 0 items
reagents array · 0 items
conditions object · 0 fields
gaps array · 2 items
data object · 3 fields
assets array · 3 items
[0] object · 15 fields
structure object · 4 fields
[1] object · 16 fields
structure object · 5 fields
table object · 8 fields
rows array · 4 items
[0] array · 6 items
[1] array · 6 items
[2] array · 6 items
[3] array · 6 items
[2] object · 16 fields
structure object · 5 fields
table object · 8 fields
rows array · 14 items
[0] array · 4 items
[1] array · 8 items
[2] array · 8 items
[3] array · 8 items
[4] array · 8 items
[5] array · 8 items
[6] array · 8 items
[7] array · 8 items
[8] array · 8 items
[9] array · 8 items
[10] array · 8 items
[11] array · 8 items
[12] array · 8 items
[13] array · 8 items
gaps array · 0 items
analysis object · 4 fields
methods array · 5 items
[0] object · 10 fields
dsl_operations array · 0 items
missing_operations array · 1 item
parameters object · 0 fields
data_shapes array · 1 item
[1] object · 10 fields
dsl_operations array · 3 items
missing_operations array · 0 items
parameters object · 0 fields
data_shapes array · 1 item
[2] object · 10 fields
dsl_operations array · 1 item
missing_operations array · 0 items
parameters object · 0 fields
data_shapes array · 1 item
[3] object · 10 fields
dsl_operations array · 1 item
missing_operations array · 0 items
parameters object · 0 fields
data_shapes array · 1 item
[4] object · 10 fields
dsl_operations array · 0 items
missing_operations array · 0 items
parameters object · 0 fields
data_shapes array · 0 items
evidence object · 3 fields
targets array · 0 items
gaps array · 2 items
capability object · 3 fields
requirements array · 1 item
[0] object · 6 fields
assay_families array · 9 items
gaps array · 0 items
readiness object · 8 fields
axes object · 3 fields
method object · 5 fields
required_operations array · 0 items
missing_operations array · 1 item
capability object · 4 fields
data object · 6 fields
accessions array · 0 items
resolved_accessions array · 0 items
statements array · 1 item
can_run object · 3 fields
dsl_operations array · 0 items
assets array · 3 items
steps array · 0 items
must_build object · 5 fields
dsl_operations array · 1 item
[0] object · 3 fields
converters array · 0 items
readers array · 0 items
capabilities array · 0 items
data_gaps array · 1 item
gaps array · 1 item
review object · 5 fields
machine_critique object · 5 fields
reader object · 5 fields
evidence_check object · 2 fields
usage object · 3 fields
stages array · 1 item
[0] object · 4 fields
gaps array · 3 items
provenance object · 7 fields
entities array · 3 items
activities array · 3 items
[0] object · 4 fields
used array · 3 items
[0] object · 3 fields
[1] object · 3 fields
[2] object · 3 fields
[1] object · 4 fields
agents array · 2 items
lineage object · 4 fields
gaps array · 8 items
assays array · 3 items
[0] object · 11 fields
required_operations array · 0 items
source_hashes object · 1 field
evidence array · 2 items
[1] object · 11 fields
required_operations array · 0 items
source_hashes object · 1 field
evidence array · 4 items
[2] object · 11 fields
required_operations array · 0 items
source_hashes object · 1 field
evidence array · 1 item
Complete file
{"sci_version": "1.2", "schema": "https://corpus.bntrg.co.uk/sci/1.0/sci.schema.json", "id": "pmid:34252925", "kind": "science-record", "revision": 7, "content_hash": "sha256:2291ce08acd660810d707a3ac69756d8a203323e8871592f8a9cc17061e19b13", "created_at": "2026-11-01T15:41:43Z", "updated_at": "2026-11-01T22:04:11Z", "generator": {"name": "corpus-assay-engine", "run_id": "reading-sci-2026-11-01"}, "paper": {"state": "complete", "title": "scPNMF: sparse gene encoding of single cells to facilitate gene selection for targeted gene profiling.", "doi": "10.1093/bioinformatics/btab273", "pmid": "34252925", "authors": ["Dongyuan Song", "Kexin Li", "Zachary Hemminger", "Roy Wollman", "Jingyi Jessica Li"], "journal": "Bioinformatics (Oxford, England)", "year": 2021, "abstract": "MOTIVATION: Single-cell RNA sequencing (scRNA-seq) captures whole transcriptome information of individual cells. While scRNA-seq measures thousands of genes, researchers are often interested in only dozens to hundreds of genes for a closer study. Then, a question is how to select those informative genes from scRNA-seq data. Moreover, single-cell targeted gene profiling technologies are gaining popularity for their low costs, high sensitivity and extra (e.g. spatial) information; however, they typically can only measure up to a few hundred genes. Then another challenging question is how to select genes for targeted gene profiling based on existing scRNA-seq data.\nRESULTS: Here, we develop the single-cell Projective Non-negative Matrix Factorization (scPNMF) method to select informative genes from scRNA-seq data in an unsupervised way. Compared with existing gene selection methods, scPNMF has two advantages. First, its selected informative genes can better distinguish cell types. Second, it enables the alignment of new targeted gene profiling data with reference data in a low-dimensional space to facilitate the prediction of cell types in the new data. Technically, scPNMF modifies the PNMF algorithm for gene selection by changing the initialization and adding a basis selection step, which selects informative bases to distinguish cell types. We demonstrate that scPNMF outperforms the state-of-the-art gene selection methods on diverse scRNA-seq datasets. Moreover, we show that scPNMF can guide the design of targeted gene profiling experiments and the cell-type annotation on targeted gene profiling data.\nAVAILABILITY AND IMPLEMENTATION: The R package is open-access and available at https://github.com/JSB-UCLA/scPNMF. The data used in this work are available at Zenodo: https://doi.org/10.5281/zenodo.4797997.\nSUPPLEMENTARY INFORMATION: Supplementary data are available at Bioinformatics online.", "claims": [{"id": "claim-method", "statement": "Using the adjusted Rand index (ARI) as the metric of clustering accuracy, we calculate the ARI values of the three clustering methods on each dataset using 100 informative genes selected by each gene selection method, as 100 genes are commonly used in targeted gene profiling.", "kind": "methodological", "target": null, "evidence": [{"asset": "source:pmid:34252925", "locator": "sections[15] \"3.3 scPNMF outperforms state-of-the-art gene selection methods on diverse scRNA-seq datasets\" paragraph 2", "quote": "Using the adjusted Rand index (ARI) as the metric of clustering accuracy, we calculate the ARI values of the three clustering methods on each dataset using 100 informative genes selected by each gene selection method, as 100 genes are commonly used in targeted gene profiling."}], "state": "complete"}, {"id": "claim-data-access", "statement": "The data used in this work are available at Zenodo: https://doi.org/10.5281/zenodo.4797997.", "kind": "methodological", "target": null, "evidence": [{"asset": "source:pmid:34252925", "locator": "sections[0] \"Abstract\" paragraph 3", "quote": "The data used in this work are available at Zenodo: https://doi.org/10.5281/zenodo.4797997."}], "state": "complete"}], "gaps": []}, "experiment": {"state": "partial", "objective": null, "steps": [{"id": "read_published_estimate", "order": 1, "name": "Read the published estimate from the source", "kind": "other", "state": "complete", "blocked_on": null, "description": "The claim, method and evidence span published with the source article.", "duration_hours": null, "parameters": {}, "inputs": ["source:pmid:34252925"], "outputs": ["the published estimate and its evidence"], "instruments": [], "reagents": []}, {"id": "obtain_source_data", "order": 2, "name": "Obtain the source data from the named repository", "kind": "data-preparation", "state": "blocked", "blocked_on": "data:accession_absent", "description": "The GEO series accession resolves and its sample accessions are listed. This lane did not download the dataset or read its licence.", "duration_hours": null, "parameters": {}, "inputs": [], "outputs": ["the source data with its repository provenance"], "instruments": [], "reagents": []}, {"id": "run_analysis", "order": 3, "name": "Run the published analysis", "kind": "analysis", "state": "blocked", "blocked_on": "method:machine_learning_random_forest", "description": "Apply the paper's statistical method to the resolved series and compare the result with the published target.", "duration_hours": null, "parameters": {}, "inputs": [], "outputs": ["the replicated result and its comparison"], "instruments": [], "reagents": []}], "materials": [], "instruments": [], "reagents": [], "conditions": {}, "gaps": ["step:run_analysis blocked on method:machine_learning_random_forest", "step:obtain_source_data blocked on data:accession_absent"]}, "data": {"state": "partial", "assets": [{"id": "source:pmid:34252925", "role": "manuscript", "format": "xml", "media_type": "application/xml", "uri": "https://doi.org/10.1093/bioinformatics/btab273", "sha256": "sha256:43eb22792366393f8f71ba4bba5441f185e357e376184106c07401ea3f8bc15c", "bytes": 39767, "access": "open", "state": "resolved", "reader": null, "reader_status": "reader_required", "identifier": "10.1093/bioinformatics/btab273", "version": null, "note": "Full article fetched from PMC; the checksum covers the rendered section body, not the original XML bytes.", "structure": {"pmcid": "PMC8275345", "source": "europe_pmc_fulltext", "coverage": "whole_body_without_references", "text_hash_scope": "rendered_section_body"}}, {"id": "asset:table:pmid:34252925:1", "role": "table", "format": "jats-table", "media_type": "application/vnd.jats.table+json", "uri": null, "sha256": "sha256:6b45ffc0544d6672a44c5faa49d8a963d18ff7f250f1218e9aca51def79ba240", "bytes": 505, "access": "open", "state": "verified", "reader": "read_table", "reader_status": "available", "identifier": "section[3]/table-wrap[1]#btab273-T1", "version": null, "note": "Comparison of the properties of PNMF, PCA and NMF", "structure": {"pmcid": "PMC8275345", "section_index": 3, "section_title": "2.1 scPNMF Step I: PNMF", "row_count": 4, "column_count": 6}, "table": {"label": "Table 1", "caption": "Comparison of the properties of PNMF, PCA and NMF", "rows": [["", "Optimization problem", "Non-negativity", "Sparsity", "Mutual exclusiveness", "New data projection"], ["PNMF", "minW||X−WWTX|| s.t. W≥0", "Yes", "Very high", "Very high", "Yes"], ["PCA", "minW||X−WWTX|| s.t. WTW=I", "No", "Low", "Low", "Yes"], ["NMF", "minW,H||X−WH|| s.t. W,H≥0", "Yes", "High", "High", "No"]], "row_count": 4, "column_count": 6, "numeric_cells": 2, "header_rows": 1, "locator": "section[3]/table-wrap[1]#btab273-T1"}}, {"id": "asset:table:pmid:34252925:2", "role": "table", "format": "jats-table", "media_type": "application/vnd.jats.table+json", "uri": null, "sha256": "sha256:c5d44d2f51e07f68f3cf45de8fac953625ec34d70da5c6244f67c36d6e527dea", "bytes": 2061, "access": "open", "state": "verified", "reader": "read_table", "reader_status": "available", "identifier": "section[16]/table-wrap[1]#btab273-T2", "version": null, "note": "Prediction accuracy of cell types based on 100 informative genes selected by 12 gene selection methods in the two case studies with paired reference scRNA-seq data and targeted gene profiling data", "structure": {"pmcid": "PMC8275345", "section_index": 16, "section_title": "3.4 scPNMF guides targeted gene profiling experimental design and cell-type prediction", "row_count": 14, "column_count": 8}, "table": {"label": "Table 2.", "caption": "Prediction accuracy of cell types based on 100 informative genes selected by 12 gene selection methods in the two case studies with paired reference scRNA-seq data and targeted gene profiling data", "rows": [["Method", "Zheng8", "PBMC", "Average Accuracy"], ["", "RandomForest", "KNN", "SVM", "RandomForest", "KNN", "SVM", ""], ["scPNMF", "0.85 (0.83,0.87)", "0.80 (0.78,0.83)", "0.87 (0.85,0.89)", "0.84 (0.79,0.88)", "0.84 (0.79,0.88)", "0.67 (0.61,0.73)", "0.81"], ["M3Drop", "0.85 (0.83,0.87)", "0.80 (0.77,0.83)", "0.87 (0.84,0.89)", "0.84 (0.79,0.88)", "0.77 (0.71,0.82)", "0.63 (0.57,0.69)", "0.79"], ["SeuratDISP", "0.84 (0.81,0.86)", "0.78 (0.75,0.81)", "0.86 (0.84,0.88)", "0.80 (0.75,0.84)", "0.75 (0.70,0.80)", "0.64 (0.58,0.70)", "0.78"], ["corFS", "0.80 (0.77,0.82)", "0.75 (0.73,0.78)", "0.82 (0.80,0.85)", "0.82 (0.77,0.86)", "0.81 (0.76,0.86)", "0.62 (0.56,0.68)", "0.77"], ["GiniClust", "0.86 (0.83,0.88)", "0.79 (0.76,0.81)", "0.86 (0.83,0.88)", "0.80 (0.75,0.84)", "0.76 (0.71,0.81)", "0.53 (0.47,0.60)", "0.75"], ["scran", "0.79 (0.76,0.81)", "0.72 (0.69,0.75)", "0.82 (0.80,0.85)", "0.78 (0.72,0.82)", "0.73 (0.67,0.78)", "0.67 (0.61,0.72)", "0.75"], ["SeuratMVP", "0.83 (0.81,0.85)", "0.77 (0.74,0.80)", "0.85 (0.82,0.87)", "0.82 (0.77,0.86)", "0.74 (0.69,0.79)", "0.47 (0.40,0.53)", "0.74"], ["Scanpy", "0.79 (0.77,0.82)", "0.71 (0.68,0.74)", "0.80 (0.78,0.83)", "0.80 (0.75,0.84)", "0.76 (0.71,0.81)", "0.52 (0.46,0.58)", "0.73"], ["SCMarker", "0.77 (0.74,0.79)", "0.68 (0.65,0.71)", "0.74 (0.71,0.77)", "0.77 (0.71,0.81)", "0.71 (0.65,0.76)", "0.45 (0.39,0.52)", "0.69"], ["SeuratVST", "0.73 (0.70,0.76)", "0.68 (0.65,0.71)", "0.75 (0.73,0.78)", "0.74 (0.68,0.79)", "0.68 (0.63,0.74)", "0.40 (0.34,0.46)", "0.67"], ["DANB", "0.71 (0.68,0.73)", "0.69 (0.66,0.71)", "0.75 (0.73,0.78)", "0.73 (0.67,0.78)", "0.74 (0.68,0.79)", "0.28 (0.23,0.34)", "0.65"], ["irlbaPcaFS", "0.68 (0.65,0.71)", "0.61 (0.58,0.64)", "0.71 (0.68,0.74)", "0.71 (0.65,0.76)", "0.77 (0.71,0.82)", "0.16 (0.12,0.21)", "0.61"]], "row_count": 14, "column_count": 8, "numeric_cells": 84, "header_rows": 2, "locator": "section[16]/table-wrap[1]#btab273-T2"}}], "gaps": []}, "analysis": {"state": "partial", "methods": [{"id": "method-1", "family": "machine_learning", "specific": "random_forest", "label": "Machine learning", "dsl_operations": [], "missing_operations": ["machine_learning_random_forest"], "expressible": false, "parameters": {}, "data_shapes": ["labelled_feature_matrix"], "evidence": {"score": 0.8, "band": "high", "quote": "random forest"}}, {"id": "method-2", "family": "machine_learning", "specific": "support_vector_machine", "label": "Machine learning", "dsl_operations": ["train_classifier", "cross_validate", "roc_auc"], "missing_operations": [], "expressible": true, "parameters": {}, "data_shapes": ["labelled_feature_matrix"], "evidence": {"score": 0.8, "band": "high", "quote": "support vector machine"}}, {"id": "method-3", "family": "clustering", "specific": "kmeans", "label": "Clustering", "dsl_operations": ["kmeans_fit"], "missing_operations": [], "expressible": true, "parameters": {}, "data_shapes": ["feature_matrix"], "evidence": {"score": 0.8, "band": "high", "quote": "K-means"}}, {"id": "method-4", "family": "clustering", "specific": "hierarchical", "label": "Clustering", "dsl_operations": ["hierarchical_cluster"], "missing_operations": [], "expressible": true, "parameters": {}, "data_shapes": ["feature_matrix"], "evidence": {"score": 0.8, "band": "high", "quote": "hierarchical clustering"}}, {"id": "method-5", "family": null, "specific": null, "label": "adjusted Rand index (ARI)", "dsl_operations": [], "missing_operations": [], "expressible": null, "parameters": {}, "data_shapes": [], "evidence": {"score": 1.0, "band": "verbatim", "quote": "Using the adjusted Rand index (ARI) as the metric of clustering accuracy, we calculate the ARI values of the three clustering methods on each dataset using 100 informative genes selected by each gene selection method, as 100 genes are commonly used in targeted gene profiling."}}], "targets": [], "gaps": ["method.reader_named_unmapped", "method.machine_learning_random_forest"]}, "capability": {"state": "complete", "requirements": [{"capability_id": "capability:computational_analysis", "label": "Computational analysis platform", "assay_families": ["meta_analysis", "machine_learning", "survival_analysis", "statistical_regression", "pca", "molecular_docking", "network_analysis", "differential_expression", "gwas"], "availability_state": "owned", "tier_unlocked": "R1", "candidate": "Automated Assays Laravel application and simulated adapters"}], "gaps": []}, "readiness": {"state": "blocked", "tier": "R4", "blocking_axis": "data", "blocked_on": "data:accession_absent", "axes": {"method": {"tier": "R1", "expressible": false, "required_operations": [], "missing_operations": ["machine_learning_random_forest"], "basis": "The paper names the method it used and the corpus's method extractor maps it onto the DSL catalogue: random_forest."}, "capability": {"tier": "R1", "capability_id": "capability:computational_analysis", "availability_state": "owned", "basis": "The computational analysis is owned. The physical bench the paper used is not, so a physical validation cannot be run here."}, "data": {"tier": "R4", "reachable": false, "accessions": [], "resolved_accessions": [], "statements": ["The data used in this work are available at Zenodo: https://doi.org/10.5281/zenodo.4797997."], "basis": "The paper names no accession to its source data, so the data has to come from the authors."}}, "can_run": {"dsl_operations": [], "assets": ["source:pmid:34252925", "asset:table:pmid:34252925:1", "asset:table:pmid:34252925:2"], "steps": []}, "must_build": {"dsl_operations": [{"operation": "machine_learning_random_forest", "unlocks_papers": null, "priority": null}], "converters": [], "readers": [], "capabilities": [], "data_gaps": ["data:geo:None"]}, "gaps": ["data:accession_absent"]}, "review": {"state": "partial", "machine_critique": {"kind": "extraction_review", "reader": {"model": "MiniMax-M3.1-Flash", "provider": "minimax", "provider_family": "minimax", "read_at": "2026-10-31T18:32:06Z", "independence": "single_reader"}, "evidence_check": {"method": "verbatim", "availability": "verbatim"}, "calls": 3, "usage": {"prompt_tokens": 29081, "completion_tokens": 961, "cached_tokens": 792}}, "human_critique": null, "stages": [{"id": "extraction", "state": "complete", "reader": "MiniMax-M3.1-Flash", "provider": "minimax"}], "gaps": ["review.independent_reader", "review.machine_critique", "review.human_critique"]}, "execution": {"state": "absent", "status": "not_run", "mode": null, "runs": [], "gaps": ["execution.not_run"]}, "provenance": {"entities": [{"id": "pmid:34252925", "type": "paper", "label": "pmid:34252925"}, {"id": "source:pmid:34252925", "type": "manuscript", "label": "PMID 34252925 full text"}, {"id": "data:geo:None", "type": "dataset", "label": "GEO None"}], "activities": [{"id": "activity-reading-sci-2026-11-01", "type": "classification", "used": [{"id": "pmid:34252925", "type": "paper", "label": "pmid:34252925"}, {"id": "source:pmid:34252925", "type": "manuscript", "label": "PMID 34252925 full text"}, {"id": "data:geo:None", "type": "dataset", "label": "GEO None"}], "agent": "agent:corpus-assay-engine"}, {"id": "activity-read-34252925", "type": "extraction", "used": ["source:pmid:34252925"], "agent": "agent:minimax-reader"}, {"id": "activity-resolve-None", "type": "accession_resolution", "used": ["data:geo:None"], "agent": "agent:corpus-assay-engine"}], "agents": [{"id": "agent:corpus-assay-engine", "type": "software", "label": "Corpus assay engine"}, {"id": "agent:minimax-reader", "type": "software", "label": "MiniMax literature reader"}], "source_run_id": "reading-sci-2026-11-01", "dsl_catalogue_fingerprint": "343fb30756ba6ec3", "capability_table_fingerprint": "2cb3e42f047d2ecf", "snapshot_id": "ba34b49490d9bfaf"}, "lineage": {"parent_id": "pmid:34252925", "parent_hash": "sha256:162437831476e862a5430a5743faa4d8ed1648511f7e230faf5620cbb39fad8f", "fork_of": null, "generation": 6}, "gaps": ["execution.not_run", "method.machine_learning_random_forest", "method.reader_named_unmapped", "review.human_critique", "review.independent_reader", "review.machine_critique", "step:obtain_source_data blocked on data:accession_absent", "step:run_analysis blocked on method:machine_learning_random_forest"], "assays": [{"role": "data_generation", "definition_id": "rna_seq", "definition_version": "99e1195c7d6f", "definition_digest": null, "required_operations": [], "support_state": "partial", "source_hashes": {"assay_lexicon": "99e1195c7d6f"}, "confidence": 0.99, "evidence": ["MOTIVATION: Single-cell RNA sequencing (scRNA-seq) captures whole transcriptome inf", "ll RNA sequencing (scRNA-seq) captures whole transcriptome information of individual cells. While scRNA"], "order_basis": "paper_text_order:103", "id": "assay:1"}, {"role": "data_generation", "definition_id": "scrna_seq", "definition_version": "99e1195c7d6f", "definition_digest": null, "required_operations": [], "support_state": "unsupported", "source_hashes": {"assay_lexicon": "99e1195c7d6f"}, "confidence": 0.99, "evidence": ["MOTIVATION: Single-cell RNA sequencing (scRNA-seq) captures whole transcriptome inf", "MOTIVATION: Single-cell RNA sequencing (scRNA-seq) captures whole transcriptome information of", "ptome information of individual cells. While scRNA-seq measures thousands of genes, researchers are", "s how to select those informative genes from scRNA-seq data. Moreover, single-cell targeted gene pr"], "order_basis": "paper_text_order:103", "id": "assay:2"}, {"role": "analysis", "definition_id": "machine_learning", "definition_version": "f2132e96ae6c7a4e", "definition_digest": null, "required_operations": [], "support_state": "partial", "source_hashes": {"dsl_catalogue": "f2132e96ae6c7a4e"}, "confidence": 0.8, "evidence": ["random forest"], "order_basis": "consumes_earlier_output", "id": "assay:3"}]}