[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DTM6CQ8R3GCBFA04728GJC":3,"skill-same:01M6DTM6CQ8R3GCBFA04728GJC":109},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":41,"commitSha":42,"skillDirectory":43,"forksCount":44,"repositoryHtmlUrl":45,"repositoryHomepageUrl":46,"ownerHtmlUrl":47,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":48,"install":49,"resources":62},"01M6DTM6CQ8R3GCBFA04728GJC","spatial-condition",null,"Load when comparing conditions on spatial AnnData using biological-sample pseudobulk PyDESeq2 or Wilcoxon, with sample, condition and cluster labels. Skip one-condition per-cluster DE (use spatial-de) and experiments without independent replicates.","TianGzlab\u002FOmicsClaw","TianGzlab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F150978281?v=4","01M6DT9WNJJ470ADHPSMFAA02Y","01M6DT9WSN09C5K65GB6RK18R9",161,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-condition\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32],"Spatial","spatial condition","experiments","anndata","pydeseq2","use","sample","control","expression","differential-expression","DESeq2","de","wilcoxon","condition","pseudobulk","2026-11-10 10:12:30",false,"---\nname: spatial-condition\ndescription: Load when comparing conditions on spatial AnnData using biological-sample pseudobulk PyDESeq2 or Wilcoxon, with sample, condition and cluster labels. Skip one-condition per-cluster DE (use spatial-de) and experiments without independent replicates.\ntrigger: condition comparison, pseudobulk, DESeq2, treatment vs control\ntags:\n- spatial\n- condition\n- pseudobulk\n- differential-expression\n---\n\n# spatial-condition\n\n## Use from a step\n\n```python\nfrom skills._sdk.notebook import load_skill, read_input, write_output\nlibrary = load_skill(\"spatial-condition\")\nadata = library.compare_conditions(read_input(\"data\u002Fsamples.h5ad\"))\nwrite_output(library.results(adata), \"tables\u002Fpseudobulk_de.csv\")\n```\n\n## When to use\n\nCompare conditions within each expression cluster using independent biological\nsamples. Both PyDESeq2 and Wilcoxon operate on sample-level pseudobulk counts.\nSplitting spots from one sample does not create biological replicates.\nFor per-cluster marker genes use spatial-de.\n\n## Inputs & Outputs\n\nInput: AnnData with raw integer counts and sample\u002Fcondition columns.\nCounts are read from `layers[\"counts\"]`, then `raw`, then `X`.\nNonfinite, negative or fractional counts are rejected, not rounded.\nMissing default `leiden` labels trigger expression clustering; other missing\ncluster columns raise.\n\nFunctions return the same AnnData plus accessible result tables and a figure.\nCLI writes `processed.h5ad`, `report.md`, `result.json`,\n`tables\u002Fpseudobulk_de.csv`, per-cluster and skipped-contrast tables,\nand a diagnostic gallery. See [references\u002Foutput_contract.md](references\u002Foutput_contract.md)\nfor file names and generation conditions.\n\n## Key CLI\n\n```bash\npython skills\u002Fspatial\u002Fspatial-condition\u002Fspatial_condition.py --input samples.h5ad --output results\u002Fcondition --condition-key condition --sample-key sample_id --reference-condition control\npython skills\u002Fspatial\u002Fspatial-condition\u002Fspatial_condition.py --demo --output \u002Ftmp\u002Fspatial_condition\n```\n\n`examples\u002Fexample_step.py` checks sample-level counts on simulated data.\n[references\u002Fparameters.md](references\u002Fparameters.md) lists all backend flags.\n\n## Gotchas\n\n- `tables\u002Fskipped_contrasts.csv` explains missing comparisons; absence is not\n  evidence of no differential expression.\n- `pseudobulk_de.csv` includes per-row method and sample counts. PyDESeq2 fit\n  failures can use Wilcoxon; `run_info()[\"fallbacks\"]` records the reason and\n  requested\u002Fexecuted methods. Missing PyDESeq2 raises with an installer hint.\n- `layers[\"counts\"]` must be real counts, not rounded log-normalized expression.\n- `condition_key` and `sample_key` must differ, and each sample must belong\n  to exactly one condition.\n- `n_samples_reference` and `n_samples_other` count samples, never spots.\n  Two replicates per condition are the default minimum, not a power guarantee.\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `compare_conditions(adata, *, condition_key: str='condition', sample_key: str='sample_id', cluster_key: str='leiden', method: str='pydeseq2', reference_condition: str | None=None, min_counts_per_gene: int=10, min_samples_per_condition: int=2, fdr_threshold: float=0.05, log2fc_threshold: float=1.0, random_state: int=0, **parameters)`\n\nAggregate counts per sample and cluster, then test conditions in place.\n\nBoth methods use biological-sample pseudobulk, not individual spots.\nPyDESeq2 fitting failures may fall back to Wilcoxon, with warnings and a\nper-contrast fallback record. Missing packages do not trigger fallback.\n\n:param adata: AnnData with integer counts in layers['counts'], raw, or X,\n    in that preference order; each sample belongs to exactly one condition.\n:param condition_key: Condition column, default condition.\n:param sample_key: Biological replicate column, default sample_id.\n:param cluster_key: Cluster column, default leiden; missing leiden is computed.\n:param method: pydeseq2 (default) or pseudobulk wilcoxon.\n:param reference_condition: Reference label; None uses the first sorted condition.\n:param min_counts_per_gene: Minimum total pseudobulk count, default 10.\n:param min_samples_per_condition: Minimum independent replicates, default 2.\n:param fdr_threshold: Adjusted p-value threshold, default 0.05.\n:param log2fc_threshold: Absolute effect threshold for hit summaries, default 1.\n:param random_state: Seed for clustering only if leiden is absent, default 0.\n:param parameters: Backend options retain CLI defaults: pydeseq2_fit_type='parametric',\n    pydeseq2_size_factors_fit_type='ratio', pydeseq2_refit_cooks=True,\n    pydeseq2_alpha=0.05, pydeseq2_cooks_filter=True,\n    pydeseq2_independent_filter=True, pydeseq2_n_cpus=1,\n    wilcoxon_alternative='two-sided'.\n:returns: The same AnnData with JSON-encoded tables and diagnostics; results\n    returns the DE table and run_info includes skipped contrasts.\n:raises ValueError: Invalid counts, design, cluster column or parameters.\n:raises ImportError: Missing PyDESeq2; use install_skill_deps.\n\n### `run_info(adata, *, keep: bool=True) -> dict`\n\nRead comparison diagnostics and result tables.\n\n:param adata: AnnData returned by compare_conditions.\n:param keep: True retains diagnostics; False removes them for CLI serialization.\n:returns: Summary including global_de, per_cluster_de and skipped contrasts.\n\n### `results(adata) -> pd.DataFrame`\n\nReturn all tested genes across clusters and condition contrasts.\n\n:param adata: Compared AnnData.\n:returns: DataFrame with gene, log2fc, pvalue_adj, cluster, contrast and sample counts.\n    Empty if every contrast was skipped or diagnostics were removed.\n\n### `volcano_figure(adata, *, contrast: str | None=None)`\n\nPlot log2 fold changes against adjusted p-values.\n\n:param adata: Compared AnnData.\n:param contrast: Optional exact contrast label; None shows all tested entries.\n:returns: A matplotlib Figure; the caller saves and closes it.\n\n\u003C!-- api:end -->\n\n## Dependencies\n\n`anndata`, `matplotlib`, `numpy`, `pandas`, `pydeseq2`, `scanpy`, `scipy`, `seaborn`, `statsmodels`\n","# spatial-condition\n\n## Use from a step\n\n```python\nfrom skills._sdk.notebook import load_skill, read_input, write_output\nlibrary = load_skill(\"spatial-condition\")\nadata = library.compare_conditions(read_input(\"data\u002Fsamples.h5ad\"))\nwrite_output(library.results(adata), \"tables\u002Fpseudobulk_de.csv\")\n```\n\n## When to use\n\nCompare conditions within each expression cluster using independent biological\nsamples. Both PyDESeq2 and Wilcoxon operate on sample-level pseudobulk counts.\nSplitting spots from one sample does not create biological replicates.\nFor per-cluster marker genes use spatial-de.\n\n## Inputs & Outputs\n\nInput: AnnData with raw integer counts and sample\u002Fcondition columns.\nCounts are read from `layers[\"counts\"]`, then `raw`, then `X`.\nNonfinite, negative or fractional counts are rejected, not rounded.\nMissing default `leiden` labels trigger expression clustering; other missing\ncluster columns raise.\n\nFunctions return the same AnnData plus accessible result tables and a figure.\nCLI writes `processed.h5ad`, `report.md`, `result.json`,\n`tables\u002Fpseudobulk_de.csv`, per-cluster and skipped-contrast tables,\nand a diagnostic gallery. See [references\u002Foutput_contract.md](references\u002Foutput_contract.md)\nfor file names and generation conditions.\n\n## Key CLI\n\n```bash\npython skills\u002Fspatial\u002Fspatial-condition\u002Fspatial_condition.py --input samples.h5ad --output results\u002Fcondition --condition-key condition --sample-key sample_id --reference-condition control\npython skills\u002Fspatial\u002Fspatial-condition\u002Fspatial_condition.py --demo --output \u002Ftmp\u002Fspatial_condition\n```\n\n`examples\u002Fexample_step.py` checks sample-level counts on simulated data.\n[references\u002Fparameters.md](references\u002Fparameters.md) lists all backend flags.\n\n## Gotchas\n\n- `tables\u002Fskipped_contrasts.csv` explains missing comparisons; absence is not\n  evidence of no differential expression.\n- `pseudobulk_de.csv` includes per-row method and sample counts. PyDESeq2 fit\n  failures can use Wilcoxon; `run_info()[\"fallbacks\"]` records the reason and\n  requested\u002Fexecuted methods. Missing PyDESeq2 raises with an installer hint.\n- `layers[\"counts\"]` must be real counts, not rounded log-normalized expression.\n- `condition_key` and `sample_key` must differ, and each sample must belong\n  to exactly one condition.\n- `n_samples_reference` and `n_samples_other` count samples, never spots.\n  Two replicates per condition are the default minimum, not a power guarantee.\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `compare_conditions(adata, *, condition_key: str='condition', sample_key: str='sample_id', cluster_key: str='leiden', method: str='pydeseq2', reference_condition: str | None=None, min_counts_per_gene: int=10, min_samples_per_condition: int=2, fdr_threshold: float=0.05, log2fc_threshold: float=1.0, random_state: int=0, **parameters)`\n\nAggregate counts per sample and cluster, then test conditions in place.\n\nBoth methods use biological-sample pseudobulk, not individual spots.\nPyDESeq2 fitting failures may fall back to Wilcoxon, with warnings and a\nper-contrast fallback record. Missing packages do not trigger fallback.\n\n:param adata: AnnData with integer counts in layers['counts'], raw, or X,\n    in that preference order; each sample belongs to exactly one condition.\n:param condition_key: Condition column, default condition.\n:param sample_key: Biological replicate column, default sample_id.\n:param cluster_key: Cluster column, default leiden; missing leiden is computed.\n:param method: pydeseq2 (default) or pseudobulk wilcoxon.\n:param reference_condition: Reference label; None uses the first sorted condition.\n:param min_counts_per_gene: Minimum total pseudobulk count, default 10.\n:param min_samples_per_condition: Minimum independent replicates, default 2.\n:param fdr_threshold: Adjusted p-value threshold, default 0.05.\n:param log2fc_threshold: Absolute effect threshold for hit summaries, default 1.\n:param random_state: Seed for clustering only if leiden is absent, default 0.\n:param parameters: Backend options retain CLI defaults: pydeseq2_fit_type='parametric',\n    pydeseq2_size_factors_fit_type='ratio', pydeseq2_refit_cooks=True,\n    pydeseq2_alpha=0.05, pydeseq2_cooks_filter=True,\n    pydeseq2_independent_filter=True, pydeseq2_n_cpus=1,\n    wilcoxon_alternative='two-sided'.\n:returns: The same AnnData with JSON-encoded tables and diagnostics; results\n    returns the DE table and run_info includes skipped contrasts.\n:raises ValueError: Invalid counts, design, cluster column or parameters.\n:raises ImportError: Missing PyDESeq2; use install_skill_deps.\n\n### `run_info(adata, *, keep: bool=True) -> dict`\n\nRead comparison diagnostics and result tables.\n\n:param adata: AnnData returned by compare_conditions.\n:param keep: True retains diagnostics; False removes them for CLI serialization.\n:returns: Summary including global_de, per_cluster_de and skipped contrasts.\n\n### `results(adata) -> pd.DataFrame`\n\nReturn all tested genes across clusters and condition contrasts.\n\n:param adata: Compared AnnData.\n:returns: DataFrame with gene, log2fc, pvalue_adj, cluster, contrast and sample counts.\n    Empty if every contrast was skipped or diagnostics were removed.\n\n### `volcano_figure(adata, *, contrast: str | None=None)`\n\nPlot log2 fold changes against adjusted p-values.\n\n:param adata: Compared AnnData.\n:param contrast: Optional exact contrast label; None shows all tested entries.\n:returns: A matplotlib Figure; the caller saves and closes it.\n\n\u003C!-- api:end -->\n\n## Dependencies\n\n`anndata`, `matplotlib`, `numpy`, `pandas`, `pydeseq2`, `scanpy`, `scipy`, `seaborn`, `statsmodels`\n",{"name":5,"tags":38,"trigger":40,"description":7},[39,31,32,27],"spatial","condition comparison, pseudobulk, DESeq2, treatment vs control","main","90a3bec3e6549bc33dddbf67e4b23869736c49d1","skills\u002Fspatial\u002Fspatial-condition",27,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw","https:\u002F\u002FTianGzlab.github.io\u002FOmicsClaw\u002F","https:\u002F\u002Fgithub.com\u002FTianGzlab","2026-10-08 01:36:11",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":61},[51,54,57],{"tool":52,"command":53},"npx","npx skills add TianGzlab\u002FOmicsClaw --skill spatial-condition",{"tool":55,"command":56},"bunx","bunx skills add TianGzlab\u002FOmicsClaw --skill spatial-condition",{"tool":58,"command":59},"pnpm","pnpm dlx skills add TianGzlab\u002FOmicsClaw --skill spatial-condition","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-condition\u002FSKILL.md",true,[63,69,73,79,85,89,93,97,101,105],{"path":64,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":67,"sourceHtmlUrl":68},"_api.py","SCRIPT","脚本",5998,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-condition\u002F_api.py",{"path":70,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":71,"sourceHtmlUrl":72},"examples\u002Fexample_step.py",1036,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-condition\u002Fexamples\u002Fexample_step.py",{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"r_visualization\u002Fcondition_publication_template.R","OTHER","其他",7569,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-condition\u002Fr_visualization\u002Fcondition_publication_template.R",{"path":80,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":83,"sourceHtmlUrl":84},"r_visualization\u002FREADME.md","REFERENCE","参考文档",1657,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-condition\u002Fr_visualization\u002FREADME.md",{"path":86,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":87,"sourceHtmlUrl":88},"references\u002Fmethodology.md",7549,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-condition\u002Freferences\u002Fmethodology.md",{"path":90,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":91,"sourceHtmlUrl":92},"references\u002Foutput_contract.md",2117,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-condition\u002Freferences\u002Foutput_contract.md",{"path":94,"resourceType":81,"resourceTypeDesc":82,"sizeBytes":95,"sourceHtmlUrl":96},"references\u002Fparameters.md",3193,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-condition\u002Freferences\u002Fparameters.md",{"path":98,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":99,"sourceHtmlUrl":100},"spatial_condition.py",48219,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-condition\u002Fspatial_condition.py",{"path":102,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":103,"sourceHtmlUrl":104},"tests\u002Ftest_api.py",1563,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-condition\u002Ftests\u002Ftest_api.py",{"path":106,"resourceType":65,"resourceTypeDesc":66,"sizeBytes":107,"sourceHtmlUrl":108},"tests\u002Ftest_spatial_condition.py",5729,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-condition\u002Ftests\u002Ftest_spatial_condition.py",[110,128,140,157,182,204],{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":121,"publishedAt":33},"01M6DTP4X225Q92RMY8XXHPCTT","demo-skill","A fixture skill for the skill environment tests. Use it for nothing else.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftests\u002Fskillenv\u002Ffixtures\u002Fskills\u002Fdemo\u002Fdemo-skill\u002FSKILL.md",[116],{"categoryNo":117,"categoryName":118,"taxonomyType":119,"taxonomyTypeDesc":120},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[122,123,124,125,126,23,127],"demo skill","demo","tests","fixture","fixture skill","environment",{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":33},"01M6DTP28JTWQK3HHXDNQV8BBV","fake-domains","Test fixture for the golden deployment in tests\u002Fentry. Load never; it has no script.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftests\u002Fentry\u002Ffake_skills\u002Fspatial\u002Ffake-domains\u002FSKILL.md",[],[135,136,137,124,125,138,139],"domains","fake domains","deployment","never","test",{"skillNo":141,"name":142,"nameZh":6,"description":143,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":144,"categories":145,"keywords":147,"publishedAt":33},"01M6DTNZ4AMWKTME1T18K5C643","replace-me-skill","Load when copying this directory to bootstrap a new OmicsClaw skill. Skip when an existing skill already covers the request.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002FSKILL.md",[146],{"categoryNo":117,"categoryName":118,"taxonomyType":119,"taxonomyTypeDesc":120},[148,149,150,151,152,153,154,155,156],"me","replace me skill","template","directory","skill template","existing skill","new skill","bootstrap","scaffold",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":163,"publishedAt":33},"01M6DTNV63MTD0Q6YRC52F0B1Y","spatial-velocity","Load when estimating RNA velocity on a spatial AnnData with `layers[\"spliced\"]` + `layers[\"unspliced\"]` via scVelo (stochastic \u002F deterministic \u002F dynamical) or veloVI (deep generative). Skip when input lacks the spliced\u002Funspliced layers (must be quantified upstream by velocyto \u002F kb-python \u002F STARsolo); non-spatial scRNA velocity (use sc-velocity).","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-velocity\u002FSKILL.md",[],[164,165,18,166,167,168,169,170,171,172,173,174,175,176,177,178,179,23,180,181],"velocity","spatial velocity","scvelo","input","starsolo","time","deep","RNA","kb-python","via","velocyto","rna-velocity","velovi","dynamics","upstream","kb","python","deterministic",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":188,"publishedAt":33},"01M6DTNPMR227NAT8QFY620YDW","spatial-trajectory","Load when inferring pseudotime \u002F lineage trajectories on a preprocessed spatial AnnData via DPT (default — diffusion pseudotime), CellRank (terminal-state + fate-probability), or Palantir (waypoint branch probabilities). Skip when the data has spliced\u002Funspliced layers and you want velocity-driven dynamics (use spatial-velocity); non-spatial scRNA pseudotime (use sc-pseudotime).","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-trajectory\u002FSKILL.md",[],[18,189,190,191,192,193,194,195,173,196,197,198,199,200,164,201,23,202,21,203],"trajectory","spatial trajectory","state","terminal","lineage","diffusion","cellrank","palantir","dpt","pseudotime","probability","cell","default","branch","data",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":210,"publishedAt":33},"01M6DTNJEYFT33P84DGHDNXW95","spatial-statistics","Load when running spatial autocorrelation \u002F hotspot \u002F co-occurrence \u002F neighbourhood-enrichment \u002F Ripley K stats on a clustered spatial AnnData via squidpy. Skip when ranking spatially variable genes (use spatial-genes); tissue domain detection (use spatial-domains).","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-statistics\u002FSKILL.md",[],[211,212,18,173,213,214,215,216,217,218,135,219,220,221,222,23,21,223,224,225],"spatial statistics","statistics","nhood-enrichment","co-occurrence","ripley","geary","moran","neighbourhood","ranking","autocorrelation","local","domain","detection","enrichment","stats"]