@wentorai/research-plugins 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -22
- package/curated/analysis/README.md +82 -56
- package/curated/domains/README.md +225 -69
- package/curated/literature/README.md +115 -46
- package/curated/research/README.md +106 -58
- package/curated/tools/README.md +107 -87
- package/curated/writing/README.md +92 -45
- package/mcp-configs/academic-db/alphafold-mcp.json +20 -0
- package/mcp-configs/academic-db/brightspace-mcp.json +21 -0
- package/mcp-configs/academic-db/climatiq-mcp.json +20 -0
- package/mcp-configs/academic-db/gibs-mcp.json +20 -0
- package/mcp-configs/academic-db/gis-mcp-server.json +22 -0
- package/mcp-configs/academic-db/google-earth-engine-mcp.json +21 -0
- package/mcp-configs/academic-db/m4-clinical-mcp.json +21 -0
- package/mcp-configs/academic-db/medical-mcp.json +21 -0
- package/mcp-configs/academic-db/nexonco-mcp.json +20 -0
- package/mcp-configs/academic-db/omop-mcp.json +20 -0
- package/mcp-configs/academic-db/onekgpd-mcp.json +20 -0
- package/mcp-configs/academic-db/openedu-mcp.json +20 -0
- package/mcp-configs/academic-db/opengenes-mcp.json +20 -0
- package/mcp-configs/academic-db/openstax-mcp.json +21 -0
- package/mcp-configs/academic-db/openstreetmap-mcp.json +21 -0
- package/mcp-configs/academic-db/opentargets-mcp.json +21 -0
- package/mcp-configs/academic-db/pdb-mcp.json +21 -0
- package/mcp-configs/academic-db/smithsonian-mcp.json +20 -0
- package/mcp-configs/ai-platform/magi-researchers.json +21 -0
- package/mcp-configs/ai-platform/mcp-academic-researcher.json +22 -0
- package/mcp-configs/ai-platform/open-paper-machine.json +21 -0
- package/mcp-configs/ai-platform/paper-intelligence.json +21 -0
- package/mcp-configs/ai-platform/paper-reader.json +21 -0
- package/mcp-configs/ai-platform/paperdebugger.json +21 -0
- package/mcp-configs/browser/exa-mcp.json +20 -0
- package/mcp-configs/browser/mcp-searxng.json +21 -0
- package/mcp-configs/browser/mcp-webresearch.json +20 -0
- package/mcp-configs/cloud-docs/confluence-mcp.json +37 -0
- package/mcp-configs/cloud-docs/google-drive-mcp.json +35 -0
- package/mcp-configs/cloud-docs/notion-mcp.json +29 -0
- package/mcp-configs/communication/discord-mcp.json +29 -0
- package/mcp-configs/communication/discourse-mcp.json +21 -0
- package/mcp-configs/communication/slack-mcp.json +29 -0
- package/mcp-configs/communication/telegram-mcp.json +28 -0
- package/mcp-configs/data-platform/automl-stat-mcp.json +21 -0
- package/mcp-configs/data-platform/jefferson-stats-mcp.json +22 -0
- package/mcp-configs/data-platform/mcp-excel-server.json +21 -0
- package/mcp-configs/data-platform/mcp-stata.json +21 -0
- package/mcp-configs/data-platform/mcpstack-jupyter.json +21 -0
- package/mcp-configs/data-platform/ml-mcp.json +21 -0
- package/mcp-configs/data-platform/nasdaq-data-link-mcp.json +20 -0
- package/mcp-configs/data-platform/numpy-mcp.json +21 -0
- package/mcp-configs/database/neo4j-mcp.json +37 -0
- package/mcp-configs/database/postgres-mcp.json +28 -0
- package/mcp-configs/database/sqlite-mcp.json +29 -0
- package/mcp-configs/dev-platform/geogebra-mcp.json +21 -0
- package/mcp-configs/dev-platform/github-mcp.json +31 -0
- package/mcp-configs/dev-platform/gitlab-mcp.json +34 -0
- package/mcp-configs/dev-platform/latex-mcp-server.json +21 -0
- package/mcp-configs/dev-platform/manim-mcp.json +20 -0
- package/mcp-configs/dev-platform/mcp-echarts.json +20 -0
- package/mcp-configs/dev-platform/panel-viz-mcp.json +20 -0
- package/mcp-configs/dev-platform/paperbanana.json +20 -0
- package/mcp-configs/dev-platform/texflow-mcp.json +20 -0
- package/mcp-configs/dev-platform/texmcp.json +20 -0
- package/mcp-configs/dev-platform/typst-mcp.json +21 -0
- package/mcp-configs/dev-platform/vizro-mcp.json +20 -0
- package/mcp-configs/email/email-mcp.json +40 -0
- package/mcp-configs/email/gmail-mcp.json +37 -0
- package/mcp-configs/note-knowledge/local-faiss-mcp.json +21 -0
- package/mcp-configs/note-knowledge/mcp-memory-service.json +21 -0
- package/mcp-configs/note-knowledge/mcp-obsidian.json +23 -0
- package/mcp-configs/note-knowledge/mcp-ragdocs.json +20 -0
- package/mcp-configs/note-knowledge/mcp-summarizer.json +21 -0
- package/mcp-configs/note-knowledge/mediawiki-mcp.json +21 -0
- package/mcp-configs/note-knowledge/openzim-mcp.json +20 -0
- package/mcp-configs/note-knowledge/zettelkasten-mcp.json +21 -0
- package/mcp-configs/reference-mgr/academic-paper-mcp-http.json +20 -0
- package/mcp-configs/reference-mgr/academix.json +20 -0
- package/mcp-configs/reference-mgr/arxiv-research-mcp.json +21 -0
- package/mcp-configs/reference-mgr/google-scholar-abstract-mcp.json +19 -0
- package/mcp-configs/reference-mgr/google-scholar-mcp.json +20 -0
- package/mcp-configs/reference-mgr/mcp-paperswithcode.json +21 -0
- package/mcp-configs/reference-mgr/mcp-scholarly.json +20 -0
- package/mcp-configs/reference-mgr/mcp-simple-arxiv.json +20 -0
- package/mcp-configs/reference-mgr/mcp-simple-pubmed.json +20 -0
- package/mcp-configs/reference-mgr/mcp-zotero.json +21 -0
- package/mcp-configs/reference-mgr/mendeley-mcp.json +20 -0
- package/mcp-configs/reference-mgr/ncbi-mcp-server.json +22 -0
- package/mcp-configs/reference-mgr/onecite.json +21 -0
- package/mcp-configs/reference-mgr/paper-search-mcp.json +21 -0
- package/mcp-configs/reference-mgr/pubmed-search-mcp.json +21 -0
- package/mcp-configs/reference-mgr/scholar-mcp.json +21 -0
- package/mcp-configs/reference-mgr/scholar-multi-mcp.json +21 -0
- package/mcp-configs/reference-mgr/seerai.json +21 -0
- package/mcp-configs/reference-mgr/semantic-scholar-fastmcp.json +21 -0
- package/mcp-configs/reference-mgr/sourcelibrary.json +20 -0
- package/mcp-configs/registry.json +178 -149
- package/mcp-configs/repository/dataverse-mcp.json +33 -0
- package/mcp-configs/repository/huggingface-mcp.json +29 -0
- package/openclaw.plugin.json +2 -2
- package/package.json +2 -2
- package/skills/analysis/dataviz/algorithm-visualizer-guide/SKILL.md +259 -0
- package/skills/analysis/dataviz/bokeh-visualization-guide/SKILL.md +270 -0
- package/skills/analysis/dataviz/chart-image-generator/SKILL.md +229 -0
- package/skills/analysis/dataviz/citation-map-guide/SKILL.md +184 -0
- package/skills/analysis/dataviz/d3-visualization-guide/SKILL.md +281 -0
- package/skills/analysis/dataviz/data-visualization-principles/SKILL.md +171 -0
- package/skills/analysis/dataviz/echarts-visualization-guide/SKILL.md +250 -0
- package/skills/analysis/dataviz/metabase-analytics-guide/SKILL.md +242 -0
- package/skills/analysis/dataviz/plotly-interactive-guide/SKILL.md +266 -0
- package/skills/analysis/dataviz/redash-analytics-guide/SKILL.md +284 -0
- package/skills/analysis/econometrics/econml-causal-guide/SKILL.md +163 -0
- package/skills/analysis/econometrics/empirical-paper-analysis/SKILL.md +192 -0
- package/skills/analysis/econometrics/mostly-harmless-guide/SKILL.md +139 -0
- package/skills/analysis/econometrics/panel-data-analyst/SKILL.md +259 -0
- package/skills/analysis/econometrics/panel-data-regression-workflow/SKILL.md +267 -0
- package/skills/analysis/econometrics/python-causality-guide/SKILL.md +134 -0
- package/skills/analysis/econometrics/stata-accounting-guide/SKILL.md +269 -0
- package/skills/analysis/econometrics/stata-analyst-guide/SKILL.md +245 -0
- package/skills/analysis/econometrics/stata-reference-guide/SKILL.md +293 -0
- package/skills/analysis/statistics/data-anomaly-detection/SKILL.md +157 -0
- package/skills/analysis/statistics/general-statistics-guide/SKILL.md +226 -0
- package/skills/analysis/statistics/infiagent-benchmark-guide/SKILL.md +106 -0
- package/skills/analysis/statistics/ml-experiment-tracker/SKILL.md +212 -0
- package/skills/analysis/statistics/pywayne-statistics-guide/SKILL.md +192 -0
- package/skills/analysis/statistics/quantitative-methods-guide/SKILL.md +193 -0
- package/skills/analysis/statistics/senior-data-scientist-guide/SKILL.md +223 -0
- package/skills/analysis/wrangling/claude-data-analysis-guide/SKILL.md +100 -0
- package/skills/analysis/wrangling/csv-data-analyzer/SKILL.md +170 -0
- package/skills/analysis/wrangling/data-cleaning-pipeline/SKILL.md +266 -0
- package/skills/analysis/wrangling/data-cog-guide/SKILL.md +178 -0
- package/skills/analysis/wrangling/open-data-scientist-guide/SKILL.md +197 -0
- package/skills/analysis/wrangling/stata-data-cleaning/SKILL.md +276 -0
- package/skills/analysis/wrangling/streamline-analyst-guide/SKILL.md +119 -0
- package/skills/analysis/wrangling/survey-data-processing/SKILL.md +298 -0
- package/skills/domains/ai-ml/ai-agent-papers-guide/SKILL.md +146 -0
- package/skills/domains/ai-ml/ai-model-benchmarking/SKILL.md +209 -0
- package/skills/domains/ai-ml/annotated-dl-papers-guide/SKILL.md +159 -0
- package/skills/domains/ai-ml/anomaly-detection-papers-guide/SKILL.md +167 -0
- package/skills/domains/ai-ml/autonomous-agents-papers-guide/SKILL.md +178 -0
- package/skills/domains/ai-ml/dl-transformer-finetune/SKILL.md +239 -0
- package/skills/domains/ai-ml/domain-adaptation-papers-guide/SKILL.md +173 -0
- package/skills/domains/ai-ml/generative-ai-guide/SKILL.md +146 -0
- package/skills/domains/ai-ml/graph-learning-papers-guide/SKILL.md +125 -0
- package/skills/domains/ai-ml/huggingface-inference-guide/SKILL.md +196 -0
- package/skills/domains/ai-ml/keras-deep-learning/SKILL.md +210 -0
- package/skills/domains/ai-ml/kolmogorov-arnold-networks-guide/SKILL.md +185 -0
- package/skills/domains/ai-ml/llm-from-scratch-guide/SKILL.md +124 -0
- package/skills/domains/ai-ml/ml-pipeline-guide/SKILL.md +295 -0
- package/skills/domains/ai-ml/nlp-toolkit-guide/SKILL.md +247 -0
- package/skills/domains/ai-ml/npcpy-research-guide/SKILL.md +137 -0
- package/skills/domains/ai-ml/pytorch-guide/SKILL.md +281 -0
- package/skills/domains/ai-ml/pytorch-lightning-guide/SKILL.md +244 -0
- package/skills/domains/ai-ml/responsible-ai-guide/SKILL.md +126 -0
- package/skills/domains/ai-ml/tensorflow-guide/SKILL.md +241 -0
- package/skills/domains/ai-ml/vmas-simulator-guide/SKILL.md +129 -0
- package/skills/domains/biomedical/bioagents-guide/SKILL.md +308 -0
- package/skills/domains/biomedical/clawbio-guide/SKILL.md +167 -0
- package/skills/domains/biomedical/clinical-dialogue-agents-guide/SKILL.md +145 -0
- package/skills/domains/biomedical/ena-sequence-api/SKILL.md +175 -0
- package/skills/domains/biomedical/genomas-guide/SKILL.md +126 -0
- package/skills/domains/biomedical/genotex-benchmark-guide/SKILL.md +125 -0
- package/skills/domains/biomedical/med-researcher-guide/SKILL.md +161 -0
- package/skills/domains/biomedical/med-researcher-r1-guide/SKILL.md +146 -0
- package/skills/domains/biomedical/medgeclaw-guide/SKILL.md +345 -0
- package/skills/domains/biomedical/medical-imaging-guide/SKILL.md +305 -0
- package/skills/domains/biomedical/ncbi-blast-api/SKILL.md +195 -0
- package/skills/domains/biomedical/ncbi-datasets-api/SKILL.md +220 -0
- package/skills/domains/biomedical/quickgo-api/SKILL.md +181 -0
- package/skills/domains/business/architecture-design-guide/SKILL.md +279 -0
- package/skills/domains/business/innovation-management-guide/SKILL.md +257 -0
- package/skills/domains/business/operations-research-guide/SKILL.md +258 -0
- package/skills/domains/business/xpert-bi-guide/SKILL.md +84 -0
- package/skills/domains/chemistry/cactus-cheminformatics-guide/SKILL.md +89 -0
- package/skills/domains/chemistry/chemeagle-guide/SKILL.md +147 -0
- package/skills/domains/chemistry/chemgraph-agent-guide/SKILL.md +120 -0
- package/skills/domains/chemistry/molecular-dynamics-guide/SKILL.md +237 -0
- package/skills/domains/chemistry/pubchem-api-guide/SKILL.md +180 -0
- package/skills/domains/chemistry/spectroscopy-analysis-guide/SKILL.md +290 -0
- package/skills/domains/cs/ai-security-papers-guide/SKILL.md +103 -0
- package/skills/domains/cs/code-llm-papers-guide/SKILL.md +131 -0
- package/skills/domains/cs/distributed-systems-guide/SKILL.md +268 -0
- package/skills/domains/cs/formal-verification-guide/SKILL.md +298 -0
- package/skills/domains/cs/gaussian-splatting-papers-guide/SKILL.md +158 -0
- package/skills/domains/cs/llm-aiops-guide/SKILL.md +70 -0
- package/skills/domains/cs/software-heritage-api/SKILL.md +200 -0
- package/skills/domains/ecology/species-distribution-guide/SKILL.md +343 -0
- package/skills/domains/economics/imf-data-api-guide/SKILL.md +174 -0
- package/skills/domains/economics/nber-working-papers-api/SKILL.md +177 -0
- package/skills/domains/economics/post-labor-economics/SKILL.md +254 -0
- package/skills/domains/economics/pricing-psychology-guide/SKILL.md +273 -0
- package/skills/domains/economics/repec-economics-api/SKILL.md +188 -0
- package/skills/domains/economics/world-bank-data-guide/SKILL.md +179 -0
- package/skills/domains/education/academic-study-methods/SKILL.md +228 -0
- package/skills/domains/education/assessment-design-guide/SKILL.md +213 -0
- package/skills/domains/education/educational-research-methods/SKILL.md +179 -0
- package/skills/domains/education/edumcp-guide/SKILL.md +74 -0
- package/skills/domains/education/mooc-analytics-guide/SKILL.md +206 -0
- package/skills/domains/education/open-syllabus-api/SKILL.md +171 -0
- package/skills/domains/finance/akshare-finance-data/SKILL.md +207 -0
- package/skills/domains/finance/finsight-research-guide/SKILL.md +113 -0
- package/skills/domains/finance/options-analytics-agent-guide/SKILL.md +117 -0
- package/skills/domains/finance/portfolio-optimization-guide/SKILL.md +279 -0
- package/skills/domains/finance/risk-modeling-guide/SKILL.md +260 -0
- package/skills/domains/finance/stata-accounting-research/SKILL.md +372 -0
- package/skills/domains/geoscience/climate-modeling-guide/SKILL.md +215 -0
- package/skills/domains/geoscience/pangaea-data-api/SKILL.md +197 -0
- package/skills/domains/geoscience/satellite-remote-sensing/SKILL.md +193 -0
- package/skills/domains/geoscience/seismology-data-guide/SKILL.md +208 -0
- package/skills/domains/humanities/digital-humanities-methods/SKILL.md +232 -0
- package/skills/domains/humanities/ethical-philosophy-guide/SKILL.md +244 -0
- package/skills/domains/humanities/history-research-guide/SKILL.md +260 -0
- package/skills/domains/humanities/political-history-guide/SKILL.md +241 -0
- package/skills/domains/law/caselaw-access-api/SKILL.md +149 -0
- package/skills/domains/law/legal-agent-skills-guide/SKILL.md +132 -0
- package/skills/domains/law/legal-nlp-guide/SKILL.md +236 -0
- package/skills/domains/law/legal-research-methods/SKILL.md +190 -0
- package/skills/domains/law/opencontracts-guide/SKILL.md +168 -0
- package/skills/domains/law/patent-analysis-guide/SKILL.md +257 -0
- package/skills/domains/law/regulatory-compliance-guide/SKILL.md +267 -0
- package/skills/domains/math/lean-theorem-proving-guide/SKILL.md +140 -0
- package/skills/domains/math/symbolic-computation-guide/SKILL.md +263 -0
- package/skills/domains/math/topology-data-analysis/SKILL.md +305 -0
- package/skills/domains/pharma/clinical-trial-design-guide/SKILL.md +271 -0
- package/skills/domains/pharma/drug-target-interaction/SKILL.md +242 -0
- package/skills/domains/pharma/madd-drug-discovery-guide/SKILL.md +153 -0
- package/skills/domains/pharma/pharmacovigilance-guide/SKILL.md +216 -0
- package/skills/domains/physics/astrophysics-data-guide/SKILL.md +305 -0
- package/skills/domains/physics/particle-physics-guide/SKILL.md +287 -0
- package/skills/domains/social-science/ipums-microdata-api/SKILL.md +211 -0
- package/skills/domains/social-science/network-analysis-guide/SKILL.md +310 -0
- package/skills/domains/social-science/psychology-research-guide/SKILL.md +270 -0
- package/skills/domains/social-science/sociology-research-guide/SKILL.md +238 -0
- package/skills/domains/social-science/sociology-research-methods/SKILL.md +181 -0
- package/skills/literature/discovery/arxiv-paper-monitoring/SKILL.md +233 -0
- package/skills/literature/discovery/paper-recommendation-guide/SKILL.md +120 -0
- package/skills/literature/discovery/papers-we-love-guide/SKILL.md +169 -0
- package/skills/literature/discovery/semantic-paper-radar/SKILL.md +144 -0
- package/skills/literature/discovery/zotero-arxiv-daily-guide/SKILL.md +94 -0
- package/skills/literature/fulltext/bioc-pmc-api/SKILL.md +146 -0
- package/skills/literature/fulltext/core-api-guide/SKILL.md +144 -0
- package/skills/literature/fulltext/dataverse-api/SKILL.md +215 -0
- package/skills/literature/fulltext/hal-archive-api/SKILL.md +218 -0
- package/skills/literature/fulltext/institutional-repository-guide/SKILL.md +212 -0
- package/skills/literature/fulltext/open-access-mining-guide/SKILL.md +341 -0
- package/skills/literature/fulltext/osf-api/SKILL.md +212 -0
- package/skills/literature/fulltext/pmc-ftp-bulk-download/SKILL.md +182 -0
- package/skills/literature/fulltext/zotero-ai-butler-guide/SKILL.md +166 -0
- package/skills/literature/fulltext/zotero-scihub-guide/SKILL.md +168 -0
- package/skills/literature/metadata/academic-paper-summarizer/SKILL.md +101 -0
- package/skills/literature/metadata/bibliometrix-guide/SKILL.md +164 -0
- package/skills/literature/metadata/crossref-event-data-api/SKILL.md +183 -0
- package/skills/literature/metadata/doi-content-negotiation/SKILL.md +202 -0
- package/skills/literature/metadata/orkg-api/SKILL.md +153 -0
- package/skills/literature/metadata/plumx-metrics-api/SKILL.md +188 -0
- package/skills/literature/metadata/ror-organization-api/SKILL.md +208 -0
- package/skills/literature/metadata/sophosia-reference-guide/SKILL.md +110 -0
- package/skills/literature/metadata/viaf-authority-api/SKILL.md +209 -0
- package/skills/literature/metadata/wikidata-api-guide/SKILL.md +156 -0
- package/skills/literature/metadata/zoplicate-dedup-guide/SKILL.md +147 -0
- package/skills/literature/metadata/zotero-actions-tags-guide/SKILL.md +212 -0
- package/skills/literature/metadata/zotmoov-guide/SKILL.md +120 -0
- package/skills/literature/metadata/zutilo-guide/SKILL.md +140 -0
- package/skills/literature/search/arxiv-batch-reporting/SKILL.md +133 -0
- package/skills/literature/search/arxiv-cli-tools/SKILL.md +172 -0
- package/skills/literature/search/arxiv-osiris/SKILL.md +199 -0
- package/skills/literature/search/arxiv-paper-processor/SKILL.md +141 -0
- package/skills/literature/search/baidu-scholar-guide/SKILL.md +110 -0
- package/skills/literature/search/base-academic-search/SKILL.md +196 -0
- package/skills/literature/search/chatpaper-guide/SKILL.md +122 -0
- package/skills/literature/search/citeseerx-api/SKILL.md +183 -0
- package/skills/literature/search/deep-literature-search/SKILL.md +149 -0
- package/skills/literature/search/deepgit-search-guide/SKILL.md +147 -0
- package/skills/literature/search/eric-education-api/SKILL.md +199 -0
- package/skills/literature/search/findpapers-guide/SKILL.md +177 -0
- package/skills/literature/search/ieee-xplore-api/SKILL.md +177 -0
- package/skills/literature/search/lens-scholarly-api/SKILL.md +211 -0
- package/skills/literature/search/multi-database-literature-search/SKILL.md +198 -0
- package/skills/literature/search/open-library-api/SKILL.md +196 -0
- package/skills/literature/search/open-semantic-search-guide/SKILL.md +190 -0
- package/skills/literature/search/openaire-api/SKILL.md +141 -0
- package/skills/literature/search/paper-search-mcp-guide/SKILL.md +107 -0
- package/skills/literature/search/papers-chat-guide/SKILL.md +194 -0
- package/skills/literature/search/pasa-paper-search-guide/SKILL.md +138 -0
- package/skills/literature/search/plos-open-access-api/SKILL.md +203 -0
- package/skills/literature/search/scielo-api/SKILL.md +182 -0
- package/skills/literature/search/share-research-api/SKILL.md +129 -0
- package/skills/literature/search/worldcat-search-api/SKILL.md +224 -0
- package/skills/research/automation/ai-scientist-v2-guide/SKILL.md +284 -0
- package/skills/research/automation/aim-experiment-guide/SKILL.md +234 -0
- package/skills/research/automation/claude-academic-workflow-guide/SKILL.md +202 -0
- package/skills/research/automation/coexist-ai-guide/SKILL.md +149 -0
- package/skills/research/automation/datagen-research-guide/SKILL.md +131 -0
- package/skills/research/automation/foam-agent-guide/SKILL.md +203 -0
- package/skills/research/automation/kedro-pipeline-guide/SKILL.md +216 -0
- package/skills/research/automation/mle-agent-guide/SKILL.md +139 -0
- package/skills/research/automation/paper-to-agent-guide/SKILL.md +116 -0
- package/skills/research/automation/rd-agent-guide/SKILL.md +246 -0
- package/skills/research/automation/research-paper-orchestrator/SKILL.md +254 -0
- package/skills/research/deep-research/academic-deep-research/SKILL.md +190 -0
- package/skills/research/deep-research/auto-deep-research-guide/SKILL.md +141 -0
- package/skills/research/deep-research/cognitive-kernel-guide/SKILL.md +200 -0
- package/skills/research/deep-research/corvus-research-guide/SKILL.md +132 -0
- package/skills/research/deep-research/deep-research-pro/SKILL.md +213 -0
- package/skills/research/deep-research/deep-research-work/SKILL.md +204 -0
- package/skills/research/deep-research/deep-searcher-guide/SKILL.md +253 -0
- package/skills/research/deep-research/gpt-researcher-guide/SKILL.md +191 -0
- package/skills/research/deep-research/in-depth-research-guide/SKILL.md +205 -0
- package/skills/research/deep-research/khoj-research-guide/SKILL.md +200 -0
- package/skills/research/deep-research/kosmos-scientist-guide/SKILL.md +185 -0
- package/skills/research/deep-research/llm-scientific-discovery-guide/SKILL.md +178 -0
- package/skills/research/deep-research/local-deep-research-guide/SKILL.md +253 -0
- package/skills/research/deep-research/open-researcher-guide/SKILL.md +138 -0
- package/skills/research/deep-research/tongyi-deep-research-guide/SKILL.md +217 -0
- package/skills/research/funding/eu-horizon-guide/SKILL.md +244 -0
- package/skills/research/funding/grant-budget-guide/SKILL.md +284 -0
- package/skills/research/funding/nih-reporter-api-guide/SKILL.md +166 -0
- package/skills/research/funding/nsf-award-api-guide/SKILL.md +133 -0
- package/skills/research/methodology/academic-mentor-guide/SKILL.md +169 -0
- package/skills/research/methodology/claude-scientific-guide/SKILL.md +122 -0
- package/skills/research/methodology/deep-innovator-guide/SKILL.md +242 -0
- package/skills/research/methodology/osf-api-guide/SKILL.md +165 -0
- package/skills/research/methodology/parsifal-slr-guide/SKILL.md +154 -0
- package/skills/research/methodology/research-paper-kb/SKILL.md +263 -0
- package/skills/research/methodology/research-pipeline-units-guide/SKILL.md +169 -0
- package/skills/research/methodology/research-town-guide/SKILL.md +263 -0
- package/skills/research/methodology/slr-automation-guide/SKILL.md +235 -0
- package/skills/research/paper-review/automated-review-guide/SKILL.md +281 -0
- package/skills/research/paper-review/latte-review-guide/SKILL.md +175 -0
- package/skills/research/paper-review/paper-compare-guide/SKILL.md +238 -0
- package/skills/research/paper-review/paper-critique-framework/SKILL.md +181 -0
- package/skills/research/paper-review/paper-digest-guide/SKILL.md +240 -0
- package/skills/research/paper-review/paper-research-assistant/SKILL.md +231 -0
- package/skills/research/paper-review/research-quality-filter/SKILL.md +261 -0
- package/skills/research/paper-review/review-response-guide/SKILL.md +275 -0
- package/skills/tools/code-exec/contextplus-mcp-guide/SKILL.md +110 -0
- package/skills/tools/code-exec/google-colab-guide/SKILL.md +276 -0
- package/skills/tools/code-exec/kaggle-api-guide/SKILL.md +216 -0
- package/skills/tools/code-exec/overleaf-cli-guide/SKILL.md +279 -0
- package/skills/tools/diagram/clawphd-guide/SKILL.md +149 -0
- package/skills/tools/diagram/code-flow-visualizer/SKILL.md +197 -0
- package/skills/tools/diagram/excalidraw-diagram-guide/SKILL.md +170 -0
- package/skills/tools/diagram/json-data-visualizer/SKILL.md +270 -0
- package/skills/tools/diagram/kroki-diagram-api/SKILL.md +198 -0
- package/skills/tools/diagram/mermaid-architect-guide/SKILL.md +219 -0
- package/skills/tools/diagram/scientific-graphical-abstract/SKILL.md +201 -0
- package/skills/tools/diagram/tldraw-whiteboard-guide/SKILL.md +397 -0
- package/skills/tools/document/docsgpt-guide/SKILL.md +130 -0
- package/skills/tools/document/large-document-reader/SKILL.md +202 -0
- package/skills/tools/document/md2pdf-xelatex/SKILL.md +212 -0
- package/skills/tools/document/openpaper-guide/SKILL.md +232 -0
- package/skills/tools/document/paper-parse-guide/SKILL.md +243 -0
- package/skills/tools/document/weknora-guide/SKILL.md +216 -0
- package/skills/tools/document/zotero-addon-market-guide/SKILL.md +108 -0
- package/skills/tools/document/zotero-night-theme-guide/SKILL.md +142 -0
- package/skills/tools/document/zotero-style-guide/SKILL.md +217 -0
- package/skills/tools/knowledge-graph/citation-network-builder/SKILL.md +244 -0
- package/skills/tools/knowledge-graph/concept-map-generator/SKILL.md +284 -0
- package/skills/tools/knowledge-graph/graphiti-guide/SKILL.md +219 -0
- package/skills/tools/knowledge-graph/mimir-memory-guide/SKILL.md +135 -0
- package/skills/tools/knowledge-graph/notero-zotero-notion-guide/SKILL.md +187 -0
- package/skills/tools/knowledge-graph/open-webui-tools-guide/SKILL.md +156 -0
- package/skills/tools/knowledge-graph/openspg-guide/SKILL.md +210 -0
- package/skills/tools/knowledge-graph/paperpile-notion-guide/SKILL.md +84 -0
- package/skills/tools/knowledge-graph/zotero-markdb-connect-guide/SKILL.md +162 -0
- package/skills/tools/ocr-translate/latex-translation-guide/SKILL.md +176 -0
- package/skills/tools/ocr-translate/math-equation-renderer/SKILL.md +198 -0
- package/skills/tools/ocr-translate/pdf-math-translate-guide/SKILL.md +141 -0
- package/skills/tools/ocr-translate/zotero-pdf-translate-guide/SKILL.md +95 -0
- package/skills/tools/ocr-translate/zotero-pdf2zh-guide/SKILL.md +143 -0
- package/skills/tools/scraping/dataset-finder-guide/SKILL.md +253 -0
- package/skills/tools/scraping/easy-spider-guide/SKILL.md +250 -0
- package/skills/tools/scraping/google-scholar-scraper/SKILL.md +255 -0
- package/skills/tools/scraping/repository-harvesting-guide/SKILL.md +310 -0
- package/skills/writing/citation/academic-citation-manager/SKILL.md +314 -0
- package/skills/writing/citation/academic-citation-manager-guide/SKILL.md +182 -0
- package/skills/writing/citation/citation-assistant-skill/SKILL.md +192 -0
- package/skills/writing/citation/jabref-reference-guide/SKILL.md +127 -0
- package/skills/writing/citation/jasminum-zotero-guide/SKILL.md +103 -0
- package/skills/writing/citation/mendeley-api/SKILL.md +231 -0
- package/skills/writing/citation/obsidian-citation-guide/SKILL.md +164 -0
- package/skills/writing/citation/obsidian-zotero-guide/SKILL.md +137 -0
- package/skills/writing/citation/onecite-reference-guide/SKILL.md +168 -0
- package/skills/writing/citation/papersgpt-zotero-guide/SKILL.md +132 -0
- package/skills/writing/citation/papis-cli-guide/SKILL.md +213 -0
- package/skills/writing/citation/zotero-better-bibtex-guide/SKILL.md +107 -0
- package/skills/writing/citation/zotero-better-notes-guide/SKILL.md +121 -0
- package/skills/writing/citation/zotero-gpt-guide/SKILL.md +111 -0
- package/skills/writing/citation/zotero-mcp-guide/SKILL.md +164 -0
- package/skills/writing/citation/zotero-mdnotes-guide/SKILL.md +162 -0
- package/skills/writing/citation/zotero-reference-guide/SKILL.md +139 -0
- package/skills/writing/citation/zotero-scholar-guide/SKILL.md +294 -0
- package/skills/writing/citation/zotfile-attachment-guide/SKILL.md +140 -0
- package/skills/writing/composition/ml-paper-writing/SKILL.md +163 -0
- package/skills/writing/composition/opendraft-thesis-guide/SKILL.md +200 -0
- package/skills/writing/composition/paper-debugger-guide/SKILL.md +143 -0
- package/skills/writing/composition/paperforge-guide/SKILL.md +205 -0
- package/skills/writing/composition/research-paper-writer/SKILL.md +226 -0
- package/skills/writing/composition/scientific-writing-resources/SKILL.md +151 -0
- package/skills/writing/composition/scientific-writing-wrapper/SKILL.md +153 -0
- package/skills/writing/latex/academic-writing-latex/SKILL.md +285 -0
- package/skills/writing/latex/latex-drawing-collection/SKILL.md +154 -0
- package/skills/writing/latex/latex-templates-collection/SKILL.md +159 -0
- package/skills/writing/latex/md-to-pdf-academic/SKILL.md +230 -0
- package/skills/writing/latex/tex-render-guide/SKILL.md +243 -0
- package/skills/writing/polish/academic-tone-guide/SKILL.md +209 -0
- package/skills/writing/polish/chinese-text-humanizer/SKILL.md +140 -0
- package/skills/writing/polish/conciseness-editing-guide/SKILL.md +225 -0
- package/skills/writing/polish/paper-polish-guide/SKILL.md +160 -0
- package/skills/writing/templates/arxiv-preprint-template/SKILL.md +184 -0
- package/skills/writing/templates/elegant-paper-template/SKILL.md +141 -0
- package/skills/writing/templates/graphical-abstract-guide/SKILL.md +183 -0
- package/skills/writing/templates/novathesis-guide/SKILL.md +152 -0
- package/skills/writing/templates/scientific-article-pdf/SKILL.md +261 -0
- package/skills/writing/templates/sjtuthesis-guide/SKILL.md +197 -0
- package/skills/writing/templates/thuthesis-guide/SKILL.md +181 -0
- package/skills/literature/fulltext/repository-harvesting-guide/SKILL.md +0 -207
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: species-distribution-guide
|
|
3
|
+
description: "Species distribution modeling with MaxEnt, SDM methods, and GBIF data"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "paw-prints"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "ecology"
|
|
9
|
+
keywords: ["species-distribution", "maxent", "sdm", "gbif", "ecological-niche", "biodiversity", "habitat"]
|
|
10
|
+
source: "wentor"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# Species Distribution Modeling Guide
|
|
14
|
+
|
|
15
|
+
A skill for building and evaluating species distribution models (SDMs), covering occurrence data acquisition from biodiversity databases, environmental predictor preparation, model fitting with MaxEnt and ensemble methods, model evaluation, and projection under climate change scenarios.
|
|
16
|
+
|
|
17
|
+
## Occurrence Data
|
|
18
|
+
|
|
19
|
+
### Accessing GBIF Data
|
|
20
|
+
|
|
21
|
+
The Global Biodiversity Information Facility (GBIF) is the primary source of species occurrence records:
|
|
22
|
+
|
|
23
|
+
```python
|
|
24
|
+
from pygbif import occurrences, species
|
|
25
|
+
|
|
26
|
+
def download_occurrences(species_name: str, country: str = None,
|
|
27
|
+
limit: int = 5000,
|
|
28
|
+
has_coordinate: bool = True) -> dict:
|
|
29
|
+
"""
|
|
30
|
+
Download species occurrence records from GBIF.
|
|
31
|
+
species_name: scientific name (e.g., 'Panthera tigris')
|
|
32
|
+
Returns cleaned occurrence records with coordinates.
|
|
33
|
+
"""
|
|
34
|
+
# Get GBIF species key
|
|
35
|
+
name_result = species.name_backbone(name=species_name)
|
|
36
|
+
if "usageKey" not in name_result:
|
|
37
|
+
return {"error": f"Species not found: {species_name}"}
|
|
38
|
+
|
|
39
|
+
species_key = name_result["usageKey"]
|
|
40
|
+
|
|
41
|
+
# Search occurrences
|
|
42
|
+
params = {
|
|
43
|
+
"taxonKey": species_key,
|
|
44
|
+
"hasCoordinate": has_coordinate,
|
|
45
|
+
"hasGeospatialIssue": False,
|
|
46
|
+
"limit": limit,
|
|
47
|
+
}
|
|
48
|
+
if country:
|
|
49
|
+
params["country"] = country
|
|
50
|
+
|
|
51
|
+
results = occurrences.search(**params)
|
|
52
|
+
|
|
53
|
+
# Clean records
|
|
54
|
+
records = []
|
|
55
|
+
seen_coords = set()
|
|
56
|
+
for rec in results.get("results", []):
|
|
57
|
+
lat = rec.get("decimalLatitude")
|
|
58
|
+
lon = rec.get("decimalLongitude")
|
|
59
|
+
if lat is None or lon is None:
|
|
60
|
+
continue
|
|
61
|
+
|
|
62
|
+
# Remove exact duplicates
|
|
63
|
+
coord_key = (round(lat, 4), round(lon, 4))
|
|
64
|
+
if coord_key in seen_coords:
|
|
65
|
+
continue
|
|
66
|
+
seen_coords.add(coord_key)
|
|
67
|
+
|
|
68
|
+
records.append({
|
|
69
|
+
"species": rec.get("species", species_name),
|
|
70
|
+
"latitude": lat,
|
|
71
|
+
"longitude": lon,
|
|
72
|
+
"year": rec.get("year"),
|
|
73
|
+
"basis_of_record": rec.get("basisOfRecord"),
|
|
74
|
+
"institution": rec.get("institutionCode"),
|
|
75
|
+
"country": rec.get("country"),
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
"species": species_name,
|
|
80
|
+
"gbif_key": species_key,
|
|
81
|
+
"n_records": len(records),
|
|
82
|
+
"records": records,
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Data Cleaning for SDM
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
import pandas as pd
|
|
90
|
+
import numpy as np
|
|
91
|
+
|
|
92
|
+
def clean_occurrences(records: pd.DataFrame,
|
|
93
|
+
study_extent: dict = None,
|
|
94
|
+
thin_distance_km: float = 10.0) -> pd.DataFrame:
|
|
95
|
+
"""
|
|
96
|
+
Clean occurrence records for species distribution modeling.
|
|
97
|
+
Removes outliers, duplicates, and applies spatial thinning.
|
|
98
|
+
|
|
99
|
+
study_extent: {min_lon, max_lon, min_lat, max_lat}
|
|
100
|
+
thin_distance_km: minimum distance between retained points
|
|
101
|
+
"""
|
|
102
|
+
df = records.copy()
|
|
103
|
+
|
|
104
|
+
# Remove records with missing coordinates
|
|
105
|
+
df = df.dropna(subset=["latitude", "longitude"])
|
|
106
|
+
|
|
107
|
+
# Remove records at (0,0) -- common data error
|
|
108
|
+
df = df[~((df.latitude == 0) & (df.longitude == 0))]
|
|
109
|
+
|
|
110
|
+
# Clip to study extent
|
|
111
|
+
if study_extent:
|
|
112
|
+
df = df[
|
|
113
|
+
(df.longitude >= study_extent["min_lon"]) &
|
|
114
|
+
(df.longitude <= study_extent["max_lon"]) &
|
|
115
|
+
(df.latitude >= study_extent["min_lat"]) &
|
|
116
|
+
(df.latitude <= study_extent["max_lat"])
|
|
117
|
+
]
|
|
118
|
+
|
|
119
|
+
# Spatial thinning (grid-based)
|
|
120
|
+
# Convert thinning distance to approximate degrees
|
|
121
|
+
thin_deg = thin_distance_km / 111.0
|
|
122
|
+
df["grid_x"] = (df.longitude / thin_deg).astype(int)
|
|
123
|
+
df["grid_y"] = (df.latitude / thin_deg).astype(int)
|
|
124
|
+
df = df.drop_duplicates(subset=["grid_x", "grid_y"])
|
|
125
|
+
df = df.drop(columns=["grid_x", "grid_y"])
|
|
126
|
+
|
|
127
|
+
return df.reset_index(drop=True)
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Environmental Predictors
|
|
131
|
+
|
|
132
|
+
### WorldClim Bioclimatic Variables
|
|
133
|
+
|
|
134
|
+
The standard predictor set for SDMs:
|
|
135
|
+
|
|
136
|
+
| Variable | Description | Unit |
|
|
137
|
+
|----------|-------------|------|
|
|
138
|
+
| BIO1 | Annual Mean Temperature | C x 10 |
|
|
139
|
+
| BIO2 | Mean Diurnal Range | C x 10 |
|
|
140
|
+
| BIO4 | Temperature Seasonality | SD x 100 |
|
|
141
|
+
| BIO5 | Max Temperature of Warmest Month | C x 10 |
|
|
142
|
+
| BIO6 | Min Temperature of Coldest Month | C x 10 |
|
|
143
|
+
| BIO12 | Annual Precipitation | mm |
|
|
144
|
+
| BIO13 | Precipitation of Wettest Month | mm |
|
|
145
|
+
| BIO14 | Precipitation of Driest Month | mm |
|
|
146
|
+
| BIO15 | Precipitation Seasonality | CV |
|
|
147
|
+
|
|
148
|
+
### Extracting Environmental Values
|
|
149
|
+
|
|
150
|
+
```python
|
|
151
|
+
import rasterio
|
|
152
|
+
from rasterio.sample import sample_gen
|
|
153
|
+
|
|
154
|
+
def extract_environmental_values(occurrence_coords: np.ndarray,
|
|
155
|
+
raster_paths: dict) -> pd.DataFrame:
|
|
156
|
+
"""
|
|
157
|
+
Extract environmental variable values at occurrence locations.
|
|
158
|
+
occurrence_coords: array of (longitude, latitude) pairs
|
|
159
|
+
raster_paths: {variable_name: filepath} for each predictor raster
|
|
160
|
+
"""
|
|
161
|
+
env_data = {}
|
|
162
|
+
|
|
163
|
+
for var_name, raster_path in raster_paths.items():
|
|
164
|
+
with rasterio.open(raster_path) as src:
|
|
165
|
+
values = []
|
|
166
|
+
for lon, lat in occurrence_coords:
|
|
167
|
+
row, col = src.index(lon, lat)
|
|
168
|
+
if 0 <= row < src.height and 0 <= col < src.width:
|
|
169
|
+
values.append(float(src.read(1)[row, col]))
|
|
170
|
+
else:
|
|
171
|
+
values.append(np.nan)
|
|
172
|
+
env_data[var_name] = values
|
|
173
|
+
|
|
174
|
+
df = pd.DataFrame(env_data)
|
|
175
|
+
df["longitude"] = occurrence_coords[:, 0]
|
|
176
|
+
df["latitude"] = occurrence_coords[:, 1]
|
|
177
|
+
|
|
178
|
+
# Remove points with nodata values
|
|
179
|
+
df = df.replace(src.nodata, np.nan).dropna()
|
|
180
|
+
return df
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Model Fitting
|
|
184
|
+
|
|
185
|
+
### MaxEnt (Maximum Entropy)
|
|
186
|
+
|
|
187
|
+
MaxEnt is the most widely used SDM algorithm for presence-only data:
|
|
188
|
+
|
|
189
|
+
```python
|
|
190
|
+
import subprocess
|
|
191
|
+
|
|
192
|
+
def run_maxent(samples_csv: str, env_layers_dir: str,
|
|
193
|
+
output_dir: str, features: str = "auto",
|
|
194
|
+
regularization: float = 1.0,
|
|
195
|
+
n_background: int = 10000) -> dict:
|
|
196
|
+
"""
|
|
197
|
+
Run MaxEnt species distribution model.
|
|
198
|
+
samples_csv: CSV with columns species, longitude, latitude
|
|
199
|
+
env_layers_dir: directory containing .asc raster files
|
|
200
|
+
output_dir: directory for model outputs
|
|
201
|
+
"""
|
|
202
|
+
cmd = [
|
|
203
|
+
"java", "-jar", "maxent.jar",
|
|
204
|
+
"-s", samples_csv,
|
|
205
|
+
"-e", env_layers_dir,
|
|
206
|
+
"-o", output_dir,
|
|
207
|
+
f"betamultiplier={regularization}",
|
|
208
|
+
f"maximumbackground={n_background}",
|
|
209
|
+
"responsecurves=true",
|
|
210
|
+
"jackknife=true",
|
|
211
|
+
"writeplotdata=true",
|
|
212
|
+
"autorun=true",
|
|
213
|
+
]
|
|
214
|
+
|
|
215
|
+
result = subprocess.run(cmd, capture_output=True, text=True)
|
|
216
|
+
|
|
217
|
+
# Parse results from maxentResults.csv
|
|
218
|
+
import csv
|
|
219
|
+
results_file = f"{output_dir}/maxentResults.csv"
|
|
220
|
+
with open(results_file) as f:
|
|
221
|
+
reader = csv.DictReader(f)
|
|
222
|
+
row = next(reader)
|
|
223
|
+
|
|
224
|
+
return {
|
|
225
|
+
"training_auc": float(row.get("Training AUC", 0)),
|
|
226
|
+
"test_auc": float(row.get("Test AUC", 0)),
|
|
227
|
+
"n_training": int(row.get("X Training samples", 0)),
|
|
228
|
+
"regularized_gain": float(row.get("Regularized training gain", 0)),
|
|
229
|
+
"important_variables": row.get("Percent contribution", ""),
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Ensemble SDM with Python
|
|
234
|
+
|
|
235
|
+
```python
|
|
236
|
+
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
|
|
237
|
+
from sklearn.linear_model import LogisticRegression
|
|
238
|
+
from sklearn.model_selection import cross_val_predict
|
|
239
|
+
from sklearn.metrics import roc_auc_score
|
|
240
|
+
|
|
241
|
+
def ensemble_sdm(presence_env: pd.DataFrame,
|
|
242
|
+
background_env: pd.DataFrame,
|
|
243
|
+
predictor_cols: list[str]) -> dict:
|
|
244
|
+
"""
|
|
245
|
+
Build an ensemble SDM from multiple algorithms.
|
|
246
|
+
presence_env: environmental values at presence points
|
|
247
|
+
background_env: environmental values at background/pseudo-absence points
|
|
248
|
+
"""
|
|
249
|
+
# Prepare data
|
|
250
|
+
X_pres = presence_env[predictor_cols].values
|
|
251
|
+
X_bg = background_env[predictor_cols].values
|
|
252
|
+
X = np.vstack([X_pres, X_bg])
|
|
253
|
+
y = np.concatenate([np.ones(len(X_pres)), np.zeros(len(X_bg))])
|
|
254
|
+
|
|
255
|
+
models = {
|
|
256
|
+
"random_forest": RandomForestClassifier(n_estimators=500, max_depth=10),
|
|
257
|
+
"gbm": GradientBoostingClassifier(n_estimators=300, max_depth=5,
|
|
258
|
+
learning_rate=0.05),
|
|
259
|
+
"logistic": LogisticRegression(max_iter=1000),
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
results = {}
|
|
263
|
+
predictions = {}
|
|
264
|
+
|
|
265
|
+
for name, model in models.items():
|
|
266
|
+
# Cross-validated predictions
|
|
267
|
+
cv_pred = cross_val_predict(model, X, y, cv=5, method="predict_proba")[:, 1]
|
|
268
|
+
auc = roc_auc_score(y, cv_pred)
|
|
269
|
+
|
|
270
|
+
model.fit(X, y)
|
|
271
|
+
results[name] = {"auc": round(auc, 4), "model": model}
|
|
272
|
+
predictions[name] = cv_pred
|
|
273
|
+
|
|
274
|
+
# Weighted ensemble (weight by AUC)
|
|
275
|
+
total_auc = sum(r["auc"] for r in results.values())
|
|
276
|
+
ensemble_pred = sum(
|
|
277
|
+
predictions[name] * results[name]["auc"] / total_auc
|
|
278
|
+
for name in models
|
|
279
|
+
)
|
|
280
|
+
ensemble_auc = roc_auc_score(y, ensemble_pred)
|
|
281
|
+
|
|
282
|
+
results["ensemble"] = {"auc": round(ensemble_auc, 4)}
|
|
283
|
+
return results
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## Model Evaluation
|
|
287
|
+
|
|
288
|
+
### Evaluation Metrics for SDMs
|
|
289
|
+
|
|
290
|
+
| Metric | Range | Interpretation |
|
|
291
|
+
|--------|-------|---------------|
|
|
292
|
+
| AUC | 0-1 | Discrimination ability (>0.7 useful, >0.8 good) |
|
|
293
|
+
| TSS (True Skill Statistic) | -1 to 1 | Sensitivity + Specificity - 1 |
|
|
294
|
+
| Boyce Index | -1 to 1 | Predicted-to-expected ratio consistency |
|
|
295
|
+
| Kappa | -1 to 1 | Agreement beyond chance |
|
|
296
|
+
|
|
297
|
+
```python
|
|
298
|
+
def compute_tss(y_true: np.ndarray, y_pred_proba: np.ndarray) -> dict:
|
|
299
|
+
"""
|
|
300
|
+
Compute TSS (True Skill Statistic) at the optimal threshold.
|
|
301
|
+
TSS = Sensitivity + Specificity - 1
|
|
302
|
+
"""
|
|
303
|
+
from sklearn.metrics import roc_curve
|
|
304
|
+
|
|
305
|
+
fpr, tpr, thresholds = roc_curve(y_true, y_pred_proba)
|
|
306
|
+
specificity = 1 - fpr
|
|
307
|
+
tss_values = tpr + specificity - 1
|
|
308
|
+
|
|
309
|
+
optimal_idx = np.argmax(tss_values)
|
|
310
|
+
return {
|
|
311
|
+
"tss": round(tss_values[optimal_idx], 4),
|
|
312
|
+
"optimal_threshold": round(thresholds[optimal_idx], 4),
|
|
313
|
+
"sensitivity": round(tpr[optimal_idx], 4),
|
|
314
|
+
"specificity": round(specificity[optimal_idx], 4),
|
|
315
|
+
}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
## Climate Change Projections
|
|
319
|
+
|
|
320
|
+
### Projecting Habitat Shifts
|
|
321
|
+
|
|
322
|
+
SDMs can project future suitable habitat under climate scenarios:
|
|
323
|
+
|
|
324
|
+
1. Fit model on current climate + occurrences
|
|
325
|
+
2. Obtain future climate rasters (CMIP6 SSP scenarios)
|
|
326
|
+
3. Predict suitability on future climate surfaces
|
|
327
|
+
4. Compare current vs future range to quantify shifts
|
|
328
|
+
|
|
329
|
+
Key considerations:
|
|
330
|
+
- Use multiple GCMs to capture model uncertainty
|
|
331
|
+
- Apply clamping for novel climate combinations
|
|
332
|
+
- Report range change metrics: area gained, area lost, centroid shift
|
|
333
|
+
|
|
334
|
+
## Tools and Resources
|
|
335
|
+
|
|
336
|
+
- **MaxEnt**: Maximum entropy SDM (Java, most cited SDM software)
|
|
337
|
+
- **biomod2 (R)**: Ensemble SDM framework with 10+ algorithms
|
|
338
|
+
- **Wallace (R Shiny)**: Interactive SDM workflow application
|
|
339
|
+
- **pygbif / rgbif**: GBIF data access from Python/R
|
|
340
|
+
- **rasterio / terra**: Raster data handling
|
|
341
|
+
- **WorldClim (worldclim.org)**: Global climate data at 1km resolution
|
|
342
|
+
- **CHELSA**: High-resolution climate data (better for mountainous regions)
|
|
343
|
+
- **eBird**: Citizen science bird occurrence data (Cornell Lab)
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: imf-data-api-guide
|
|
3
|
+
description: "Retrieve IMF economic indicators, exchange rates, and country data"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "📊"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "economics"
|
|
9
|
+
keywords: ["imf", "economics", "macroeconomics", "indicators", "exchange-rates", "gdp"]
|
|
10
|
+
source: "https://datahelp.imf.org/knowledgebase/articles/667681-using-json-restful-web-service"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# IMF Data API Guide
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
The International Monetary Fund (IMF) provides a free JSON-based REST API for accessing its extensive collection of macroeconomic and financial datasets. The API covers data from virtually every country and territory, spanning indicators such as GDP, inflation, trade balances, exchange rates, government finance statistics, and balance of payments.
|
|
18
|
+
|
|
19
|
+
For economics researchers, the IMF API is an essential tool for accessing authoritative international economic data without manual downloads. The data powers research in macroeconomics, development economics, international finance, and policy analysis. The API provides access to key datasets including the World Economic Outlook (WEO), International Financial Statistics (IFS), Balance of Payments Statistics (BOP), and the Direction of Trade Statistics (DOTS).
|
|
20
|
+
|
|
21
|
+
The API requires no authentication and returns JSON data. It uses a hierarchical structure of datasets, indicators, and country/time dimensions.
|
|
22
|
+
|
|
23
|
+
## Authentication
|
|
24
|
+
|
|
25
|
+
No authentication is required. The IMF Data API is completely free and open.
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# No API key needed
|
|
29
|
+
curl "https://www.imf.org/external/datamapper/api/v1/NGDP_RPCH?periods=2024"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Core Endpoints
|
|
33
|
+
|
|
34
|
+
### List Available Datasets
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
GET https://www.imf.org/external/datamapper/api/v1
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
curl -s "https://www.imf.org/external/datamapper/api/v1" | python3 -m json.tool
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### List Indicators in a Dataset
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
GET https://www.imf.org/external/datamapper/api/v1/indicators
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Get Data for an Indicator
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
GET https://www.imf.org/external/datamapper/api/v1/{indicator}?periods={year}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Common Indicators:**
|
|
57
|
+
- `NGDP_RPCH`: Real GDP growth (annual percent change)
|
|
58
|
+
- `PCPIPCH`: Inflation, consumer prices (annual percent change)
|
|
59
|
+
- `BCA_NGDPD`: Current account balance (percent of GDP)
|
|
60
|
+
- `GGXWDG_NGDP`: Government gross debt (percent of GDP)
|
|
61
|
+
- `LUR`: Unemployment rate
|
|
62
|
+
|
|
63
|
+
**Example: Get real GDP growth for all countries in 2024:**
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
curl -s "https://www.imf.org/external/datamapper/api/v1/NGDP_RPCH?periods=2024" \
|
|
67
|
+
| python3 -m json.tool
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### JSON RESTful Web Service (IFS and other databases)
|
|
71
|
+
|
|
72
|
+
For more granular data, use the Dataflow-based API:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
GET http://dataservices.imf.org/REST/SDMX_JSON.svc/CompactData/{database}/{dimensions}?startPeriod={start}&endPeriod={end}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Example: Monthly CPI data for the US and China:**
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
curl -s "http://dataservices.imf.org/REST/SDMX_JSON.svc/CompactData/IFS/M.US+CN.PCPI_IX?startPeriod=2020&endPeriod=2025" \
|
|
82
|
+
| python3 -m json.tool
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Python Example: Compare GDP Growth Across Countries
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
import requests
|
|
89
|
+
|
|
90
|
+
DATAMAPPER_URL = "https://www.imf.org/external/datamapper/api/v1"
|
|
91
|
+
|
|
92
|
+
def get_indicator_data(indicator, periods=None):
|
|
93
|
+
"""Fetch IMF indicator data for all countries."""
|
|
94
|
+
url = f"{DATAMAPPER_URL}/{indicator}"
|
|
95
|
+
params = {}
|
|
96
|
+
if periods:
|
|
97
|
+
params["periods"] = ",".join(str(p) for p in periods)
|
|
98
|
+
resp = requests.get(url, params=params)
|
|
99
|
+
resp.raise_for_status()
|
|
100
|
+
return resp.json()
|
|
101
|
+
|
|
102
|
+
# Compare real GDP growth across G7 countries
|
|
103
|
+
data = get_indicator_data("NGDP_RPCH", periods=[2022, 2023, 2024])
|
|
104
|
+
values = data.get("values", {}).get("NGDP_RPCH", {})
|
|
105
|
+
|
|
106
|
+
g7_codes = ["USA", "GBR", "FRA", "DEU", "JPN", "CAN", "ITA"]
|
|
107
|
+
print("Country | 2022 | 2023 | 2024")
|
|
108
|
+
print("--------|--------|--------|-------")
|
|
109
|
+
for code in g7_codes:
|
|
110
|
+
country_data = values.get(code, {})
|
|
111
|
+
row = f"{code:7s}"
|
|
112
|
+
for year in ["2022", "2023", "2024"]:
|
|
113
|
+
val = country_data.get(year, "N/A")
|
|
114
|
+
if isinstance(val, (int, float)):
|
|
115
|
+
row += f" | {val:5.1f}%"
|
|
116
|
+
else:
|
|
117
|
+
row += f" | {str(val):>6s}"
|
|
118
|
+
print(row)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Python Example: Exchange Rate Time Series
|
|
122
|
+
|
|
123
|
+
```python
|
|
124
|
+
import requests
|
|
125
|
+
|
|
126
|
+
def get_exchange_rates(country_codes, start_year, end_year):
|
|
127
|
+
"""Fetch exchange rate data from IFS database."""
|
|
128
|
+
codes = "+".join(country_codes)
|
|
129
|
+
url = (
|
|
130
|
+
f"http://dataservices.imf.org/REST/SDMX_JSON.svc/"
|
|
131
|
+
f"CompactData/IFS/A.{codes}.ENDA_XDC_USD_RATE"
|
|
132
|
+
f"?startPeriod={start_year}&endPeriod={end_year}"
|
|
133
|
+
)
|
|
134
|
+
resp = requests.get(url)
|
|
135
|
+
resp.raise_for_status()
|
|
136
|
+
return resp.json()
|
|
137
|
+
|
|
138
|
+
data = get_exchange_rates(["BR", "IN", "ZA"], 2015, 2024)
|
|
139
|
+
series = data.get("CompactData", {}).get("DataSet", {}).get("Series", [])
|
|
140
|
+
for s in series:
|
|
141
|
+
country = s.get("@REF_AREA", "Unknown")
|
|
142
|
+
obs = s.get("Obs", [])
|
|
143
|
+
if isinstance(obs, dict):
|
|
144
|
+
obs = [obs]
|
|
145
|
+
print(f"\n{country} exchange rate (LCU per USD):")
|
|
146
|
+
for o in obs:
|
|
147
|
+
print(f" {o.get('@TIME_PERIOD')}: {o.get('@OBS_VALUE')}")
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Common Research Patterns
|
|
151
|
+
|
|
152
|
+
**Cross-Country Panel Analysis:** Retrieve indicator data for multiple countries and years to construct panel datasets for econometric analysis. Combine GDP growth, inflation, and trade data for gravity models or growth regressions.
|
|
153
|
+
|
|
154
|
+
**Policy Impact Assessment:** Track economic indicators before and after major policy changes or economic shocks. Compare indicator trajectories across treatment and control country groups.
|
|
155
|
+
|
|
156
|
+
**Forecasting Benchmarks:** Use IMF WEO projections as baseline forecasts to compare against model predictions. The IMF publishes projections for most indicators several years forward.
|
|
157
|
+
|
|
158
|
+
**Development Economics:** Access poverty, inequality, and structural indicators for developing economies to study convergence, aid effectiveness, and institutional quality.
|
|
159
|
+
|
|
160
|
+
## Rate Limits and Best Practices
|
|
161
|
+
|
|
162
|
+
- **No formal rate limit** published, but limit requests to 1 per second for sustained use
|
|
163
|
+
- **Caching:** IMF data updates infrequently (quarterly/annually); cache aggressively
|
|
164
|
+
- **DataMapper vs SDMX:** The DataMapper API is simpler; the SDMX JSON service is more granular with monthly/quarterly frequency
|
|
165
|
+
- **Country codes:** Use ISO 3-letter codes (USA, GBR, CHN) for the DataMapper API and ISO 2-letter codes (US, GB, CN) for the SDMX service
|
|
166
|
+
- **Large queries:** Fetch data for all countries at once rather than making per-country requests
|
|
167
|
+
- **Error handling:** The API may return empty objects for unavailable country-indicator combinations rather than errors
|
|
168
|
+
|
|
169
|
+
## References
|
|
170
|
+
|
|
171
|
+
- IMF Data API Documentation: https://datahelp.imf.org/knowledgebase/articles/667681-using-json-restful-web-service
|
|
172
|
+
- IMF DataMapper: https://www.imf.org/external/datamapper
|
|
173
|
+
- IMF Data Portal: https://data.imf.org/
|
|
174
|
+
- IMF World Economic Outlook: https://www.imf.org/en/Publications/WEO
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: nber-working-papers-api
|
|
3
|
+
description: "Access NBER working papers and economic research datasets"
|
|
4
|
+
metadata:
|
|
5
|
+
openclaw:
|
|
6
|
+
emoji: "📈"
|
|
7
|
+
category: "domains"
|
|
8
|
+
subcategory: "economics"
|
|
9
|
+
keywords: ["NBER", "working papers", "economics research", "macroeconomics", "economic policy", "recession dating"]
|
|
10
|
+
source: "https://www.nber.org/"
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
# NBER Working Papers and Data API
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
|
|
17
|
+
The National Bureau of Economic Research (NBER) is the leading U.S. economics research organization, publishing 1,200+ working papers annually by top economists. NBER papers are among the most cited in economics. The website provides structured access to working papers, researcher profiles, and macroeconomic datasets. Free metadata access; some full text requires subscription.
|
|
18
|
+
|
|
19
|
+
## Working Papers Access
|
|
20
|
+
|
|
21
|
+
### RSS/Atom Feeds
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Latest working papers feed
|
|
25
|
+
curl "https://www.nber.org/papers.rss"
|
|
26
|
+
|
|
27
|
+
# Papers by program
|
|
28
|
+
curl "https://www.nber.org/programs/ef/papers.rss" # Economic Fluctuations
|
|
29
|
+
curl "https://www.nber.org/programs/ls/papers.rss" # Labor Studies
|
|
30
|
+
curl "https://www.nber.org/programs/io/papers.rss" # Industrial Organization
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Working Paper Search
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# Search via NBER website (HTML scraping needed)
|
|
37
|
+
curl "https://www.nber.org/api/v1/working_page_listing/contentType/working_paper/?page=1&perPage=20&q=inflation+expectations"
|
|
38
|
+
|
|
39
|
+
# Get specific paper metadata
|
|
40
|
+
curl "https://www.nber.org/api/v1/working_page_listing/contentType/working_paper/?page=1&perPage=1&q=w28104"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### NBER Data Portal
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Macroeconomic history data
|
|
47
|
+
# Available at: https://data.nber.org/
|
|
48
|
+
|
|
49
|
+
# Business cycle dates
|
|
50
|
+
curl "https://data.nber.org/data/cycles/business_cycle_dates.json"
|
|
51
|
+
|
|
52
|
+
# CPS labor data extracts
|
|
53
|
+
# https://data.nber.org/cps/
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## NBER Programs
|
|
57
|
+
|
|
58
|
+
| Code | Program | Focus |
|
|
59
|
+
|------|---------|-------|
|
|
60
|
+
| `ef` | Economic Fluctuations and Growth | Macro, business cycles |
|
|
61
|
+
| `ls` | Labor Studies | Employment, wages |
|
|
62
|
+
| `io` | Industrial Organization | Markets, competition |
|
|
63
|
+
| `pe` | Public Economics | Taxation, spending |
|
|
64
|
+
| `he` | Health Economics | Healthcare markets |
|
|
65
|
+
| `de` | Development Economics | Developing countries |
|
|
66
|
+
| `if` | International Finance | Exchange rates, capital flows |
|
|
67
|
+
| `it` | International Trade | Trade policy |
|
|
68
|
+
| `me` | Monetary Economics | Central banking |
|
|
69
|
+
| `cf` | Corporate Finance | Firm finance |
|
|
70
|
+
| `ap` | Asset Pricing | Financial markets |
|
|
71
|
+
| `ed` | Education | Education economics |
|
|
72
|
+
| `ag` | Aging | Demographics |
|
|
73
|
+
| `ch` | Children | Child welfare |
|
|
74
|
+
| `le` | Law and Economics | Legal institutions |
|
|
75
|
+
| `env` | Environment and Energy | Environmental policy |
|
|
76
|
+
| `pol` | Political Economy | Political institutions |
|
|
77
|
+
|
|
78
|
+
## Python Usage
|
|
79
|
+
|
|
80
|
+
```python
|
|
81
|
+
import requests
|
|
82
|
+
from xml.etree import ElementTree
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def get_latest_papers(program: str = None,
|
|
86
|
+
count: int = 20) -> list:
|
|
87
|
+
"""Get latest NBER working papers via RSS."""
|
|
88
|
+
if program:
|
|
89
|
+
url = f"https://www.nber.org/programs/{program}/papers.rss"
|
|
90
|
+
else:
|
|
91
|
+
url = "https://www.nber.org/papers.rss"
|
|
92
|
+
|
|
93
|
+
resp = requests.get(url, timeout=30)
|
|
94
|
+
resp.raise_for_status()
|
|
95
|
+
|
|
96
|
+
root = ElementTree.fromstring(resp.content)
|
|
97
|
+
papers = []
|
|
98
|
+
for item in root.findall(".//item")[:count]:
|
|
99
|
+
papers.append({
|
|
100
|
+
"title": item.findtext("title", ""),
|
|
101
|
+
"link": item.findtext("link", ""),
|
|
102
|
+
"description": item.findtext("description", "")[:300],
|
|
103
|
+
"pub_date": item.findtext("pubDate", ""),
|
|
104
|
+
})
|
|
105
|
+
return papers
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def search_papers(query: str, page: int = 1,
|
|
109
|
+
per_page: int = 20) -> list:
|
|
110
|
+
"""Search NBER working papers."""
|
|
111
|
+
resp = requests.get(
|
|
112
|
+
"https://www.nber.org/api/v1/working_page_listing/"
|
|
113
|
+
"contentType/working_paper/",
|
|
114
|
+
params={"q": query, "page": page, "perPage": per_page},
|
|
115
|
+
timeout=30,
|
|
116
|
+
)
|
|
117
|
+
resp.raise_for_status()
|
|
118
|
+
data = resp.json()
|
|
119
|
+
|
|
120
|
+
results = []
|
|
121
|
+
for item in data.get("results", []):
|
|
122
|
+
results.append({
|
|
123
|
+
"title": item.get("title"),
|
|
124
|
+
"authors": item.get("authors", ""),
|
|
125
|
+
"number": item.get("wp_number", ""),
|
|
126
|
+
"date": item.get("date", ""),
|
|
127
|
+
"url": f"https://www.nber.org/papers/{item.get('wp_number', '')}",
|
|
128
|
+
"abstract": item.get("description", "")[:300],
|
|
129
|
+
"program": item.get("programs", []),
|
|
130
|
+
})
|
|
131
|
+
return results
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
def get_business_cycle_dates() -> list:
|
|
135
|
+
"""Get NBER official business cycle dates."""
|
|
136
|
+
resp = requests.get(
|
|
137
|
+
"https://data.nber.org/data/cycles/business_cycle_dates.json",
|
|
138
|
+
timeout=30,
|
|
139
|
+
)
|
|
140
|
+
resp.raise_for_status()
|
|
141
|
+
return resp.json()
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
# Example: latest macro working papers
|
|
145
|
+
papers = get_latest_papers(program="ef", count=5)
|
|
146
|
+
for p in papers:
|
|
147
|
+
print(f"{p['title']}")
|
|
148
|
+
print(f" {p['link']}")
|
|
149
|
+
|
|
150
|
+
# Example: search for AI economics papers
|
|
151
|
+
results = search_papers("artificial intelligence labor market")
|
|
152
|
+
for r in results:
|
|
153
|
+
print(f"[{r['number']}] {r['title']}")
|
|
154
|
+
print(f" Authors: {r['authors']}")
|
|
155
|
+
|
|
156
|
+
# Example: recession dates
|
|
157
|
+
cycles = get_business_cycle_dates()
|
|
158
|
+
for c in cycles[-3:]:
|
|
159
|
+
print(f"Peak: {c.get('peak')} → Trough: {c.get('trough')}")
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Key Datasets
|
|
163
|
+
|
|
164
|
+
| Dataset | Description |
|
|
165
|
+
|---------|-------------|
|
|
166
|
+
| Business Cycle Dates | Official US recession start/end dates |
|
|
167
|
+
| CPS Extracts | Current Population Survey labor data |
|
|
168
|
+
| Macrohistory Database | 150 years of macro indicators |
|
|
169
|
+
| Patent Data | Patent citation and classification |
|
|
170
|
+
| Trade Data | Bilateral trade statistics |
|
|
171
|
+
|
|
172
|
+
## References
|
|
173
|
+
|
|
174
|
+
- [NBER](https://www.nber.org/)
|
|
175
|
+
- [NBER Working Papers](https://www.nber.org/papers)
|
|
176
|
+
- [NBER Data](https://data.nber.org/)
|
|
177
|
+
- [NBER Programs](https://www.nber.org/programs-projects/programs)
|