I built a cohort variable for PPMI that maps directly to the enrollment criteria, because the study has developed over time and I wanted something easier to track “Which criteria set did this participant enter under?” to understand the intepretation of the results. Participant_Status already has most of the ingredients (SCREENEDAM, the ENRL* arm flags, COHORT_DEFINITION, PATNO allocation). I combined them and cross-checked to see if they can be harmonized over different protocols / protocol changes.
The clearest example is the PD cohort. Over time, “Parkinson’s Disease” participants have come in under several different criteria sets: the original de novo, untreated, DAT-deficit-confirmed cohort; the genetic cohort/registry; and, in Amendment 4, the sporadic/genetic arms plus the new PD Normosmic arm. Depending on the question, you may want to treat those as one group or several, so I made that choice explicit.
From Participant_Status alone, cross-checked against the protocol documents, I defined:
Protocol comparison table [link]
PROTOCOL_ERA— the screening protocol era.STUDY_ARM— the enrollment arm from theENRL*flags.COHORT_STRATUM— the highest-resolution era × arm grouping.HARMONIZED_COHORT— a simplified version that only merges strata when the underlying criteria are nearly the same.
This cuts the raw categories down to a much smaller set of usable groups while keeping the more detailed fields available for sensitivity analyses. The top 10 HARMONIZED_COHORT counts in the Aug. 11, 2026 PPMI download were:
HARMONIZED_COHORT
Prodromal_Hyposmia_DATera 2931
Prodromal_UPSIT_SAAgated_AM4 1683
PD_DeNovoSporadic_DATgated 1512
Prodromal_RBD_DATera 536
Prodromal_GeneticCarrier_PPMI1 442
HC_DATnormal 432
Unresolved_PPMI2_pending 386
PD_Genetic_PPMI1_unrestricted 301
PD_Normosmic_AM4 268
Prodromal_Pilot_HPSM_RBD_PPMI1 215
One thing I noticed during validation is that the detailed fields still matter: for example, the merged hyposmia-prodromal group shows higher SAA positivity in later amendments, which is exactly why I keep COHORT_STRATUM and PROTOCOL_ERA alongside HARMONIZED_COHORT. They make it easy to go back to the finer-grained strata when needed.
One caveat: HARMONIZED_COHORT is meant to group people by criteria set, not to replace the genetics-specific subcohort labels. If you want to separate LRRK2, GBA, and SNCA carrier arms, COHORT_STRATUM is the better field.
The script is available in the MJFF-ResearchCommunity/Useful-PPMI-Clinical-Codes repository. Feedback welcome. Thank you @danieltds for reviewing the code!