Skip to contents

Applies ICD-11 PTSD diagnostic criteria to PCL-5 item scores and returns a comparison dataframe against the full DSM-5-TR criteria. The output is directly compatible with summarize_ptsd_changes so that ICD-11 diagnostic accuracy can be computed on the same footing as optimized symptom combinations.

Usage

create_icd11_diagnosis(data)

Arguments

data

A dataframe containing exactly 20 columns of PCL-5 item scores (output of rename_ptsd_columns). Columns must be named symptom_1 through symptom_20, scored on a 0–4 scale, with no missing values.

Value

A data.frame with two logical columns and one row per participant:

  • PTSD_orig: DSM-5-TR diagnosis (reference standard)

  • PTSD_icd11: ICD-11 diagnosis

Any carry-through columns present in data (e.g. an ID column added via rename_ptsd_columns) are prepended in original order so results can be joined back to the source dataframe.

This dataframe can be passed directly to summarize_ptsd_changes or used as an input to compare_diagnostic_systems.

Details

ICD-11 PTSD requires ALL THREE of the following clusters to be met (symptom present = score \(\ge\) 2 on original 0–4 scale):

  1. Re-experiencing in the present: \(\ge\) 1 of PCL-5 items 2, 3 (nightmares, flashbacks)

  2. Avoidance: \(\ge\) 1 of PCL-5 items 6, 7

  3. Sense of current threat: \(\ge\) 1 of PCL-5 items 17, 18 (hypervigilance, exaggerated startle)

A minimum of 3 symptoms total across all ICD-11 items (2, 3, 6, 7, 17, 18) must be present. This is automatically satisfied when all three cluster requirements are met but is enforced explicitly for clarity.

This is the narrow six-item mapping used across the published PCL-5-to-ICD-11 literature (e.g. Kuester et al. 2017, Schellong et al. 2019, Heeke et al. 2020, Pettrich et al. 2025): ICD-11 requires re-experiencing to have a here-and-now quality, which nightmares (item 2) and flashbacks (item 3) capture, while intrusive memories (item 1) as worded in the PCL-5 do not. To benchmark the broader seven-item variant (items 1, 2, 3, 6, 7, 17, 18) instead, compute it yourself and pass it to compare_optimizations as a custom fixed criterion:


broad <- rowSums(data[, paste0("symptom_", c(1, 2, 3))]  >= 2) >= 1 &
         rowSums(data[, paste0("symptom_", c(6, 7))]     >= 2) >= 1 &
         rowSums(data[, paste0("symptom_", c(17, 18))]   >= 2) >= 1
compare_optimizations(data, scenarios = list(
  "ICD-11 (broad)" = list(type = "fixed", criterion = broad,
                          symptoms = c(1, 2, 3, 6, 7, 17, 18))))

DSM-5-TR diagnosis (PTSD_orig) is computed using the same binarization logic as the rest of the package (create_ptsd_diagnosis_binarized).

See also

compare_diagnostic_systems for a unified cross-system comparison table.

summarize_ptsd_changes and create_readable_summary for computing and formatting diagnostic metrics.

Examples

# Apply ICD-11 criteria to the built-in simulated dataset
ptsd_data <- rename_ptsd_columns(simulated_ptsd,
                                  id_col = c("patient_id", "age", "sex"))
icd11_result <- create_icd11_diagnosis(ptsd_data)
head(icd11_result)
#>   patient_id age    sex PTSD_orig PTSD_icd11
#> 1      P0001  48   male      TRUE       TRUE
#> 2      P0002  29   male      TRUE       TRUE
#> 3      P0003  44   male      TRUE      FALSE
#> 4      P0004  41 female      TRUE       TRUE
#> 5      P0005  34   male      TRUE       TRUE
#> 6      P0006  18   male      TRUE      FALSE

# Feed directly into the metrics pipeline
metrics <- summarize_ptsd_changes(icd11_result)
create_readable_summary(metrics)
#>     Scenario Total Diagnosed Total Non-Diagnosed True Positive True Negative
#> 1  PTSD_orig    4710 (94.2%)          290 (5.8%)          4710           290
#> 2 PTSD_icd11    4505 (90.1%)          495 (9.9%)          4476           261
#>   Newly Diagnosed Newly Non-Diagnosed True Cases False Cases Sensitivity
#> 1               0                   0       5000           0      1.0000
#> 2              29                 234       4737         263      0.9503
#>   Specificity    PPV    NPV Accuracy Balanced Accuracy
#> 1         1.0 1.0000 1.0000   1.0000            1.0000
#> 2         0.9 0.9936 0.5273   0.9474            0.9252