medsci-skills 4.1.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 (702) hide show
  1. package/LICENSE +50 -0
  2. package/README.md +602 -0
  3. package/README_FIRST.md +27 -0
  4. package/bin/medsci-skills.js +159 -0
  5. package/installers/install-macos.command +19 -0
  6. package/installers/install-windows.cmd +26 -0
  7. package/installers/install-windows.ps1 +17 -0
  8. package/installers/install.py +218 -0
  9. package/metadata/skills_catalog.json +452 -0
  10. package/package.json +48 -0
  11. package/skills/academic-aio/SKILL.md +408 -0
  12. package/skills/academic-aio/references/case_studies/kjr_mllm_2025.md +82 -0
  13. package/skills/academic-aio/references/checklists/AIO_GENERAL.md +354 -0
  14. package/skills/academic-aio/references/journal_summarybox_templates.yaml +126 -0
  15. package/skills/academic-aio/references/oac_funding_checklist.yaml +129 -0
  16. package/skills/academic-aio/references/reporting_guideline_mapping.md +39 -0
  17. package/skills/academic-aio/references/schema_markup_templates/CodeRepository.jsonld +32 -0
  18. package/skills/academic-aio/references/schema_markup_templates/Dataset.jsonld +36 -0
  19. package/skills/academic-aio/references/schema_markup_templates/Person.jsonld +30 -0
  20. package/skills/academic-aio/references/schema_markup_templates/README.md +43 -0
  21. package/skills/academic-aio/references/schema_markup_templates/ScholarlyArticle.jsonld +55 -0
  22. package/skills/academic-aio/scripts/batch_metadata_audit.py +169 -0
  23. package/skills/academic-aio/scripts/validate_schema.py +118 -0
  24. package/skills/academic-aio/skill.yml +36 -0
  25. package/skills/academic-aio/templates/aio_audit_checklist.md.j2 +108 -0
  26. package/skills/add-journal/SKILL.md +482 -0
  27. package/skills/add-journal/skill.yml +33 -0
  28. package/skills/analyze-stats/SKILL.md +598 -0
  29. package/skills/analyze-stats/references/analysis_guides/missing_data.md +109 -0
  30. package/skills/analyze-stats/references/analysis_guides/nhis_icd10_mapping.md +247 -0
  31. package/skills/analyze-stats/references/analysis_guides/propensity_score.md +132 -0
  32. package/skills/analyze-stats/references/analysis_guides/regression.md +115 -0
  33. package/skills/analyze-stats/references/analysis_guides/repeated_measures.md +160 -0
  34. package/skills/analyze-stats/references/analysis_guides/survey_weighted.md +366 -0
  35. package/skills/analyze-stats/references/analysis_guides/test_selection.md +86 -0
  36. package/skills/analyze-stats/references/style/figure_style.mplstyle +69 -0
  37. package/skills/analyze-stats/references/style/theme_publication.R +147 -0
  38. package/skills/analyze-stats/references/table-standards/journal-profiles/ajr.yaml +51 -0
  39. package/skills/analyze-stats/references/table-standards/journal-profiles/european_radiology.yaml +55 -0
  40. package/skills/analyze-stats/references/table-standards/journal-profiles/jama.yaml +66 -0
  41. package/skills/analyze-stats/references/table-standards/journal-profiles/lancet.yaml +57 -0
  42. package/skills/analyze-stats/references/table-standards/journal-profiles/nejm.yaml +51 -0
  43. package/skills/analyze-stats/references/table-standards/journal-profiles/radiology.yaml +66 -0
  44. package/skills/analyze-stats/references/table-standards/table-standards.md +287 -0
  45. package/skills/analyze-stats/references/table-standards/table-types/diagnostic_accuracy.md +36 -0
  46. package/skills/analyze-stats/references/table-standards/table-types/meta_analysis.md +58 -0
  47. package/skills/analyze-stats/references/table-standards/table-types/model_comparison.md +36 -0
  48. package/skills/analyze-stats/references/table-standards/table-types/regression_results.md +50 -0
  49. package/skills/analyze-stats/references/table-standards/table-types/table1_demographics.md +51 -0
  50. package/skills/analyze-stats/references/table-standards/tool-comparison.md +79 -0
  51. package/skills/analyze-stats/references/templates/agreement_analysis.py +436 -0
  52. package/skills/analyze-stats/references/templates/dca_plot.R +237 -0
  53. package/skills/analyze-stats/references/templates/diagnostic_accuracy.py +401 -0
  54. package/skills/analyze-stats/references/templates/dta_meta_analysis.R +384 -0
  55. package/skills/analyze-stats/references/templates/forest_plot.py +412 -0
  56. package/skills/analyze-stats/references/templates/likert_summary.py +356 -0
  57. package/skills/analyze-stats/references/templates/meta_analysis.R +365 -0
  58. package/skills/analyze-stats/references/templates/propensity_score.py +478 -0
  59. package/skills/analyze-stats/references/templates/regression.py +425 -0
  60. package/skills/analyze-stats/references/templates/repeated_measures.py +434 -0
  61. package/skills/analyze-stats/references/templates/sample_size.R +382 -0
  62. package/skills/analyze-stats/references/templates/survey_weighted_analysis.py +411 -0
  63. package/skills/analyze-stats/references/templates/survival_analysis.py +325 -0
  64. package/skills/analyze-stats/references/templates/table1_demographics.py +287 -0
  65. package/skills/analyze-stats/scripts/check_generated_code.py +335 -0
  66. package/skills/analyze-stats/skill.yml +38 -0
  67. package/skills/analyze-stats/tests/fixtures/gen_bad.R +16 -0
  68. package/skills/analyze-stats/tests/fixtures/gen_bad.py +24 -0
  69. package/skills/analyze-stats/tests/fixtures/gen_clean.py +21 -0
  70. package/skills/analyze-stats/tests/test_generated_code.sh +59 -0
  71. package/skills/analyze-stats/tests/test_survival_template.sh +53 -0
  72. package/skills/author-strategy/SKILL.md +117 -0
  73. package/skills/author-strategy/analyze_patterns.py +303 -0
  74. package/skills/author-strategy/fetch_pubmed.py +374 -0
  75. package/skills/author-strategy/skill.yml +34 -0
  76. package/skills/batch-cohort/SKILL.md +223 -0
  77. package/skills/batch-cohort/references/base_template_knhanes.R +210 -0
  78. package/skills/batch-cohort/references/batch_template_generator.R +222 -0
  79. package/skills/batch-cohort/references/variable_coding_registry.md +136 -0
  80. package/skills/batch-cohort/skill.yml +35 -0
  81. package/skills/calc-sample-size/SKILL.md +491 -0
  82. package/skills/calc-sample-size/references/formulas.md +655 -0
  83. package/skills/calc-sample-size/references/observational_cohort.md +49 -0
  84. package/skills/calc-sample-size/skill.yml +51 -0
  85. package/skills/check-reporting/SKILL.md +534 -0
  86. package/skills/check-reporting/references/LICENSES.md +41 -0
  87. package/skills/check-reporting/references/checklists/AMSTAR2.md +54 -0
  88. package/skills/check-reporting/references/checklists/ARRIVE_2.md +234 -0
  89. package/skills/check-reporting/references/checklists/CARE.md +102 -0
  90. package/skills/check-reporting/references/checklists/CLAIM_2024.md +128 -0
  91. package/skills/check-reporting/references/checklists/CLEAR.md +113 -0
  92. package/skills/check-reporting/references/checklists/CONSORT.md +86 -0
  93. package/skills/check-reporting/references/checklists/COSMIN_RoB.md +136 -0
  94. package/skills/check-reporting/references/checklists/GRRAS.md +61 -0
  95. package/skills/check-reporting/references/checklists/MI_CLEAR_LLM.md +167 -0
  96. package/skills/check-reporting/references/checklists/MOOSE.md +85 -0
  97. package/skills/check-reporting/references/checklists/NOS.md +88 -0
  98. package/skills/check-reporting/references/checklists/PRISMA_2020.md +135 -0
  99. package/skills/check-reporting/references/checklists/PRISMA_DTA.md +36 -0
  100. package/skills/check-reporting/references/checklists/PRISMA_P.md +56 -0
  101. package/skills/check-reporting/references/checklists/PROBAST.md +75 -0
  102. package/skills/check-reporting/references/checklists/PROBAST_AI.md +130 -0
  103. package/skills/check-reporting/references/checklists/QUADAS2.md +77 -0
  104. package/skills/check-reporting/references/checklists/QUADAS_C.md +131 -0
  105. package/skills/check-reporting/references/checklists/ROBINS_E.md +179 -0
  106. package/skills/check-reporting/references/checklists/ROBINS_I.md +87 -0
  107. package/skills/check-reporting/references/checklists/ROBIS.md +114 -0
  108. package/skills/check-reporting/references/checklists/ROB_ME.md +126 -0
  109. package/skills/check-reporting/references/checklists/RoB2.md +79 -0
  110. package/skills/check-reporting/references/checklists/RoB_NMA.md +96 -0
  111. package/skills/check-reporting/references/checklists/SPIRIT.md +112 -0
  112. package/skills/check-reporting/references/checklists/SQUIRE_2.md +68 -0
  113. package/skills/check-reporting/references/checklists/STARD.md +129 -0
  114. package/skills/check-reporting/references/checklists/STARD_AI.md +211 -0
  115. package/skills/check-reporting/references/checklists/STROBE.md +80 -0
  116. package/skills/check-reporting/references/checklists/SWiM.md +33 -0
  117. package/skills/check-reporting/references/checklists/TRIPOD.md +157 -0
  118. package/skills/check-reporting/references/checklists/TRIPOD_AI.md +140 -0
  119. package/skills/check-reporting/references/step4c_registration_timing.md +93 -0
  120. package/skills/check-reporting/references/step4d_prisma_figure_audit.md +137 -0
  121. package/skills/check-reporting/scripts/check_checklist_exists.py +183 -0
  122. package/skills/check-reporting/scripts/check_checklist_version.py +168 -0
  123. package/skills/check-reporting/scripts/check_framework_naming.py +206 -0
  124. package/skills/check-reporting/scripts/check_prisma_figure.py +209 -0
  125. package/skills/check-reporting/scripts/prisma_cascade_check.py +274 -0
  126. package/skills/check-reporting/skill.yml +41 -0
  127. package/skills/check-reporting/tests/fixtures/framework_bad.md +8 -0
  128. package/skills/check-reporting/tests/fixtures/framework_clean.md +7 -0
  129. package/skills/check-reporting/tests/test_checklist_fail_fast.sh +77 -0
  130. package/skills/check-reporting/tests/test_checklist_version.sh +72 -0
  131. package/skills/check-reporting/tests/test_framework_naming.sh +45 -0
  132. package/skills/check-reporting/tests/test_prisma_cascade.sh +104 -0
  133. package/skills/clean-data/SKILL.md +180 -0
  134. package/skills/clean-data/references/cleaning_patterns.md +299 -0
  135. package/skills/clean-data/references/profiling_template.py +304 -0
  136. package/skills/clean-data/scripts/check_structural_zero.py +174 -0
  137. package/skills/clean-data/skill.yml +35 -0
  138. package/skills/clean-data/tests/fixtures/smoking.csv +8 -0
  139. package/skills/clean-data/tests/test_structural_zero.sh +49 -0
  140. package/skills/cross-national/SKILL.md +264 -0
  141. package/skills/cross-national/skill.yml +37 -0
  142. package/skills/define-variables/SKILL.md +146 -0
  143. package/skills/define-variables/references/common_definitions.md +190 -0
  144. package/skills/define-variables/skill.yml +34 -0
  145. package/skills/define-variables/templates/variable_operationalization.md +64 -0
  146. package/skills/deidentify/SKILL.md +203 -0
  147. package/skills/deidentify/deidentify.py +1224 -0
  148. package/skills/deidentify/locales/_template.json +45 -0
  149. package/skills/deidentify/locales/au.json +43 -0
  150. package/skills/deidentify/locales/ca.json +44 -0
  151. package/skills/deidentify/locales/cn.json +47 -0
  152. package/skills/deidentify/locales/de.json +48 -0
  153. package/skills/deidentify/locales/fr.json +48 -0
  154. package/skills/deidentify/locales/in.json +48 -0
  155. package/skills/deidentify/locales/jp.json +48 -0
  156. package/skills/deidentify/locales/kr.json +48 -0
  157. package/skills/deidentify/locales/uk.json +45 -0
  158. package/skills/deidentify/locales/us.json +43 -0
  159. package/skills/deidentify/references/date_shift_guide.md +82 -0
  160. package/skills/deidentify/references/hipaa_18_identifiers.md +48 -0
  161. package/skills/deidentify/references/korean_phi_patterns.md +135 -0
  162. package/skills/deidentify/skill.yml +43 -0
  163. package/skills/deidentify/tests/README.md +26 -0
  164. package/skills/deidentify/tests/test_clean.csv +16 -0
  165. package/skills/deidentify/tests/test_edge_cases.csv +11 -0
  166. package/skills/deidentify/tests/test_phi_korean.csv +11 -0
  167. package/skills/design-ai-benchmarking/SKILL.md +214 -0
  168. package/skills/design-ai-benchmarking/references/benchmark_export_schema.json +69 -0
  169. package/skills/design-ai-benchmarking/references/elicitation_rubric_template.md +37 -0
  170. package/skills/design-ai-benchmarking/skill.yml +38 -0
  171. package/skills/design-study/SKILL.md +298 -0
  172. package/skills/design-study/skill.yml +33 -0
  173. package/skills/fill-icmje-coi/SKILL.md +216 -0
  174. package/skills/fill-icmje-coi/scripts/fill_icmje_coi.py +140 -0
  175. package/skills/fill-icmje-coi/skill.yml +35 -0
  176. package/skills/fill-icmje-coi/templates/icmje_coi_seed_synthetic.docx +0 -0
  177. package/skills/fill-protocol/SKILL.md +248 -0
  178. package/skills/fill-protocol/examples/example_irb_template.yaml +53 -0
  179. package/skills/fill-protocol/references/best_practices.md +121 -0
  180. package/skills/fill-protocol/scripts/doc_to_docx.py +111 -0
  181. package/skills/fill-protocol/scripts/fill_form.py +611 -0
  182. package/skills/fill-protocol/scripts/inspect_template.py +61 -0
  183. package/skills/fill-protocol/setup.sh +162 -0
  184. package/skills/fill-protocol/skill.yml +37 -0
  185. package/skills/find-cohort-gap/SKILL.md +309 -0
  186. package/skills/find-cohort-gap/references/cohort_profile_template.md +93 -0
  187. package/skills/find-cohort-gap/references/onepager_template.md +84 -0
  188. package/skills/find-cohort-gap/references/pattern_scoring_rubric.md +169 -0
  189. package/skills/find-cohort-gap/references/saturation_query_templates.md +143 -0
  190. package/skills/find-cohort-gap/skill.yml +35 -0
  191. package/skills/find-journal/POLICY.md +87 -0
  192. package/skills/find-journal/SKILL.md +340 -0
  193. package/skills/find-journal/references/journal_profiles/AJNR.md +29 -0
  194. package/skills/find-journal/references/journal_profiles/AJR.md +30 -0
  195. package/skills/find-journal/references/journal_profiles/Abdominal_Radiology.md +30 -0
  196. package/skills/find-journal/references/journal_profiles/Academic_Radiology.md +30 -0
  197. package/skills/find-journal/references/journal_profiles/Annals_of_Internal_Medicine.md +33 -0
  198. package/skills/find-journal/references/journal_profiles/Artificial_Intelligence_in_Medicine.md +28 -0
  199. package/skills/find-journal/references/journal_profiles/BMC_Medicine.md +31 -0
  200. package/skills/find-journal/references/journal_profiles/British_Journal_of_Radiology.md +39 -0
  201. package/skills/find-journal/references/journal_profiles/CVIR.md +30 -0
  202. package/skills/find-journal/references/journal_profiles/Chest.md +39 -0
  203. package/skills/find-journal/references/journal_profiles/Clinical_Radiology.md +30 -0
  204. package/skills/find-journal/references/journal_profiles/Clinical_and_Molecular_Hepatology.md +32 -0
  205. package/skills/find-journal/references/journal_profiles/Diabetes_Metabolism_Journal.md +36 -0
  206. package/skills/find-journal/references/journal_profiles/Diagnostic_and_Interventional_Radiology.md +32 -0
  207. package/skills/find-journal/references/journal_profiles/Endocrinology_and_Metabolism.md +37 -0
  208. package/skills/find-journal/references/journal_profiles/European_Journal_of_Preventive_Cardiology.md +39 -0
  209. package/skills/find-journal/references/journal_profiles/European_Radiology.md +29 -0
  210. package/skills/find-journal/references/journal_profiles/Hepatology_Communications.md +40 -0
  211. package/skills/find-journal/references/journal_profiles/Hepatology_International.md +37 -0
  212. package/skills/find-journal/references/journal_profiles/IEEE_JBHI.md +28 -0
  213. package/skills/find-journal/references/journal_profiles/IEEE_TMI.md +28 -0
  214. package/skills/find-journal/references/journal_profiles/INSI.md +29 -0
  215. package/skills/find-journal/references/journal_profiles/Investigative_Radiology.md +25 -0
  216. package/skills/find-journal/references/journal_profiles/JACC_Advances.md +41 -0
  217. package/skills/find-journal/references/journal_profiles/JACC_Asia.md +30 -0
  218. package/skills/find-journal/references/journal_profiles/JACR.md +28 -0
  219. package/skills/find-journal/references/journal_profiles/JAMA.md +40 -0
  220. package/skills/find-journal/references/journal_profiles/JAMA_Network_Open.md +30 -0
  221. package/skills/find-journal/references/journal_profiles/JCSM.md +39 -0
  222. package/skills/find-journal/references/journal_profiles/JKMS.md +32 -0
  223. package/skills/find-journal/references/journal_profiles/JMIR.md +29 -0
  224. package/skills/find-journal/references/journal_profiles/JMIR_Medical_Education.md +29 -0
  225. package/skills/find-journal/references/journal_profiles/JNIS.md +35 -0
  226. package/skills/find-journal/references/journal_profiles/JVIR.md +31 -0
  227. package/skills/find-journal/references/journal_profiles/Journal_of_Biomedical_Informatics.md +29 -0
  228. package/skills/find-journal/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md +40 -0
  229. package/skills/find-journal/references/journal_profiles/Journal_of_Magnetic_Resonance_Imaging.md +30 -0
  230. package/skills/find-journal/references/journal_profiles/Journal_of_Nuclear_Medicine.md +31 -0
  231. package/skills/find-journal/references/journal_profiles/Journal_of_Stroke.md +32 -0
  232. package/skills/find-journal/references/journal_profiles/KJR.md +38 -0
  233. package/skills/find-journal/references/journal_profiles/Korean_Circulation_Journal.md +38 -0
  234. package/skills/find-journal/references/journal_profiles/Korean_Journal_of_Internal_Medicine.md +36 -0
  235. package/skills/find-journal/references/journal_profiles/Lancet_Diabetes_and_Endocrinology.md +40 -0
  236. package/skills/find-journal/references/journal_profiles/Lancet_Gastroenterology_and_Hepatology.md +49 -0
  237. package/skills/find-journal/references/journal_profiles/Lancet_Infectious_Diseases.md +38 -0
  238. package/skills/find-journal/references/journal_profiles/Lancet_Neurology.md +39 -0
  239. package/skills/find-journal/references/journal_profiles/Lancet_Oncology.md +40 -0
  240. package/skills/find-journal/references/journal_profiles/Lancet_Psychiatry.md +38 -0
  241. package/skills/find-journal/references/journal_profiles/Lancet_Public_Health.md +30 -0
  242. package/skills/find-journal/references/journal_profiles/Lancet_Respiratory_Medicine.md +39 -0
  243. package/skills/find-journal/references/journal_profiles/Liver_International.md +33 -0
  244. package/skills/find-journal/references/journal_profiles/Medical_Image_Analysis.md +28 -0
  245. package/skills/find-journal/references/journal_profiles/NEJM.md +33 -0
  246. package/skills/find-journal/references/journal_profiles/Nature_Machine_Intelligence.md +31 -0
  247. package/skills/find-journal/references/journal_profiles/Nature_Medicine.md +39 -0
  248. package/skills/find-journal/references/journal_profiles/Neuroradiology.md +31 -0
  249. package/skills/find-journal/references/journal_profiles/Nutrition_Metabolism_and_Cardiovascular_Diseases.md +39 -0
  250. package/skills/find-journal/references/journal_profiles/PLOS_Medicine.md +32 -0
  251. package/skills/find-journal/references/journal_profiles/RYAI.md +28 -0
  252. package/skills/find-journal/references/journal_profiles/Radiology.md +29 -0
  253. package/skills/find-journal/references/journal_profiles/Skeletal_Radiology.md +31 -0
  254. package/skills/find-journal/references/journal_profiles/Stroke.md +37 -0
  255. package/skills/find-journal/references/journal_profiles/The_BMJ.md +31 -0
  256. package/skills/find-journal/references/journal_profiles/The_Lancet.md +31 -0
  257. package/skills/find-journal/references/journal_profiles/The_Lancet_Digital_Health.md +29 -0
  258. package/skills/find-journal/references/journal_profiles/World_Journal_of_Hepatology.md +53 -0
  259. package/skills/find-journal/references/journal_profiles/npj_Digital_Medicine.md +29 -0
  260. package/skills/find-journal/skill.yml +34 -0
  261. package/skills/fulltext-retrieval/SKILL.md +174 -0
  262. package/skills/fulltext-retrieval/fetch_oa.py +433 -0
  263. package/skills/fulltext-retrieval/pdf_to_md.py +160 -0
  264. package/skills/fulltext-retrieval/skill.yml +41 -0
  265. package/skills/generate-codebook/SKILL.md +155 -0
  266. package/skills/generate-codebook/references/codebook_schema.md +76 -0
  267. package/skills/generate-codebook/scripts/generate_codebook.py +278 -0
  268. package/skills/generate-codebook/skill.yml +35 -0
  269. package/skills/generate-codebook/tests/test_generate_codebook.sh +76 -0
  270. package/skills/grant-builder/SKILL.md +251 -0
  271. package/skills/grant-builder/skill.yml +34 -0
  272. package/skills/humanize/SKILL.md +251 -0
  273. package/skills/humanize/references/ai_patterns.md +571 -0
  274. package/skills/humanize/skill.yml +33 -0
  275. package/skills/intake-project/SKILL.md +264 -0
  276. package/skills/intake-project/skill.yml +34 -0
  277. package/skills/lit-sync/SKILL.md +448 -0
  278. package/skills/lit-sync/references/locale/ko/note_templates.md +110 -0
  279. package/skills/lit-sync/skill.yml +52 -0
  280. package/skills/lit-sync/tests/test_poll_logic.sh +92 -0
  281. package/skills/ma-scout/SKILL.md +640 -0
  282. package/skills/ma-scout/references/project_readme_template.md +95 -0
  283. package/skills/ma-scout/references/project_readme_template_ko.md +82 -0
  284. package/skills/ma-scout/skill.yml +33 -0
  285. package/skills/make-figures/SKILL.md +957 -0
  286. package/skills/make-figures/references/critic_rubrics/data_plot.md +166 -0
  287. package/skills/make-figures/references/critic_rubrics/flow_diagram.md +169 -0
  288. package/skills/make-figures/references/design_principles.md +181 -0
  289. package/skills/make-figures/references/exemplar_diagrams/README.md +65 -0
  290. package/skills/make-figures/references/exemplar_diagrams/consort/README.md +15 -0
  291. package/skills/make-figures/references/exemplar_diagrams/consort/template_input.yaml +37 -0
  292. package/skills/make-figures/references/exemplar_diagrams/consort/template_output.pdf +0 -0
  293. package/skills/make-figures/references/exemplar_diagrams/consort/template_output.png +0 -0
  294. package/skills/make-figures/references/exemplar_diagrams/consort/template_output_600.png +0 -0
  295. package/skills/make-figures/references/exemplar_diagrams/other/other_02.meta.yaml +4 -0
  296. package/skills/make-figures/references/exemplar_diagrams/other/other_02.png +0 -0
  297. package/skills/make-figures/references/exemplar_diagrams/other/other_02_why.md +13 -0
  298. package/skills/make-figures/references/exemplar_diagrams/pipeline/README.md +15 -0
  299. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01.meta.yaml +4 -0
  300. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01.png +0 -0
  301. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01_why.md +13 -0
  302. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03.meta.yaml +4 -0
  303. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03.png +0 -0
  304. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03_why.md +13 -0
  305. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04.meta.yaml +4 -0
  306. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04.png +0 -0
  307. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04_why.md +13 -0
  308. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05.meta.yaml +4 -0
  309. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05.png +0 -0
  310. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05_why.md +13 -0
  311. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06.meta.yaml +4 -0
  312. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06.png +0 -0
  313. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06_why.md +13 -0
  314. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07.meta.yaml +4 -0
  315. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07.png +0 -0
  316. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07_why.md +13 -0
  317. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08.meta.yaml +4 -0
  318. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08.png +0 -0
  319. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08_why.md +13 -0
  320. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09.meta.yaml +4 -0
  321. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09.png +0 -0
  322. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09_why.md +13 -0
  323. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10.meta.yaml +4 -0
  324. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10.png +0 -0
  325. package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10_why.md +13 -0
  326. package/skills/make-figures/references/exemplar_diagrams/prisma/README.md +15 -0
  327. package/skills/make-figures/references/exemplar_diagrams/prisma/template_input.yaml +47 -0
  328. package/skills/make-figures/references/exemplar_diagrams/prisma/template_output.pdf +0 -0
  329. package/skills/make-figures/references/exemplar_diagrams/prisma/template_output.png +0 -0
  330. package/skills/make-figures/references/exemplar_diagrams/prisma/template_output_600.png +0 -0
  331. package/skills/make-figures/references/exemplar_diagrams/stard/README.md +15 -0
  332. package/skills/make-figures/references/exemplar_diagrams/stard/template_input.yaml +40 -0
  333. package/skills/make-figures/references/exemplar_diagrams/stard/template_output.pdf +0 -0
  334. package/skills/make-figures/references/exemplar_diagrams/stard/template_output.png +0 -0
  335. package/skills/make-figures/references/exemplar_diagrams/stard/template_output_600.png +0 -0
  336. package/skills/make-figures/references/exemplar_diagrams/strobe/template_input.yaml +43 -0
  337. package/skills/make-figures/references/exemplar_diagrams/strobe/template_input_pptx.yaml +43 -0
  338. package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.pdf +0 -0
  339. package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.png +0 -0
  340. package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.pptx +0 -0
  341. package/skills/make-figures/references/exemplar_diagrams/strobe/template_output_600.png +0 -0
  342. package/skills/make-figures/references/figure_specs.md +291 -0
  343. package/skills/make-figures/references/flow_diagram_lessons.md +164 -0
  344. package/skills/make-figures/references/jacc_central_illustration_principles.md +91 -0
  345. package/skills/make-figures/references/medical_illustration_sources.md +98 -0
  346. package/skills/make-figures/references/pipeline_concepts_medical_ai.md +240 -0
  347. package/skills/make-figures/references/reporting_guideline_figure_map.md +104 -0
  348. package/skills/make-figures/references/visual_abstract_templates/european_radiology.pptx +0 -0
  349. package/skills/make-figures/references/visual_abstract_templates/jacc_central_illustration.pptx +0 -0
  350. package/skills/make-figures/references/visual_abstract_templates/medsci_default.pptx +0 -0
  351. package/skills/make-figures/references/visual_abstract_templates/template_guide.md +114 -0
  352. package/skills/make-figures/scripts/build_jacc_template.py +77 -0
  353. package/skills/make-figures/scripts/build_prisma2020_template.py +371 -0
  354. package/skills/make-figures/scripts/build_strobe_template.py +351 -0
  355. package/skills/make-figures/scripts/critic_figure.py +264 -0
  356. package/skills/make-figures/scripts/derive_figure_legend_counts.py +138 -0
  357. package/skills/make-figures/scripts/extract_exemplar_from_pdf.py +186 -0
  358. package/skills/make-figures/scripts/fetch_official_templates.sh +88 -0
  359. package/skills/make-figures/scripts/fill_prisma_template.py +142 -0
  360. package/skills/make-figures/scripts/generate_flow_diagram.R +133 -0
  361. package/skills/make-figures/scripts/generate_image.py +99 -0
  362. package/skills/make-figures/scripts/generate_visual_abstract.py +438 -0
  363. package/skills/make-figures/scripts/validate_pptx_mac_compat.py +233 -0
  364. package/skills/make-figures/skill.yml +52 -0
  365. package/skills/make-figures/templates/official/NOTES.md +62 -0
  366. package/skills/make-figures/templates/official/consort2010/CONSORT_2025_editable_checklist.docx +0 -0
  367. package/skills/make-figures/templates/official/consort2010/CONSORT_2025_flow_diagram.docx +0 -0
  368. package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_new_v1.pptx +0 -0
  369. package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_new_v2.pptx +0 -0
  370. package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_updated_v2.pptx +0 -0
  371. package/skills/make-figures/templates/official/spirit2013/SPIRIT_2025_editable_checklist.docx +0 -0
  372. package/skills/make-figures/templates/official/spirit2013/SPIRIT_2025_participant_timeline.docx +0 -0
  373. package/skills/make-figures/templates/official/stard2015/STARD_2015_checklist.docx +0 -0
  374. package/skills/make-figures/templates/official/stard2015/STARD_2015_flow_diagram.pdf +0 -0
  375. package/skills/make-figures/tests/fixtures/figure1_flow.yaml +8 -0
  376. package/skills/make-figures/tests/fixtures/manuscript_ok.md +9 -0
  377. package/skills/make-figures/tests/fixtures/manuscript_stale.md +4 -0
  378. package/skills/make-figures/tests/test_legend_reconcile.sh +36 -0
  379. package/skills/manage-project/SKILL.md +358 -0
  380. package/skills/manage-project/references/pre_submission_checklist.md +53 -0
  381. package/skills/manage-project/references/project_state_template.json +37 -0
  382. package/skills/manage-project/references/scaffold_templates.md +118 -0
  383. package/skills/manage-project/references/status_output_format.md +44 -0
  384. package/skills/manage-project/references/timeline_example.md +20 -0
  385. package/skills/manage-project/skill.yml +36 -0
  386. package/skills/manage-project/templates/SSOT.yaml.template +41 -0
  387. package/skills/manage-refs/LICENSE.zotero-mcp +21 -0
  388. package/skills/manage-refs/NOTICE.md +29 -0
  389. package/skills/manage-refs/SKILL.md +289 -0
  390. package/skills/manage-refs/citation_styles/README.md +40 -0
  391. package/skills/manage-refs/citation_styles/american-journal-of-roentgenology.csl +211 -0
  392. package/skills/manage-refs/citation_styles/cardiovascular-and-interventional-radiology.csl +19 -0
  393. package/skills/manage-refs/citation_styles/european-radiology.csl +19 -0
  394. package/skills/manage-refs/citation_styles/journal-of-cachexia-sarcopenia-and-muscle.csl +150 -0
  395. package/skills/manage-refs/citation_styles/journal-of-korean-medical-science-strict.csl +533 -0
  396. package/skills/manage-refs/citation_styles/journal-of-korean-medical-science.csl +16 -0
  397. package/skills/manage-refs/citation_styles/korean-journal-of-radiology.csl +155 -0
  398. package/skills/manage-refs/citation_styles/nature.csl +189 -0
  399. package/skills/manage-refs/citation_styles/nlm-citation-sequence.csl +535 -0
  400. package/skills/manage-refs/citation_styles/radiology.csl +228 -0
  401. package/skills/manage-refs/citation_styles/springer-basic-brackets.csl +187 -0
  402. package/skills/manage-refs/citation_styles/springer-vancouver-brackets.csl +276 -0
  403. package/skills/manage-refs/citation_styles/vancouver-superscript.csl +536 -0
  404. package/skills/manage-refs/citation_styles/vancouver.csl +535 -0
  405. package/skills/manage-refs/references/REFERENCE_STYLE_SPECS.md +59 -0
  406. package/skills/manage-refs/references/check_xref_symptoms.md +35 -0
  407. package/skills/manage-refs/scripts/_vendor_citation_writer.py +600 -0
  408. package/skills/manage-refs/scripts/check_citation_keys.py +112 -0
  409. package/skills/manage-refs/scripts/check_csl_render.py +102 -0
  410. package/skills/manage-refs/scripts/check_xref.py +633 -0
  411. package/skills/manage-refs/scripts/fill_journal_abbrev.py +104 -0
  412. package/skills/manage-refs/scripts/inject_zotero_cwyw.py +133 -0
  413. package/skills/manage-refs/scripts/md_marker_convert.py +193 -0
  414. package/skills/manage-refs/scripts/pre_submission_gate.sh +238 -0
  415. package/skills/manage-refs/scripts/render_pandoc.sh +88 -0
  416. package/skills/manage-refs/skill.yml +70 -0
  417. package/skills/manage-refs/tests/fixtures/pre_submission_gate/README.md +32 -0
  418. package/skills/manage-refs/tests/fixtures/pre_submission_gate/manuscript.md +10 -0
  419. package/skills/manage-refs/tests/fixtures/pre_submission_gate/refs.bib +34 -0
  420. package/skills/manage-refs/tests/fixtures/pre_submission_gate/run.sh +117 -0
  421. package/skills/manage-refs/tests/test_vN_docx_check.sh +145 -0
  422. package/skills/meta-analysis/SKILL.md +739 -0
  423. package/skills/meta-analysis/references/LICENSES.md +21 -0
  424. package/skills/meta-analysis/references/PROSPERO_template.md +221 -0
  425. package/skills/meta-analysis/references/ai_pre_screening_template.py +245 -0
  426. package/skills/meta-analysis/references/checklists/JBI_Case_Series.md +45 -0
  427. package/skills/meta-analysis/references/checklists/NOS.md +88 -0
  428. package/skills/meta-analysis/references/checklists/PRISMA_DTA.md +36 -0
  429. package/skills/meta-analysis/references/checklists/PROBAST.md +75 -0
  430. package/skills/meta-analysis/references/checklists/QUADAS2.md +77 -0
  431. package/skills/meta-analysis/references/checklists/ROBINS_I.md +87 -0
  432. package/skills/meta-analysis/references/checklists/RoB2.md +79 -0
  433. package/skills/meta-analysis/references/data_integrity_checklist.md +57 -0
  434. package/skills/meta-analysis/references/icmje_coi_guide.md +181 -0
  435. package/skills/meta-analysis/references/phase10_recovery.md +136 -0
  436. package/skills/meta-analysis/references/phase4_km_composite.md +58 -0
  437. package/skills/meta-analysis/references/phase6_statistical_synthesis.md +148 -0
  438. package/skills/meta-analysis/references/phase9_circulation.md +84 -0
  439. package/skills/meta-analysis/references/post_submission_release_ops.md +41 -0
  440. package/skills/meta-analysis/references/r_templates.md +132 -0
  441. package/skills/meta-analysis/references/review_orchestration.md +40 -0
  442. package/skills/meta-analysis/references/submission_package_drift.md +71 -0
  443. package/skills/meta-analysis/scripts/check_pool_consistency.py +201 -0
  444. package/skills/meta-analysis/scripts/cohort_overlap_check.py +242 -0
  445. package/skills/meta-analysis/scripts/dta_extraction_qc.py +137 -0
  446. package/skills/meta-analysis/scripts/screening_reconcile.py +160 -0
  447. package/skills/meta-analysis/skill.yml +47 -0
  448. package/skills/meta-analysis/templates/FINAL_POOL_LOCK.yaml.template +70 -0
  449. package/skills/meta-analysis/templates/extraction_form_v2.md +129 -0
  450. package/skills/meta-analysis/templates/supplementary_8file_checklist.md +94 -0
  451. package/skills/meta-analysis/tests/test_pool_consistency.sh +123 -0
  452. package/skills/orchestrate/SKILL.md +501 -0
  453. package/skills/orchestrate/references/dialogue_nodes.md +196 -0
  454. package/skills/orchestrate/references/report_template.md +109 -0
  455. package/skills/orchestrate/references/report_template_ko.md +88 -0
  456. package/skills/orchestrate/skill.yml +44 -0
  457. package/skills/peer-review/SKILL.md +381 -0
  458. package/skills/peer-review/references/aczel_2021_reviewer2_patterns.md +88 -0
  459. package/skills/peer-review/references/domain-probes/ai_overclaiming.md +47 -0
  460. package/skills/peer-review/references/domain-probes/narrative_review.md +44 -0
  461. package/skills/peer-review/references/domain-probes/observational_confounding.md +48 -0
  462. package/skills/peer-review/references/domain-probes/radiomics.md +38 -0
  463. package/skills/peer-review/references/domain-probes/sr_ma.md +87 -0
  464. package/skills/peer-review/references/domain-probes/survival_prognostic.md +68 -0
  465. package/skills/peer-review/references/exemplar_reviews/README.md +43 -0
  466. package/skills/peer-review/references/exemplar_reviews/ai_overclaiming.md +47 -0
  467. package/skills/peer-review/references/exemplar_reviews/calibration_missing.md +44 -0
  468. package/skills/peer-review/references/exemplar_reviews/data_leakage.md +48 -0
  469. package/skills/peer-review/references/exemplar_reviews/reference_standard_validity.md +45 -0
  470. package/skills/peer-review/references/narrative_review_audit.md +67 -0
  471. package/skills/peer-review/references/reviewer_calibration/README.md +34 -0
  472. package/skills/peer-review/references/reviewer_calibration/compliance_floor.md +52 -0
  473. package/skills/peer-review/references/reviewer_profiles/AJR.md +82 -0
  474. package/skills/peer-review/references/reviewer_profiles/EURE.md +64 -0
  475. package/skills/peer-review/references/reviewer_profiles/INSI.md +57 -0
  476. package/skills/peer-review/references/reviewer_profiles/KJR.md +100 -0
  477. package/skills/peer-review/references/reviewer_profiles/README.md +32 -0
  478. package/skills/peer-review/references/reviewer_profiles/RYAI.md +86 -0
  479. package/skills/peer-review/skill.yml +39 -0
  480. package/skills/present-paper/SKILL.md +675 -0
  481. package/skills/present-paper/references/critic_rubrics/slide.md +155 -0
  482. package/skills/present-paper/references/generate_pptx_templates.py +604 -0
  483. package/skills/present-paper/references/medical_presentation_templates.md +277 -0
  484. package/skills/present-paper/references/slide_design_principles.md +202 -0
  485. package/skills/present-paper/references/slide_visual_styles/nature_lancet.md +168 -0
  486. package/skills/present-paper/references/workflow-checklist.md +109 -0
  487. package/skills/present-paper/scripts/extract_pdf_figures.py +243 -0
  488. package/skills/present-paper/scripts/inject_pronunciation_notes.py +178 -0
  489. package/skills/present-paper/scripts/inject_speaker_notes.py +133 -0
  490. package/skills/present-paper/scripts/strip_notes_for_sharing.py +140 -0
  491. package/skills/present-paper/scripts/trim_caption.py +271 -0
  492. package/skills/present-paper/skill.yml +41 -0
  493. package/skills/present-paper/templates/build_pptx_nature_lancet.py +688 -0
  494. package/skills/publish-skill/SKILL.md +370 -0
  495. package/skills/publish-skill/references/license-compatibility-matrix.md +132 -0
  496. package/skills/publish-skill/references/pii-patterns.md +130 -0
  497. package/skills/publish-skill/scripts/audit_skill.sh +278 -0
  498. package/skills/publish-skill/skill.yml +35 -0
  499. package/skills/render-pdf-doc/SKILL.md +146 -0
  500. package/skills/render-pdf-doc/references/known_pitfalls.md +53 -0
  501. package/skills/render-pdf-doc/references/pandoc_korean_cheatsheet.md +77 -0
  502. package/skills/render-pdf-doc/scripts/check_deps.sh +42 -0
  503. package/skills/render-pdf-doc/scripts/infer_colwidths.py +164 -0
  504. package/skills/render-pdf-doc/scripts/render_pdf.sh +98 -0
  505. package/skills/render-pdf-doc/skill.yml +57 -0
  506. package/skills/render-pdf-doc/templates/anchor-doc.md +27 -0
  507. package/skills/render-pdf-doc/templates/anchor-doc_ko.md +25 -0
  508. package/skills/render-pdf-doc/templates/briefing-handout.md +33 -0
  509. package/skills/render-pdf-doc/templates/briefing-handout_ko.md +31 -0
  510. package/skills/render-pdf-doc/templates/proposal-cover.md +33 -0
  511. package/skills/render-pdf-doc/templates/proposal-cover_ko.md +31 -0
  512. package/skills/render-pdf-doc/templates/reference-table.md +22 -0
  513. package/skills/render-pdf-doc/templates/reference-table_ko.md +20 -0
  514. package/skills/replicate-study/SKILL.md +150 -0
  515. package/skills/replicate-study/references/harmonization_3country.csv +47 -0
  516. package/skills/replicate-study/references/harmonization_knhanes_nhanes.csv +68 -0
  517. package/skills/replicate-study/references/methodology_extraction_template.md +134 -0
  518. package/skills/replicate-study/skill.yml +37 -0
  519. package/skills/review-paper/SKILL.md +104 -0
  520. package/skills/review-paper/references/macro_skeleton.md +6 -0
  521. package/skills/review-paper/skill.yml +25 -0
  522. package/skills/revise/SKILL.md +515 -0
  523. package/skills/revise/references/r2r_voice.md +346 -0
  524. package/skills/revise/skill.yml +43 -0
  525. package/skills/search-lit/SKILL.md +443 -0
  526. package/skills/search-lit/references/parse_pubmed.py +326 -0
  527. package/skills/search-lit/references/pubmed_eutils.sh +111 -0
  528. package/skills/search-lit/skill.yml +46 -0
  529. package/skills/self-review/SKILL.md +1045 -0
  530. package/skills/self-review/references/domain-probes/ai_overclaiming.md +47 -0
  531. package/skills/self-review/references/domain-probes/narrative_review.md +44 -0
  532. package/skills/self-review/references/domain-probes/observational_confounding.md +48 -0
  533. package/skills/self-review/references/domain-probes/radiomics.md +38 -0
  534. package/skills/self-review/references/domain-probes/sr_ma.md +87 -0
  535. package/skills/self-review/references/domain-probes/survival_prognostic.md +68 -0
  536. package/skills/self-review/references/exemplar_findings/README.md +43 -0
  537. package/skills/self-review/references/exemplar_findings/cohort_arithmetic_mismatch.md +35 -0
  538. package/skills/self-review/references/exemplar_findings/estimand_drift_posthoc_primary.md +39 -0
  539. package/skills/self-review/references/exemplar_findings/scope_overreach_cross_sectional.md +35 -0
  540. package/skills/self-review/references/exemplar_findings/unadjusted_confounder.md +36 -0
  541. package/skills/self-review/references/panel_review_template.md +177 -0
  542. package/skills/self-review/scripts/check_artifact_coverage.py +301 -0
  543. package/skills/self-review/scripts/check_claim_artifact.py +248 -0
  544. package/skills/self-review/scripts/check_classical_style.py +185 -0
  545. package/skills/self-review/scripts/check_cohort_arithmetic.py +481 -0
  546. package/skills/self-review/scripts/check_confounding_completeness.py +287 -0
  547. package/skills/self-review/scripts/check_panel_diversity.py +336 -0
  548. package/skills/self-review/scripts/check_reference_adequacy.py +392 -0
  549. package/skills/self-review/scripts/check_reviewer_team_consistency.py +412 -0
  550. package/skills/self-review/scripts/check_scope_coherence.py +177 -0
  551. package/skills/self-review/skill.yml +47 -0
  552. package/skills/self-review/tests/fixtures/claim_manuscript.md +17 -0
  553. package/skills/self-review/tests/fixtures/claim_prereg.md +6 -0
  554. package/skills/self-review/tests/fixtures/cohort_bad.md +21 -0
  555. package/skills/self-review/tests/fixtures/cohort_clean.md +21 -0
  556. package/skills/self-review/tests/fixtures/cohort_partition.csv +5 -0
  557. package/skills/self-review/tests/fixtures/coverage_analysis/31_delong_nested_added_value.csv +3 -0
  558. package/skills/self-review/tests/fixtures/coverage_analysis/table1_demographics.csv +3 -0
  559. package/skills/self-review/tests/fixtures/coverage_clean.md +13 -0
  560. package/skills/self-review/tests/fixtures/coverage_manuscript.md +11 -0
  561. package/skills/self-review/tests/fixtures/panel_collapse.json +27 -0
  562. package/skills/self-review/tests/fixtures/panel_good.json +32 -0
  563. package/skills/self-review/tests/fixtures/panel_monoculture.json +32 -0
  564. package/skills/self-review/tests/fixtures/refadeq_letter.md +13 -0
  565. package/skills/self-review/tests/fixtures/refadeq_original_fixed.md +42 -0
  566. package/skills/self-review/tests/fixtures/refadeq_original_uncited.md +40 -0
  567. package/skills/self-review/tests/fixtures/scope_bad.md +9 -0
  568. package/skills/self-review/tests/fixtures/scope_clean.md +8 -0
  569. package/skills/self-review/tests/fixtures/scope_surrogate.md +8 -0
  570. package/skills/self-review/tests/fixtures/style_bad.md +13 -0
  571. package/skills/self-review/tests/fixtures/style_clean.md +11 -0
  572. package/skills/self-review/tests/fixtures/table1_by_exposure.csv +11 -0
  573. package/skills/self-review/tests/test_artifact_coverage.sh +44 -0
  574. package/skills/self-review/tests/test_claim_artifact.sh +50 -0
  575. package/skills/self-review/tests/test_classical_style.sh +44 -0
  576. package/skills/self-review/tests/test_cohort_arithmetic.sh +49 -0
  577. package/skills/self-review/tests/test_confounding_completeness.sh +66 -0
  578. package/skills/self-review/tests/test_panel_diversity.sh +55 -0
  579. package/skills/self-review/tests/test_panel_mode.sh +69 -0
  580. package/skills/self-review/tests/test_reference_adequacy.sh +68 -0
  581. package/skills/self-review/tests/test_reviewer_team_consistency.sh +138 -0
  582. package/skills/self-review/tests/test_scope_coherence.sh +46 -0
  583. package/skills/setup-medsci/SKILL.md +110 -0
  584. package/skills/setup-medsci/references/setup-checklist.md +51 -0
  585. package/skills/setup-medsci/skill.yml +30 -0
  586. package/skills/sync-submission/SKILL.md +382 -0
  587. package/skills/sync-submission/scripts/author_registry_example.yaml +36 -0
  588. package/skills/sync-submission/scripts/blind_sweep.py +203 -0
  589. package/skills/sync-submission/scripts/check_asset_anonymization.py +300 -0
  590. package/skills/sync-submission/scripts/check_cross_artifact_stale.py +211 -0
  591. package/skills/sync-submission/scripts/cover_letter_drift_check.py +451 -0
  592. package/skills/sync-submission/scripts/cross_document_n_check.py +486 -0
  593. package/skills/sync-submission/scripts/detect_copy_divergence.py +136 -0
  594. package/skills/sync-submission/scripts/preflight_gate.py +458 -0
  595. package/skills/sync-submission/scripts/scope_drift_check.py +362 -0
  596. package/skills/sync-submission/scripts/sync_submission.py +169 -0
  597. package/skills/sync-submission/skill.yml +43 -0
  598. package/skills/sync-submission/tests/fixtures/copy_ok.md +5 -0
  599. package/skills/sync-submission/tests/fixtures/copy_stale.md +5 -0
  600. package/skills/sync-submission/tests/fixtures/ssot.md +5 -0
  601. package/skills/sync-submission/tests/test_asset_anonymization.sh +99 -0
  602. package/skills/sync-submission/tests/test_copy_divergence.sh +44 -0
  603. package/skills/sync-submission/tests/test_cross_artifact_stale.sh +80 -0
  604. package/skills/sync-submission/tests/test_cross_document_n.sh +132 -0
  605. package/skills/sync-submission/tests/test_preflight_gate.sh +112 -0
  606. package/skills/sync-submission/tests/test_scope_drift.sh +122 -0
  607. package/skills/sync-submission/tests/test_vN_docx_assertion.sh +51 -0
  608. package/skills/verify-refs/SKILL.md +177 -0
  609. package/skills/verify-refs/references/manual_checkpoint_guide.md +100 -0
  610. package/skills/verify-refs/scripts/verify_cli.sh +62 -0
  611. package/skills/verify-refs/scripts/verify_refs.py +782 -0
  612. package/skills/verify-refs/skill.yml +44 -0
  613. package/skills/verify-refs/tests/fixtures/pagination_placeholder.bib +17 -0
  614. package/skills/verify-refs/tests/test_pagination_placeholder.sh +42 -0
  615. package/skills/version-dataset/SKILL.md +143 -0
  616. package/skills/version-dataset/references/manifest_schema.md +72 -0
  617. package/skills/version-dataset/scripts/version_dataset.py +242 -0
  618. package/skills/version-dataset/skill.yml +35 -0
  619. package/skills/version-dataset/tests/test_version_dataset.sh +52 -0
  620. package/skills/write-paper/SKILL.md +1148 -0
  621. package/skills/write-paper/references/exemplar_methods/README.md +38 -0
  622. package/skills/write-paper/references/exemplar_methods/ai_validation_tripod_claim.md +47 -0
  623. package/skills/write-paper/references/exemplar_methods/diagnostic_accuracy_stard.md +50 -0
  624. package/skills/write-paper/references/exemplar_methods/observational_cohort_strobe.md +43 -0
  625. package/skills/write-paper/references/journal_profiles/AJNR.md +185 -0
  626. package/skills/write-paper/references/journal_profiles/AJR.md +149 -0
  627. package/skills/write-paper/references/journal_profiles/Abdominal_Radiology.md +139 -0
  628. package/skills/write-paper/references/journal_profiles/Academic_Radiology.md +90 -0
  629. package/skills/write-paper/references/journal_profiles/Annals_of_Internal_Medicine.md +150 -0
  630. package/skills/write-paper/references/journal_profiles/Artificial_Intelligence_in_Medicine.md +82 -0
  631. package/skills/write-paper/references/journal_profiles/British_Journal_of_Radiology.md +161 -0
  632. package/skills/write-paper/references/journal_profiles/CVIR.md +157 -0
  633. package/skills/write-paper/references/journal_profiles/Chest.md +270 -0
  634. package/skills/write-paper/references/journal_profiles/Clinical_Radiology.md +160 -0
  635. package/skills/write-paper/references/journal_profiles/Clinical_and_Molecular_Hepatology.md +147 -0
  636. package/skills/write-paper/references/journal_profiles/Diabetes_Metabolism_Journal.md +163 -0
  637. package/skills/write-paper/references/journal_profiles/Diagnostic_and_Interventional_Radiology.md +216 -0
  638. package/skills/write-paper/references/journal_profiles/Endocrinology_and_Metabolism.md +167 -0
  639. package/skills/write-paper/references/journal_profiles/European_Journal_of_Preventive_Cardiology.md +192 -0
  640. package/skills/write-paper/references/journal_profiles/European_Radiology.md +159 -0
  641. package/skills/write-paper/references/journal_profiles/Hepatology_Communications.md +110 -0
  642. package/skills/write-paper/references/journal_profiles/Hepatology_International.md +106 -0
  643. package/skills/write-paper/references/journal_profiles/IEEE_TMI.md +180 -0
  644. package/skills/write-paper/references/journal_profiles/INSI.md +163 -0
  645. package/skills/write-paper/references/journal_profiles/Investigative_Radiology.md +86 -0
  646. package/skills/write-paper/references/journal_profiles/JACC_Advances.md +197 -0
  647. package/skills/write-paper/references/journal_profiles/JACC_Asia.md +168 -0
  648. package/skills/write-paper/references/journal_profiles/JACR.md +87 -0
  649. package/skills/write-paper/references/journal_profiles/JAMA.md +188 -0
  650. package/skills/write-paper/references/journal_profiles/JAMA_Network_Open.md +170 -0
  651. package/skills/write-paper/references/journal_profiles/JCSM.md +266 -0
  652. package/skills/write-paper/references/journal_profiles/JKMS.md +201 -0
  653. package/skills/write-paper/references/journal_profiles/JMIR.md +88 -0
  654. package/skills/write-paper/references/journal_profiles/JMIR_Medical_Education.md +86 -0
  655. package/skills/write-paper/references/journal_profiles/JNIS.md +227 -0
  656. package/skills/write-paper/references/journal_profiles/JVIR.md +158 -0
  657. package/skills/write-paper/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md +191 -0
  658. package/skills/write-paper/references/journal_profiles/Journal_of_Stroke.md +176 -0
  659. package/skills/write-paper/references/journal_profiles/KJR.md +185 -0
  660. package/skills/write-paper/references/journal_profiles/Korean_Circulation_Journal.md +184 -0
  661. package/skills/write-paper/references/journal_profiles/Korean_Journal_of_Internal_Medicine.md +178 -0
  662. package/skills/write-paper/references/journal_profiles/Lancet_Gastroenterology_and_Hepatology.md +127 -0
  663. package/skills/write-paper/references/journal_profiles/Liver_International.md +165 -0
  664. package/skills/write-paper/references/journal_profiles/Medical_Image_Analysis.md +147 -0
  665. package/skills/write-paper/references/journal_profiles/NEJM.md +147 -0
  666. package/skills/write-paper/references/journal_profiles/Nature_Medicine.md +181 -0
  667. package/skills/write-paper/references/journal_profiles/Neuroradiology.md +151 -0
  668. package/skills/write-paper/references/journal_profiles/Nutrition_Metabolism_and_Cardiovascular_Diseases.md +184 -0
  669. package/skills/write-paper/references/journal_profiles/PLOS_Medicine.md +166 -0
  670. package/skills/write-paper/references/journal_profiles/RYAI.md +124 -0
  671. package/skills/write-paper/references/journal_profiles/Radiology.md +173 -0
  672. package/skills/write-paper/references/journal_profiles/Skeletal_Radiology.md +135 -0
  673. package/skills/write-paper/references/journal_profiles/Stroke.md +210 -0
  674. package/skills/write-paper/references/journal_profiles/The_BMJ.md +121 -0
  675. package/skills/write-paper/references/journal_profiles/The_Lancet.md +112 -0
  676. package/skills/write-paper/references/journal_profiles/The_Lancet_Digital_Health.md +104 -0
  677. package/skills/write-paper/references/journal_profiles/World_Journal_of_Hepatology.md +106 -0
  678. package/skills/write-paper/references/journal_profiles/npj_Digital_Medicine.md +93 -0
  679. package/skills/write-paper/references/paper_types/ai_validation.md +270 -0
  680. package/skills/write-paper/references/paper_types/animal_study.md +194 -0
  681. package/skills/write-paper/references/paper_types/case_report.md +237 -0
  682. package/skills/write-paper/references/paper_types/cross_national.md +328 -0
  683. package/skills/write-paper/references/paper_types/letter.md +127 -0
  684. package/skills/write-paper/references/paper_types/meta_analysis.md +181 -0
  685. package/skills/write-paper/references/paper_types/nhis_cohort.md +297 -0
  686. package/skills/write-paper/references/paper_types/original_article.md +221 -0
  687. package/skills/write-paper/references/paper_types/technical_note.md +131 -0
  688. package/skills/write-paper/references/section_guides/discussion.md +155 -0
  689. package/skills/write-paper/references/section_guides/introduction.md +108 -0
  690. package/skills/write-paper/references/section_guides/methods.md +144 -0
  691. package/skills/write-paper/references/section_guides/results.md +113 -0
  692. package/skills/write-paper/references/section_guides/step7_1_classical_qc.md +67 -0
  693. package/skills/write-paper/references/section_guides/step7_4a_audit_recovery.md +74 -0
  694. package/skills/write-paper/references/section_guides/title_abstract.md +123 -0
  695. package/skills/write-paper/references/section_templates/methods_statistical.md +147 -0
  696. package/skills/write-paper/scripts/check_placeholders.py +182 -0
  697. package/skills/write-paper/skill.yml +48 -0
  698. package/skills/write-paper/tests/test_placeholders.sh +107 -0
  699. package/skills/write-protocol/SKILL.md +243 -0
  700. package/skills/write-protocol/references/ethics_checklist.md +150 -0
  701. package/skills/write-protocol/references/protocol_template.md +304 -0
  702. package/skills/write-protocol/skill.yml +34 -0
@@ -0,0 +1,109 @@
1
+ # Missing Data Guide
2
+
3
+ Strategies for handling missing data in medical research analyses.
4
+ This is a preprocessing step, not an independent analysis type.
5
+
6
+ ---
7
+
8
+ ## Missing Data Mechanisms
9
+
10
+ | Mechanism | Definition | Example | Implication |
11
+ |-----------|-----------|---------|-------------|
12
+ | **MCAR** | Missing completely at random | Specimen lost in transit | Complete case analysis OK |
13
+ | **MAR** | Missingness depends on observed data | Older patients more likely to drop out | **Multiple imputation needed** |
14
+ | **MNAR** | Missingness depends on unobserved value | Sicker patients miss follow-up | Sensitivity analysis required |
15
+
16
+ MNAR cannot be verified statistically — always consider as a possibility.
17
+
18
+ ---
19
+
20
+ ## Decision by Missing Rate
21
+
22
+ | Missing % | Action |
23
+ |-----------|--------|
24
+ | < 5% | Complete case analysis generally acceptable |
25
+ | 5-20% | **Multiple imputation recommended** |
26
+ | 20-40% | MI + sensitivity analysis mandatory |
27
+ | > 40% | Consider excluding the variable from analysis |
28
+
29
+ ---
30
+
31
+ ## Multiple Imputation via Chained Equations (MICE)
32
+
33
+ ### Procedure
34
+ 1. Specify imputation model for each variable with missing data
35
+ 2. Generate m imputed datasets (m = 5 minimum; m = 20 if missing > 20%)
36
+ 3. Analyze each dataset independently (same analysis model)
37
+ 4. Pool results using **Rubin's rules**: estimate = mean of m estimates; variance = within + between variance
38
+
39
+ ### Imputation Model Rules
40
+ - Include ALL variables from the analysis model in the imputation model
41
+ - Include the outcome variable (in imputation model only)
42
+ - Match variable type to method:
43
+ - Continuous → predictive mean matching (PMM) or regression
44
+ - Binary → logistic regression
45
+ - Multinomial → polytomous regression
46
+ - Ordinal → proportional odds
47
+
48
+ ### Methods NOT Recommended
49
+ - **Mean imputation**: underestimates variance — never use
50
+ - **LOCF (Last Observation Carried Forward)**: biased in most settings — avoid
51
+ - **Single imputation**: does not account for imputation uncertainty
52
+
53
+ ---
54
+
55
+ ## Reporting Template
56
+
57
+ "Missing data ranged from X% (variable A) to Y% (variable B). Little's MCAR test suggested data were not MCAR (P = 0.003). Multiple imputation using chained equations (MICE) was performed with m = 20 imputed datasets. Results were pooled using Rubin's rules. Sensitivity analyses using complete case analysis yielded consistent results (Supplementary Table X)."
58
+
59
+ ---
60
+
61
+ ## When to Trigger in analyze-stats
62
+
63
+ During Phase 1 (Data Assessment), if any analysis variable has > 5% missing:
64
+ 1. Report missing counts and percentages
65
+ 2. Suggest MICE before proceeding
66
+ 3. Generate imputation code as a preprocessing step
67
+ 4. Run the primary analysis on imputed data
68
+ 5. Run complete case analysis as sensitivity analysis
69
+
70
+ ---
71
+
72
+ ## Python Implementation
73
+
74
+ ```python
75
+ from sklearn.experimental import enable_iterative_imputer
76
+ from sklearn.impute import IterativeImputer
77
+ import numpy as np
78
+ import pandas as pd
79
+
80
+ m = 20 # number of imputations
81
+ results = []
82
+ for i in range(m):
83
+ imputer = IterativeImputer(max_iter=10, random_state=i, sample_posterior=True)
84
+ df_imputed = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
85
+ # Run analysis on each imputed dataset
86
+ # ... append results
87
+ # Pool using Rubin's rules
88
+ pooled_estimate = np.mean(results, axis=0)
89
+ ```
90
+
91
+ ## R Implementation
92
+
93
+ ```r
94
+ library(mice)
95
+ imp <- mice(df, m = 20, method = 'pmm', seed = 42)
96
+ fit <- with(imp, lm(y ~ x1 + x2))
97
+ pooled <- pool(fit)
98
+ summary(pooled)
99
+ ```
100
+
101
+ ---
102
+
103
+ ## Common Reviewer Flags
104
+
105
+ 1. Not reporting missing data counts per variable
106
+ 2. Using listwise deletion without justification
107
+ 3. Mean imputation or LOCF without acknowledging limitations
108
+ 4. Not performing sensitivity analysis (complete case vs MI comparison)
109
+ 5. Not stating the assumed missing mechanism (MCAR/MAR/MNAR)
@@ -0,0 +1,247 @@
1
+ # NHIS Claims-Based Disease Definition Guide
2
+
3
+ Methodological patterns for defining exposures, outcomes, and comorbidities
4
+ using ICD-10 codes in Korean NHIS claims data. This guide covers the validated
5
+ algorithm patterns -- NOT specific code lists for individual diseases.
6
+
7
+ ---
8
+
9
+ ## When to Use
10
+
11
+ - Defining study populations, exposures, or outcomes in NHIS cohort studies
12
+ - Building claims-based algorithms for disease ascertainment
13
+ - Validating disease definitions using multiple data sources within NHIS
14
+ - NOT for: survey data (KNHANES/NHANES), clinical registry data
15
+
16
+ ---
17
+
18
+ ## Core Principle: Claims-Based Algorithms
19
+
20
+ A single ICD-10 claim is insufficient for disease ascertainment due to rule-out
21
+ diagnoses, coding errors, and provisional codes. Validated algorithms combine
22
+ multiple data elements to improve positive predictive value.
23
+
24
+ ### Algorithm Components
25
+
26
+ | Component | Source in NHIS | Purpose |
27
+ |-----------|---------------|---------|
28
+ | **ICD-10 diagnostic codes** | Inpatient + outpatient claims | Primary disease identification |
29
+ | **Medication prescriptions** | Pharmacy dispensing records | Confirms active treatment |
30
+ | **Procedure codes** | Claims procedure fields | Confirms diagnostic workup or treatment |
31
+ | **Health examination results** | National health exam data | Objective measurement (lab values, vitals) |
32
+ | **Visit frequency** | Claim count within time window | Distinguishes incident from rule-out |
33
+
34
+ ---
35
+
36
+ ## Validated Algorithm Patterns
37
+
38
+ ### Pattern 1: N-Claim Rule (Most Common)
39
+
40
+ Require N or more claims with the target ICD-10 code within a defined time
41
+ window to establish a diagnosis.
42
+
43
+ ```
44
+ Disease = (ICD-10 code X appears >= N times within T months)
45
+ ```
46
+
47
+ | Stringency | Claims | Window | PPV | Use case |
48
+ |------------|--------|--------|-----|----------|
49
+ | Lenient | >= 1 claim | Any | Lower | Screening, sensitivity-focused |
50
+ | Standard | >= 2 claims | 12 months | Moderate | Most cohort studies |
51
+ | Strict | >= 3 claims | 12 months | Higher | Sensitivity analysis |
52
+
53
+ **Reporting template**:
54
+ "[DISEASE] was identified by at least [N] claims with ICD-10 codes [CODE
55
+ RANGE] within [T] months during the observation period."
56
+
57
+ ### Pattern 2: Claim + Medication (Recommended for Chronic Diseases)
58
+
59
+ Combine diagnostic codes with disease-specific medication prescriptions.
60
+
61
+ ```
62
+ Disease = (ICD-10 code X >= 1 time) AND (related medication dispensed >= 1 time)
63
+ ```
64
+
65
+ **Reporting template**:
66
+ "[DISEASE] was defined as at least one claim with ICD-10 codes [CODE RANGE]
67
+ combined with a prescription for [MEDICATION CLASS] (ATC codes [RANGE])."
68
+
69
+ **Common medication validation pairs**:
70
+
71
+ | Disease category | ICD-10 pattern | Medication confirmation |
72
+ |-----------------|----------------|----------------------|
73
+ | Hypertension | I10-I15 | Antihypertensive agents (ATC C02-C09) |
74
+ | Diabetes mellitus | E10-E14 | Antidiabetic agents (ATC A10) |
75
+ | Hyperlipidemia | E78 | Lipid-modifying agents (ATC C10) |
76
+ | Coronary artery disease | I20-I25 | Antiplatelet + statin combination |
77
+ | Depressive disorders | F32-F33 | Antidepressants (ATC N06A) |
78
+ | Asthma | J45 | Inhaled corticosteroids / bronchodilators |
79
+
80
+ ### Pattern 3: Look-Back Period for Incident Cases
81
+
82
+ To identify **incident** (new-onset) cases, require a disease-free washout
83
+ period before the index date.
84
+
85
+ ```
86
+ Incident case = (ICD-10 code X after index date)
87
+ AND (NO claims with code X during look-back period)
88
+ ```
89
+
90
+ | Look-back | Strength | Trade-off |
91
+ |-----------|----------|-----------|
92
+ | 1 year | Minimum acceptable | May misclassify prevalent cases as incident |
93
+ | 3 years | Recommended | Better incident case identification |
94
+ | 5+ years | Strongest | Reduces sample size due to data availability |
95
+
96
+ **Reporting template**:
97
+ "To ensure the identification of incident cases, we applied a minimum [N]-year
98
+ look-back period and excluded individuals with any diagnostic claims for
99
+ [DISEASE] during this period."
100
+
101
+ ### Pattern 4: Outcome Validation with Time Windows
102
+
103
+ For complications or sequelae, require temporal proximity to the index event.
104
+
105
+ ```
106
+ Complication = (ICD-10 code Y within T1-T2 days after event X)
107
+ ```
108
+
109
+ **Examples of time-window patterns**:
110
+
111
+ | Complication type | Window | Rationale |
112
+ |------------------|--------|-----------|
113
+ | Post-procedural complication | 0-30 days | Immediate perioperative period |
114
+ | Delayed complication | 30-90 days | Sub-acute period |
115
+ | Chronic sequela | 90 days - 1 year | Excludes acute phase, captures chronicity |
116
+ | Hospital admission for condition | Within 30 days of onset | Links admission to the triggering event |
117
+
118
+ ### Pattern 5: Hierarchical Disease Classification
119
+
120
+ When exposure or outcome categories overlap, use a hierarchical scheme.
121
+
122
+ ```
123
+ Level 1 (broadest): Any code in ICD-10 block (e.g., E10-E14 for all diabetes)
124
+ Level 2: Specific subcategory (e.g., E11 for type 2 diabetes only)
125
+ Level 3 (strictest): Subcategory + medication + lab confirmation
126
+ ```
127
+
128
+ Sensitivity analyses should test multiple levels to assess robustness.
129
+
130
+ ---
131
+
132
+ ## ICD-10-KM vs ICD-10 Differences
133
+
134
+ Korean NHIS uses ICD-10-KM (Korean Modification), which is based on ICD-10
135
+ but includes Korea-specific extensions:
136
+
137
+ | Feature | ICD-10 (WHO) | ICD-10-KM |
138
+ |---------|-------------|-----------|
139
+ | Base structure | Same alphanumeric codes | Same base + Korean extensions |
140
+ | Additional codes | -- | U-codes for Korean-specific conditions |
141
+ | Version alignment | WHO updates | HIRA publishes annual Korean versions |
142
+ | Medication mapping | ATC codes | ATC codes (same international standard) |
143
+
144
+ For most major disease categories (cardiovascular, metabolic, respiratory,
145
+ neurological), the ICD-10-KM codes are identical to international ICD-10.
146
+ Country-specific extensions primarily affect rare or culture-bound conditions.
147
+
148
+ ---
149
+
150
+ ## Charlson Comorbidity Index in NHIS
151
+
152
+ The CCI is computed from claims using the Quan adaptation for ICD-10:
153
+
154
+ | CCI Category | Standard grouping |
155
+ |-------------|-------------------|
156
+ | 0 | No comorbidities |
157
+ | 1 | Single comorbidity point |
158
+ | >= 2 | Multiple comorbidities |
159
+
160
+ Always specify which CCI adaptation was used (Quan 2005 is standard for
161
+ ICD-10 claims data).
162
+
163
+ ---
164
+
165
+ ## Covariate Definitions from NHIS Data Sources
166
+
167
+ NHIS integrates three data sources, each providing different covariate types:
168
+
169
+ ### Source 1: Claims Database
170
+ - Comorbidities (via ICD-10 codes)
171
+ - Medication history (via dispensing records)
172
+ - Healthcare utilization (visit counts, hospitalization days)
173
+
174
+ ### Source 2: National Health Examination
175
+ - BMI, blood pressure, fasting glucose, GFR
176
+ - Liver enzymes (AST, ALT, gamma-GTP)
177
+ - Hemoglobin, total cholesterol
178
+ - Urinalysis
179
+
180
+ ### Source 3: Health Interview / Questionnaire
181
+ - Smoking status (never / former / current)
182
+ - Alcohol consumption (frequency categories)
183
+ - Physical activity (MET-based sufficiency)
184
+ - Region of residence, household income level
185
+
186
+ **Baseline alignment**: Covariates must be anchored to the most recent data
187
+ available **prior to** the index date. Do not use post-index measurements.
188
+
189
+ ---
190
+
191
+ ## Sensitivity Analysis Patterns
192
+
193
+ ### Stricter Disease Definition
194
+ Run the primary analysis with the standard algorithm, then repeat with a
195
+ more stringent definition (e.g., 2-claim → 3-claim, or adding medication
196
+ confirmation).
197
+
198
+ ### Negative Control Outcomes
199
+ Select outcomes with no plausible biological link to the exposure (e.g.,
200
+ neuromuscular junction disorders, self-harm) to detect residual confounding
201
+ or coding artifacts.
202
+
203
+ ### Negative Control Exposures
204
+ Use an exposure with no expected effect on the outcome as a falsification test.
205
+
206
+ ### Multiple Look-Back Periods
207
+ Test 1-year, 3-year, and 5-year look-back periods and compare incidence rates
208
+ to assess the impact of prevalent case misclassification.
209
+
210
+ ---
211
+
212
+ ## Reporting Checklist
213
+
214
+ When reporting NHIS claims-based definitions in a manuscript:
215
+
216
+ - [ ] ICD-10 code ranges specified (main text or supplementary table)
217
+ - [ ] Number of claims required (1 vs 2+ vs with medication)
218
+ - [ ] Time window for claims (within 12 months, any time, etc.)
219
+ - [ ] Look-back period for incident case definition
220
+ - [ ] Medication confirmation specified with ATC codes (if used)
221
+ - [ ] Data source specified (claims vs exam vs questionnaire)
222
+ - [ ] CCI adaptation cited (Quan 2005 or other)
223
+ - [ ] Sensitivity analysis with alternative definition included
224
+
225
+ ---
226
+
227
+ ## Common Reviewer Flags
228
+
229
+ 1. Single-claim definition without justification (low PPV concern)
230
+ 2. No look-back period for "incident" cases
231
+ 3. Mixing ICD-10 and ICD-9 codes without noting transition dates
232
+ 4. Not specifying whether inpatient, outpatient, or both claims were used
233
+ 5. CCI version not cited
234
+ 6. Covariate timing not anchored to index date
235
+ 7. Missing sensitivity analysis with stricter/looser definitions
236
+ 8. Rule-out diagnoses not addressed (diagnostic codes without treatment)
237
+
238
+ ---
239
+
240
+ ## References (Methodological)
241
+
242
+ - Quan H et al. Coding algorithms for defining comorbidities in ICD-9-CM
243
+ and ICD-10 administrative data. Med Care. 2005;43(11):1130-9.
244
+ - Choi JY et al. Validation of administrative data for the identification
245
+ of chronic diseases in South Korea. J Korean Med Sci. (methodology reference)
246
+ - NHIS data user guide: nhiss.nhis.or.kr (Korean National Health Insurance
247
+ Sharing Service)
@@ -0,0 +1,132 @@
1
+ # Propensity Score Analysis Guide
2
+
3
+ Methods for estimating causal treatment effects in observational studies by balancing
4
+ confounders between treatment groups.
5
+
6
+ ---
7
+
8
+ ## When to Use
9
+
10
+ - Observational study comparing treatment vs control (or two interventions)
11
+ - Multiple confounders to adjust for
12
+ - Goal: estimate causal effect analogous to an RCT
13
+ - NOT for: randomized trials (already balanced), single-arm studies
14
+
15
+ ---
16
+
17
+ ## Estimands — Choose Before Analysis
18
+
19
+ | Estimand | Definition | Target population | Method |
20
+ |----------|-----------|-------------------|--------|
21
+ | **ATE** | Average Treatment Effect | Entire study population | IPTW |
22
+ | **ATT** | Effect on Treated | Treatment group only | PSM, ATT weighting |
23
+ | **ATO** | Effect on Overlap population | PS 0.2-0.8 region | Overlap weighting |
24
+
25
+ Comparing PSM and IPTW results directly is inappropriate — they estimate different estimands.
26
+
27
+ ---
28
+
29
+ ## Step-by-Step Workflow
30
+
31
+ ### Step 1: PS Estimation
32
+ - Model: logistic regression (standard)
33
+ - Dependent variable: treatment assignment (binary)
34
+ - Covariates: all variables that affect the outcome (confounders)
35
+ - Do NOT include: instrumental variables (affect treatment but not outcome)
36
+ - Individual PS model coefficients have no clinical meaning — only PS distribution matters
37
+
38
+ ### Step 2: Apply PS Method
39
+
40
+ **Option A — PS Matching (PSM)**
41
+ - Nearest-neighbor matching with caliper = 0.2 x SD(logit PS)
42
+ - 1:1 matching is standard; 1:N or full matching available
43
+ - Estimand: ATT (typically)
44
+ - Drawback: unmatched subjects are excluded → sample size reduction
45
+
46
+ **Option B — IPTW (Inverse Probability of Treatment Weighting)**
47
+ - Weights: treated = 1/PS, control = 1/(1-PS) for ATE
48
+ - **Always use stabilized weights** to prevent extreme values
49
+ - Stabilized: treated = P(T=1)/PS, control = P(T=0)/(1-PS)
50
+ - All subjects included (no exclusion)
51
+ - Flag extreme weights > 10
52
+
53
+ **Option C — SIPTW (Stabilized Inverse Probability of Treatment Weighting)**
54
+ - Weights: treated = P(T=1)/PS, control = P(T=0)/(1-PS)
55
+ - Mathematically equivalent to stabilized IPTW (Option B with stabilized=True)
56
+ - Named explicitly as SIPTW in emulated target trial literature
57
+ - Maintains entire cohort sample size (no exclusion)
58
+ - Allows appropriate variance estimation of main effect
59
+ - Estimand: ATE
60
+ - Increasingly used in large-scale NHIS cohort studies
61
+ - Report effective sample size (ESS) alongside raw N
62
+
63
+ **Option D — Overlap Weighting (Recommended for most cases)**
64
+ - Weights: treated = (1-PS), control = PS
65
+ - Naturally down-weights subjects at PS extremes
66
+ - No extreme weight problem (advantage over IPTW)
67
+ - Estimand: ATO
68
+ - Increasingly recommended in recent guidelines (JAMA 2020, AJE 2024)
69
+
70
+ ### Step 3: Assess Balance
71
+ - **SMD < 0.10** for all covariates (Austin, 2009)
72
+ - SMD < 0.25 is acceptable but suboptimal
73
+ - Use SMD, NOT p-values (SMD is sample-size independent)
74
+ - **Love plot**: pre/post-matching SMD comparison (mandatory figure)
75
+ - Variance ratios: should be within 0.5-2.0
76
+ - PS distribution overlap: histogram comparing treated vs control
77
+
78
+ ### Step 4: Outcome Analysis
79
+ - **After PSM**: paired analysis (paired t-test, conditional logistic, stratified Cox)
80
+ - **After IPTW/OW**: weighted regression using survey methods
81
+ - Always use robust/sandwich standard errors for weighted analyses
82
+
83
+ ### Step 5: Sensitivity Analysis
84
+ - **E-value**: quantifies how strong unmeasured confounding would need to be to explain away the result
85
+ - Report E-value for the point estimate and lower CI bound
86
+
87
+ ---
88
+
89
+ ## Balance Table (Required Output)
90
+
91
+ | Variable | Before matching | | After matching | |
92
+ |----------|------|------|------|------|
93
+ | | Treated | Control | SMD | Treated | Control | SMD |
94
+ | Age, mean (SD) | 65.2 (12.1) | 58.7 (14.3) | 0.49 | 62.1 (11.8) | 61.8 (12.0) | 0.03 |
95
+
96
+ ---
97
+
98
+ ## Reporting Templates
99
+
100
+ **PSM**: "Propensity scores were estimated using logistic regression with the following covariates: [list]. PS matching was performed using 1:1 nearest-neighbor matching with a caliper of 0.2 SD of the logit PS. After matching, all SMDs were below 0.10 (Figure X). In the matched cohort (n = X pairs), ..."
101
+
102
+ **IPTW/OW**: "Inverse probability of treatment weighting (or overlap weighting) was applied using stabilized weights. Covariate balance was assessed using SMDs (all < 0.10; Figure X). The weighted analysis showed ..."
103
+
104
+ **SIPTW**: "Stabilized inverse probability of treatment weighting was used to balance covariate distributions between the [exposed] and [unexposed] groups. This approach maintains the sample size of the entire cohort and allows for appropriate estimation of the variance of the main effect. Covariate balance was assessed using SMDs (all < 0.10; Figure X)."
105
+
106
+ ---
107
+
108
+ ## Common Reviewer Flags
109
+
110
+ 1. SMD not reported (using p-values instead)
111
+ 2. Caliper width not specified
112
+ 3. Estimand (ATE/ATT/ATO) not stated
113
+ 4. No sensitivity analysis for unmeasured confounding
114
+ 5. Number of unmatched subjects not reported (for PSM)
115
+ 6. Extreme weights not assessed (for IPTW)
116
+ 7. Individual PS model coefficients interpreted clinically
117
+
118
+ ---
119
+
120
+ ## Python Packages
121
+ - `sklearn.linear_model.LogisticRegression` — PS estimation
122
+ - `causalinference` — matching (limited)
123
+ - Manual implementation for IPTW/OW (see template)
124
+ - `statsmodels` — weighted regression
125
+
126
+ ## R Packages
127
+ - `MatchIt` — PS matching
128
+ - `WeightIt` — IPTW, overlap weighting
129
+ - `cobalt` — balance assessment, Love plot
130
+ - `survey` — weighted outcome analysis
131
+ - `tableone` — baseline table with SMD
132
+ - `EValue` — sensitivity analysis
@@ -0,0 +1,115 @@
1
+ # Regression Analysis Guide
2
+
3
+ Covers both logistic regression (binary outcome) and multiple linear regression (continuous outcome).
4
+
5
+ ---
6
+
7
+ ## Logistic Regression
8
+
9
+ ### When to Use
10
+ Binary outcome variable (0/1, event/no event) with one or more predictors.
11
+ Used for risk factor identification and prediction model building.
12
+
13
+ ### Assumptions
14
+ 1. Binary outcome
15
+ 2. Linear relationship between continuous predictors and log-odds (Box-Tidwell test)
16
+ 3. Independent observations (if repeated → GEE or mixed logistic)
17
+ 4. No multicollinearity: VIF < 5
18
+ 5. Sufficient sample: EPV >= 10 (minimum), >= 20 (recommended)
19
+
20
+ ### Variable Selection
21
+ - **Clinical rationale first** — avoid purely data-driven stepwise selection
22
+ - Include: variables significant at P < 0.10 in univariable analysis + known confounders
23
+ - STROBE/TRIPOD guideline compliance required
24
+
25
+ ### Model Assessment
26
+
27
+ **Calibration:**
28
+ - Hosmer-Lemeshow test: P > 0.05 = adequate fit (overpowered with large N)
29
+ - Calibration plot: predicted probability vs observed frequency
30
+
31
+ **Discrimination:**
32
+ - C-statistic (= AUC): 0.7-0.8 acceptable, 0.8-0.9 excellent, > 0.9 outstanding
33
+
34
+ **Multicollinearity:**
35
+ - VIF > 5 → remove or combine variables
36
+
37
+ ### Required Outputs
38
+ 1. OR table: univariable AND multivariable OR (95% CI), P-value per variable
39
+ 2. C-statistic with 95% CI
40
+ 3. Hosmer-Lemeshow test result
41
+ 4. VIF table (supplementary)
42
+ 5. Box-Tidwell results for continuous predictors (supplementary)
43
+
44
+ ### OR Table Format
45
+ | Variable | Univariable OR (95% CI) | P | Multivariable OR (95% CI) | P |
46
+ |----------|------------------------|---|--------------------------|---|
47
+ | Age (per 10 yr) | 1.45 (1.12-1.88) | 0.005 | 1.32 (1.01-1.73) | 0.042 |
48
+
49
+ ### Reporting Template
50
+ "Multivariable logistic regression was performed to identify independent predictors of [outcome]. Variables with P < 0.10 in univariable analysis and clinically relevant confounders were included. The model showed good discrimination (C-statistic = 0.82, 95% CI 0.78-0.86) and calibration (Hosmer-Lemeshow P = 0.45). [Variable] was independently associated with [outcome] (adjusted OR = 2.15, 95% CI 1.43-3.24; P < 0.001)."
51
+
52
+ ### Pitfalls
53
+ - OR != RR: when event rate > 10%, OR overestimates RR
54
+ - EPV < 10 → overfitting risk. Consider penalized regression (LASSO/Ridge)
55
+ - Specify reference category for categorical variables
56
+ - Specify units for continuous variables (per 1 year vs per 10 years)
57
+ - Complete separation → use Firth's penalized likelihood
58
+
59
+ ---
60
+
61
+ ## Multiple Linear Regression
62
+
63
+ ### When to Use
64
+ Continuous outcome variable with one or more predictors.
65
+ Used for identifying determinants and estimating adjusted effects.
66
+
67
+ ### Assumptions (LINE + No Multicollinearity)
68
+ 1. **L**inearity: residuals vs fitted plot
69
+ 2. **I**ndependence: no repeated measures (if repeated → LMM/GEE)
70
+ 3. **N**ormality of residuals: Q-Q plot, Shapiro-Wilk on residuals
71
+ 4. **E**qual variance (homoscedasticity): residuals vs fitted, Scale-Location plot
72
+ 5. No multicollinearity: VIF < 5
73
+ 6. No influential outliers: Cook's distance < 4/n
74
+
75
+ ### Assumption Violations → Alternatives
76
+ | Violation | Fix |
77
+ |-----------|-----|
78
+ | Non-linearity | Log transform, polynomial terms, GAM |
79
+ | Heteroscedasticity | Robust SE, WLS |
80
+ | Non-normal residuals | Transform outcome, bootstrap CI |
81
+ | Multicollinearity | Remove variable, combine, Ridge/LASSO |
82
+
83
+ ### Model Evaluation
84
+ - R² (coefficient of determination): proportion of variance explained
85
+ - Adjusted R²: penalized for number of predictors — use for model comparison
86
+ - In medical research, R² = 0.2-0.4 can be meaningful (high biological variability)
87
+
88
+ ### Diagnostic Plots (4-panel, always generate)
89
+ 1. Residuals vs Fitted → linearity + homoscedasticity
90
+ 2. Q-Q plot → residual normality
91
+ 3. Scale-Location → homoscedasticity
92
+ 4. Residuals vs Leverage → influential outliers (Cook's distance)
93
+
94
+ ### Required Outputs
95
+ 1. Coefficient table: β (95% CI), P-value per variable
96
+ 2. R² and adjusted R²
97
+ 3. VIF table
98
+ 4. 4-panel diagnostic plot
99
+ 5. Standardized coefficients (optional, for effect size comparison)
100
+
101
+ ### Coefficient Table Format
102
+ | Variable | β (95% CI) | P |
103
+ |----------|-----------|---|
104
+ | Age (per year) | 0.45 (0.32 to 0.58) | < 0.001 |
105
+ | Model R² | 0.35 | |
106
+ | Adjusted R² | 0.33 | |
107
+
108
+ ### Reporting Template
109
+ "Multiple linear regression was performed with [outcome] as the dependent variable. The model explained X% of the variance (adjusted R² = 0.XX). After adjusting for [covariates], [variable] was significantly associated with [outcome] (β = X.XX, 95% CI X.XX to X.XX; P = exact). Model assumptions were verified using diagnostic plots."
110
+
111
+ ### Pitfalls
112
+ - Always report β units (per 1 year, per 10 kg/m², etc.)
113
+ - Standardized β useful for comparing effect sizes but unstandardized is standard in papers
114
+ - EPV for continuous outcome: N >= 10-20 per predictor
115
+ - Always present diagnostic plots (at minimum in supplementary)