@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.
Files changed (415) hide show
  1. package/README.md +22 -22
  2. package/curated/analysis/README.md +82 -56
  3. package/curated/domains/README.md +225 -69
  4. package/curated/literature/README.md +115 -46
  5. package/curated/research/README.md +106 -58
  6. package/curated/tools/README.md +107 -87
  7. package/curated/writing/README.md +92 -45
  8. package/mcp-configs/academic-db/alphafold-mcp.json +20 -0
  9. package/mcp-configs/academic-db/brightspace-mcp.json +21 -0
  10. package/mcp-configs/academic-db/climatiq-mcp.json +20 -0
  11. package/mcp-configs/academic-db/gibs-mcp.json +20 -0
  12. package/mcp-configs/academic-db/gis-mcp-server.json +22 -0
  13. package/mcp-configs/academic-db/google-earth-engine-mcp.json +21 -0
  14. package/mcp-configs/academic-db/m4-clinical-mcp.json +21 -0
  15. package/mcp-configs/academic-db/medical-mcp.json +21 -0
  16. package/mcp-configs/academic-db/nexonco-mcp.json +20 -0
  17. package/mcp-configs/academic-db/omop-mcp.json +20 -0
  18. package/mcp-configs/academic-db/onekgpd-mcp.json +20 -0
  19. package/mcp-configs/academic-db/openedu-mcp.json +20 -0
  20. package/mcp-configs/academic-db/opengenes-mcp.json +20 -0
  21. package/mcp-configs/academic-db/openstax-mcp.json +21 -0
  22. package/mcp-configs/academic-db/openstreetmap-mcp.json +21 -0
  23. package/mcp-configs/academic-db/opentargets-mcp.json +21 -0
  24. package/mcp-configs/academic-db/pdb-mcp.json +21 -0
  25. package/mcp-configs/academic-db/smithsonian-mcp.json +20 -0
  26. package/mcp-configs/ai-platform/magi-researchers.json +21 -0
  27. package/mcp-configs/ai-platform/mcp-academic-researcher.json +22 -0
  28. package/mcp-configs/ai-platform/open-paper-machine.json +21 -0
  29. package/mcp-configs/ai-platform/paper-intelligence.json +21 -0
  30. package/mcp-configs/ai-platform/paper-reader.json +21 -0
  31. package/mcp-configs/ai-platform/paperdebugger.json +21 -0
  32. package/mcp-configs/browser/exa-mcp.json +20 -0
  33. package/mcp-configs/browser/mcp-searxng.json +21 -0
  34. package/mcp-configs/browser/mcp-webresearch.json +20 -0
  35. package/mcp-configs/cloud-docs/confluence-mcp.json +37 -0
  36. package/mcp-configs/cloud-docs/google-drive-mcp.json +35 -0
  37. package/mcp-configs/cloud-docs/notion-mcp.json +29 -0
  38. package/mcp-configs/communication/discord-mcp.json +29 -0
  39. package/mcp-configs/communication/discourse-mcp.json +21 -0
  40. package/mcp-configs/communication/slack-mcp.json +29 -0
  41. package/mcp-configs/communication/telegram-mcp.json +28 -0
  42. package/mcp-configs/data-platform/automl-stat-mcp.json +21 -0
  43. package/mcp-configs/data-platform/jefferson-stats-mcp.json +22 -0
  44. package/mcp-configs/data-platform/mcp-excel-server.json +21 -0
  45. package/mcp-configs/data-platform/mcp-stata.json +21 -0
  46. package/mcp-configs/data-platform/mcpstack-jupyter.json +21 -0
  47. package/mcp-configs/data-platform/ml-mcp.json +21 -0
  48. package/mcp-configs/data-platform/nasdaq-data-link-mcp.json +20 -0
  49. package/mcp-configs/data-platform/numpy-mcp.json +21 -0
  50. package/mcp-configs/database/neo4j-mcp.json +37 -0
  51. package/mcp-configs/database/postgres-mcp.json +28 -0
  52. package/mcp-configs/database/sqlite-mcp.json +29 -0
  53. package/mcp-configs/dev-platform/geogebra-mcp.json +21 -0
  54. package/mcp-configs/dev-platform/github-mcp.json +31 -0
  55. package/mcp-configs/dev-platform/gitlab-mcp.json +34 -0
  56. package/mcp-configs/dev-platform/latex-mcp-server.json +21 -0
  57. package/mcp-configs/dev-platform/manim-mcp.json +20 -0
  58. package/mcp-configs/dev-platform/mcp-echarts.json +20 -0
  59. package/mcp-configs/dev-platform/panel-viz-mcp.json +20 -0
  60. package/mcp-configs/dev-platform/paperbanana.json +20 -0
  61. package/mcp-configs/dev-platform/texflow-mcp.json +20 -0
  62. package/mcp-configs/dev-platform/texmcp.json +20 -0
  63. package/mcp-configs/dev-platform/typst-mcp.json +21 -0
  64. package/mcp-configs/dev-platform/vizro-mcp.json +20 -0
  65. package/mcp-configs/email/email-mcp.json +40 -0
  66. package/mcp-configs/email/gmail-mcp.json +37 -0
  67. package/mcp-configs/note-knowledge/local-faiss-mcp.json +21 -0
  68. package/mcp-configs/note-knowledge/mcp-memory-service.json +21 -0
  69. package/mcp-configs/note-knowledge/mcp-obsidian.json +23 -0
  70. package/mcp-configs/note-knowledge/mcp-ragdocs.json +20 -0
  71. package/mcp-configs/note-knowledge/mcp-summarizer.json +21 -0
  72. package/mcp-configs/note-knowledge/mediawiki-mcp.json +21 -0
  73. package/mcp-configs/note-knowledge/openzim-mcp.json +20 -0
  74. package/mcp-configs/note-knowledge/zettelkasten-mcp.json +21 -0
  75. package/mcp-configs/reference-mgr/academic-paper-mcp-http.json +20 -0
  76. package/mcp-configs/reference-mgr/academix.json +20 -0
  77. package/mcp-configs/reference-mgr/arxiv-research-mcp.json +21 -0
  78. package/mcp-configs/reference-mgr/google-scholar-abstract-mcp.json +19 -0
  79. package/mcp-configs/reference-mgr/google-scholar-mcp.json +20 -0
  80. package/mcp-configs/reference-mgr/mcp-paperswithcode.json +21 -0
  81. package/mcp-configs/reference-mgr/mcp-scholarly.json +20 -0
  82. package/mcp-configs/reference-mgr/mcp-simple-arxiv.json +20 -0
  83. package/mcp-configs/reference-mgr/mcp-simple-pubmed.json +20 -0
  84. package/mcp-configs/reference-mgr/mcp-zotero.json +21 -0
  85. package/mcp-configs/reference-mgr/mendeley-mcp.json +20 -0
  86. package/mcp-configs/reference-mgr/ncbi-mcp-server.json +22 -0
  87. package/mcp-configs/reference-mgr/onecite.json +21 -0
  88. package/mcp-configs/reference-mgr/paper-search-mcp.json +21 -0
  89. package/mcp-configs/reference-mgr/pubmed-search-mcp.json +21 -0
  90. package/mcp-configs/reference-mgr/scholar-mcp.json +21 -0
  91. package/mcp-configs/reference-mgr/scholar-multi-mcp.json +21 -0
  92. package/mcp-configs/reference-mgr/seerai.json +21 -0
  93. package/mcp-configs/reference-mgr/semantic-scholar-fastmcp.json +21 -0
  94. package/mcp-configs/reference-mgr/sourcelibrary.json +20 -0
  95. package/mcp-configs/registry.json +178 -149
  96. package/mcp-configs/repository/dataverse-mcp.json +33 -0
  97. package/mcp-configs/repository/huggingface-mcp.json +29 -0
  98. package/openclaw.plugin.json +2 -2
  99. package/package.json +2 -2
  100. package/skills/analysis/dataviz/algorithm-visualizer-guide/SKILL.md +259 -0
  101. package/skills/analysis/dataviz/bokeh-visualization-guide/SKILL.md +270 -0
  102. package/skills/analysis/dataviz/chart-image-generator/SKILL.md +229 -0
  103. package/skills/analysis/dataviz/citation-map-guide/SKILL.md +184 -0
  104. package/skills/analysis/dataviz/d3-visualization-guide/SKILL.md +281 -0
  105. package/skills/analysis/dataviz/data-visualization-principles/SKILL.md +171 -0
  106. package/skills/analysis/dataviz/echarts-visualization-guide/SKILL.md +250 -0
  107. package/skills/analysis/dataviz/metabase-analytics-guide/SKILL.md +242 -0
  108. package/skills/analysis/dataviz/plotly-interactive-guide/SKILL.md +266 -0
  109. package/skills/analysis/dataviz/redash-analytics-guide/SKILL.md +284 -0
  110. package/skills/analysis/econometrics/econml-causal-guide/SKILL.md +163 -0
  111. package/skills/analysis/econometrics/empirical-paper-analysis/SKILL.md +192 -0
  112. package/skills/analysis/econometrics/mostly-harmless-guide/SKILL.md +139 -0
  113. package/skills/analysis/econometrics/panel-data-analyst/SKILL.md +259 -0
  114. package/skills/analysis/econometrics/panel-data-regression-workflow/SKILL.md +267 -0
  115. package/skills/analysis/econometrics/python-causality-guide/SKILL.md +134 -0
  116. package/skills/analysis/econometrics/stata-accounting-guide/SKILL.md +269 -0
  117. package/skills/analysis/econometrics/stata-analyst-guide/SKILL.md +245 -0
  118. package/skills/analysis/econometrics/stata-reference-guide/SKILL.md +293 -0
  119. package/skills/analysis/statistics/data-anomaly-detection/SKILL.md +157 -0
  120. package/skills/analysis/statistics/general-statistics-guide/SKILL.md +226 -0
  121. package/skills/analysis/statistics/infiagent-benchmark-guide/SKILL.md +106 -0
  122. package/skills/analysis/statistics/ml-experiment-tracker/SKILL.md +212 -0
  123. package/skills/analysis/statistics/pywayne-statistics-guide/SKILL.md +192 -0
  124. package/skills/analysis/statistics/quantitative-methods-guide/SKILL.md +193 -0
  125. package/skills/analysis/statistics/senior-data-scientist-guide/SKILL.md +223 -0
  126. package/skills/analysis/wrangling/claude-data-analysis-guide/SKILL.md +100 -0
  127. package/skills/analysis/wrangling/csv-data-analyzer/SKILL.md +170 -0
  128. package/skills/analysis/wrangling/data-cleaning-pipeline/SKILL.md +266 -0
  129. package/skills/analysis/wrangling/data-cog-guide/SKILL.md +178 -0
  130. package/skills/analysis/wrangling/open-data-scientist-guide/SKILL.md +197 -0
  131. package/skills/analysis/wrangling/stata-data-cleaning/SKILL.md +276 -0
  132. package/skills/analysis/wrangling/streamline-analyst-guide/SKILL.md +119 -0
  133. package/skills/analysis/wrangling/survey-data-processing/SKILL.md +298 -0
  134. package/skills/domains/ai-ml/ai-agent-papers-guide/SKILL.md +146 -0
  135. package/skills/domains/ai-ml/ai-model-benchmarking/SKILL.md +209 -0
  136. package/skills/domains/ai-ml/annotated-dl-papers-guide/SKILL.md +159 -0
  137. package/skills/domains/ai-ml/anomaly-detection-papers-guide/SKILL.md +167 -0
  138. package/skills/domains/ai-ml/autonomous-agents-papers-guide/SKILL.md +178 -0
  139. package/skills/domains/ai-ml/dl-transformer-finetune/SKILL.md +239 -0
  140. package/skills/domains/ai-ml/domain-adaptation-papers-guide/SKILL.md +173 -0
  141. package/skills/domains/ai-ml/generative-ai-guide/SKILL.md +146 -0
  142. package/skills/domains/ai-ml/graph-learning-papers-guide/SKILL.md +125 -0
  143. package/skills/domains/ai-ml/huggingface-inference-guide/SKILL.md +196 -0
  144. package/skills/domains/ai-ml/keras-deep-learning/SKILL.md +210 -0
  145. package/skills/domains/ai-ml/kolmogorov-arnold-networks-guide/SKILL.md +185 -0
  146. package/skills/domains/ai-ml/llm-from-scratch-guide/SKILL.md +124 -0
  147. package/skills/domains/ai-ml/ml-pipeline-guide/SKILL.md +295 -0
  148. package/skills/domains/ai-ml/nlp-toolkit-guide/SKILL.md +247 -0
  149. package/skills/domains/ai-ml/npcpy-research-guide/SKILL.md +137 -0
  150. package/skills/domains/ai-ml/pytorch-guide/SKILL.md +281 -0
  151. package/skills/domains/ai-ml/pytorch-lightning-guide/SKILL.md +244 -0
  152. package/skills/domains/ai-ml/responsible-ai-guide/SKILL.md +126 -0
  153. package/skills/domains/ai-ml/tensorflow-guide/SKILL.md +241 -0
  154. package/skills/domains/ai-ml/vmas-simulator-guide/SKILL.md +129 -0
  155. package/skills/domains/biomedical/bioagents-guide/SKILL.md +308 -0
  156. package/skills/domains/biomedical/clawbio-guide/SKILL.md +167 -0
  157. package/skills/domains/biomedical/clinical-dialogue-agents-guide/SKILL.md +145 -0
  158. package/skills/domains/biomedical/ena-sequence-api/SKILL.md +175 -0
  159. package/skills/domains/biomedical/genomas-guide/SKILL.md +126 -0
  160. package/skills/domains/biomedical/genotex-benchmark-guide/SKILL.md +125 -0
  161. package/skills/domains/biomedical/med-researcher-guide/SKILL.md +161 -0
  162. package/skills/domains/biomedical/med-researcher-r1-guide/SKILL.md +146 -0
  163. package/skills/domains/biomedical/medgeclaw-guide/SKILL.md +345 -0
  164. package/skills/domains/biomedical/medical-imaging-guide/SKILL.md +305 -0
  165. package/skills/domains/biomedical/ncbi-blast-api/SKILL.md +195 -0
  166. package/skills/domains/biomedical/ncbi-datasets-api/SKILL.md +220 -0
  167. package/skills/domains/biomedical/quickgo-api/SKILL.md +181 -0
  168. package/skills/domains/business/architecture-design-guide/SKILL.md +279 -0
  169. package/skills/domains/business/innovation-management-guide/SKILL.md +257 -0
  170. package/skills/domains/business/operations-research-guide/SKILL.md +258 -0
  171. package/skills/domains/business/xpert-bi-guide/SKILL.md +84 -0
  172. package/skills/domains/chemistry/cactus-cheminformatics-guide/SKILL.md +89 -0
  173. package/skills/domains/chemistry/chemeagle-guide/SKILL.md +147 -0
  174. package/skills/domains/chemistry/chemgraph-agent-guide/SKILL.md +120 -0
  175. package/skills/domains/chemistry/molecular-dynamics-guide/SKILL.md +237 -0
  176. package/skills/domains/chemistry/pubchem-api-guide/SKILL.md +180 -0
  177. package/skills/domains/chemistry/spectroscopy-analysis-guide/SKILL.md +290 -0
  178. package/skills/domains/cs/ai-security-papers-guide/SKILL.md +103 -0
  179. package/skills/domains/cs/code-llm-papers-guide/SKILL.md +131 -0
  180. package/skills/domains/cs/distributed-systems-guide/SKILL.md +268 -0
  181. package/skills/domains/cs/formal-verification-guide/SKILL.md +298 -0
  182. package/skills/domains/cs/gaussian-splatting-papers-guide/SKILL.md +158 -0
  183. package/skills/domains/cs/llm-aiops-guide/SKILL.md +70 -0
  184. package/skills/domains/cs/software-heritage-api/SKILL.md +200 -0
  185. package/skills/domains/ecology/species-distribution-guide/SKILL.md +343 -0
  186. package/skills/domains/economics/imf-data-api-guide/SKILL.md +174 -0
  187. package/skills/domains/economics/nber-working-papers-api/SKILL.md +177 -0
  188. package/skills/domains/economics/post-labor-economics/SKILL.md +254 -0
  189. package/skills/domains/economics/pricing-psychology-guide/SKILL.md +273 -0
  190. package/skills/domains/economics/repec-economics-api/SKILL.md +188 -0
  191. package/skills/domains/economics/world-bank-data-guide/SKILL.md +179 -0
  192. package/skills/domains/education/academic-study-methods/SKILL.md +228 -0
  193. package/skills/domains/education/assessment-design-guide/SKILL.md +213 -0
  194. package/skills/domains/education/educational-research-methods/SKILL.md +179 -0
  195. package/skills/domains/education/edumcp-guide/SKILL.md +74 -0
  196. package/skills/domains/education/mooc-analytics-guide/SKILL.md +206 -0
  197. package/skills/domains/education/open-syllabus-api/SKILL.md +171 -0
  198. package/skills/domains/finance/akshare-finance-data/SKILL.md +207 -0
  199. package/skills/domains/finance/finsight-research-guide/SKILL.md +113 -0
  200. package/skills/domains/finance/options-analytics-agent-guide/SKILL.md +117 -0
  201. package/skills/domains/finance/portfolio-optimization-guide/SKILL.md +279 -0
  202. package/skills/domains/finance/risk-modeling-guide/SKILL.md +260 -0
  203. package/skills/domains/finance/stata-accounting-research/SKILL.md +372 -0
  204. package/skills/domains/geoscience/climate-modeling-guide/SKILL.md +215 -0
  205. package/skills/domains/geoscience/pangaea-data-api/SKILL.md +197 -0
  206. package/skills/domains/geoscience/satellite-remote-sensing/SKILL.md +193 -0
  207. package/skills/domains/geoscience/seismology-data-guide/SKILL.md +208 -0
  208. package/skills/domains/humanities/digital-humanities-methods/SKILL.md +232 -0
  209. package/skills/domains/humanities/ethical-philosophy-guide/SKILL.md +244 -0
  210. package/skills/domains/humanities/history-research-guide/SKILL.md +260 -0
  211. package/skills/domains/humanities/political-history-guide/SKILL.md +241 -0
  212. package/skills/domains/law/caselaw-access-api/SKILL.md +149 -0
  213. package/skills/domains/law/legal-agent-skills-guide/SKILL.md +132 -0
  214. package/skills/domains/law/legal-nlp-guide/SKILL.md +236 -0
  215. package/skills/domains/law/legal-research-methods/SKILL.md +190 -0
  216. package/skills/domains/law/opencontracts-guide/SKILL.md +168 -0
  217. package/skills/domains/law/patent-analysis-guide/SKILL.md +257 -0
  218. package/skills/domains/law/regulatory-compliance-guide/SKILL.md +267 -0
  219. package/skills/domains/math/lean-theorem-proving-guide/SKILL.md +140 -0
  220. package/skills/domains/math/symbolic-computation-guide/SKILL.md +263 -0
  221. package/skills/domains/math/topology-data-analysis/SKILL.md +305 -0
  222. package/skills/domains/pharma/clinical-trial-design-guide/SKILL.md +271 -0
  223. package/skills/domains/pharma/drug-target-interaction/SKILL.md +242 -0
  224. package/skills/domains/pharma/madd-drug-discovery-guide/SKILL.md +153 -0
  225. package/skills/domains/pharma/pharmacovigilance-guide/SKILL.md +216 -0
  226. package/skills/domains/physics/astrophysics-data-guide/SKILL.md +305 -0
  227. package/skills/domains/physics/particle-physics-guide/SKILL.md +287 -0
  228. package/skills/domains/social-science/ipums-microdata-api/SKILL.md +211 -0
  229. package/skills/domains/social-science/network-analysis-guide/SKILL.md +310 -0
  230. package/skills/domains/social-science/psychology-research-guide/SKILL.md +270 -0
  231. package/skills/domains/social-science/sociology-research-guide/SKILL.md +238 -0
  232. package/skills/domains/social-science/sociology-research-methods/SKILL.md +181 -0
  233. package/skills/literature/discovery/arxiv-paper-monitoring/SKILL.md +233 -0
  234. package/skills/literature/discovery/paper-recommendation-guide/SKILL.md +120 -0
  235. package/skills/literature/discovery/papers-we-love-guide/SKILL.md +169 -0
  236. package/skills/literature/discovery/semantic-paper-radar/SKILL.md +144 -0
  237. package/skills/literature/discovery/zotero-arxiv-daily-guide/SKILL.md +94 -0
  238. package/skills/literature/fulltext/bioc-pmc-api/SKILL.md +146 -0
  239. package/skills/literature/fulltext/core-api-guide/SKILL.md +144 -0
  240. package/skills/literature/fulltext/dataverse-api/SKILL.md +215 -0
  241. package/skills/literature/fulltext/hal-archive-api/SKILL.md +218 -0
  242. package/skills/literature/fulltext/institutional-repository-guide/SKILL.md +212 -0
  243. package/skills/literature/fulltext/open-access-mining-guide/SKILL.md +341 -0
  244. package/skills/literature/fulltext/osf-api/SKILL.md +212 -0
  245. package/skills/literature/fulltext/pmc-ftp-bulk-download/SKILL.md +182 -0
  246. package/skills/literature/fulltext/zotero-ai-butler-guide/SKILL.md +166 -0
  247. package/skills/literature/fulltext/zotero-scihub-guide/SKILL.md +168 -0
  248. package/skills/literature/metadata/academic-paper-summarizer/SKILL.md +101 -0
  249. package/skills/literature/metadata/bibliometrix-guide/SKILL.md +164 -0
  250. package/skills/literature/metadata/crossref-event-data-api/SKILL.md +183 -0
  251. package/skills/literature/metadata/doi-content-negotiation/SKILL.md +202 -0
  252. package/skills/literature/metadata/orkg-api/SKILL.md +153 -0
  253. package/skills/literature/metadata/plumx-metrics-api/SKILL.md +188 -0
  254. package/skills/literature/metadata/ror-organization-api/SKILL.md +208 -0
  255. package/skills/literature/metadata/sophosia-reference-guide/SKILL.md +110 -0
  256. package/skills/literature/metadata/viaf-authority-api/SKILL.md +209 -0
  257. package/skills/literature/metadata/wikidata-api-guide/SKILL.md +156 -0
  258. package/skills/literature/metadata/zoplicate-dedup-guide/SKILL.md +147 -0
  259. package/skills/literature/metadata/zotero-actions-tags-guide/SKILL.md +212 -0
  260. package/skills/literature/metadata/zotmoov-guide/SKILL.md +120 -0
  261. package/skills/literature/metadata/zutilo-guide/SKILL.md +140 -0
  262. package/skills/literature/search/arxiv-batch-reporting/SKILL.md +133 -0
  263. package/skills/literature/search/arxiv-cli-tools/SKILL.md +172 -0
  264. package/skills/literature/search/arxiv-osiris/SKILL.md +199 -0
  265. package/skills/literature/search/arxiv-paper-processor/SKILL.md +141 -0
  266. package/skills/literature/search/baidu-scholar-guide/SKILL.md +110 -0
  267. package/skills/literature/search/base-academic-search/SKILL.md +196 -0
  268. package/skills/literature/search/chatpaper-guide/SKILL.md +122 -0
  269. package/skills/literature/search/citeseerx-api/SKILL.md +183 -0
  270. package/skills/literature/search/deep-literature-search/SKILL.md +149 -0
  271. package/skills/literature/search/deepgit-search-guide/SKILL.md +147 -0
  272. package/skills/literature/search/eric-education-api/SKILL.md +199 -0
  273. package/skills/literature/search/findpapers-guide/SKILL.md +177 -0
  274. package/skills/literature/search/ieee-xplore-api/SKILL.md +177 -0
  275. package/skills/literature/search/lens-scholarly-api/SKILL.md +211 -0
  276. package/skills/literature/search/multi-database-literature-search/SKILL.md +198 -0
  277. package/skills/literature/search/open-library-api/SKILL.md +196 -0
  278. package/skills/literature/search/open-semantic-search-guide/SKILL.md +190 -0
  279. package/skills/literature/search/openaire-api/SKILL.md +141 -0
  280. package/skills/literature/search/paper-search-mcp-guide/SKILL.md +107 -0
  281. package/skills/literature/search/papers-chat-guide/SKILL.md +194 -0
  282. package/skills/literature/search/pasa-paper-search-guide/SKILL.md +138 -0
  283. package/skills/literature/search/plos-open-access-api/SKILL.md +203 -0
  284. package/skills/literature/search/scielo-api/SKILL.md +182 -0
  285. package/skills/literature/search/share-research-api/SKILL.md +129 -0
  286. package/skills/literature/search/worldcat-search-api/SKILL.md +224 -0
  287. package/skills/research/automation/ai-scientist-v2-guide/SKILL.md +284 -0
  288. package/skills/research/automation/aim-experiment-guide/SKILL.md +234 -0
  289. package/skills/research/automation/claude-academic-workflow-guide/SKILL.md +202 -0
  290. package/skills/research/automation/coexist-ai-guide/SKILL.md +149 -0
  291. package/skills/research/automation/datagen-research-guide/SKILL.md +131 -0
  292. package/skills/research/automation/foam-agent-guide/SKILL.md +203 -0
  293. package/skills/research/automation/kedro-pipeline-guide/SKILL.md +216 -0
  294. package/skills/research/automation/mle-agent-guide/SKILL.md +139 -0
  295. package/skills/research/automation/paper-to-agent-guide/SKILL.md +116 -0
  296. package/skills/research/automation/rd-agent-guide/SKILL.md +246 -0
  297. package/skills/research/automation/research-paper-orchestrator/SKILL.md +254 -0
  298. package/skills/research/deep-research/academic-deep-research/SKILL.md +190 -0
  299. package/skills/research/deep-research/auto-deep-research-guide/SKILL.md +141 -0
  300. package/skills/research/deep-research/cognitive-kernel-guide/SKILL.md +200 -0
  301. package/skills/research/deep-research/corvus-research-guide/SKILL.md +132 -0
  302. package/skills/research/deep-research/deep-research-pro/SKILL.md +213 -0
  303. package/skills/research/deep-research/deep-research-work/SKILL.md +204 -0
  304. package/skills/research/deep-research/deep-searcher-guide/SKILL.md +253 -0
  305. package/skills/research/deep-research/gpt-researcher-guide/SKILL.md +191 -0
  306. package/skills/research/deep-research/in-depth-research-guide/SKILL.md +205 -0
  307. package/skills/research/deep-research/khoj-research-guide/SKILL.md +200 -0
  308. package/skills/research/deep-research/kosmos-scientist-guide/SKILL.md +185 -0
  309. package/skills/research/deep-research/llm-scientific-discovery-guide/SKILL.md +178 -0
  310. package/skills/research/deep-research/local-deep-research-guide/SKILL.md +253 -0
  311. package/skills/research/deep-research/open-researcher-guide/SKILL.md +138 -0
  312. package/skills/research/deep-research/tongyi-deep-research-guide/SKILL.md +217 -0
  313. package/skills/research/funding/eu-horizon-guide/SKILL.md +244 -0
  314. package/skills/research/funding/grant-budget-guide/SKILL.md +284 -0
  315. package/skills/research/funding/nih-reporter-api-guide/SKILL.md +166 -0
  316. package/skills/research/funding/nsf-award-api-guide/SKILL.md +133 -0
  317. package/skills/research/methodology/academic-mentor-guide/SKILL.md +169 -0
  318. package/skills/research/methodology/claude-scientific-guide/SKILL.md +122 -0
  319. package/skills/research/methodology/deep-innovator-guide/SKILL.md +242 -0
  320. package/skills/research/methodology/osf-api-guide/SKILL.md +165 -0
  321. package/skills/research/methodology/parsifal-slr-guide/SKILL.md +154 -0
  322. package/skills/research/methodology/research-paper-kb/SKILL.md +263 -0
  323. package/skills/research/methodology/research-pipeline-units-guide/SKILL.md +169 -0
  324. package/skills/research/methodology/research-town-guide/SKILL.md +263 -0
  325. package/skills/research/methodology/slr-automation-guide/SKILL.md +235 -0
  326. package/skills/research/paper-review/automated-review-guide/SKILL.md +281 -0
  327. package/skills/research/paper-review/latte-review-guide/SKILL.md +175 -0
  328. package/skills/research/paper-review/paper-compare-guide/SKILL.md +238 -0
  329. package/skills/research/paper-review/paper-critique-framework/SKILL.md +181 -0
  330. package/skills/research/paper-review/paper-digest-guide/SKILL.md +240 -0
  331. package/skills/research/paper-review/paper-research-assistant/SKILL.md +231 -0
  332. package/skills/research/paper-review/research-quality-filter/SKILL.md +261 -0
  333. package/skills/research/paper-review/review-response-guide/SKILL.md +275 -0
  334. package/skills/tools/code-exec/contextplus-mcp-guide/SKILL.md +110 -0
  335. package/skills/tools/code-exec/google-colab-guide/SKILL.md +276 -0
  336. package/skills/tools/code-exec/kaggle-api-guide/SKILL.md +216 -0
  337. package/skills/tools/code-exec/overleaf-cli-guide/SKILL.md +279 -0
  338. package/skills/tools/diagram/clawphd-guide/SKILL.md +149 -0
  339. package/skills/tools/diagram/code-flow-visualizer/SKILL.md +197 -0
  340. package/skills/tools/diagram/excalidraw-diagram-guide/SKILL.md +170 -0
  341. package/skills/tools/diagram/json-data-visualizer/SKILL.md +270 -0
  342. package/skills/tools/diagram/kroki-diagram-api/SKILL.md +198 -0
  343. package/skills/tools/diagram/mermaid-architect-guide/SKILL.md +219 -0
  344. package/skills/tools/diagram/scientific-graphical-abstract/SKILL.md +201 -0
  345. package/skills/tools/diagram/tldraw-whiteboard-guide/SKILL.md +397 -0
  346. package/skills/tools/document/docsgpt-guide/SKILL.md +130 -0
  347. package/skills/tools/document/large-document-reader/SKILL.md +202 -0
  348. package/skills/tools/document/md2pdf-xelatex/SKILL.md +212 -0
  349. package/skills/tools/document/openpaper-guide/SKILL.md +232 -0
  350. package/skills/tools/document/paper-parse-guide/SKILL.md +243 -0
  351. package/skills/tools/document/weknora-guide/SKILL.md +216 -0
  352. package/skills/tools/document/zotero-addon-market-guide/SKILL.md +108 -0
  353. package/skills/tools/document/zotero-night-theme-guide/SKILL.md +142 -0
  354. package/skills/tools/document/zotero-style-guide/SKILL.md +217 -0
  355. package/skills/tools/knowledge-graph/citation-network-builder/SKILL.md +244 -0
  356. package/skills/tools/knowledge-graph/concept-map-generator/SKILL.md +284 -0
  357. package/skills/tools/knowledge-graph/graphiti-guide/SKILL.md +219 -0
  358. package/skills/tools/knowledge-graph/mimir-memory-guide/SKILL.md +135 -0
  359. package/skills/tools/knowledge-graph/notero-zotero-notion-guide/SKILL.md +187 -0
  360. package/skills/tools/knowledge-graph/open-webui-tools-guide/SKILL.md +156 -0
  361. package/skills/tools/knowledge-graph/openspg-guide/SKILL.md +210 -0
  362. package/skills/tools/knowledge-graph/paperpile-notion-guide/SKILL.md +84 -0
  363. package/skills/tools/knowledge-graph/zotero-markdb-connect-guide/SKILL.md +162 -0
  364. package/skills/tools/ocr-translate/latex-translation-guide/SKILL.md +176 -0
  365. package/skills/tools/ocr-translate/math-equation-renderer/SKILL.md +198 -0
  366. package/skills/tools/ocr-translate/pdf-math-translate-guide/SKILL.md +141 -0
  367. package/skills/tools/ocr-translate/zotero-pdf-translate-guide/SKILL.md +95 -0
  368. package/skills/tools/ocr-translate/zotero-pdf2zh-guide/SKILL.md +143 -0
  369. package/skills/tools/scraping/dataset-finder-guide/SKILL.md +253 -0
  370. package/skills/tools/scraping/easy-spider-guide/SKILL.md +250 -0
  371. package/skills/tools/scraping/google-scholar-scraper/SKILL.md +255 -0
  372. package/skills/tools/scraping/repository-harvesting-guide/SKILL.md +310 -0
  373. package/skills/writing/citation/academic-citation-manager/SKILL.md +314 -0
  374. package/skills/writing/citation/academic-citation-manager-guide/SKILL.md +182 -0
  375. package/skills/writing/citation/citation-assistant-skill/SKILL.md +192 -0
  376. package/skills/writing/citation/jabref-reference-guide/SKILL.md +127 -0
  377. package/skills/writing/citation/jasminum-zotero-guide/SKILL.md +103 -0
  378. package/skills/writing/citation/mendeley-api/SKILL.md +231 -0
  379. package/skills/writing/citation/obsidian-citation-guide/SKILL.md +164 -0
  380. package/skills/writing/citation/obsidian-zotero-guide/SKILL.md +137 -0
  381. package/skills/writing/citation/onecite-reference-guide/SKILL.md +168 -0
  382. package/skills/writing/citation/papersgpt-zotero-guide/SKILL.md +132 -0
  383. package/skills/writing/citation/papis-cli-guide/SKILL.md +213 -0
  384. package/skills/writing/citation/zotero-better-bibtex-guide/SKILL.md +107 -0
  385. package/skills/writing/citation/zotero-better-notes-guide/SKILL.md +121 -0
  386. package/skills/writing/citation/zotero-gpt-guide/SKILL.md +111 -0
  387. package/skills/writing/citation/zotero-mcp-guide/SKILL.md +164 -0
  388. package/skills/writing/citation/zotero-mdnotes-guide/SKILL.md +162 -0
  389. package/skills/writing/citation/zotero-reference-guide/SKILL.md +139 -0
  390. package/skills/writing/citation/zotero-scholar-guide/SKILL.md +294 -0
  391. package/skills/writing/citation/zotfile-attachment-guide/SKILL.md +140 -0
  392. package/skills/writing/composition/ml-paper-writing/SKILL.md +163 -0
  393. package/skills/writing/composition/opendraft-thesis-guide/SKILL.md +200 -0
  394. package/skills/writing/composition/paper-debugger-guide/SKILL.md +143 -0
  395. package/skills/writing/composition/paperforge-guide/SKILL.md +205 -0
  396. package/skills/writing/composition/research-paper-writer/SKILL.md +226 -0
  397. package/skills/writing/composition/scientific-writing-resources/SKILL.md +151 -0
  398. package/skills/writing/composition/scientific-writing-wrapper/SKILL.md +153 -0
  399. package/skills/writing/latex/academic-writing-latex/SKILL.md +285 -0
  400. package/skills/writing/latex/latex-drawing-collection/SKILL.md +154 -0
  401. package/skills/writing/latex/latex-templates-collection/SKILL.md +159 -0
  402. package/skills/writing/latex/md-to-pdf-academic/SKILL.md +230 -0
  403. package/skills/writing/latex/tex-render-guide/SKILL.md +243 -0
  404. package/skills/writing/polish/academic-tone-guide/SKILL.md +209 -0
  405. package/skills/writing/polish/chinese-text-humanizer/SKILL.md +140 -0
  406. package/skills/writing/polish/conciseness-editing-guide/SKILL.md +225 -0
  407. package/skills/writing/polish/paper-polish-guide/SKILL.md +160 -0
  408. package/skills/writing/templates/arxiv-preprint-template/SKILL.md +184 -0
  409. package/skills/writing/templates/elegant-paper-template/SKILL.md +141 -0
  410. package/skills/writing/templates/graphical-abstract-guide/SKILL.md +183 -0
  411. package/skills/writing/templates/novathesis-guide/SKILL.md +152 -0
  412. package/skills/writing/templates/scientific-article-pdf/SKILL.md +261 -0
  413. package/skills/writing/templates/sjtuthesis-guide/SKILL.md +197 -0
  414. package/skills/writing/templates/thuthesis-guide/SKILL.md +181 -0
  415. package/skills/literature/fulltext/repository-harvesting-guide/SKILL.md +0 -207
@@ -0,0 +1,279 @@
1
+ ---
2
+ name: portfolio-optimization-guide
3
+ description: "Portfolio theory, optimization algorithms, and asset allocation methods"
4
+ metadata:
5
+ openclaw:
6
+ emoji: "briefcase"
7
+ category: "domains"
8
+ subcategory: "finance"
9
+ keywords: ["portfolio", "optimization", "markowitz", "asset-allocation", "mean-variance", "black-litterman"]
10
+ source: "wentor"
11
+ ---
12
+
13
+ # Portfolio Optimization Guide
14
+
15
+ A skill for implementing and researching portfolio optimization methods, from classical mean-variance optimization to modern robust and factor-based approaches. Covers Markowitz theory, Black-Litterman, risk parity, and machine learning-enhanced portfolio construction.
16
+
17
+ ## Mean-Variance Optimization
18
+
19
+ ### Classical Markowitz Portfolio
20
+
21
+ ```python
22
+ import numpy as np
23
+ from scipy.optimize import minimize
24
+
25
+ def mean_variance_optimize(expected_returns: np.ndarray,
26
+ cov_matrix: np.ndarray,
27
+ target_return: float = None,
28
+ risk_free_rate: float = 0.02) -> dict:
29
+ """
30
+ Markowitz mean-variance optimization.
31
+ expected_returns: array of expected returns for each asset
32
+ cov_matrix: covariance matrix of asset returns
33
+ target_return: target portfolio return (None for max Sharpe)
34
+ """
35
+ n_assets = len(expected_returns)
36
+
37
+ def portfolio_volatility(weights):
38
+ return np.sqrt(weights @ cov_matrix @ weights)
39
+
40
+ def neg_sharpe(weights):
41
+ ret = weights @ expected_returns
42
+ vol = portfolio_volatility(weights)
43
+ return -(ret - risk_free_rate) / vol
44
+
45
+ # Constraints
46
+ constraints = [
47
+ {"type": "eq", "fun": lambda w: np.sum(w) - 1}, # weights sum to 1
48
+ ]
49
+ if target_return is not None:
50
+ constraints.append(
51
+ {"type": "eq", "fun": lambda w: w @ expected_returns - target_return}
52
+ )
53
+
54
+ # Bounds: no short selling (0 to 1 per asset)
55
+ bounds = [(0, 1) for _ in range(n_assets)]
56
+
57
+ # Initial guess: equal weight
58
+ w0 = np.ones(n_assets) / n_assets
59
+
60
+ if target_return is not None:
61
+ # Minimize volatility for given return
62
+ result = minimize(portfolio_volatility, w0,
63
+ bounds=bounds, constraints=constraints)
64
+ else:
65
+ # Maximize Sharpe ratio
66
+ result = minimize(neg_sharpe, w0,
67
+ bounds=bounds, constraints=constraints)
68
+
69
+ weights = result.x
70
+ ret = weights @ expected_returns
71
+ vol = portfolio_volatility(weights)
72
+
73
+ return {
74
+ "weights": {f"asset_{i}": round(w, 4) for i, w in enumerate(weights)},
75
+ "expected_return": round(ret, 4),
76
+ "volatility": round(vol, 4),
77
+ "sharpe_ratio": round((ret - risk_free_rate) / vol, 4),
78
+ }
79
+ ```
80
+
81
+ ### Efficient Frontier
82
+
83
+ ```python
84
+ def compute_efficient_frontier(expected_returns: np.ndarray,
85
+ cov_matrix: np.ndarray,
86
+ n_points: int = 50) -> list[dict]:
87
+ """
88
+ Compute the efficient frontier by solving for minimum variance
89
+ portfolios at each target return level.
90
+ """
91
+ min_ret = expected_returns.min() * 0.8
92
+ max_ret = expected_returns.max() * 1.1
93
+ target_returns = np.linspace(min_ret, max_ret, n_points)
94
+
95
+ frontier = []
96
+ for target in target_returns:
97
+ try:
98
+ result = mean_variance_optimize(
99
+ expected_returns, cov_matrix, target_return=target
100
+ )
101
+ frontier.append({
102
+ "return": result["expected_return"],
103
+ "volatility": result["volatility"],
104
+ "sharpe": result["sharpe_ratio"],
105
+ })
106
+ except Exception:
107
+ continue
108
+
109
+ return frontier
110
+ ```
111
+
112
+ ## Black-Litterman Model
113
+
114
+ ### Incorporating Investor Views
115
+
116
+ ```python
117
+ def black_litterman(market_cap_weights: np.ndarray,
118
+ cov_matrix: np.ndarray,
119
+ P: np.ndarray,
120
+ Q: np.ndarray,
121
+ omega: np.ndarray = None,
122
+ risk_aversion: float = 2.5,
123
+ tau: float = 0.05) -> dict:
124
+ """
125
+ Black-Litterman model for combining market equilibrium with
126
+ investor views.
127
+ market_cap_weights: market-cap weighted portfolio
128
+ cov_matrix: covariance matrix
129
+ P: pick matrix (k views x n assets), identifies assets in each view
130
+ Q: view returns (k x 1), expected returns for each view
131
+ omega: view uncertainty (k x k), diagonal matrix
132
+ """
133
+ # Step 1: Implied equilibrium returns (reverse optimization)
134
+ pi = risk_aversion * cov_matrix @ market_cap_weights
135
+
136
+ # Step 2: View uncertainty (if not provided, use He-Litterman)
137
+ if omega is None:
138
+ omega = np.diag(np.diag(tau * P @ cov_matrix @ P.T))
139
+
140
+ # Step 3: Posterior expected returns
141
+ tau_sigma = tau * cov_matrix
142
+ inv_tau_sigma = np.linalg.inv(tau_sigma)
143
+ inv_omega = np.linalg.inv(omega)
144
+
145
+ posterior_precision = inv_tau_sigma + P.T @ inv_omega @ P
146
+ posterior_cov = np.linalg.inv(posterior_precision)
147
+ posterior_mean = posterior_cov @ (inv_tau_sigma @ pi + P.T @ inv_omega @ Q)
148
+
149
+ return {
150
+ "equilibrium_returns": pi.round(4).tolist(),
151
+ "posterior_returns": posterior_mean.round(4).tolist(),
152
+ "posterior_covariance": posterior_cov.round(6).tolist(),
153
+ }
154
+ ```
155
+
156
+ ## Risk Parity
157
+
158
+ ### Equal Risk Contribution Portfolio
159
+
160
+ ```python
161
+ def risk_parity(cov_matrix: np.ndarray, budget: np.ndarray = None) -> dict:
162
+ """
163
+ Risk parity: each asset contributes equally to total portfolio risk.
164
+ budget: risk budget (default: equal, 1/n each)
165
+ """
166
+ n = cov_matrix.shape[0]
167
+ if budget is None:
168
+ budget = np.ones(n) / n
169
+
170
+ def objective(weights):
171
+ portfolio_vol = np.sqrt(weights @ cov_matrix @ weights)
172
+ marginal_risk = cov_matrix @ weights
173
+ risk_contribution = weights * marginal_risk / portfolio_vol
174
+ target_risk = budget * portfolio_vol
175
+ return np.sum((risk_contribution - target_risk) ** 2)
176
+
177
+ constraints = [{"type": "eq", "fun": lambda w: np.sum(w) - 1}]
178
+ bounds = [(0.01, 1) for _ in range(n)]
179
+ w0 = np.ones(n) / n
180
+
181
+ result = minimize(objective, w0, bounds=bounds, constraints=constraints)
182
+ weights = result.x
183
+
184
+ # Verify risk contributions
185
+ portfolio_vol = np.sqrt(weights @ cov_matrix @ weights)
186
+ marginal_risk = cov_matrix @ weights
187
+ risk_contrib = weights * marginal_risk / portfolio_vol
188
+ risk_pct = risk_contrib / risk_contrib.sum()
189
+
190
+ return {
191
+ "weights": weights.round(4).tolist(),
192
+ "portfolio_volatility": round(portfolio_vol, 4),
193
+ "risk_contributions": risk_pct.round(4).tolist(),
194
+ "max_risk_deviation": round(np.max(np.abs(risk_pct - budget)), 4),
195
+ }
196
+ ```
197
+
198
+ ## Factor-Based Portfolio Construction
199
+
200
+ ### Fama-French Factor Exposures
201
+
202
+ ```python
203
+ import statsmodels.api as sm
204
+
205
+ def estimate_factor_exposures(asset_returns: pd.DataFrame,
206
+ factor_returns: pd.DataFrame) -> pd.DataFrame:
207
+ """
208
+ Estimate asset exposures to Fama-French factors using regression.
209
+ factor_returns columns: Mkt-RF, SMB, HML, RMW, CMA (5-factor model)
210
+ """
211
+ results = []
212
+ for asset in asset_returns.columns:
213
+ y = asset_returns[asset] - factor_returns.get("RF", 0)
214
+ X = sm.add_constant(factor_returns[["Mkt-RF", "SMB", "HML", "RMW", "CMA"]])
215
+ model = sm.OLS(y, X).fit()
216
+
217
+ results.append({
218
+ "asset": asset,
219
+ "alpha": round(model.params["const"], 6),
220
+ "beta_market": round(model.params["Mkt-RF"], 4),
221
+ "beta_size": round(model.params["SMB"], 4),
222
+ "beta_value": round(model.params["HML"], 4),
223
+ "beta_profit": round(model.params["RMW"], 4),
224
+ "beta_invest": round(model.params["CMA"], 4),
225
+ "r_squared": round(model.rsquared, 4),
226
+ })
227
+
228
+ return pd.DataFrame(results)
229
+ ```
230
+
231
+ ## Rebalancing and Transaction Costs
232
+
233
+ ### Optimal Rebalancing with Costs
234
+
235
+ ```python
236
+ def rebalance_with_costs(current_weights: np.ndarray,
237
+ target_weights: np.ndarray,
238
+ portfolio_value: float,
239
+ cost_per_trade: float = 0.001,
240
+ threshold: float = 0.02) -> dict:
241
+ """
242
+ Determine rebalancing trades considering transaction costs.
243
+ threshold: minimum deviation to trigger rebalancing (2% default)
244
+ cost_per_trade: proportional transaction cost (10 bps)
245
+ """
246
+ deviations = np.abs(current_weights - target_weights)
247
+ needs_rebalance = np.any(deviations > threshold)
248
+
249
+ if not needs_rebalance:
250
+ return {"action": "hold", "reason": "within threshold"}
251
+
252
+ trades = target_weights - current_weights
253
+ trade_value = np.abs(trades) * portfolio_value
254
+ total_cost = trade_value.sum() * cost_per_trade
255
+
256
+ return {
257
+ "action": "rebalance",
258
+ "trades": trades.round(4).tolist(),
259
+ "turnover": np.abs(trades).sum() / 2,
260
+ "transaction_cost": round(total_cost, 2),
261
+ "cost_as_pct": round(total_cost / portfolio_value * 100, 4),
262
+ }
263
+ ```
264
+
265
+ ## Key Academic References
266
+
267
+ - Markowitz, H. (1952). Portfolio Selection. *Journal of Finance*.
268
+ - Black, F. and Litterman, R. (1992). Global Portfolio Optimization. *Financial Analysts Journal*.
269
+ - Maillard, S., Roncalli, T., and Teiletche, J. (2010). The Properties of Equally Weighted Risk Contribution Portfolios. *Journal of Portfolio Management*.
270
+ - Fama, E. and French, K. (2015). A Five-Factor Asset Pricing Model. *Journal of Financial Economics*.
271
+
272
+ ## Tools and Libraries
273
+
274
+ - **PyPortfolioOpt**: Portfolio optimization in Python (mean-variance, Black-Litterman, HRP)
275
+ - **riskfolio-lib**: Advanced portfolio optimization with risk measures
276
+ - **cvxpy**: Convex optimization for custom portfolio problems
277
+ - **QuantLib**: Fixed income and derivatives analytics
278
+ - **Kenneth French Data Library**: Factor returns data (free)
279
+ - **zipline / backtrader**: Backtesting frameworks for strategy evaluation
@@ -0,0 +1,260 @@
1
+ ---
2
+ name: risk-modeling-guide
3
+ description: "Financial risk modeling including VaR, stress testing, and credit risk"
4
+ metadata:
5
+ openclaw:
6
+ emoji: "chart-decreasing"
7
+ category: "domains"
8
+ subcategory: "finance"
9
+ keywords: ["risk-modeling", "var", "stress-testing", "credit-risk", "monte-carlo", "basel"]
10
+ source: "wentor"
11
+ ---
12
+
13
+ # Risk Modeling Guide
14
+
15
+ A skill for quantitative financial risk modeling, covering Value at Risk, Expected Shortfall, credit risk, stress testing, and Monte Carlo simulation methods. Essential for financial engineering research and regulatory risk analysis.
16
+
17
+ ## Market Risk: Value at Risk
18
+
19
+ ### VaR Methodologies
20
+
21
+ | Method | Description | Pros | Cons |
22
+ |--------|-------------|------|------|
23
+ | Historical simulation | Replay past returns | No distributional assumption | Assumes past repeats |
24
+ | Variance-covariance | Assume normal returns | Fast, analytical | Underestimates tail risk |
25
+ | Monte Carlo simulation | Simulate from fitted model | Flexible distributions | Computationally expensive |
26
+ | Filtered historical simulation | GARCH + historical innovations | Captures volatility clustering | More complex |
27
+
28
+ ### Implementation
29
+
30
+ ```python
31
+ import numpy as np
32
+ import pandas as pd
33
+ from scipy.stats import norm, t as t_dist
34
+
35
+ def historical_var(returns: np.ndarray, confidence: float = 0.99,
36
+ horizon_days: int = 1) -> dict:
37
+ """
38
+ Compute Value at Risk using historical simulation.
39
+ returns: array of daily log returns
40
+ confidence: confidence level (e.g., 0.99 for 99% VaR)
41
+ horizon_days: risk horizon in days
42
+ """
43
+ # Scale returns to horizon
44
+ if horizon_days > 1:
45
+ # Rolling sum for overlapping returns
46
+ scaled_returns = pd.Series(returns).rolling(horizon_days).sum().dropna().values
47
+ else:
48
+ scaled_returns = returns
49
+
50
+ alpha = 1 - confidence
51
+ var = -np.percentile(scaled_returns, alpha * 100)
52
+ es = -np.mean(scaled_returns[scaled_returns <= -var])
53
+
54
+ return {
55
+ "VaR": round(var, 6),
56
+ "Expected_Shortfall": round(es, 6),
57
+ "confidence": confidence,
58
+ "horizon_days": horizon_days,
59
+ "n_observations": len(scaled_returns),
60
+ }
61
+
62
+ def parametric_var(returns: np.ndarray, confidence: float = 0.99,
63
+ distribution: str = "normal") -> dict:
64
+ """
65
+ Parametric VaR assuming normal or Student-t distribution.
66
+ """
67
+ mu = np.mean(returns)
68
+ sigma = np.std(returns, ddof=1)
69
+
70
+ if distribution == "normal":
71
+ z = norm.ppf(1 - confidence)
72
+ var = -(mu + sigma * z)
73
+ # Analytical ES for normal
74
+ es = -mu + sigma * norm.pdf(norm.ppf(1 - confidence)) / (1 - confidence)
75
+ elif distribution == "student-t":
76
+ # Fit Student-t
77
+ df, loc, scale = t_dist.fit(returns)
78
+ z = t_dist.ppf(1 - confidence, df)
79
+ var = -(loc + scale * z)
80
+ # ES for Student-t
81
+ t_pdf = t_dist.pdf(t_dist.ppf(1 - confidence, df), df)
82
+ es = -loc + scale * (t_pdf / (1 - confidence)) * ((df + z**2) / (df - 1))
83
+ else:
84
+ raise ValueError(f"Unknown distribution: {distribution}")
85
+
86
+ return {
87
+ "VaR": round(var, 6),
88
+ "Expected_Shortfall": round(es, 6),
89
+ "distribution": distribution,
90
+ "mean": round(mu, 6),
91
+ "std": round(sigma, 6),
92
+ }
93
+ ```
94
+
95
+ ### Monte Carlo VaR
96
+
97
+ ```python
98
+ def monte_carlo_var(returns: np.ndarray, n_simulations: int = 100000,
99
+ confidence: float = 0.99,
100
+ horizon_days: int = 10) -> dict:
101
+ """
102
+ Monte Carlo VaR using GBM (Geometric Brownian Motion).
103
+ """
104
+ mu = np.mean(returns)
105
+ sigma = np.std(returns, ddof=1)
106
+
107
+ # Simulate daily returns for the horizon
108
+ rng = np.random.default_rng(42)
109
+ simulated = rng.normal(
110
+ mu * horizon_days,
111
+ sigma * np.sqrt(horizon_days),
112
+ size=n_simulations,
113
+ )
114
+
115
+ alpha = 1 - confidence
116
+ var = -np.percentile(simulated, alpha * 100)
117
+ es = -np.mean(simulated[simulated <= -var])
118
+
119
+ return {
120
+ "VaR": round(var, 6),
121
+ "Expected_Shortfall": round(es, 6),
122
+ "n_simulations": n_simulations,
123
+ "confidence": confidence,
124
+ "horizon_days": horizon_days,
125
+ }
126
+ ```
127
+
128
+ ## Credit Risk Modeling
129
+
130
+ ### Probability of Default Estimation
131
+
132
+ ```python
133
+ from sklearn.linear_model import LogisticRegression
134
+
135
+ def build_pd_model(features: pd.DataFrame,
136
+ default_flag: pd.Series) -> dict:
137
+ """
138
+ Build a Probability of Default (PD) model using logistic regression.
139
+ Common features: debt-to-income, credit utilization, payment history,
140
+ employment length, loan amount.
141
+ """
142
+ model = LogisticRegression(max_iter=1000, class_weight="balanced")
143
+ model.fit(features, default_flag)
144
+
145
+ # Coefficient interpretation
146
+ coef_df = pd.DataFrame({
147
+ "feature": features.columns,
148
+ "coefficient": model.coef_[0],
149
+ "odds_ratio": np.exp(model.coef_[0]),
150
+ }).sort_values("coefficient", ascending=False)
151
+
152
+ # Model discrimination
153
+ from sklearn.metrics import roc_auc_score
154
+ pred_proba = model.predict_proba(features)[:, 1]
155
+ auc = roc_auc_score(default_flag, pred_proba)
156
+
157
+ return {
158
+ "auc": round(auc, 4),
159
+ "coefficients": coef_df.to_dict("records"),
160
+ "intercept": round(model.intercept_[0], 4),
161
+ }
162
+ ```
163
+
164
+ ### Loss Given Default and EAD
165
+
166
+ ```python
167
+ def compute_expected_loss(pd_score: float, lgd: float,
168
+ ead: float) -> dict:
169
+ """
170
+ Compute Expected Loss = PD x LGD x EAD.
171
+ pd_score: probability of default (0-1)
172
+ lgd: loss given default (0-1, fraction of exposure lost)
173
+ ead: exposure at default (dollar amount)
174
+ """
175
+ el = pd_score * lgd * ead
176
+ return {
177
+ "PD": pd_score,
178
+ "LGD": lgd,
179
+ "EAD": ead,
180
+ "Expected_Loss": round(el, 2),
181
+ "Unexpected_Loss_99": round(el * 2.33 * np.sqrt(pd_score * (1 - pd_score)), 2),
182
+ }
183
+ ```
184
+
185
+ ## Stress Testing
186
+
187
+ ### Scenario-Based Stress Tests
188
+
189
+ ```python
190
+ def run_stress_test(portfolio_returns: pd.DataFrame,
191
+ scenarios: dict[str, dict]) -> pd.DataFrame:
192
+ """
193
+ Apply macroeconomic stress scenarios to a portfolio.
194
+ scenarios: {name: {factor: shock_value}} where factors are
195
+ macroeconomic variables (interest_rate, gdp_growth, unemployment, etc.)
196
+ """
197
+ # Factor sensitivities (betas from regression)
198
+ # In practice, estimated via historical regression
199
+ factor_betas = {
200
+ "interest_rate": -0.15, # portfolio loses 15bp per 1% rate increase
201
+ "gdp_growth": 0.08, # gains 8bp per 1% GDP growth
202
+ "unemployment": -0.12, # loses 12bp per 1% unemployment increase
203
+ "equity_market": 0.45, # 45bp per 1% equity market move
204
+ "credit_spread": -0.25, # loses 25bp per 1% spread widening
205
+ }
206
+
207
+ results = []
208
+ for name, shocks in scenarios.items():
209
+ portfolio_impact = 0
210
+ for factor, shock in shocks.items():
211
+ beta = factor_betas.get(factor, 0)
212
+ portfolio_impact += beta * shock
213
+
214
+ results.append({
215
+ "scenario": name,
216
+ "portfolio_impact_pct": round(portfolio_impact * 100, 2),
217
+ "shocks": shocks,
218
+ })
219
+
220
+ return pd.DataFrame(results)
221
+
222
+ # Example scenarios
223
+ scenarios = {
224
+ "Mild Recession": {
225
+ "interest_rate": -0.5, "gdp_growth": -2.0,
226
+ "unemployment": 2.0, "equity_market": -15.0,
227
+ "credit_spread": 1.5,
228
+ },
229
+ "Severe Recession": {
230
+ "interest_rate": -1.0, "gdp_growth": -5.0,
231
+ "unemployment": 5.0, "equity_market": -40.0,
232
+ "credit_spread": 4.0,
233
+ },
234
+ "Rate Shock": {
235
+ "interest_rate": 3.0, "gdp_growth": -1.0,
236
+ "unemployment": 1.0, "equity_market": -10.0,
237
+ "credit_spread": 1.0,
238
+ },
239
+ }
240
+ ```
241
+
242
+ ## Regulatory Framework
243
+
244
+ ### Basel III Capital Requirements
245
+
246
+ | Risk Type | Measurement | Capital Charge |
247
+ |-----------|-------------|---------------|
248
+ | Market risk | FRTB (Fundamental Review of the Trading Book) | ES at 97.5%, stressed calibration |
249
+ | Credit risk | SA or IRB approach | PD, LGD, EAD based risk weights |
250
+ | Operational risk | Basic Indicator / Standardized | Business indicator x ILM |
251
+ | Liquidity risk | LCR and NSFR ratios | High-quality liquid assets buffer |
252
+
253
+ ## Tools and Libraries
254
+
255
+ - **QuantLib (Python/C++)**: Derivatives pricing and risk analytics
256
+ - **riskfolio-lib**: Portfolio risk and optimization in Python
257
+ - **arch (Python)**: GARCH models for volatility estimation
258
+ - **pyfolio**: Portfolio performance and risk analysis
259
+ - **OpenGamma Strata**: Open-source market risk analytics (Java)
260
+ - **Moody's Analytics / Bloomberg PORT**: Commercial risk platforms