medsci-skills 5.27.0 → 5.28.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/metadata/distribution_files.json +113 -38
- package/metadata/distribution_manifest.json +1 -1
- package/package.json +1 -1
- package/skills/analyze-stats/SKILL.md +6 -6
- package/skills/analyze-stats/references/table-standards/table-types/incremental_value.md +71 -27
- package/skills/deidentify/deidentify.py +22 -12
- package/skills/deidentify/tests/test_deidentify_scan.sh +65 -0
- package/skills/find-journal/references/journal_profiles/Annals_of_Oncology.md +47 -0
- package/skills/find-journal/references/journal_profiles/BJR_Case_Reports.md +1 -1
- package/skills/find-journal/references/journal_profiles/BMJ_Case_Reports.md +1 -1
- package/skills/find-journal/references/journal_profiles/CVIR.md +1 -1
- package/skills/find-journal/references/journal_profiles/Cancer_Research_and_Treatment.md +47 -0
- package/skills/find-journal/references/journal_profiles/Chest.md +1 -1
- package/skills/find-journal/references/journal_profiles/Clinical_Cancer_Research.md +53 -0
- package/skills/find-journal/references/journal_profiles/Cureus.md +1 -1
- package/skills/find-journal/references/journal_profiles/ESMO_Open.md +49 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Breast_Cancer.md +51 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Clinical_Oncology.md +51 -0
- package/skills/find-journal/references/journal_profiles/Journal_of_Medical_Case_Reports.md +1 -1
- package/skills/find-journal/references/journal_profiles/Radiology_Case_Reports.md +1 -1
- package/skills/find-journal/references/journal_profiles/The_Lancet_Digital_Health.md +1 -1
- package/skills/find-journal/references/journal_profiles/npj_Breast_Cancer.md +50 -0
- package/skills/make-figures/references/exemplar_plots/README.md +6 -0
- package/skills/make-figures/references/exemplar_plots/shap_beeswarm.md +60 -0
- package/skills/write-paper/references/journal_profiles/Annals_of_Oncology.md +141 -0
- package/skills/write-paper/references/journal_profiles/Cancer_Research_and_Treatment.md +138 -0
- package/skills/write-paper/references/journal_profiles/Chest.md +1 -1
- package/skills/write-paper/references/journal_profiles/Clinical_Cancer_Research.md +154 -0
- package/skills/write-paper/references/journal_profiles/ESMO_Open.md +135 -0
- package/skills/write-paper/references/journal_profiles/JNIS.md +1 -1
- package/skills/write-paper/references/journal_profiles/Journal_of_Breast_Cancer.md +141 -0
- package/skills/write-paper/references/journal_profiles/Journal_of_Clinical_Oncology.md +154 -0
- package/skills/write-paper/references/journal_profiles/Journal_of_Stroke.md +1 -1
- package/skills/write-paper/references/journal_profiles/Liver_International.md +1 -1
- package/skills/write-paper/references/journal_profiles/NEJM_AI.md +1 -1
- package/skills/write-paper/references/journal_profiles/Stroke.md +1 -1
- package/skills/write-paper/references/journal_profiles/The_Lancet_Digital_Health.md +1 -1
- package/skills/write-paper/references/journal_profiles/npj_Breast_Cancer.md +143 -0
|
@@ -183,8 +183,8 @@
|
|
|
183
183
|
},
|
|
184
184
|
{
|
|
185
185
|
"path": "skills/analyze-stats/SKILL.md",
|
|
186
|
-
"size":
|
|
187
|
-
"sha256": "
|
|
186
|
+
"size": 60966,
|
|
187
|
+
"sha256": "dca033657405001ba3e6f421a258edd1c9cc17c62e7661d0f987109cd4db33cf"
|
|
188
188
|
},
|
|
189
189
|
{
|
|
190
190
|
"path": "skills/analyze-stats/references/analysis_guides/agreement_reliability.md",
|
|
@@ -338,8 +338,8 @@
|
|
|
338
338
|
},
|
|
339
339
|
{
|
|
340
340
|
"path": "skills/analyze-stats/references/table-standards/table-types/incremental_value.md",
|
|
341
|
-
"size":
|
|
342
|
-
"sha256": "
|
|
341
|
+
"size": 8288,
|
|
342
|
+
"sha256": "8cd2c321a7e902e730ad77f30e45be95e489bd9344171e176c558009f8bec153"
|
|
343
343
|
},
|
|
344
344
|
{
|
|
345
345
|
"path": "skills/analyze-stats/references/table-standards/table-types/meta_analysis.md",
|
|
@@ -1083,8 +1083,8 @@
|
|
|
1083
1083
|
},
|
|
1084
1084
|
{
|
|
1085
1085
|
"path": "skills/deidentify/deidentify.py",
|
|
1086
|
-
"size":
|
|
1087
|
-
"sha256": "
|
|
1086
|
+
"size": 46778,
|
|
1087
|
+
"sha256": "5931af2083887f202842f7e1a9df79a501436c004f749ce1e8d833d7d814601a"
|
|
1088
1088
|
},
|
|
1089
1089
|
{
|
|
1090
1090
|
"path": "skills/deidentify/locales/_template.json",
|
|
@@ -1456,6 +1456,11 @@
|
|
|
1456
1456
|
"size": 1829,
|
|
1457
1457
|
"sha256": "2d6a19ecd70d20211a31ab0be294793dea4b0ec1c0410f6e2147cb2022c7a3a6"
|
|
1458
1458
|
},
|
|
1459
|
+
{
|
|
1460
|
+
"path": "skills/find-journal/references/journal_profiles/Annals_of_Oncology.md",
|
|
1461
|
+
"size": 3586,
|
|
1462
|
+
"sha256": "33a169e9458616cf3261019e3ffe8cd699901ab8fa2706cc4298b035b5edffe3"
|
|
1463
|
+
},
|
|
1459
1464
|
{
|
|
1460
1465
|
"path": "skills/find-journal/references/journal_profiles/Artificial_Intelligence_in_Medicine.md",
|
|
1461
1466
|
"size": 1554,
|
|
@@ -1463,8 +1468,8 @@
|
|
|
1463
1468
|
},
|
|
1464
1469
|
{
|
|
1465
1470
|
"path": "skills/find-journal/references/journal_profiles/BJR_Case_Reports.md",
|
|
1466
|
-
"size":
|
|
1467
|
-
"sha256": "
|
|
1471
|
+
"size": 2041,
|
|
1472
|
+
"sha256": "579704a717ee7e79cd9c2ca2b1c55ac25af33b9a10cd87442f72026b073885d3"
|
|
1468
1473
|
},
|
|
1469
1474
|
{
|
|
1470
1475
|
"path": "skills/find-journal/references/journal_profiles/BMC_Medicine.md",
|
|
@@ -1473,8 +1478,8 @@
|
|
|
1473
1478
|
},
|
|
1474
1479
|
{
|
|
1475
1480
|
"path": "skills/find-journal/references/journal_profiles/BMJ_Case_Reports.md",
|
|
1476
|
-
"size":
|
|
1477
|
-
"sha256": "
|
|
1481
|
+
"size": 2142,
|
|
1482
|
+
"sha256": "7662c66eb32bc6c40815d64ae08f923ab6ba8506725988bdb5db95a1f3a13601"
|
|
1478
1483
|
},
|
|
1479
1484
|
{
|
|
1480
1485
|
"path": "skills/find-journal/references/journal_profiles/British_Journal_of_Radiology.md",
|
|
@@ -1483,13 +1488,23 @@
|
|
|
1483
1488
|
},
|
|
1484
1489
|
{
|
|
1485
1490
|
"path": "skills/find-journal/references/journal_profiles/CVIR.md",
|
|
1486
|
-
"size":
|
|
1487
|
-
"sha256": "
|
|
1491
|
+
"size": 2878,
|
|
1492
|
+
"sha256": "78016adb4143aca41e8861751896bf780da66f61fceb6303ab06996190abe83e"
|
|
1493
|
+
},
|
|
1494
|
+
{
|
|
1495
|
+
"path": "skills/find-journal/references/journal_profiles/Cancer_Research_and_Treatment.md",
|
|
1496
|
+
"size": 4032,
|
|
1497
|
+
"sha256": "db49c78c140d5d6a49d6fecd013365ee0a72b43ed97a551b4fd9be0e2a41f51d"
|
|
1488
1498
|
},
|
|
1489
1499
|
{
|
|
1490
1500
|
"path": "skills/find-journal/references/journal_profiles/Chest.md",
|
|
1491
|
-
"size":
|
|
1492
|
-
"sha256": "
|
|
1501
|
+
"size": 3383,
|
|
1502
|
+
"sha256": "4a6f33f8167caa195f885d76ef299dd1a9be00fda979ffd8c3595bbd88c17a62"
|
|
1503
|
+
},
|
|
1504
|
+
{
|
|
1505
|
+
"path": "skills/find-journal/references/journal_profiles/Clinical_Cancer_Research.md",
|
|
1506
|
+
"size": 4381,
|
|
1507
|
+
"sha256": "44123275b0643186a63ed0bd5e184676da5f5d8d53e7fba27f791f9d885b5560"
|
|
1493
1508
|
},
|
|
1494
1509
|
{
|
|
1495
1510
|
"path": "skills/find-journal/references/journal_profiles/Clinical_Radiology.md",
|
|
@@ -1503,8 +1518,8 @@
|
|
|
1503
1518
|
},
|
|
1504
1519
|
{
|
|
1505
1520
|
"path": "skills/find-journal/references/journal_profiles/Cureus.md",
|
|
1506
|
-
"size":
|
|
1507
|
-
"sha256": "
|
|
1521
|
+
"size": 1833,
|
|
1522
|
+
"sha256": "d7c20f59e305d6626fd0a79fad94e67837aeff14c968a487afb75e8325efe01e"
|
|
1508
1523
|
},
|
|
1509
1524
|
{
|
|
1510
1525
|
"path": "skills/find-journal/references/journal_profiles/Diabetes_Metabolism_Journal.md",
|
|
@@ -1516,6 +1531,11 @@
|
|
|
1516
1531
|
"size": 2210,
|
|
1517
1532
|
"sha256": "ea2ba5ab54862bea842c799614c3ed16617d50ff40178d3d721fbd6af6541aef"
|
|
1518
1533
|
},
|
|
1534
|
+
{
|
|
1535
|
+
"path": "skills/find-journal/references/journal_profiles/ESMO_Open.md",
|
|
1536
|
+
"size": 4030,
|
|
1537
|
+
"sha256": "ff8ed0deb9dcb405fad3de565f964e3fccbf3e1fc68dda22812e1edd6c7e0291"
|
|
1538
|
+
},
|
|
1519
1539
|
{
|
|
1520
1540
|
"path": "skills/find-journal/references/journal_profiles/Endocrinology_and_Metabolism.md",
|
|
1521
1541
|
"size": 2672,
|
|
@@ -1626,11 +1646,21 @@
|
|
|
1626
1646
|
"size": 1759,
|
|
1627
1647
|
"sha256": "b0a2a7aa791e86b375ba19e63036106ab712cb14f4c9ca0398de75dc19e3f946"
|
|
1628
1648
|
},
|
|
1649
|
+
{
|
|
1650
|
+
"path": "skills/find-journal/references/journal_profiles/Journal_of_Breast_Cancer.md",
|
|
1651
|
+
"size": 3517,
|
|
1652
|
+
"sha256": "66d2fd34f44ca75e83008543886532c7dea2a8c89137d7851b7780f048cab52b"
|
|
1653
|
+
},
|
|
1629
1654
|
{
|
|
1630
1655
|
"path": "skills/find-journal/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md",
|
|
1631
1656
|
"size": 2837,
|
|
1632
1657
|
"sha256": "8c40a36ec7409b86d4e222a71b4bb39deb453d038ca83da1d7761ade2517657f"
|
|
1633
1658
|
},
|
|
1659
|
+
{
|
|
1660
|
+
"path": "skills/find-journal/references/journal_profiles/Journal_of_Clinical_Oncology.md",
|
|
1661
|
+
"size": 4268,
|
|
1662
|
+
"sha256": "ce289ff9a5b5ed1317855431ecb08d5cfb103e05c5b0825924a36c7b78568d86"
|
|
1663
|
+
},
|
|
1634
1664
|
{
|
|
1635
1665
|
"path": "skills/find-journal/references/journal_profiles/Journal_of_Magnetic_Resonance_Imaging.md",
|
|
1636
1666
|
"size": 1576,
|
|
@@ -1638,8 +1668,8 @@
|
|
|
1638
1668
|
},
|
|
1639
1669
|
{
|
|
1640
1670
|
"path": "skills/find-journal/references/journal_profiles/Journal_of_Medical_Case_Reports.md",
|
|
1641
|
-
"size":
|
|
1642
|
-
"sha256": "
|
|
1671
|
+
"size": 1951,
|
|
1672
|
+
"sha256": "149ccfb0c2dfc482169c5897c9e5cab6a44f7f71e827cf1be169db6ba3486dee"
|
|
1643
1673
|
},
|
|
1644
1674
|
{
|
|
1645
1675
|
"path": "skills/find-journal/references/journal_profiles/Journal_of_Nuclear_Medicine.md",
|
|
@@ -1768,8 +1798,8 @@
|
|
|
1768
1798
|
},
|
|
1769
1799
|
{
|
|
1770
1800
|
"path": "skills/find-journal/references/journal_profiles/Radiology_Case_Reports.md",
|
|
1771
|
-
"size":
|
|
1772
|
-
"sha256": "
|
|
1801
|
+
"size": 1846,
|
|
1802
|
+
"sha256": "4fd5ec1cc30c9d87b9c539bddf3c73ea455e8255069e92c00ec07559d94b157b"
|
|
1773
1803
|
},
|
|
1774
1804
|
{
|
|
1775
1805
|
"path": "skills/find-journal/references/journal_profiles/Skeletal_Radiology.md",
|
|
@@ -1793,14 +1823,19 @@
|
|
|
1793
1823
|
},
|
|
1794
1824
|
{
|
|
1795
1825
|
"path": "skills/find-journal/references/journal_profiles/The_Lancet_Digital_Health.md",
|
|
1796
|
-
"size":
|
|
1797
|
-
"sha256": "
|
|
1826
|
+
"size": 2231,
|
|
1827
|
+
"sha256": "bb3ac6c10aa733cb4fbeb823ed5288001fa5a72e8aa0e47cd87b9f80a0b0310d"
|
|
1798
1828
|
},
|
|
1799
1829
|
{
|
|
1800
1830
|
"path": "skills/find-journal/references/journal_profiles/World_Journal_of_Hepatology.md",
|
|
1801
1831
|
"size": 3707,
|
|
1802
1832
|
"sha256": "912a14910717f00306a8f94a7b1ec4cd81a2690dae0dcabe1a85d7e82e109eb2"
|
|
1803
1833
|
},
|
|
1834
|
+
{
|
|
1835
|
+
"path": "skills/find-journal/references/journal_profiles/npj_Breast_Cancer.md",
|
|
1836
|
+
"size": 4589,
|
|
1837
|
+
"sha256": "af2714dd8f07b12bfa9b54bdd1c711781271c0727ace6cee87ce763d553908e8"
|
|
1838
|
+
},
|
|
1804
1839
|
{
|
|
1805
1840
|
"path": "skills/find-journal/references/journal_profiles/npj_Digital_Medicine.md",
|
|
1806
1841
|
"size": 1511,
|
|
@@ -2198,8 +2233,8 @@
|
|
|
2198
2233
|
},
|
|
2199
2234
|
{
|
|
2200
2235
|
"path": "skills/make-figures/references/exemplar_plots/README.md",
|
|
2201
|
-
"size":
|
|
2202
|
-
"sha256": "
|
|
2236
|
+
"size": 11082,
|
|
2237
|
+
"sha256": "55d62362fa4d5a3a08899d869739a2d81ceae9c53a1f42ef84d463caf5f70be6"
|
|
2203
2238
|
},
|
|
2204
2239
|
{
|
|
2205
2240
|
"path": "skills/make-figures/references/exemplar_plots/ai_assistance_effect.md",
|
|
@@ -2281,6 +2316,11 @@
|
|
|
2281
2316
|
"size": 4581,
|
|
2282
2317
|
"sha256": "9bedf2f0b762702b1b9f794d6e83abc512a0bd504101ac27133558074a788b04"
|
|
2283
2318
|
},
|
|
2319
|
+
{
|
|
2320
|
+
"path": "skills/make-figures/references/exemplar_plots/shap_beeswarm.md",
|
|
2321
|
+
"size": 4850,
|
|
2322
|
+
"sha256": "bc3de2226c96d4d935d5291b4058e0cdd1dc03e807004391347b3ba32a6311d5"
|
|
2323
|
+
},
|
|
2284
2324
|
{
|
|
2285
2325
|
"path": "skills/make-figures/references/exemplar_plots/spider_plot.md",
|
|
2286
2326
|
"size": 3114,
|
|
@@ -6131,6 +6171,11 @@
|
|
|
6131
6171
|
"size": 6387,
|
|
6132
6172
|
"sha256": "58e6ee1186985e75054194070a8e97e871fe6207bfaab07264d8ea1e5cc330eb"
|
|
6133
6173
|
},
|
|
6174
|
+
{
|
|
6175
|
+
"path": "skills/write-paper/references/journal_profiles/Annals_of_Oncology.md",
|
|
6176
|
+
"size": 7859,
|
|
6177
|
+
"sha256": "5352cfac5c6a396c78fc506224371b5ee6fc69bdd26694d261ef299cf1dfab09"
|
|
6178
|
+
},
|
|
6134
6179
|
{
|
|
6135
6180
|
"path": "skills/write-paper/references/journal_profiles/Artificial_Intelligence_in_Medicine.md",
|
|
6136
6181
|
"size": 3492,
|
|
@@ -6146,10 +6191,20 @@
|
|
|
6146
6191
|
"size": 7825,
|
|
6147
6192
|
"sha256": "db438eb8e86a2f6f6da37c9495eaf65d45bb6139f42b409a3c3a16ca1da78ea8"
|
|
6148
6193
|
},
|
|
6194
|
+
{
|
|
6195
|
+
"path": "skills/write-paper/references/journal_profiles/Cancer_Research_and_Treatment.md",
|
|
6196
|
+
"size": 7484,
|
|
6197
|
+
"sha256": "c1549dec158b9e00a3032c4da78a61ad3a0919f736e2f7d24d07af0afc02e94b"
|
|
6198
|
+
},
|
|
6149
6199
|
{
|
|
6150
6200
|
"path": "skills/write-paper/references/journal_profiles/Chest.md",
|
|
6151
|
-
"size":
|
|
6152
|
-
"sha256": "
|
|
6201
|
+
"size": 16316,
|
|
6202
|
+
"sha256": "24f7de1e22a61aee85b22c0b34cbf13a237ca04065a14512102c83b9ed584808"
|
|
6203
|
+
},
|
|
6204
|
+
{
|
|
6205
|
+
"path": "skills/write-paper/references/journal_profiles/Clinical_Cancer_Research.md",
|
|
6206
|
+
"size": 10002,
|
|
6207
|
+
"sha256": "d45c8aa63feb2ad197a19bffdcef477f7ac801c374a7a30c13591c2ffff7d2c4"
|
|
6153
6208
|
},
|
|
6154
6209
|
{
|
|
6155
6210
|
"path": "skills/write-paper/references/journal_profiles/Clinical_Radiology.md",
|
|
@@ -6171,6 +6226,11 @@
|
|
|
6171
6226
|
"size": 12383,
|
|
6172
6227
|
"sha256": "3ebcba0749b4a70c4f7b0d2dc1ec09cc28b982f942d879db9719808315829c0e"
|
|
6173
6228
|
},
|
|
6229
|
+
{
|
|
6230
|
+
"path": "skills/write-paper/references/journal_profiles/ESMO_Open.md",
|
|
6231
|
+
"size": 8040,
|
|
6232
|
+
"sha256": "2c4d46e246d4a8f2cc1bff1a7d3a4c422ad66da1bdb46e01ef08828dd93e20e6"
|
|
6233
|
+
},
|
|
6174
6234
|
{
|
|
6175
6235
|
"path": "skills/write-paper/references/journal_profiles/Endocrinology_and_Metabolism.md",
|
|
6176
6236
|
"size": 7164,
|
|
@@ -6263,23 +6323,33 @@
|
|
|
6263
6323
|
},
|
|
6264
6324
|
{
|
|
6265
6325
|
"path": "skills/write-paper/references/journal_profiles/JNIS.md",
|
|
6266
|
-
"size":
|
|
6267
|
-
"sha256": "
|
|
6326
|
+
"size": 10418,
|
|
6327
|
+
"sha256": "0ba37375a08032323ee15dae79c878957e2099b50b8ebf26d7caa4e1e9e50df4"
|
|
6268
6328
|
},
|
|
6269
6329
|
{
|
|
6270
6330
|
"path": "skills/write-paper/references/journal_profiles/JVIR.md",
|
|
6271
6331
|
"size": 6124,
|
|
6272
6332
|
"sha256": "313604759c6e6471ec82e55ab0db489058fe2a7a2628f4fae92471423fb64f60"
|
|
6273
6333
|
},
|
|
6334
|
+
{
|
|
6335
|
+
"path": "skills/write-paper/references/journal_profiles/Journal_of_Breast_Cancer.md",
|
|
6336
|
+
"size": 7277,
|
|
6337
|
+
"sha256": "0dc4bede6e74c540ce5b8326db5d49b245f76867e5951703abc2ad07c0c515af"
|
|
6338
|
+
},
|
|
6274
6339
|
{
|
|
6275
6340
|
"path": "skills/write-paper/references/journal_profiles/Journal_of_Clinical_Endocrinology_and_Metabolism.md",
|
|
6276
6341
|
"size": 9600,
|
|
6277
6342
|
"sha256": "2cade69fc364915be5ff06cee7a6b77b9bde0c5499fac75f05007332affca8d8"
|
|
6278
6343
|
},
|
|
6344
|
+
{
|
|
6345
|
+
"path": "skills/write-paper/references/journal_profiles/Journal_of_Clinical_Oncology.md",
|
|
6346
|
+
"size": 9172,
|
|
6347
|
+
"sha256": "582dc60183235ed628c0c4483bcc803e337ea62e8fdd5856ccfc2cd1277dbc41"
|
|
6348
|
+
},
|
|
6279
6349
|
{
|
|
6280
6350
|
"path": "skills/write-paper/references/journal_profiles/Journal_of_Stroke.md",
|
|
6281
|
-
"size":
|
|
6282
|
-
"sha256": "
|
|
6351
|
+
"size": 7737,
|
|
6352
|
+
"sha256": "079a49839844824645be89c0d5abbccace3ddb765f925f2bee0ec43cc8c806c3"
|
|
6283
6353
|
},
|
|
6284
6354
|
{
|
|
6285
6355
|
"path": "skills/write-paper/references/journal_profiles/KJR.md",
|
|
@@ -6308,8 +6378,8 @@
|
|
|
6308
6378
|
},
|
|
6309
6379
|
{
|
|
6310
6380
|
"path": "skills/write-paper/references/journal_profiles/Liver_International.md",
|
|
6311
|
-
"size":
|
|
6312
|
-
"sha256": "
|
|
6381
|
+
"size": 12370,
|
|
6382
|
+
"sha256": "e0d280ab2302a09f03a4be6fea6c4518f48ee1c0b9558cf8158006223a6e6fa2"
|
|
6313
6383
|
},
|
|
6314
6384
|
{
|
|
6315
6385
|
"path": "skills/write-paper/references/journal_profiles/Medical_Image_Analysis.md",
|
|
@@ -6323,8 +6393,8 @@
|
|
|
6323
6393
|
},
|
|
6324
6394
|
{
|
|
6325
6395
|
"path": "skills/write-paper/references/journal_profiles/NEJM_AI.md",
|
|
6326
|
-
"size":
|
|
6327
|
-
"sha256": "
|
|
6396
|
+
"size": 9483,
|
|
6397
|
+
"sha256": "2c3880cd309eaacbda6b1a82e85bb4efea4735b03e8fe4b2feb27a4e817d2b8e"
|
|
6328
6398
|
},
|
|
6329
6399
|
{
|
|
6330
6400
|
"path": "skills/write-paper/references/journal_profiles/Nature_Medicine.md",
|
|
@@ -6363,8 +6433,8 @@
|
|
|
6363
6433
|
},
|
|
6364
6434
|
{
|
|
6365
6435
|
"path": "skills/write-paper/references/journal_profiles/Stroke.md",
|
|
6366
|
-
"size":
|
|
6367
|
-
"sha256": "
|
|
6436
|
+
"size": 8780,
|
|
6437
|
+
"sha256": "6c7ab7b6fd0ee1c18f905333bd42770f6e8b430eab7edb692a7b3cf9ba775df4"
|
|
6368
6438
|
},
|
|
6369
6439
|
{
|
|
6370
6440
|
"path": "skills/write-paper/references/journal_profiles/The_BMJ.md",
|
|
@@ -6378,14 +6448,19 @@
|
|
|
6378
6448
|
},
|
|
6379
6449
|
{
|
|
6380
6450
|
"path": "skills/write-paper/references/journal_profiles/The_Lancet_Digital_Health.md",
|
|
6381
|
-
"size":
|
|
6382
|
-
"sha256": "
|
|
6451
|
+
"size": 8944,
|
|
6452
|
+
"sha256": "723b0f5e91be86298401ea2f1b6e76675881675de1a7622dde8de906f0033a2f"
|
|
6383
6453
|
},
|
|
6384
6454
|
{
|
|
6385
6455
|
"path": "skills/write-paper/references/journal_profiles/World_Journal_of_Hepatology.md",
|
|
6386
6456
|
"size": 7289,
|
|
6387
6457
|
"sha256": "4f8594e07080dafb56dc6945addf45e7ceddbc3185f781f4edcd211744a8fb24"
|
|
6388
6458
|
},
|
|
6459
|
+
{
|
|
6460
|
+
"path": "skills/write-paper/references/journal_profiles/npj_Breast_Cancer.md",
|
|
6461
|
+
"size": 10165,
|
|
6462
|
+
"sha256": "84eced761fe6094146bde8f09f812b1df28c464997c07c36c641c076a170f832"
|
|
6463
|
+
},
|
|
6389
6464
|
{
|
|
6390
6465
|
"path": "skills/write-paper/references/journal_profiles/npj_Digital_Medicine.md",
|
|
6391
6466
|
"size": 6000,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "medsci-skills",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.28.0",
|
|
4
4
|
"description": "MedSci Skills — a medical/scientific research skill suite for AI coding agents (Claude Code, Codex, Cursor, Copilot). The npm package is a terminal-friendly installer shortcut; the canonical distribution remains the GitHub repository and the Claude Code plugin marketplace.",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE",
|
|
6
6
|
"homepage": "https://github.com/Aperivue/medsci-skills#readme",
|
|
@@ -415,16 +415,16 @@ tbl %>% as_flex_table() %>% flextable::save_as_docx(path = "table.docx")
|
|
|
415
415
|
- Always report: sensitivity, specificity, PPV, NPV, accuracy, AUC
|
|
416
416
|
- CIs: Wilson score for proportions, DeLong for AUC
|
|
417
417
|
- ROC curve: include diagonal reference line, AUC in legend
|
|
418
|
-
- If comparing models: DeLong test for AUC
|
|
418
|
+
- If comparing models: paired DeLong test for two separate scores on the same patients. For a nested "baseline + new term" model fitted and evaluated on the same data, do not use it as the added-value test; test the term (likelihood ratio) and report ΔAUC with its CI (see the table guide below)
|
|
419
419
|
- Youden's index for optimal threshold when applicable
|
|
420
420
|
- Include calibration assessment (Brier score, calibration plot) for prediction models
|
|
421
|
-
- **NRI/IDI**:
|
|
422
|
-
-
|
|
423
|
-
-
|
|
421
|
+
- **NRI/IDI**: If reported when comparing two models (e.g., base model vs model + AI score):
|
|
422
|
+
- NRI separately for events and non-events (with two risk categories these are the changes in sensitivity and specificity)
|
|
423
|
+
- Categorical NRI only with prespecified, clinically defined risk categories; never the continuous (category-free) NRI as evidence of added value — it can overstate it even in validation data
|
|
424
424
|
- IDI (Integrated Discrimination Improvement)
|
|
425
425
|
- Bootstrap 95% CIs (1000+ iterations)
|
|
426
|
-
- These supplement
|
|
427
|
-
- Table type guide (added value beyond a baseline): `references/table-standards/table-types/incremental_value.md` (paired ΔAUC
|
|
426
|
+
- These supplement the added-value test and ΔAUC with its CI; net benefit is the preferred single summary
|
|
427
|
+
- Table type guide (added value beyond a baseline): `references/table-standards/table-types/incremental_value.md` (likelihood-ratio test of the new term, paired ΔAUC with CI as an estimate, NRI split by events/non-events, IDI, net benefit at a prespecified threshold, same-patient/calibrated-first discipline). Pairs the decision-curve exemplar `make-figures` `references/exemplar_plots/decision_curve.md`.
|
|
428
428
|
- Reader study (MRMC): `references/table-standards/table-types/reader_study.md` (per-reader + reader-averaged AUC with an Obuchowski–Rockette/DBM reader+case CI, per-patient vs per-lesion unit, superiority vs non-inferiority margin). Use an MRMC method (not a fixed-reader DeLong CI) for a claim that generalises to readers. Pairs `make-figures` `references/exemplar_plots/mrmc_roc.md`.
|
|
429
429
|
|
|
430
430
|
### Inter-rater Agreement
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
The table standard for any "the new marker/model adds value **beyond** an established baseline"
|
|
4
4
|
claim — a new biomarker on top of a clinical score, an AI model on top of a radiologist or a
|
|
5
5
|
guideline nomogram. Discrimination alone (a higher AUROC) is not sufficient evidence of added
|
|
6
|
-
value; report the paired change in discrimination **with** a
|
|
7
|
-
|
|
6
|
+
value; report the paired change in discrimination **with** a clinical-utility metric (and
|
|
7
|
+
reclassification, if used, reported as below), all on the **same patients** and the same held-out
|
|
8
|
+
data.
|
|
8
9
|
|
|
9
10
|
## Reporting Guidelines
|
|
10
11
|
- **TRIPOD / TRIPOD+AI**: prediction-model development/validation, model comparison and performance
|
|
@@ -17,13 +18,15 @@ metric, all on the **same patients** and the same held-out data.
|
|
|
17
18
|
```
|
|
18
19
|
Table 4. Incremental Value of [New Predictor/Model] Added to [Baseline] (external test set, n = ___, events = ___)
|
|
19
20
|
|
|
20
|
-
Model C-statistic (95% CI) ΔC (95% CI)
|
|
21
|
-
Baseline ([predictors]) 0.74 (0.70-0.78) — (reference) —
|
|
22
|
-
Baseline + [new predictor] 0.81 (0.77-0.85) 0.07 (0.04-0.10)
|
|
21
|
+
Model C-statistic (95% CI) ΔC (95% CI) NRI events / non-events (95% CI) IDI (95% CI) ΔNet benefit @ threshold (95% CI)
|
|
22
|
+
Baseline ([predictors]) 0.74 (0.70-0.78) — (reference) — — — (reference)
|
|
23
|
+
Baseline + [new predictor] 0.81 (0.77-0.85) 0.07 (0.04-0.10) ___ / ___ 0.045 (0.02-0.07) +0.021 (___-___) @ 10%
|
|
23
24
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
Added-value test: likelihood-ratio test of [new predictor] in the development cohort
|
|
26
|
+
(n = ___, events = ___), χ²(df) = ___, P = ___. ΔC is the size of the gain on these held-out
|
|
27
|
+
patients with a paired 95% CI (DeLong or bootstrap) — an estimate, not a second test. NRI/IDI
|
|
28
|
+
from the paired risk estimates, NRI given separately for events and non-events. Net benefit from
|
|
29
|
+
decision-curve analysis at the prespecified threshold; full curve in Figure X.
|
|
27
30
|
```
|
|
28
31
|
|
|
29
32
|
## Rules
|
|
@@ -31,41 +34,82 @@ from decision-curve analysis at the prespecified threshold; full curve in Figure
|
|
|
31
34
|
term, evaluated on the **identical** held-out patients — not two models on different cohorts.
|
|
32
35
|
- **Baseline named and justified**: state exactly what the baseline contains (clinical score,
|
|
33
36
|
guideline nomogram, prior model) and that it was applied as published / recalibrated / refit.
|
|
34
|
-
-
|
|
35
|
-
|
|
36
|
-
is
|
|
37
|
-
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
- **One test for "adds anything", then an estimate for "how much"**: for a prespecified term added
|
|
38
|
+
to a regression baseline, whether it adds information is tested through its coefficient in the
|
|
39
|
+
full model. That is the **likelihood-ratio** (or Wald) test in the development data, with both
|
|
40
|
+
models fitted on the same observations. ΔC-statistic is then reported as the **size** of the
|
|
41
|
+
gain, with a paired 95% CI, not as a second significance test. A DeLong test of ΔAUC between
|
|
42
|
+
nested models **fitted and evaluated on the same data** is the wrong test for added value. When
|
|
43
|
+
the new term has no association, the statistic's null distribution is not normal, and the test
|
|
44
|
+
is conservative for small and moderate effects (Demler, Pencina & D'Agostino, *Stat Med* 2012).
|
|
45
|
+
In simulation its size fell below 0.006, with much lower power than the likelihood-ratio and
|
|
46
|
+
Wald tests (Vickers, Cronin & Begg, *BMC Med Res Methodol* 2011). A marker with a modest real
|
|
47
|
+
association can therefore "fail" it. On held-out data, comparing two models **frozen before
|
|
48
|
+
evaluation** is what the DeLong method was built for: correlated ROC curves of given scores on
|
|
49
|
+
the same patients. In simulation it held its nominal type I error there (Chen et al., *BMC Med
|
|
50
|
+
Res Methodol* 2013). It then answers whether those two scores differ in AUC, not whether the
|
|
51
|
+
new term carries information. When the augmented model is not a regression with a separable
|
|
52
|
+
prespecified term, such as a retrained network or a data-selected predictor set, that held-out
|
|
53
|
+
paired comparison is the evidence, not a coefficient test. Never compare two independent AUROCs
|
|
54
|
+
by eye, side by side. A tiny ΔC with a wide CI is not evidence of added discrimination, though on
|
|
55
|
+
its own it does not rule out a gain in calibration or net benefit.
|
|
56
|
+
- **Reclassification, if reported, reported correctly**: give NRI **separately for events and
|
|
57
|
+
non-events**. An overall NRI can be positive from one side alone, and which side moved decides
|
|
58
|
+
whether the change matters clinically: more events caught, or fewer non-events flagged. With two
|
|
59
|
+
risk categories those components are simply the changes in sensitivity and specificity, so report
|
|
60
|
+
them under those names. **Do not present the category-free (continuous) NRI as evidence of added
|
|
61
|
+
value**: it can overstate a marker's incremental value even in independent validation data. With
|
|
62
|
+
three or more categories the same review recommends against NRI altogether (Kerr et al.,
|
|
63
|
+
*Epidemiology* 2014). If a categorical NRI is used anyway, prespecify and justify the categories
|
|
64
|
+
(post-hoc categories inflate NRI), and bootstrap its CI rather than using published variance
|
|
65
|
+
formulas. IDI, if reported, goes alongside with its CI.
|
|
41
66
|
- **Clinical utility, not just statistics**: include **net benefit** (decision-curve analysis) at a
|
|
42
67
|
prespecified, clinically justified threshold (and reference the full curve —
|
|
43
|
-
`make-figures` `exemplar_plots/decision_curve.md`).
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
68
|
+
`make-figures` `exemplar_plots/decision_curve.md`). The improvement in net benefit is the
|
|
69
|
+
preferred single-number summary of the increment (Kerr et al. 2014). Reclassification metrics
|
|
70
|
+
without utility can mislead.
|
|
71
|
+
- **Calibration first**: NRI/IDI/net benefit all depend on predicted probabilities, so assess both
|
|
72
|
+
models' calibration on the test data before computing them (pair with the calibration plot). If
|
|
73
|
+
a model has to be recalibrated, do it on data other than the test set. Recalibrating on the test
|
|
74
|
+
outcomes and then evaluating on them is no longer a validation of a frozen model.
|
|
47
75
|
- **One decimal discipline / CIs everywhere**: every estimate carries a 95% CI; bootstrap CIs state
|
|
48
76
|
the number of replicates; the same bootstrap resamples are reused across paired metrics.
|
|
49
77
|
|
|
50
78
|
## Common pitfalls (flag in review)
|
|
51
|
-
- Reporting only ΔAUROC and calling it "added value" (no
|
|
79
|
+
- Reporting only ΔAUROC and calling it "added value" (no clinical-utility metric).
|
|
52
80
|
- NRI with post-hoc categories, or only the overall NRI without event/non-event split.
|
|
81
|
+
- A DeLong test of ΔAUC used as the significance test for an added predictor in nested models
|
|
82
|
+
fitted and evaluated on the same data. It is conservative and underpowered there, so test the
|
|
83
|
+
coefficient.
|
|
84
|
+
- A continuous (category-free) NRI offered as the evidence of added value.
|
|
53
85
|
- New vs baseline AUROCs from different cohorts or different n (not a paired comparison).
|
|
54
86
|
- Net benefit asserted in prose with no decision curve and no stated threshold.
|
|
55
87
|
|
|
56
88
|
## Code (illustrative)
|
|
57
89
|
|
|
58
90
|
```r
|
|
59
|
-
#
|
|
91
|
+
# 1) Does the new term add anything? One test: likelihood ratio, in the development data.
|
|
92
|
+
# Fit both models on the same complete cases, or the comparison is not nested.
|
|
93
|
+
dev <- dev[complete.cases(dev[, c("y", "x1", "x2", "marker")]), ]
|
|
94
|
+
fit_base <- glm(y ~ x1 + x2, family = binomial, data = dev)
|
|
95
|
+
fit_full <- glm(y ~ x1 + x2 + marker, family = binomial, data = dev)
|
|
96
|
+
anova(fit_base, fit_full, test = "LRT") # Cox: anova(cox_base, cox_full)
|
|
97
|
+
# 2) How much? Paired ΔAUC with its CI on the held-out patients -- an estimate, not a 2nd test.
|
|
98
|
+
# Fix the outcome levels and direction so roc() cannot flip a score on the test data.
|
|
60
99
|
library(pROC)
|
|
61
|
-
roc_base <- roc(
|
|
62
|
-
roc
|
|
63
|
-
|
|
100
|
+
roc_base <- roc(y_test, p_baseline, levels = c(0, 1), direction = "<")
|
|
101
|
+
roc_full <- roc(y_test, p_full, levels = c(0, 1), direction = "<")
|
|
102
|
+
roc.test(roc_full, roc_base, method = "delong", paired = TRUE)$conf.int # CI of full - base
|
|
103
|
+
# NRI (events / non-events separately) and IDI from the paired risk vectors p_baseline, p_full;
|
|
64
104
|
# net benefit via the decision-curve template (analyze-stats references/templates/dca_plot.R).
|
|
65
105
|
```
|
|
66
106
|
|
|
67
107
|
```python
|
|
68
|
-
#
|
|
69
|
-
#
|
|
70
|
-
|
|
108
|
+
# 1) One test for "adds anything": likelihood ratio of the nested fits (development data),
|
|
109
|
+
# both fitted on the same observations.
|
|
110
|
+
from scipy.stats import chi2
|
|
111
|
+
lr = 2 * (fit_full.llf - fit_base.llf) # statsmodels Logit / GLM results
|
|
112
|
+
p = chi2.sf(lr, fit_full.df_model - fit_base.df_model)
|
|
113
|
+
# 2) ΔAUC on the SAME held-out patients with a paired bootstrap CI (an estimate, not a 2nd test);
|
|
114
|
+
# reuse one set of resamples across ΔAUC, NRI, IDI and net benefit so the CIs are consistent.
|
|
71
115
|
```
|
|
@@ -163,11 +163,14 @@ def build_locale_patterns(locale: dict) -> tuple[
|
|
|
163
163
|
# Value patterns: universal + locale-specific
|
|
164
164
|
value_patterns = list(UNIVERSAL_VALUE_PATTERNS)
|
|
165
165
|
|
|
166
|
-
# National ID
|
|
166
|
+
# National ID. Compiled case-insensitively: locale packs write letter
|
|
167
|
+
# classes in upper case (UK NINO, Indian PAN), but IDs are often exported
|
|
168
|
+
# in lower case, and a missed match classifies the column SAFE, so it is
|
|
169
|
+
# passed through un-stripped. A miss here is a leak, not a lost warning.
|
|
167
170
|
nid = locale.get("national_id", {})
|
|
168
171
|
nid_type = nid.get("phi_type", "national_id")
|
|
169
172
|
for pat in nid.get("patterns", []):
|
|
170
|
-
value_patterns.append((re.compile(pat), nid_type))
|
|
173
|
+
value_patterns.append((re.compile(pat, re.IGNORECASE), nid_type))
|
|
171
174
|
|
|
172
175
|
# Phone
|
|
173
176
|
for phone in locale.get("phone", []):
|
|
@@ -186,9 +189,11 @@ def build_locale_patterns(locale: dict) -> tuple[
|
|
|
186
189
|
# Build a regex from keywords (case-insensitive word boundary match)
|
|
187
190
|
escaped = [re.escape(kw) for kw in addr_cfg["keywords"]]
|
|
188
191
|
address_re = re.compile(r"(?:" + "|".join(escaped) + r")", re.IGNORECASE)
|
|
189
|
-
# Postcode pattern (if available, add to value_patterns as address type)
|
|
192
|
+
# Postcode pattern (if available, add to value_patterns as address type).
|
|
193
|
+
# Case-insensitive for the same reason as national IDs above.
|
|
190
194
|
if addr_cfg.get("postcode_pattern"):
|
|
191
|
-
value_patterns.append(
|
|
195
|
+
value_patterns.append(
|
|
196
|
+
(re.compile(addr_cfg["postcode_pattern"], re.IGNORECASE), "address"))
|
|
192
197
|
|
|
193
198
|
# Name heuristic
|
|
194
199
|
name_cfg = locale.get("name_heuristic", {})
|
|
@@ -382,12 +387,17 @@ def scan_column_names(headers: list[str],
|
|
|
382
387
|
return results
|
|
383
388
|
|
|
384
389
|
|
|
385
|
-
def
|
|
386
|
-
"""Return
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
390
|
+
def _values_to_scan(values: list[str]) -> list[str]:
|
|
391
|
+
"""Return every non-empty value in the column.
|
|
392
|
+
|
|
393
|
+
This used to be a random sample of at most 500 values, and that caused
|
|
394
|
+
two defects. First, the same file could classify differently from one
|
|
395
|
+
run to the next. Second, a column where only a few values carry PHI
|
|
396
|
+
(three phone numbers in 2,000 notes) came out SAFE whenever the sample
|
|
397
|
+
missed them, and a SAFE column is passed through un-stripped. A SAFE
|
|
398
|
+
verdict asserts that no value matched, so every value has to be checked.
|
|
399
|
+
"""
|
|
400
|
+
return [v for v in values if v and v.strip()]
|
|
391
401
|
|
|
392
402
|
|
|
393
403
|
def scan_column_values(col: str, values: list[str],
|
|
@@ -406,7 +416,7 @@ def scan_column_values(col: str, values: list[str],
|
|
|
406
416
|
if name_columns is None:
|
|
407
417
|
name_columns = [k for k, v in UNIVERSAL_COLUMN_NAMES.items() if v == "name"]
|
|
408
418
|
|
|
409
|
-
sample =
|
|
419
|
+
sample = _values_to_scan(values)
|
|
410
420
|
if not sample:
|
|
411
421
|
return None
|
|
412
422
|
|
|
@@ -535,7 +545,7 @@ def classify_columns(data: list[dict], headers: list[str],
|
|
|
535
545
|
if avg_len > 50:
|
|
536
546
|
# Scan for embedded PHI in free text
|
|
537
547
|
embedded_phi = False
|
|
538
|
-
for val in
|
|
548
|
+
for val in non_empty: # every value; the loop exits on the first hit
|
|
539
549
|
for regex, _ in val_patterns:
|
|
540
550
|
if regex.search(val):
|
|
541
551
|
embedded_phi = True
|