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.
- package/LICENSE +50 -0
- package/README.md +602 -0
- package/README_FIRST.md +27 -0
- package/bin/medsci-skills.js +159 -0
- package/installers/install-macos.command +19 -0
- package/installers/install-windows.cmd +26 -0
- package/installers/install-windows.ps1 +17 -0
- package/installers/install.py +218 -0
- package/metadata/skills_catalog.json +452 -0
- package/package.json +48 -0
- package/skills/academic-aio/SKILL.md +408 -0
- package/skills/academic-aio/references/case_studies/kjr_mllm_2025.md +82 -0
- package/skills/academic-aio/references/checklists/AIO_GENERAL.md +354 -0
- package/skills/academic-aio/references/journal_summarybox_templates.yaml +126 -0
- package/skills/academic-aio/references/oac_funding_checklist.yaml +129 -0
- package/skills/academic-aio/references/reporting_guideline_mapping.md +39 -0
- package/skills/academic-aio/references/schema_markup_templates/CodeRepository.jsonld +32 -0
- package/skills/academic-aio/references/schema_markup_templates/Dataset.jsonld +36 -0
- package/skills/academic-aio/references/schema_markup_templates/Person.jsonld +30 -0
- package/skills/academic-aio/references/schema_markup_templates/README.md +43 -0
- package/skills/academic-aio/references/schema_markup_templates/ScholarlyArticle.jsonld +55 -0
- package/skills/academic-aio/scripts/batch_metadata_audit.py +169 -0
- package/skills/academic-aio/scripts/validate_schema.py +118 -0
- package/skills/academic-aio/skill.yml +36 -0
- package/skills/academic-aio/templates/aio_audit_checklist.md.j2 +108 -0
- package/skills/add-journal/SKILL.md +482 -0
- package/skills/add-journal/skill.yml +33 -0
- package/skills/analyze-stats/SKILL.md +598 -0
- package/skills/analyze-stats/references/analysis_guides/missing_data.md +109 -0
- package/skills/analyze-stats/references/analysis_guides/nhis_icd10_mapping.md +247 -0
- package/skills/analyze-stats/references/analysis_guides/propensity_score.md +132 -0
- package/skills/analyze-stats/references/analysis_guides/regression.md +115 -0
- package/skills/analyze-stats/references/analysis_guides/repeated_measures.md +160 -0
- package/skills/analyze-stats/references/analysis_guides/survey_weighted.md +366 -0
- package/skills/analyze-stats/references/analysis_guides/test_selection.md +86 -0
- package/skills/analyze-stats/references/style/figure_style.mplstyle +69 -0
- package/skills/analyze-stats/references/style/theme_publication.R +147 -0
- package/skills/analyze-stats/references/table-standards/journal-profiles/ajr.yaml +51 -0
- package/skills/analyze-stats/references/table-standards/journal-profiles/european_radiology.yaml +55 -0
- package/skills/analyze-stats/references/table-standards/journal-profiles/jama.yaml +66 -0
- package/skills/analyze-stats/references/table-standards/journal-profiles/lancet.yaml +57 -0
- package/skills/analyze-stats/references/table-standards/journal-profiles/nejm.yaml +51 -0
- package/skills/analyze-stats/references/table-standards/journal-profiles/radiology.yaml +66 -0
- package/skills/analyze-stats/references/table-standards/table-standards.md +287 -0
- package/skills/analyze-stats/references/table-standards/table-types/diagnostic_accuracy.md +36 -0
- package/skills/analyze-stats/references/table-standards/table-types/meta_analysis.md +58 -0
- package/skills/analyze-stats/references/table-standards/table-types/model_comparison.md +36 -0
- package/skills/analyze-stats/references/table-standards/table-types/regression_results.md +50 -0
- package/skills/analyze-stats/references/table-standards/table-types/table1_demographics.md +51 -0
- package/skills/analyze-stats/references/table-standards/tool-comparison.md +79 -0
- package/skills/analyze-stats/references/templates/agreement_analysis.py +436 -0
- package/skills/analyze-stats/references/templates/dca_plot.R +237 -0
- package/skills/analyze-stats/references/templates/diagnostic_accuracy.py +401 -0
- package/skills/analyze-stats/references/templates/dta_meta_analysis.R +384 -0
- package/skills/analyze-stats/references/templates/forest_plot.py +412 -0
- package/skills/analyze-stats/references/templates/likert_summary.py +356 -0
- package/skills/analyze-stats/references/templates/meta_analysis.R +365 -0
- package/skills/analyze-stats/references/templates/propensity_score.py +478 -0
- package/skills/analyze-stats/references/templates/regression.py +425 -0
- package/skills/analyze-stats/references/templates/repeated_measures.py +434 -0
- package/skills/analyze-stats/references/templates/sample_size.R +382 -0
- package/skills/analyze-stats/references/templates/survey_weighted_analysis.py +411 -0
- package/skills/analyze-stats/references/templates/survival_analysis.py +325 -0
- package/skills/analyze-stats/references/templates/table1_demographics.py +287 -0
- package/skills/analyze-stats/scripts/check_generated_code.py +335 -0
- package/skills/analyze-stats/skill.yml +38 -0
- package/skills/analyze-stats/tests/fixtures/gen_bad.R +16 -0
- package/skills/analyze-stats/tests/fixtures/gen_bad.py +24 -0
- package/skills/analyze-stats/tests/fixtures/gen_clean.py +21 -0
- package/skills/analyze-stats/tests/test_generated_code.sh +59 -0
- package/skills/analyze-stats/tests/test_survival_template.sh +53 -0
- package/skills/author-strategy/SKILL.md +117 -0
- package/skills/author-strategy/analyze_patterns.py +303 -0
- package/skills/author-strategy/fetch_pubmed.py +374 -0
- package/skills/author-strategy/skill.yml +34 -0
- package/skills/batch-cohort/SKILL.md +223 -0
- package/skills/batch-cohort/references/base_template_knhanes.R +210 -0
- package/skills/batch-cohort/references/batch_template_generator.R +222 -0
- package/skills/batch-cohort/references/variable_coding_registry.md +136 -0
- package/skills/batch-cohort/skill.yml +35 -0
- package/skills/calc-sample-size/SKILL.md +491 -0
- package/skills/calc-sample-size/references/formulas.md +655 -0
- package/skills/calc-sample-size/references/observational_cohort.md +49 -0
- package/skills/calc-sample-size/skill.yml +51 -0
- package/skills/check-reporting/SKILL.md +534 -0
- package/skills/check-reporting/references/LICENSES.md +41 -0
- package/skills/check-reporting/references/checklists/AMSTAR2.md +54 -0
- package/skills/check-reporting/references/checklists/ARRIVE_2.md +234 -0
- package/skills/check-reporting/references/checklists/CARE.md +102 -0
- package/skills/check-reporting/references/checklists/CLAIM_2024.md +128 -0
- package/skills/check-reporting/references/checklists/CLEAR.md +113 -0
- package/skills/check-reporting/references/checklists/CONSORT.md +86 -0
- package/skills/check-reporting/references/checklists/COSMIN_RoB.md +136 -0
- package/skills/check-reporting/references/checklists/GRRAS.md +61 -0
- package/skills/check-reporting/references/checklists/MI_CLEAR_LLM.md +167 -0
- package/skills/check-reporting/references/checklists/MOOSE.md +85 -0
- package/skills/check-reporting/references/checklists/NOS.md +88 -0
- package/skills/check-reporting/references/checklists/PRISMA_2020.md +135 -0
- package/skills/check-reporting/references/checklists/PRISMA_DTA.md +36 -0
- package/skills/check-reporting/references/checklists/PRISMA_P.md +56 -0
- package/skills/check-reporting/references/checklists/PROBAST.md +75 -0
- package/skills/check-reporting/references/checklists/PROBAST_AI.md +130 -0
- package/skills/check-reporting/references/checklists/QUADAS2.md +77 -0
- package/skills/check-reporting/references/checklists/QUADAS_C.md +131 -0
- package/skills/check-reporting/references/checklists/ROBINS_E.md +179 -0
- package/skills/check-reporting/references/checklists/ROBINS_I.md +87 -0
- package/skills/check-reporting/references/checklists/ROBIS.md +114 -0
- package/skills/check-reporting/references/checklists/ROB_ME.md +126 -0
- package/skills/check-reporting/references/checklists/RoB2.md +79 -0
- package/skills/check-reporting/references/checklists/RoB_NMA.md +96 -0
- package/skills/check-reporting/references/checklists/SPIRIT.md +112 -0
- package/skills/check-reporting/references/checklists/SQUIRE_2.md +68 -0
- package/skills/check-reporting/references/checklists/STARD.md +129 -0
- package/skills/check-reporting/references/checklists/STARD_AI.md +211 -0
- package/skills/check-reporting/references/checklists/STROBE.md +80 -0
- package/skills/check-reporting/references/checklists/SWiM.md +33 -0
- package/skills/check-reporting/references/checklists/TRIPOD.md +157 -0
- package/skills/check-reporting/references/checklists/TRIPOD_AI.md +140 -0
- package/skills/check-reporting/references/step4c_registration_timing.md +93 -0
- package/skills/check-reporting/references/step4d_prisma_figure_audit.md +137 -0
- package/skills/check-reporting/scripts/check_checklist_exists.py +183 -0
- package/skills/check-reporting/scripts/check_checklist_version.py +168 -0
- package/skills/check-reporting/scripts/check_framework_naming.py +206 -0
- package/skills/check-reporting/scripts/check_prisma_figure.py +209 -0
- package/skills/check-reporting/scripts/prisma_cascade_check.py +274 -0
- package/skills/check-reporting/skill.yml +41 -0
- package/skills/check-reporting/tests/fixtures/framework_bad.md +8 -0
- package/skills/check-reporting/tests/fixtures/framework_clean.md +7 -0
- package/skills/check-reporting/tests/test_checklist_fail_fast.sh +77 -0
- package/skills/check-reporting/tests/test_checklist_version.sh +72 -0
- package/skills/check-reporting/tests/test_framework_naming.sh +45 -0
- package/skills/check-reporting/tests/test_prisma_cascade.sh +104 -0
- package/skills/clean-data/SKILL.md +180 -0
- package/skills/clean-data/references/cleaning_patterns.md +299 -0
- package/skills/clean-data/references/profiling_template.py +304 -0
- package/skills/clean-data/scripts/check_structural_zero.py +174 -0
- package/skills/clean-data/skill.yml +35 -0
- package/skills/clean-data/tests/fixtures/smoking.csv +8 -0
- package/skills/clean-data/tests/test_structural_zero.sh +49 -0
- package/skills/cross-national/SKILL.md +264 -0
- package/skills/cross-national/skill.yml +37 -0
- package/skills/define-variables/SKILL.md +146 -0
- package/skills/define-variables/references/common_definitions.md +190 -0
- package/skills/define-variables/skill.yml +34 -0
- package/skills/define-variables/templates/variable_operationalization.md +64 -0
- package/skills/deidentify/SKILL.md +203 -0
- package/skills/deidentify/deidentify.py +1224 -0
- package/skills/deidentify/locales/_template.json +45 -0
- package/skills/deidentify/locales/au.json +43 -0
- package/skills/deidentify/locales/ca.json +44 -0
- package/skills/deidentify/locales/cn.json +47 -0
- package/skills/deidentify/locales/de.json +48 -0
- package/skills/deidentify/locales/fr.json +48 -0
- package/skills/deidentify/locales/in.json +48 -0
- package/skills/deidentify/locales/jp.json +48 -0
- package/skills/deidentify/locales/kr.json +48 -0
- package/skills/deidentify/locales/uk.json +45 -0
- package/skills/deidentify/locales/us.json +43 -0
- package/skills/deidentify/references/date_shift_guide.md +82 -0
- package/skills/deidentify/references/hipaa_18_identifiers.md +48 -0
- package/skills/deidentify/references/korean_phi_patterns.md +135 -0
- package/skills/deidentify/skill.yml +43 -0
- package/skills/deidentify/tests/README.md +26 -0
- package/skills/deidentify/tests/test_clean.csv +16 -0
- package/skills/deidentify/tests/test_edge_cases.csv +11 -0
- package/skills/deidentify/tests/test_phi_korean.csv +11 -0
- package/skills/design-ai-benchmarking/SKILL.md +214 -0
- package/skills/design-ai-benchmarking/references/benchmark_export_schema.json +69 -0
- package/skills/design-ai-benchmarking/references/elicitation_rubric_template.md +37 -0
- package/skills/design-ai-benchmarking/skill.yml +38 -0
- package/skills/design-study/SKILL.md +298 -0
- package/skills/design-study/skill.yml +33 -0
- package/skills/fill-icmje-coi/SKILL.md +216 -0
- package/skills/fill-icmje-coi/scripts/fill_icmje_coi.py +140 -0
- package/skills/fill-icmje-coi/skill.yml +35 -0
- package/skills/fill-icmje-coi/templates/icmje_coi_seed_synthetic.docx +0 -0
- package/skills/fill-protocol/SKILL.md +248 -0
- package/skills/fill-protocol/examples/example_irb_template.yaml +53 -0
- package/skills/fill-protocol/references/best_practices.md +121 -0
- package/skills/fill-protocol/scripts/doc_to_docx.py +111 -0
- package/skills/fill-protocol/scripts/fill_form.py +611 -0
- package/skills/fill-protocol/scripts/inspect_template.py +61 -0
- package/skills/fill-protocol/setup.sh +162 -0
- package/skills/fill-protocol/skill.yml +37 -0
- package/skills/find-cohort-gap/SKILL.md +309 -0
- package/skills/find-cohort-gap/references/cohort_profile_template.md +93 -0
- package/skills/find-cohort-gap/references/onepager_template.md +84 -0
- package/skills/find-cohort-gap/references/pattern_scoring_rubric.md +169 -0
- package/skills/find-cohort-gap/references/saturation_query_templates.md +143 -0
- package/skills/find-cohort-gap/skill.yml +35 -0
- package/skills/find-journal/POLICY.md +87 -0
- package/skills/find-journal/SKILL.md +340 -0
- package/skills/find-journal/references/journal_profiles/AJNR.md +29 -0
- package/skills/find-journal/references/journal_profiles/AJR.md +30 -0
- package/skills/find-journal/references/journal_profiles/Abdominal_Radiology.md +30 -0
- package/skills/find-journal/references/journal_profiles/Academic_Radiology.md +30 -0
- package/skills/find-journal/references/journal_profiles/Annals_of_Internal_Medicine.md +33 -0
- package/skills/find-journal/references/journal_profiles/Artificial_Intelligence_in_Medicine.md +28 -0
- package/skills/find-journal/references/journal_profiles/BMC_Medicine.md +31 -0
- package/skills/find-journal/references/journal_profiles/British_Journal_of_Radiology.md +39 -0
- package/skills/find-journal/references/journal_profiles/CVIR.md +30 -0
- package/skills/find-journal/references/journal_profiles/Chest.md +39 -0
- package/skills/find-journal/references/journal_profiles/Clinical_Radiology.md +30 -0
- package/skills/find-journal/references/journal_profiles/Clinical_and_Molecular_Hepatology.md +32 -0
- package/skills/find-journal/references/journal_profiles/Diabetes_Metabolism_Journal.md +36 -0
- package/skills/find-journal/references/journal_profiles/Diagnostic_and_Interventional_Radiology.md +32 -0
- package/skills/find-journal/references/journal_profiles/Endocrinology_and_Metabolism.md +37 -0
- package/skills/find-journal/references/journal_profiles/European_Journal_of_Preventive_Cardiology.md +39 -0
- package/skills/find-journal/references/journal_profiles/European_Radiology.md +29 -0
- package/skills/find-journal/references/journal_profiles/Hepatology_Communications.md +40 -0
- package/skills/find-journal/references/journal_profiles/Hepatology_International.md +37 -0
- package/skills/find-journal/references/journal_profiles/IEEE_JBHI.md +28 -0
- package/skills/find-journal/references/journal_profiles/IEEE_TMI.md +28 -0
- package/skills/find-journal/references/journal_profiles/INSI.md +29 -0
- package/skills/find-journal/references/journal_profiles/Investigative_Radiology.md +25 -0
- package/skills/find-journal/references/journal_profiles/JACC_Advances.md +41 -0
- package/skills/find-journal/references/journal_profiles/JACC_Asia.md +30 -0
- package/skills/find-journal/references/journal_profiles/JACR.md +28 -0
- package/skills/find-journal/references/journal_profiles/JAMA.md +40 -0
- package/skills/find-journal/references/journal_profiles/JAMA_Network_Open.md +30 -0
- package/skills/find-journal/references/journal_profiles/JCSM.md +39 -0
- package/skills/find-journal/references/journal_profiles/JKMS.md +32 -0
- package/skills/find-journal/references/journal_profiles/JMIR.md +29 -0
- package/skills/find-journal/references/journal_profiles/JMIR_Medical_Education.md +29 -0
- package/skills/find-journal/references/journal_profiles/JNIS.md +35 -0
- package/skills/find-journal/references/journal_profiles/JVIR.md +31 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Biomedical_Informatics.md +29 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md +40 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Magnetic_Resonance_Imaging.md +30 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Nuclear_Medicine.md +31 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Stroke.md +32 -0
- package/skills/find-journal/references/journal_profiles/KJR.md +38 -0
- package/skills/find-journal/references/journal_profiles/Korean_Circulation_Journal.md +38 -0
- package/skills/find-journal/references/journal_profiles/Korean_Journal_of_Internal_Medicine.md +36 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Diabetes_and_Endocrinology.md +40 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Gastroenterology_and_Hepatology.md +49 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Infectious_Diseases.md +38 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Neurology.md +39 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Oncology.md +40 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Psychiatry.md +38 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Public_Health.md +30 -0
- package/skills/find-journal/references/journal_profiles/Lancet_Respiratory_Medicine.md +39 -0
- package/skills/find-journal/references/journal_profiles/Liver_International.md +33 -0
- package/skills/find-journal/references/journal_profiles/Medical_Image_Analysis.md +28 -0
- package/skills/find-journal/references/journal_profiles/NEJM.md +33 -0
- package/skills/find-journal/references/journal_profiles/Nature_Machine_Intelligence.md +31 -0
- package/skills/find-journal/references/journal_profiles/Nature_Medicine.md +39 -0
- package/skills/find-journal/references/journal_profiles/Neuroradiology.md +31 -0
- package/skills/find-journal/references/journal_profiles/Nutrition_Metabolism_and_Cardiovascular_Diseases.md +39 -0
- package/skills/find-journal/references/journal_profiles/PLOS_Medicine.md +32 -0
- package/skills/find-journal/references/journal_profiles/RYAI.md +28 -0
- package/skills/find-journal/references/journal_profiles/Radiology.md +29 -0
- package/skills/find-journal/references/journal_profiles/Skeletal_Radiology.md +31 -0
- package/skills/find-journal/references/journal_profiles/Stroke.md +37 -0
- package/skills/find-journal/references/journal_profiles/The_BMJ.md +31 -0
- package/skills/find-journal/references/journal_profiles/The_Lancet.md +31 -0
- package/skills/find-journal/references/journal_profiles/The_Lancet_Digital_Health.md +29 -0
- package/skills/find-journal/references/journal_profiles/World_Journal_of_Hepatology.md +53 -0
- package/skills/find-journal/references/journal_profiles/npj_Digital_Medicine.md +29 -0
- package/skills/find-journal/skill.yml +34 -0
- package/skills/fulltext-retrieval/SKILL.md +174 -0
- package/skills/fulltext-retrieval/fetch_oa.py +433 -0
- package/skills/fulltext-retrieval/pdf_to_md.py +160 -0
- package/skills/fulltext-retrieval/skill.yml +41 -0
- package/skills/generate-codebook/SKILL.md +155 -0
- package/skills/generate-codebook/references/codebook_schema.md +76 -0
- package/skills/generate-codebook/scripts/generate_codebook.py +278 -0
- package/skills/generate-codebook/skill.yml +35 -0
- package/skills/generate-codebook/tests/test_generate_codebook.sh +76 -0
- package/skills/grant-builder/SKILL.md +251 -0
- package/skills/grant-builder/skill.yml +34 -0
- package/skills/humanize/SKILL.md +251 -0
- package/skills/humanize/references/ai_patterns.md +571 -0
- package/skills/humanize/skill.yml +33 -0
- package/skills/intake-project/SKILL.md +264 -0
- package/skills/intake-project/skill.yml +34 -0
- package/skills/lit-sync/SKILL.md +448 -0
- package/skills/lit-sync/references/locale/ko/note_templates.md +110 -0
- package/skills/lit-sync/skill.yml +52 -0
- package/skills/lit-sync/tests/test_poll_logic.sh +92 -0
- package/skills/ma-scout/SKILL.md +640 -0
- package/skills/ma-scout/references/project_readme_template.md +95 -0
- package/skills/ma-scout/references/project_readme_template_ko.md +82 -0
- package/skills/ma-scout/skill.yml +33 -0
- package/skills/make-figures/SKILL.md +957 -0
- package/skills/make-figures/references/critic_rubrics/data_plot.md +166 -0
- package/skills/make-figures/references/critic_rubrics/flow_diagram.md +169 -0
- package/skills/make-figures/references/design_principles.md +181 -0
- package/skills/make-figures/references/exemplar_diagrams/README.md +65 -0
- package/skills/make-figures/references/exemplar_diagrams/consort/README.md +15 -0
- package/skills/make-figures/references/exemplar_diagrams/consort/template_input.yaml +37 -0
- package/skills/make-figures/references/exemplar_diagrams/consort/template_output.pdf +0 -0
- package/skills/make-figures/references/exemplar_diagrams/consort/template_output.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/consort/template_output_600.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/other/other_02.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/other/other_02.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/other/other_02_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/README.md +15 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_01_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_03_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_04_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_05_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_06_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_07_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_08_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_09_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10.meta.yaml +4 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/pipeline/pipeline_10_why.md +13 -0
- package/skills/make-figures/references/exemplar_diagrams/prisma/README.md +15 -0
- package/skills/make-figures/references/exemplar_diagrams/prisma/template_input.yaml +47 -0
- package/skills/make-figures/references/exemplar_diagrams/prisma/template_output.pdf +0 -0
- package/skills/make-figures/references/exemplar_diagrams/prisma/template_output.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/prisma/template_output_600.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/stard/README.md +15 -0
- package/skills/make-figures/references/exemplar_diagrams/stard/template_input.yaml +40 -0
- package/skills/make-figures/references/exemplar_diagrams/stard/template_output.pdf +0 -0
- package/skills/make-figures/references/exemplar_diagrams/stard/template_output.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/stard/template_output_600.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/strobe/template_input.yaml +43 -0
- package/skills/make-figures/references/exemplar_diagrams/strobe/template_input_pptx.yaml +43 -0
- package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.pdf +0 -0
- package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.png +0 -0
- package/skills/make-figures/references/exemplar_diagrams/strobe/template_output.pptx +0 -0
- package/skills/make-figures/references/exemplar_diagrams/strobe/template_output_600.png +0 -0
- package/skills/make-figures/references/figure_specs.md +291 -0
- package/skills/make-figures/references/flow_diagram_lessons.md +164 -0
- package/skills/make-figures/references/jacc_central_illustration_principles.md +91 -0
- package/skills/make-figures/references/medical_illustration_sources.md +98 -0
- package/skills/make-figures/references/pipeline_concepts_medical_ai.md +240 -0
- package/skills/make-figures/references/reporting_guideline_figure_map.md +104 -0
- package/skills/make-figures/references/visual_abstract_templates/european_radiology.pptx +0 -0
- package/skills/make-figures/references/visual_abstract_templates/jacc_central_illustration.pptx +0 -0
- package/skills/make-figures/references/visual_abstract_templates/medsci_default.pptx +0 -0
- package/skills/make-figures/references/visual_abstract_templates/template_guide.md +114 -0
- package/skills/make-figures/scripts/build_jacc_template.py +77 -0
- package/skills/make-figures/scripts/build_prisma2020_template.py +371 -0
- package/skills/make-figures/scripts/build_strobe_template.py +351 -0
- package/skills/make-figures/scripts/critic_figure.py +264 -0
- package/skills/make-figures/scripts/derive_figure_legend_counts.py +138 -0
- package/skills/make-figures/scripts/extract_exemplar_from_pdf.py +186 -0
- package/skills/make-figures/scripts/fetch_official_templates.sh +88 -0
- package/skills/make-figures/scripts/fill_prisma_template.py +142 -0
- package/skills/make-figures/scripts/generate_flow_diagram.R +133 -0
- package/skills/make-figures/scripts/generate_image.py +99 -0
- package/skills/make-figures/scripts/generate_visual_abstract.py +438 -0
- package/skills/make-figures/scripts/validate_pptx_mac_compat.py +233 -0
- package/skills/make-figures/skill.yml +52 -0
- package/skills/make-figures/templates/official/NOTES.md +62 -0
- package/skills/make-figures/templates/official/consort2010/CONSORT_2025_editable_checklist.docx +0 -0
- package/skills/make-figures/templates/official/consort2010/CONSORT_2025_flow_diagram.docx +0 -0
- package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_new_v1.pptx +0 -0
- package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_new_v2.pptx +0 -0
- package/skills/make-figures/templates/official/prisma2020/PRISMA_2020_flow_updated_v2.pptx +0 -0
- package/skills/make-figures/templates/official/spirit2013/SPIRIT_2025_editable_checklist.docx +0 -0
- package/skills/make-figures/templates/official/spirit2013/SPIRIT_2025_participant_timeline.docx +0 -0
- package/skills/make-figures/templates/official/stard2015/STARD_2015_checklist.docx +0 -0
- package/skills/make-figures/templates/official/stard2015/STARD_2015_flow_diagram.pdf +0 -0
- package/skills/make-figures/tests/fixtures/figure1_flow.yaml +8 -0
- package/skills/make-figures/tests/fixtures/manuscript_ok.md +9 -0
- package/skills/make-figures/tests/fixtures/manuscript_stale.md +4 -0
- package/skills/make-figures/tests/test_legend_reconcile.sh +36 -0
- package/skills/manage-project/SKILL.md +358 -0
- package/skills/manage-project/references/pre_submission_checklist.md +53 -0
- package/skills/manage-project/references/project_state_template.json +37 -0
- package/skills/manage-project/references/scaffold_templates.md +118 -0
- package/skills/manage-project/references/status_output_format.md +44 -0
- package/skills/manage-project/references/timeline_example.md +20 -0
- package/skills/manage-project/skill.yml +36 -0
- package/skills/manage-project/templates/SSOT.yaml.template +41 -0
- package/skills/manage-refs/LICENSE.zotero-mcp +21 -0
- package/skills/manage-refs/NOTICE.md +29 -0
- package/skills/manage-refs/SKILL.md +289 -0
- package/skills/manage-refs/citation_styles/README.md +40 -0
- package/skills/manage-refs/citation_styles/american-journal-of-roentgenology.csl +211 -0
- package/skills/manage-refs/citation_styles/cardiovascular-and-interventional-radiology.csl +19 -0
- package/skills/manage-refs/citation_styles/european-radiology.csl +19 -0
- package/skills/manage-refs/citation_styles/journal-of-cachexia-sarcopenia-and-muscle.csl +150 -0
- package/skills/manage-refs/citation_styles/journal-of-korean-medical-science-strict.csl +533 -0
- package/skills/manage-refs/citation_styles/journal-of-korean-medical-science.csl +16 -0
- package/skills/manage-refs/citation_styles/korean-journal-of-radiology.csl +155 -0
- package/skills/manage-refs/citation_styles/nature.csl +189 -0
- package/skills/manage-refs/citation_styles/nlm-citation-sequence.csl +535 -0
- package/skills/manage-refs/citation_styles/radiology.csl +228 -0
- package/skills/manage-refs/citation_styles/springer-basic-brackets.csl +187 -0
- package/skills/manage-refs/citation_styles/springer-vancouver-brackets.csl +276 -0
- package/skills/manage-refs/citation_styles/vancouver-superscript.csl +536 -0
- package/skills/manage-refs/citation_styles/vancouver.csl +535 -0
- package/skills/manage-refs/references/REFERENCE_STYLE_SPECS.md +59 -0
- package/skills/manage-refs/references/check_xref_symptoms.md +35 -0
- package/skills/manage-refs/scripts/_vendor_citation_writer.py +600 -0
- package/skills/manage-refs/scripts/check_citation_keys.py +112 -0
- package/skills/manage-refs/scripts/check_csl_render.py +102 -0
- package/skills/manage-refs/scripts/check_xref.py +633 -0
- package/skills/manage-refs/scripts/fill_journal_abbrev.py +104 -0
- package/skills/manage-refs/scripts/inject_zotero_cwyw.py +133 -0
- package/skills/manage-refs/scripts/md_marker_convert.py +193 -0
- package/skills/manage-refs/scripts/pre_submission_gate.sh +238 -0
- package/skills/manage-refs/scripts/render_pandoc.sh +88 -0
- package/skills/manage-refs/skill.yml +70 -0
- package/skills/manage-refs/tests/fixtures/pre_submission_gate/README.md +32 -0
- package/skills/manage-refs/tests/fixtures/pre_submission_gate/manuscript.md +10 -0
- package/skills/manage-refs/tests/fixtures/pre_submission_gate/refs.bib +34 -0
- package/skills/manage-refs/tests/fixtures/pre_submission_gate/run.sh +117 -0
- package/skills/manage-refs/tests/test_vN_docx_check.sh +145 -0
- package/skills/meta-analysis/SKILL.md +739 -0
- package/skills/meta-analysis/references/LICENSES.md +21 -0
- package/skills/meta-analysis/references/PROSPERO_template.md +221 -0
- package/skills/meta-analysis/references/ai_pre_screening_template.py +245 -0
- package/skills/meta-analysis/references/checklists/JBI_Case_Series.md +45 -0
- package/skills/meta-analysis/references/checklists/NOS.md +88 -0
- package/skills/meta-analysis/references/checklists/PRISMA_DTA.md +36 -0
- package/skills/meta-analysis/references/checklists/PROBAST.md +75 -0
- package/skills/meta-analysis/references/checklists/QUADAS2.md +77 -0
- package/skills/meta-analysis/references/checklists/ROBINS_I.md +87 -0
- package/skills/meta-analysis/references/checklists/RoB2.md +79 -0
- package/skills/meta-analysis/references/data_integrity_checklist.md +57 -0
- package/skills/meta-analysis/references/icmje_coi_guide.md +181 -0
- package/skills/meta-analysis/references/phase10_recovery.md +136 -0
- package/skills/meta-analysis/references/phase4_km_composite.md +58 -0
- package/skills/meta-analysis/references/phase6_statistical_synthesis.md +148 -0
- package/skills/meta-analysis/references/phase9_circulation.md +84 -0
- package/skills/meta-analysis/references/post_submission_release_ops.md +41 -0
- package/skills/meta-analysis/references/r_templates.md +132 -0
- package/skills/meta-analysis/references/review_orchestration.md +40 -0
- package/skills/meta-analysis/references/submission_package_drift.md +71 -0
- package/skills/meta-analysis/scripts/check_pool_consistency.py +201 -0
- package/skills/meta-analysis/scripts/cohort_overlap_check.py +242 -0
- package/skills/meta-analysis/scripts/dta_extraction_qc.py +137 -0
- package/skills/meta-analysis/scripts/screening_reconcile.py +160 -0
- package/skills/meta-analysis/skill.yml +47 -0
- package/skills/meta-analysis/templates/FINAL_POOL_LOCK.yaml.template +70 -0
- package/skills/meta-analysis/templates/extraction_form_v2.md +129 -0
- package/skills/meta-analysis/templates/supplementary_8file_checklist.md +94 -0
- package/skills/meta-analysis/tests/test_pool_consistency.sh +123 -0
- package/skills/orchestrate/SKILL.md +501 -0
- package/skills/orchestrate/references/dialogue_nodes.md +196 -0
- package/skills/orchestrate/references/report_template.md +109 -0
- package/skills/orchestrate/references/report_template_ko.md +88 -0
- package/skills/orchestrate/skill.yml +44 -0
- package/skills/peer-review/SKILL.md +381 -0
- package/skills/peer-review/references/aczel_2021_reviewer2_patterns.md +88 -0
- package/skills/peer-review/references/domain-probes/ai_overclaiming.md +47 -0
- package/skills/peer-review/references/domain-probes/narrative_review.md +44 -0
- package/skills/peer-review/references/domain-probes/observational_confounding.md +48 -0
- package/skills/peer-review/references/domain-probes/radiomics.md +38 -0
- package/skills/peer-review/references/domain-probes/sr_ma.md +87 -0
- package/skills/peer-review/references/domain-probes/survival_prognostic.md +68 -0
- package/skills/peer-review/references/exemplar_reviews/README.md +43 -0
- package/skills/peer-review/references/exemplar_reviews/ai_overclaiming.md +47 -0
- package/skills/peer-review/references/exemplar_reviews/calibration_missing.md +44 -0
- package/skills/peer-review/references/exemplar_reviews/data_leakage.md +48 -0
- package/skills/peer-review/references/exemplar_reviews/reference_standard_validity.md +45 -0
- package/skills/peer-review/references/narrative_review_audit.md +67 -0
- package/skills/peer-review/references/reviewer_calibration/README.md +34 -0
- package/skills/peer-review/references/reviewer_calibration/compliance_floor.md +52 -0
- package/skills/peer-review/references/reviewer_profiles/AJR.md +82 -0
- package/skills/peer-review/references/reviewer_profiles/EURE.md +64 -0
- package/skills/peer-review/references/reviewer_profiles/INSI.md +57 -0
- package/skills/peer-review/references/reviewer_profiles/KJR.md +100 -0
- package/skills/peer-review/references/reviewer_profiles/README.md +32 -0
- package/skills/peer-review/references/reviewer_profiles/RYAI.md +86 -0
- package/skills/peer-review/skill.yml +39 -0
- package/skills/present-paper/SKILL.md +675 -0
- package/skills/present-paper/references/critic_rubrics/slide.md +155 -0
- package/skills/present-paper/references/generate_pptx_templates.py +604 -0
- package/skills/present-paper/references/medical_presentation_templates.md +277 -0
- package/skills/present-paper/references/slide_design_principles.md +202 -0
- package/skills/present-paper/references/slide_visual_styles/nature_lancet.md +168 -0
- package/skills/present-paper/references/workflow-checklist.md +109 -0
- package/skills/present-paper/scripts/extract_pdf_figures.py +243 -0
- package/skills/present-paper/scripts/inject_pronunciation_notes.py +178 -0
- package/skills/present-paper/scripts/inject_speaker_notes.py +133 -0
- package/skills/present-paper/scripts/strip_notes_for_sharing.py +140 -0
- package/skills/present-paper/scripts/trim_caption.py +271 -0
- package/skills/present-paper/skill.yml +41 -0
- package/skills/present-paper/templates/build_pptx_nature_lancet.py +688 -0
- package/skills/publish-skill/SKILL.md +370 -0
- package/skills/publish-skill/references/license-compatibility-matrix.md +132 -0
- package/skills/publish-skill/references/pii-patterns.md +130 -0
- package/skills/publish-skill/scripts/audit_skill.sh +278 -0
- package/skills/publish-skill/skill.yml +35 -0
- package/skills/render-pdf-doc/SKILL.md +146 -0
- package/skills/render-pdf-doc/references/known_pitfalls.md +53 -0
- package/skills/render-pdf-doc/references/pandoc_korean_cheatsheet.md +77 -0
- package/skills/render-pdf-doc/scripts/check_deps.sh +42 -0
- package/skills/render-pdf-doc/scripts/infer_colwidths.py +164 -0
- package/skills/render-pdf-doc/scripts/render_pdf.sh +98 -0
- package/skills/render-pdf-doc/skill.yml +57 -0
- package/skills/render-pdf-doc/templates/anchor-doc.md +27 -0
- package/skills/render-pdf-doc/templates/anchor-doc_ko.md +25 -0
- package/skills/render-pdf-doc/templates/briefing-handout.md +33 -0
- package/skills/render-pdf-doc/templates/briefing-handout_ko.md +31 -0
- package/skills/render-pdf-doc/templates/proposal-cover.md +33 -0
- package/skills/render-pdf-doc/templates/proposal-cover_ko.md +31 -0
- package/skills/render-pdf-doc/templates/reference-table.md +22 -0
- package/skills/render-pdf-doc/templates/reference-table_ko.md +20 -0
- package/skills/replicate-study/SKILL.md +150 -0
- package/skills/replicate-study/references/harmonization_3country.csv +47 -0
- package/skills/replicate-study/references/harmonization_knhanes_nhanes.csv +68 -0
- package/skills/replicate-study/references/methodology_extraction_template.md +134 -0
- package/skills/replicate-study/skill.yml +37 -0
- package/skills/review-paper/SKILL.md +104 -0
- package/skills/review-paper/references/macro_skeleton.md +6 -0
- package/skills/review-paper/skill.yml +25 -0
- package/skills/revise/SKILL.md +515 -0
- package/skills/revise/references/r2r_voice.md +346 -0
- package/skills/revise/skill.yml +43 -0
- package/skills/search-lit/SKILL.md +443 -0
- package/skills/search-lit/references/parse_pubmed.py +326 -0
- package/skills/search-lit/references/pubmed_eutils.sh +111 -0
- package/skills/search-lit/skill.yml +46 -0
- package/skills/self-review/SKILL.md +1045 -0
- package/skills/self-review/references/domain-probes/ai_overclaiming.md +47 -0
- package/skills/self-review/references/domain-probes/narrative_review.md +44 -0
- package/skills/self-review/references/domain-probes/observational_confounding.md +48 -0
- package/skills/self-review/references/domain-probes/radiomics.md +38 -0
- package/skills/self-review/references/domain-probes/sr_ma.md +87 -0
- package/skills/self-review/references/domain-probes/survival_prognostic.md +68 -0
- package/skills/self-review/references/exemplar_findings/README.md +43 -0
- package/skills/self-review/references/exemplar_findings/cohort_arithmetic_mismatch.md +35 -0
- package/skills/self-review/references/exemplar_findings/estimand_drift_posthoc_primary.md +39 -0
- package/skills/self-review/references/exemplar_findings/scope_overreach_cross_sectional.md +35 -0
- package/skills/self-review/references/exemplar_findings/unadjusted_confounder.md +36 -0
- package/skills/self-review/references/panel_review_template.md +177 -0
- package/skills/self-review/scripts/check_artifact_coverage.py +301 -0
- package/skills/self-review/scripts/check_claim_artifact.py +248 -0
- package/skills/self-review/scripts/check_classical_style.py +185 -0
- package/skills/self-review/scripts/check_cohort_arithmetic.py +481 -0
- package/skills/self-review/scripts/check_confounding_completeness.py +287 -0
- package/skills/self-review/scripts/check_panel_diversity.py +336 -0
- package/skills/self-review/scripts/check_reference_adequacy.py +392 -0
- package/skills/self-review/scripts/check_reviewer_team_consistency.py +412 -0
- package/skills/self-review/scripts/check_scope_coherence.py +177 -0
- package/skills/self-review/skill.yml +47 -0
- package/skills/self-review/tests/fixtures/claim_manuscript.md +17 -0
- package/skills/self-review/tests/fixtures/claim_prereg.md +6 -0
- package/skills/self-review/tests/fixtures/cohort_bad.md +21 -0
- package/skills/self-review/tests/fixtures/cohort_clean.md +21 -0
- package/skills/self-review/tests/fixtures/cohort_partition.csv +5 -0
- package/skills/self-review/tests/fixtures/coverage_analysis/31_delong_nested_added_value.csv +3 -0
- package/skills/self-review/tests/fixtures/coverage_analysis/table1_demographics.csv +3 -0
- package/skills/self-review/tests/fixtures/coverage_clean.md +13 -0
- package/skills/self-review/tests/fixtures/coverage_manuscript.md +11 -0
- package/skills/self-review/tests/fixtures/panel_collapse.json +27 -0
- package/skills/self-review/tests/fixtures/panel_good.json +32 -0
- package/skills/self-review/tests/fixtures/panel_monoculture.json +32 -0
- package/skills/self-review/tests/fixtures/refadeq_letter.md +13 -0
- package/skills/self-review/tests/fixtures/refadeq_original_fixed.md +42 -0
- package/skills/self-review/tests/fixtures/refadeq_original_uncited.md +40 -0
- package/skills/self-review/tests/fixtures/scope_bad.md +9 -0
- package/skills/self-review/tests/fixtures/scope_clean.md +8 -0
- package/skills/self-review/tests/fixtures/scope_surrogate.md +8 -0
- package/skills/self-review/tests/fixtures/style_bad.md +13 -0
- package/skills/self-review/tests/fixtures/style_clean.md +11 -0
- package/skills/self-review/tests/fixtures/table1_by_exposure.csv +11 -0
- package/skills/self-review/tests/test_artifact_coverage.sh +44 -0
- package/skills/self-review/tests/test_claim_artifact.sh +50 -0
- package/skills/self-review/tests/test_classical_style.sh +44 -0
- package/skills/self-review/tests/test_cohort_arithmetic.sh +49 -0
- package/skills/self-review/tests/test_confounding_completeness.sh +66 -0
- package/skills/self-review/tests/test_panel_diversity.sh +55 -0
- package/skills/self-review/tests/test_panel_mode.sh +69 -0
- package/skills/self-review/tests/test_reference_adequacy.sh +68 -0
- package/skills/self-review/tests/test_reviewer_team_consistency.sh +138 -0
- package/skills/self-review/tests/test_scope_coherence.sh +46 -0
- package/skills/setup-medsci/SKILL.md +110 -0
- package/skills/setup-medsci/references/setup-checklist.md +51 -0
- package/skills/setup-medsci/skill.yml +30 -0
- package/skills/sync-submission/SKILL.md +382 -0
- package/skills/sync-submission/scripts/author_registry_example.yaml +36 -0
- package/skills/sync-submission/scripts/blind_sweep.py +203 -0
- package/skills/sync-submission/scripts/check_asset_anonymization.py +300 -0
- package/skills/sync-submission/scripts/check_cross_artifact_stale.py +211 -0
- package/skills/sync-submission/scripts/cover_letter_drift_check.py +451 -0
- package/skills/sync-submission/scripts/cross_document_n_check.py +486 -0
- package/skills/sync-submission/scripts/detect_copy_divergence.py +136 -0
- package/skills/sync-submission/scripts/preflight_gate.py +458 -0
- package/skills/sync-submission/scripts/scope_drift_check.py +362 -0
- package/skills/sync-submission/scripts/sync_submission.py +169 -0
- package/skills/sync-submission/skill.yml +43 -0
- package/skills/sync-submission/tests/fixtures/copy_ok.md +5 -0
- package/skills/sync-submission/tests/fixtures/copy_stale.md +5 -0
- package/skills/sync-submission/tests/fixtures/ssot.md +5 -0
- package/skills/sync-submission/tests/test_asset_anonymization.sh +99 -0
- package/skills/sync-submission/tests/test_copy_divergence.sh +44 -0
- package/skills/sync-submission/tests/test_cross_artifact_stale.sh +80 -0
- package/skills/sync-submission/tests/test_cross_document_n.sh +132 -0
- package/skills/sync-submission/tests/test_preflight_gate.sh +112 -0
- package/skills/sync-submission/tests/test_scope_drift.sh +122 -0
- package/skills/sync-submission/tests/test_vN_docx_assertion.sh +51 -0
- package/skills/verify-refs/SKILL.md +177 -0
- package/skills/verify-refs/references/manual_checkpoint_guide.md +100 -0
- package/skills/verify-refs/scripts/verify_cli.sh +62 -0
- package/skills/verify-refs/scripts/verify_refs.py +782 -0
- package/skills/verify-refs/skill.yml +44 -0
- package/skills/verify-refs/tests/fixtures/pagination_placeholder.bib +17 -0
- package/skills/verify-refs/tests/test_pagination_placeholder.sh +42 -0
- package/skills/version-dataset/SKILL.md +143 -0
- package/skills/version-dataset/references/manifest_schema.md +72 -0
- package/skills/version-dataset/scripts/version_dataset.py +242 -0
- package/skills/version-dataset/skill.yml +35 -0
- package/skills/version-dataset/tests/test_version_dataset.sh +52 -0
- package/skills/write-paper/SKILL.md +1148 -0
- package/skills/write-paper/references/exemplar_methods/README.md +38 -0
- package/skills/write-paper/references/exemplar_methods/ai_validation_tripod_claim.md +47 -0
- package/skills/write-paper/references/exemplar_methods/diagnostic_accuracy_stard.md +50 -0
- package/skills/write-paper/references/exemplar_methods/observational_cohort_strobe.md +43 -0
- package/skills/write-paper/references/journal_profiles/AJNR.md +185 -0
- package/skills/write-paper/references/journal_profiles/AJR.md +149 -0
- package/skills/write-paper/references/journal_profiles/Abdominal_Radiology.md +139 -0
- package/skills/write-paper/references/journal_profiles/Academic_Radiology.md +90 -0
- package/skills/write-paper/references/journal_profiles/Annals_of_Internal_Medicine.md +150 -0
- package/skills/write-paper/references/journal_profiles/Artificial_Intelligence_in_Medicine.md +82 -0
- package/skills/write-paper/references/journal_profiles/British_Journal_of_Radiology.md +161 -0
- package/skills/write-paper/references/journal_profiles/CVIR.md +157 -0
- package/skills/write-paper/references/journal_profiles/Chest.md +270 -0
- package/skills/write-paper/references/journal_profiles/Clinical_Radiology.md +160 -0
- package/skills/write-paper/references/journal_profiles/Clinical_and_Molecular_Hepatology.md +147 -0
- package/skills/write-paper/references/journal_profiles/Diabetes_Metabolism_Journal.md +163 -0
- package/skills/write-paper/references/journal_profiles/Diagnostic_and_Interventional_Radiology.md +216 -0
- package/skills/write-paper/references/journal_profiles/Endocrinology_and_Metabolism.md +167 -0
- package/skills/write-paper/references/journal_profiles/European_Journal_of_Preventive_Cardiology.md +192 -0
- package/skills/write-paper/references/journal_profiles/European_Radiology.md +159 -0
- package/skills/write-paper/references/journal_profiles/Hepatology_Communications.md +110 -0
- package/skills/write-paper/references/journal_profiles/Hepatology_International.md +106 -0
- package/skills/write-paper/references/journal_profiles/IEEE_TMI.md +180 -0
- package/skills/write-paper/references/journal_profiles/INSI.md +163 -0
- package/skills/write-paper/references/journal_profiles/Investigative_Radiology.md +86 -0
- package/skills/write-paper/references/journal_profiles/JACC_Advances.md +197 -0
- package/skills/write-paper/references/journal_profiles/JACC_Asia.md +168 -0
- package/skills/write-paper/references/journal_profiles/JACR.md +87 -0
- package/skills/write-paper/references/journal_profiles/JAMA.md +188 -0
- package/skills/write-paper/references/journal_profiles/JAMA_Network_Open.md +170 -0
- package/skills/write-paper/references/journal_profiles/JCSM.md +266 -0
- package/skills/write-paper/references/journal_profiles/JKMS.md +201 -0
- package/skills/write-paper/references/journal_profiles/JMIR.md +88 -0
- package/skills/write-paper/references/journal_profiles/JMIR_Medical_Education.md +86 -0
- package/skills/write-paper/references/journal_profiles/JNIS.md +227 -0
- package/skills/write-paper/references/journal_profiles/JVIR.md +158 -0
- package/skills/write-paper/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md +191 -0
- package/skills/write-paper/references/journal_profiles/Journal_of_Stroke.md +176 -0
- package/skills/write-paper/references/journal_profiles/KJR.md +185 -0
- package/skills/write-paper/references/journal_profiles/Korean_Circulation_Journal.md +184 -0
- package/skills/write-paper/references/journal_profiles/Korean_Journal_of_Internal_Medicine.md +178 -0
- package/skills/write-paper/references/journal_profiles/Lancet_Gastroenterology_and_Hepatology.md +127 -0
- package/skills/write-paper/references/journal_profiles/Liver_International.md +165 -0
- package/skills/write-paper/references/journal_profiles/Medical_Image_Analysis.md +147 -0
- package/skills/write-paper/references/journal_profiles/NEJM.md +147 -0
- package/skills/write-paper/references/journal_profiles/Nature_Medicine.md +181 -0
- package/skills/write-paper/references/journal_profiles/Neuroradiology.md +151 -0
- package/skills/write-paper/references/journal_profiles/Nutrition_Metabolism_and_Cardiovascular_Diseases.md +184 -0
- package/skills/write-paper/references/journal_profiles/PLOS_Medicine.md +166 -0
- package/skills/write-paper/references/journal_profiles/RYAI.md +124 -0
- package/skills/write-paper/references/journal_profiles/Radiology.md +173 -0
- package/skills/write-paper/references/journal_profiles/Skeletal_Radiology.md +135 -0
- package/skills/write-paper/references/journal_profiles/Stroke.md +210 -0
- package/skills/write-paper/references/journal_profiles/The_BMJ.md +121 -0
- package/skills/write-paper/references/journal_profiles/The_Lancet.md +112 -0
- package/skills/write-paper/references/journal_profiles/The_Lancet_Digital_Health.md +104 -0
- package/skills/write-paper/references/journal_profiles/World_Journal_of_Hepatology.md +106 -0
- package/skills/write-paper/references/journal_profiles/npj_Digital_Medicine.md +93 -0
- package/skills/write-paper/references/paper_types/ai_validation.md +270 -0
- package/skills/write-paper/references/paper_types/animal_study.md +194 -0
- package/skills/write-paper/references/paper_types/case_report.md +237 -0
- package/skills/write-paper/references/paper_types/cross_national.md +328 -0
- package/skills/write-paper/references/paper_types/letter.md +127 -0
- package/skills/write-paper/references/paper_types/meta_analysis.md +181 -0
- package/skills/write-paper/references/paper_types/nhis_cohort.md +297 -0
- package/skills/write-paper/references/paper_types/original_article.md +221 -0
- package/skills/write-paper/references/paper_types/technical_note.md +131 -0
- package/skills/write-paper/references/section_guides/discussion.md +155 -0
- package/skills/write-paper/references/section_guides/introduction.md +108 -0
- package/skills/write-paper/references/section_guides/methods.md +144 -0
- package/skills/write-paper/references/section_guides/results.md +113 -0
- package/skills/write-paper/references/section_guides/step7_1_classical_qc.md +67 -0
- package/skills/write-paper/references/section_guides/step7_4a_audit_recovery.md +74 -0
- package/skills/write-paper/references/section_guides/title_abstract.md +123 -0
- package/skills/write-paper/references/section_templates/methods_statistical.md +147 -0
- package/skills/write-paper/scripts/check_placeholders.py +182 -0
- package/skills/write-paper/skill.yml +48 -0
- package/skills/write-paper/tests/test_placeholders.sh +107 -0
- package/skills/write-protocol/SKILL.md +243 -0
- package/skills/write-protocol/references/ethics_checklist.md +150 -0
- package/skills/write-protocol/references/protocol_template.md +304 -0
- 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
|