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,160 @@
1
+ # Repeated Measures / Mixed Models Guide
2
+
3
+ Analysis methods for longitudinal data where the same subjects are measured at multiple time points.
4
+
5
+ ---
6
+
7
+ ## When to Use
8
+
9
+ - Same subjects measured at 2+ time points
10
+ - Key research question: does change over time differ between groups? (Time x Group interaction)
11
+ - Examples: treatment response over weeks, serial imaging measurements, before/after/follow-up
12
+
13
+ ---
14
+
15
+ ## Method Selection
16
+
17
+ | Condition | Recommended method |
18
+ |-----------|-------------------|
19
+ | No missing data + few time points + sphericity met | RM ANOVA |
20
+ | Missing data (MAR) + continuous outcome | **LMM (preferred)** |
21
+ | Missing data + binary/count outcome | GEE (or GLMM) |
22
+ | Individual trajectory estimation needed | LMM (random slope) |
23
+ | Population-averaged effect only | GEE |
24
+ | Non-normal outcome | GLMM or GEE |
25
+
26
+ **Default recommendation: LMM** — handles missing data, does not require sphericity, allows unequal time spacing.
27
+
28
+ ---
29
+
30
+ ## Data Format
31
+
32
+ All methods (LMM, GEE) require **long format**:
33
+
34
+ | id | time | group | outcome |
35
+ |----|------|-------|---------|
36
+ | 1 | 0 | A | 45.2 |
37
+ | 1 | 1 | A | 42.8 |
38
+ | 1 | 2 | A | 38.1 |
39
+
40
+ Convert from wide format before analysis.
41
+
42
+ ---
43
+
44
+ ## 1. RM ANOVA
45
+
46
+ ### Sphericity Check (Mandatory)
47
+ - **Mauchly's test**: H0 = sphericity holds
48
+ - P >= 0.05 → use standard F-test
49
+ - P < 0.05 → apply correction
50
+
51
+ ### Corrections for Sphericity Violation
52
+ 1. **Greenhouse-Geisser (G-G)**: conservative, recommended
53
+ 2. **Huynh-Feldt**: slightly liberal
54
+ 3. **Multivariate test** (Pillai's trace): no sphericity assumption needed
55
+
56
+ ### Limitations
57
+ - Complete cases only — any missing time point drops the entire subject
58
+ - Difficult to add covariates
59
+ - Equal time spacing required
60
+
61
+ ### Key Results to Report
62
+ - Mauchly's test result (W statistic, P-value, epsilon)
63
+ - Correction method used (if sphericity violated)
64
+ - Within-subject effect: Time (F, df, P)
65
+ - Between-subject effect: Group (F, df, P)
66
+ - **Interaction: Time x Group** (most important)
67
+
68
+ ---
69
+
70
+ ## 2. Linear Mixed Model (LMM)
71
+
72
+ ### Structure
73
+ ```
74
+ Y = Xβ (fixed effects) + Zb (random effects) + ε
75
+ ```
76
+
77
+ ### Random Effects Selection
78
+ - **Random intercept only**: subjects differ in baseline (default, start here)
79
+ - **Random intercept + slope**: subjects differ in both baseline and rate of change
80
+ - Decision: visualize individual trajectories (spaghetti plot). If slopes vary → add random slope.
81
+ - If model does not converge with random slope → simplify to random intercept only
82
+
83
+ ### Covariance Structure Selection
84
+ | Structure | Property | When to use |
85
+ |-----------|----------|-------------|
86
+ | **CS** (Compound Symmetry) | Equal correlation between all time pairs | Equivalent to RM ANOVA |
87
+ | **AR(1)** | Correlation decays with time lag | Equally spaced measurements |
88
+ | **UN** (Unstructured) | Free correlation for each pair | Few time points only (many parameters) |
89
+
90
+ Compare structures using **AIC/BIC** (lower = better).
91
+
92
+ ### Advantages over RM ANOVA
93
+ - Handles missing data under MAR assumption
94
+ - No sphericity requirement
95
+ - Allows unequal time intervals
96
+ - Easy covariate adjustment
97
+ - Estimates individual trajectories
98
+
99
+ ---
100
+
101
+ ## 3. GEE (Generalized Estimating Equations)
102
+
103
+ ### Key Properties
104
+ - Estimates **population-averaged (marginal) effects** — not individual-level
105
+ - Specify working correlation: exchangeable, AR(1), unstructured
106
+ - Works for non-normal outcomes (binary, count)
107
+ - Requires **MCAR** assumption for missing data (or use weighted GEE for MAR)
108
+ - Needs sufficient clusters: subjects >= 30-40
109
+
110
+ ### LMM vs GEE Decision
111
+ | Question | LMM | GEE |
112
+ |----------|-----|-----|
113
+ | "How does each patient change?" | Yes | No |
114
+ | "How does the group average change?" | Yes | Yes |
115
+ | Binary/count outcome without GLMM | No | Yes |
116
+ | MAR missing data tolerance | Yes | No (MCAR only) |
117
+
118
+ ---
119
+
120
+ ## Required Outputs
121
+
122
+ 1. **Spaghetti plot**: individual trajectories by group
123
+ 2. **Model summary table**: fixed effects (β, 95% CI, P), random effects variance
124
+ 3. **Time x Group interaction** result prominently reported
125
+ 4. Model fit: AIC/BIC for covariance structure comparison
126
+ 5. Missing data description (n per time point, mechanism assumed)
127
+
128
+ ---
129
+
130
+ ## Reporting Templates
131
+
132
+ **RM ANOVA**: "Repeated-measures ANOVA was performed with Greenhouse-Geisser correction for violation of sphericity (Mauchly's test P < 0.001, ε = 0.42). There was a significant time × group interaction (F(X, Y) = Z, P = exact)."
133
+
134
+ **LMM**: "A linear mixed-effects model with random intercepts for subjects and [CS/AR(1)] correlation structure was fitted. The time × group interaction was significant (β = -2.34, 95% CI -3.87 to -0.81; P = 0.003), indicating that the rate of change in [outcome] differed between groups."
135
+
136
+ **GEE**: "GEE with exchangeable correlation structure was used to estimate population-averaged effects. The time × group interaction was ..."
137
+
138
+ ---
139
+
140
+ ## Common Reviewer Flags
141
+
142
+ 1. Sphericity test not reported (for RM ANOVA)
143
+ 2. Covariance structure selection rationale not stated (for LMM)
144
+ 3. Time × Group interaction not interpreted
145
+ 4. Missing data handling not described
146
+ 5. Using RM ANOVA with substantial missing data (should use LMM)
147
+ 6. Not reporting individual trajectories (spaghetti plot)
148
+
149
+ ---
150
+
151
+ ## Python Packages
152
+ - `pingouin` — RM ANOVA with G-G correction
153
+ - `statsmodels.formula.api.mixedlm` — LMM
154
+ - `statsmodels.genmod.generalized_estimating_equations.GEE` — GEE
155
+
156
+ ## R Packages
157
+ - `lme4` + `lmerTest` — LMM (standard)
158
+ - `nlme` — LMM with correlation structures (CS, AR1, UN)
159
+ - `geepack` — GEE
160
+ - Base R `aov()` with `Error()` — RM ANOVA
@@ -0,0 +1,366 @@
1
+ # Survey-Weighted Analysis Guide
2
+
3
+ Methods for analyzing complex survey data (KNHANES, NHANES, KCHS, and similar
4
+ nationally representative health surveys) that use stratified, multistage
5
+ probability sampling designs.
6
+
7
+ ---
8
+
9
+ ## When to Use
10
+
11
+ - Data from a national health survey with sampling weights (e.g., KNHANES, NHANES, KCHS)
12
+ - Goal: produce nationally representative prevalence, means, or associations
13
+ - Cross-national comparisons using parallel survey datasets
14
+ - NOT for: simple random samples, census data, or claims-based cohorts (NHIS, JMDC)
15
+
16
+ Claims-based databases (NHIS, JMDC) are NOT surveys -- they do not have sampling
17
+ weights or complex sampling design. Use standard regression for these.
18
+
19
+ ---
20
+
21
+ ## Key Concepts
22
+
23
+ ### Complex Survey Design Elements
24
+
25
+ | Element | Description | Survey variable |
26
+ |---------|-------------|-----------------|
27
+ | **Stratification** | Groups the population into non-overlapping strata before sampling | `strata` |
28
+ | **Clustering (PSU)** | Primary sampling units within strata (e.g., districts, census blocks) | `cluster` / `PSU` |
29
+ | **Sampling weights** | Inverse probability of selection, adjusted for non-response and post-stratification | `weight` |
30
+
31
+ Ignoring these elements produces biased standard errors, incorrect p-values, and
32
+ non-representative point estimates.
33
+
34
+ ### Dataset-Specific Design Variables
35
+
36
+ | Dataset | Strata variable | Cluster/PSU variable | Weight variable | Notes |
37
+ |---------|----------------|---------------------|-----------------|-------|
38
+ | **KNHANES** | `kstrata` | `psu` | `wt_itvex` (interview+exam) or `wt_ntr` (nutrition) | Years may be non-consecutive (PHQ-9 only in certain cycles) |
39
+ | **NHANES** | `SDMVSTRA` | `SDMVPSU` | `WTMECXYR` (exam) or `WTINTXYR` (interview) | 2-year cycles; combine cycles with adjusted weights |
40
+ | **KCHS** | varies by year | varies by year | `wt` | Annual community survey; single-stage cluster design |
41
+
42
+ ### Weight Selection Rules
43
+
44
+ - **Interview-only variables**: use interview weight
45
+ - **Exam/lab variables**: use exam weight (smaller denominator)
46
+ - **Nutrition variables (KNHANES)**: use nutrition weight
47
+ - **Multi-cycle NHANES**: divide weight by number of cycles combined (e.g., 4 cycles: weight/4)
48
+ - **Single-cycle analysis**: use the cycle-specific weight as-is
49
+
50
+ ---
51
+
52
+ ## Step-by-Step Workflow
53
+
54
+ ### Step 1: Declare Survey Design
55
+
56
+ Always declare the design before any analysis. This ensures correct variance estimation.
57
+
58
+ **Python (statsmodels)**:
59
+ ```python
60
+ # statsmodels does not have a native survey design object.
61
+ # Use linearmodels or manual weight application.
62
+ # For publication-quality survey analysis, R is strongly recommended.
63
+ ```
64
+
65
+ **R (survey package)**:
66
+ ```r
67
+ library(survey)
68
+
69
+ # KNHANES
70
+ design_kr <- svydesign(
71
+ id = ~psu,
72
+ strata = ~kstrata,
73
+ weights = ~wt_itvex,
74
+ data = df_kr,
75
+ nest = TRUE
76
+ )
77
+
78
+ # NHANES (2-year cycle)
79
+ design_us <- svydesign(
80
+ id = ~SDMVPSU,
81
+ strata = ~SDMVSTRA,
82
+ weights = ~WTMECXYR,
83
+ data = df_us,
84
+ nest = TRUE
85
+ )
86
+ ```
87
+
88
+ **SAS**:
89
+ ```sas
90
+ /* KNHANES */
91
+ PROC SURVEYLOGISTIC DATA=kr;
92
+ STRATA kstrata;
93
+ CLUSTER psu;
94
+ WEIGHT wt_itvex;
95
+ MODEL outcome(event='1') = exposure covariates;
96
+ RUN;
97
+
98
+ /* NHANES */
99
+ PROC SURVEYLOGISTIC DATA=us;
100
+ STRATA SDMVSTRA;
101
+ CLUSTER SDMVPSU;
102
+ WEIGHT WTMECXYR;
103
+ MODEL outcome(event='1') = exposure covariates;
104
+ RUN;
105
+ ```
106
+
107
+ ### Step 2: Weighted Descriptive Statistics
108
+
109
+ **R**:
110
+ ```r
111
+ # Weighted means
112
+ svymean(~continuous_var, design, na.rm = TRUE)
113
+
114
+ # Weighted proportions
115
+ svymean(~factor(categorical_var), design, na.rm = TRUE)
116
+
117
+ # Weighted Table 1 by group
118
+ library(tableone)
119
+ svyCreateTableOne(
120
+ vars = c("age", "sex", "bmi", "income"),
121
+ strata = "exposure_group",
122
+ data = design,
123
+ test = TRUE
124
+ )
125
+ ```
126
+
127
+ **SAS**:
128
+ ```sas
129
+ PROC SURVEYMEANS DATA=dataset;
130
+ STRATA strata_var;
131
+ CLUSTER cluster_var;
132
+ WEIGHT weight_var;
133
+ VAR continuous_var1 continuous_var2;
134
+ RUN;
135
+
136
+ PROC SURVEYFREQ DATA=dataset;
137
+ STRATA strata_var;
138
+ CLUSTER cluster_var;
139
+ WEIGHT weight_var;
140
+ TABLES group * categorical_var / CHISQ;
141
+ RUN;
142
+ ```
143
+
144
+ ### Step 3: Weighted Regression — Sequential Model Building
145
+
146
+ The standard cross-national analysis pattern uses sequential model building:
147
+
148
+ | Model | Covariates | Purpose |
149
+ |-------|-----------|---------|
150
+ | Model 1 | Age, sex | Minimal adjustment |
151
+ | Model 2 | Model 1 + income, education, smoking, alcohol, BMI, comorbidities | Full adjustment |
152
+
153
+ **R (survey-weighted logistic regression)**:
154
+ ```r
155
+ # Model 1: age + sex
156
+ model1 <- svyglm(
157
+ outcome ~ exposure + age + sex,
158
+ design = design,
159
+ family = quasibinomial()
160
+ )
161
+
162
+ # Model 2: full adjustment
163
+ model2 <- svyglm(
164
+ outcome ~ exposure + age + sex + income + education +
165
+ smoking + alcohol + bmi + cvd_history,
166
+ design = design,
167
+ family = quasibinomial()
168
+ )
169
+
170
+ # Extract weighted OR (wOR) with 95% CI
171
+ extract_wor <- function(model, var) {
172
+ coef_val <- coef(model)[var]
173
+ se_val <- summary(model)$coefficients[var, "Std. Error"]
174
+ or <- exp(coef_val)
175
+ ci_lo <- exp(coef_val - 1.96 * se_val)
176
+ ci_hi <- exp(coef_val + 1.96 * se_val)
177
+ p_val <- summary(model)$coefficients[var, "Pr(>|t|)"]
178
+ data.frame(wOR = or, CI_lower = ci_lo, CI_upper = ci_hi, P = p_val)
179
+ }
180
+ ```
181
+
182
+ **SAS (PROC SURVEYLOGISTIC)**:
183
+ ```sas
184
+ /* Model 2: full adjustment */
185
+ PROC SURVEYLOGISTIC DATA=dataset;
186
+ STRATA strata_var;
187
+ CLUSTER cluster_var;
188
+ WEIGHT weight_var;
189
+ CLASS sex(ref='Male') income(ref='High') smoking(ref='Never') / PARAM=REF;
190
+ MODEL outcome(event='1') = exposure age sex income education smoking alcohol bmi;
191
+ ODDSRATIO exposure / CL=WALD;
192
+ RUN;
193
+ ```
194
+
195
+ ### Step 4: Subgroup / Stratified Analyses
196
+
197
+ ```r
198
+ # Stratified by sex
199
+ svyglm(
200
+ outcome ~ exposure + age + income + education + smoking + alcohol + bmi,
201
+ design = subset(design, sex == "Male"),
202
+ family = quasibinomial()
203
+ )
204
+ # Repeat for Female
205
+ # Note: exclude the stratification variable from covariates
206
+ ```
207
+
208
+ Reporting pattern: "Weighted odds ratios are adjusted for all covariates except
209
+ for the stratification variable."
210
+
211
+ ### Step 5: Advanced Analyses (Optional)
212
+
213
+ **Restricted cubic spline (dose-response)**:
214
+ ```r
215
+ library(rms)
216
+ design_rms <- svydesign(id = ~psu, strata = ~kstrata,
217
+ weights = ~wt_itvex, data = df)
218
+ model_rcs <- svyglm(
219
+ outcome ~ rcs(continuous_exposure, 3) + age + sex + covariates,
220
+ design = design_rms,
221
+ family = quasibinomial()
222
+ )
223
+ ```
224
+
225
+ **Weighted quantile sum (WQS) regression**:
226
+ ```r
227
+ library(gWQS)
228
+ # WQS for composite exposure (e.g., LE8 components)
229
+ result_wqs <- gwqs(
230
+ outcome ~ wqs + age + sex + covariates,
231
+ mix_name = c("comp1", "comp2", "comp3", "comp4"),
232
+ data = df,
233
+ q = 4, # quartiles
234
+ b = 500, # bootstrap iterations
235
+ seed = 42,
236
+ family = "binomial",
237
+ weights = df$weight_var
238
+ )
239
+ ```
240
+
241
+ ---
242
+
243
+ ## Weighted SMD (Standardized Mean Difference)
244
+
245
+ For balance assessment in weighted analyses:
246
+
247
+ ```r
248
+ library(survey)
249
+ library(tableone)
250
+
251
+ # SMD in survey design
252
+ tab <- svyCreateTableOne(
253
+ vars = covariates,
254
+ strata = "treatment",
255
+ data = design,
256
+ smd = TRUE
257
+ )
258
+ print(tab, smd = TRUE)
259
+ ```
260
+
261
+ **Manual calculation (Python)**:
262
+ ```python
263
+ def weighted_smd(x, treatment, weights, is_binary=False):
264
+ """Calculate weighted standardized mean difference."""
265
+ t_mask = treatment == 1
266
+ c_mask = treatment == 0
267
+
268
+ w1, w0 = weights[t_mask], weights[c_mask]
269
+ x1, x0 = x[t_mask], x[c_mask]
270
+
271
+ wm1 = np.average(x1, weights=w1)
272
+ wm0 = np.average(x0, weights=w0)
273
+
274
+ if is_binary:
275
+ denom = np.sqrt((wm1 * (1 - wm1) + wm0 * (1 - wm0)) / 2)
276
+ else:
277
+ wv1 = np.average((x1 - wm1) ** 2, weights=w1)
278
+ wv0 = np.average((x0 - wm0) ** 2, weights=w0)
279
+ denom = np.sqrt((wv1 + wv0) / 2)
280
+
281
+ return (wm1 - wm0) / denom if denom > 0 else 0.0
282
+ ```
283
+
284
+ ---
285
+
286
+ ## Cross-National Analysis Pattern
287
+
288
+ When comparing two countries using parallel surveys:
289
+
290
+ 1. **Never pool** raw data across countries into a single regression
291
+ 2. Analyze each country **independently** with country-specific survey design
292
+ 3. Present results **side-by-side** in the same table
293
+ 4. Compare effect magnitudes narratively (not via interaction terms)
294
+
295
+ ### Standard Output Table Format
296
+
297
+ | Variable | Korea (KNHANES) | | US (NHANES) | |
298
+ |----------|------|------|------|------|
299
+ | | Model 1 wOR (95% CI) | Model 2 wOR (95% CI) | Model 1 wOR (95% CI) | Model 2 wOR (95% CI) |
300
+ | Exposure | 1.42 (1.21-1.67) | 1.35 (1.14-1.59) | 1.28 (1.10-1.49) | 1.22 (1.04-1.43) |
301
+
302
+ ---
303
+
304
+ ## Reporting Templates
305
+
306
+ **Methods**:
307
+ "To account for the complex survey designs and ensure nationally representative
308
+ estimates, appropriate stratification, clustering, and sampling weights were
309
+ applied. Weighted logistic regression models were used to estimate weighted odds
310
+ ratios (wORs) and 95% confidence intervals (CIs). Model 1 adjusted for age and
311
+ sex, while Model 2 further included [covariates]. All analyses were performed
312
+ using SAS version 9.4 (SAS Institute Inc.) [and R version X.X.X (R Foundation
313
+ for Statistical Computing)]. A two-sided P value of less than 0.05 was
314
+ considered statistically significant."
315
+
316
+ **Results**:
317
+ "In the weighted analysis of [N] participants from [DATASET], [EXPOSURE] was
318
+ significantly associated with [OUTCOME] (wOR [X.XX]; 95% CI [X.XX-X.XX]) after
319
+ adjusting for [covariates] (Model 2)."
320
+
321
+ ---
322
+
323
+ ## Common Reviewer Flags
324
+
325
+ 1. Survey weights not applied (unweighted analysis of survey data)
326
+ 2. Strata/cluster variables not specified (incorrect SE estimation)
327
+ 3. Wrong weight variable used (interview weight for lab variables)
328
+ 4. Multi-cycle NHANES weights not adjusted (divided by number of cycles)
329
+ 5. Data pooled across countries instead of analyzed separately
330
+ 6. Weighted proportions not reported (using raw counts instead)
331
+ 7. Subgroup analysis includes the stratification variable as covariate
332
+ 8. Missing data handling not stated (complete case vs imputation)
333
+
334
+ ---
335
+
336
+ ## Python vs R Recommendation
337
+
338
+ | Task | Recommended | Reason |
339
+ |------|-------------|--------|
340
+ | Survey-weighted regression | **R (survey)** | Native support, correct variance estimation |
341
+ | Survey-weighted Table 1 | **R (tableone)** | `svyCreateTableOne()` handles design |
342
+ | WQS regression | **R (gWQS)** | Only available in R |
343
+ | Dose-response (RCS) | **R (rms + survey)** | Integrated with survey design |
344
+ | Quick descriptives | Python (statsmodels) | Adequate for simple weighted means |
345
+
346
+ For publication-quality survey analysis, **R is strongly recommended** over Python.
347
+ Python's statsmodels supports basic weighted regression but lacks full survey
348
+ design support (no strata/cluster specification for variance estimation).
349
+
350
+ ---
351
+
352
+ ## R Packages
353
+
354
+ - `survey` -- core survey design and analysis
355
+ - `tableone` -- survey-weighted baseline tables with SMD
356
+ - `rms` -- restricted cubic splines with survey design
357
+ - `gWQS` -- weighted quantile sum regression
358
+ - `srvyr` -- tidyverse-compatible survey analysis wrapper
359
+
360
+ ## SAS Procedures
361
+
362
+ - `PROC SURVEYMEANS` -- weighted means and proportions
363
+ - `PROC SURVEYFREQ` -- weighted frequency tables and chi-square
364
+ - `PROC SURVEYLOGISTIC` -- weighted logistic regression (wOR)
365
+ - `PROC SURVEYREG` -- weighted linear regression
366
+ - `PROC SURVEYPHREG` -- weighted Cox proportional hazards
@@ -0,0 +1,86 @@
1
+ # Statistical Test Selection Guide
2
+
3
+ Decision tree for selecting the appropriate statistical test based on data structure.
4
+ Reference: Petrie & Sabin flowchart, Kirkwood Summary Guide.
5
+
6
+ ---
7
+
8
+ ## Step 1: Outcome Variable Type
9
+
10
+ | Outcome type | Next step |
11
+ |---|---|
12
+ | Continuous (measurement, score) | Step 2A |
13
+ | Binary / Categorical | Step 2B |
14
+ | Time-to-event (survival) | → Survival analysis type |
15
+ | Agreement / Reliability | → Inter-rater Agreement type |
16
+ | Diagnostic accuracy (Se/Sp/AUC) | → Diagnostic Accuracy type |
17
+
18
+ ---
19
+
20
+ ## Step 2A: Continuous Outcome
21
+
22
+ | Groups | Pairing | Normal? | Test | analyze-stats type |
23
+ |--------|---------|---------|------|--------------------|
24
+ | 1 | - | Yes | One-sample t-test | Group Comparison |
25
+ | 1 | - | No | Wilcoxon signed-rank (one-sample) | Group Comparison |
26
+ | 2 | Independent | Yes | Independent t-test | Group Comparison |
27
+ | 2 | Independent | No | Mann-Whitney U | Group Comparison |
28
+ | 2 | Paired | Yes | Paired t-test | Group Comparison |
29
+ | 2 | Paired | No | Wilcoxon signed-rank | Group Comparison |
30
+ | 3+ | Independent | Yes | One-way ANOVA + post-hoc | Group Comparison |
31
+ | 3+ | Independent | No | Kruskal-Wallis + post-hoc | Group Comparison |
32
+ | 3+ | Repeated | Yes | RM ANOVA | **Repeated Measures** |
33
+ | 3+ | Repeated | No | Friedman test | **Repeated Measures** |
34
+ | - | Correlation | Yes | Pearson r | Correlation |
35
+ | - | Correlation | No | Spearman rho | Correlation |
36
+ | - | Regression | - | Multiple linear regression | **Linear Regression** |
37
+
38
+ ---
39
+
40
+ ## Step 2B: Categorical Outcome
41
+
42
+ | Groups | Pairing | Condition | Test | analyze-stats type |
43
+ |--------|---------|-----------|------|--------------------|
44
+ | 1 | - | - | Binomial / z-test for proportion | Group Comparison |
45
+ | 2 | Independent | Expected >= 5 | Chi-squared | Group Comparison |
46
+ | 2 | Independent | Expected < 5 | Fisher's exact | Group Comparison |
47
+ | 2 | Paired | - | McNemar's test | Group Comparison |
48
+ | 2+ | Independent | Ordered | Chi-squared trend | Group Comparison |
49
+ | 3+ | Independent | - | Chi-squared | Group Comparison |
50
+ | 3+ | Paired | - | Cochran's Q | Group Comparison |
51
+ | - | Regression | Binary outcome | Logistic regression | **Logistic Regression** |
52
+
53
+ ---
54
+
55
+ ## Step 3: Confounder Control
56
+
57
+ | Situation | Method | analyze-stats type |
58
+ |-----------|--------|--------------------|
59
+ | Continuous outcome + multivariable | Multiple linear regression | **Linear Regression** |
60
+ | Binary outcome + multivariable | Logistic regression | **Logistic Regression** |
61
+ | Survival outcome + multivariable | Cox proportional hazards | Survival |
62
+ | Observational study + treatment comparison | Propensity score | **Propensity Score** |
63
+ | Repeated measures + missing data | LMM / GEE | **Repeated Measures** |
64
+
65
+ ---
66
+
67
+ ## Normality Assessment
68
+
69
+ | Method | When | Criterion |
70
+ |--------|------|-----------|
71
+ | Shapiro-Wilk | n < 50 | p >= 0.05 → normal |
72
+ | Kolmogorov-Smirnov | n >= 50 | p >= 0.05 → normal |
73
+ | Q-Q plot | Always (visual) | Points on diagonal |
74
+ | Skewness/Kurtosis | Supplementary | |skew| < 2, |kurt| < 7 |
75
+
76
+ Practical rule: n > 30 → t-test is generally robust (CLT), unless extreme skew or outliers.
77
+
78
+ ---
79
+
80
+ ## Common Reviewer Flags
81
+
82
+ - Using independent test on paired data
83
+ - Using chi-squared when expected cell count < 5 (should use Fisher's exact)
84
+ - Not reporting assumption check results
85
+ - Missing multiple comparison correction for 3+ groups
86
+ - Not specifying the test selection rationale in Methods
@@ -0,0 +1,69 @@
1
+ # Publication-ready matplotlib style for medical research figures
2
+ # Usage: plt.style.use('path/to/figure_style.mplstyle')
3
+
4
+ # --- Font ---
5
+ font.family: sans-serif
6
+ font.sans-serif: Arial, Helvetica, DejaVu Sans
7
+ font.size: 9
8
+
9
+ # --- Figure ---
10
+ figure.figsize: 3.5, 3.5
11
+ figure.dpi: 300
12
+ figure.facecolor: white
13
+ figure.edgecolor: white
14
+ figure.autolayout: True
15
+
16
+ # --- Axes ---
17
+ axes.facecolor: white
18
+ axes.edgecolor: 333333
19
+ axes.linewidth: 0.8
20
+ axes.grid: True
21
+ axes.titlesize: 10
22
+ axes.titleweight: bold
23
+ axes.labelsize: 9
24
+ axes.labelweight: normal
25
+ axes.labelpad: 4.0
26
+ axes.spines.top: False
27
+ axes.spines.right: False
28
+ axes.prop_cycle: cycler('color', ['0072B2', 'D55E00', '009E73', 'CC79A7', 'F0E442', '56B4E9', 'E69F00', '000000'])
29
+
30
+ # --- Grid ---
31
+ grid.color: cccccc
32
+ grid.linewidth: 0.5
33
+ grid.linestyle: -
34
+ grid.alpha: 0.4
35
+
36
+ # --- Lines ---
37
+ lines.linewidth: 1.5
38
+ lines.markersize: 4
39
+ lines.markeredgewidth: 0.5
40
+
41
+ # --- Ticks ---
42
+ xtick.labelsize: 8
43
+ xtick.direction: out
44
+ xtick.major.size: 4
45
+ xtick.major.width: 0.8
46
+ xtick.minor.visible: False
47
+ ytick.labelsize: 8
48
+ ytick.direction: out
49
+ ytick.major.size: 4
50
+ ytick.major.width: 0.8
51
+ ytick.minor.visible: False
52
+
53
+ # --- Legend ---
54
+ legend.fontsize: 8
55
+ legend.frameon: False
56
+ legend.loc: best
57
+ legend.borderpad: 0.3
58
+ legend.handlelength: 1.5
59
+
60
+ # --- Scatter ---
61
+ scatter.marker: o
62
+ scatter.edgecolors: face
63
+
64
+ # --- Save ---
65
+ savefig.dpi: 300
66
+ savefig.format: pdf
67
+ savefig.bbox: tight
68
+ savefig.pad_inches: 0.05
69
+ savefig.transparent: False