classify_ccs | R Documentation |
Converts a vector of ICD diagnosis codes into a vector of Clinical Classifications Software (CCS) categories using the HCUP's software
classify_ccs(icd_codes, code_type, level = NULL)
icd_codes |
Vector of ICD codes, without decimals |
code_type |
One of |
level |
The level of CCS to use. The default is to use the
single-level CCS category ( |
Unlike the CCS (CCS Refined), the original CCS classification has "single-level" and "multi-level" categories.
This system classifies all diagnoses and procedures into unique groups. The single-level CCS aggregates diagnoses into 285 mutually exclusive categories and procedures into 231 mutually exclusive categories.
The multi-level CCS expands the single-level CCS into a hierarchical system. The multi-level system has four levels for diagnoses and three levels for procedures, which provide the opportunity to examine general groupings or to assess very specific conditions and procedures. The multi-level CCS groups single-level CCS categories into broader body systems or condition categories (e.g., "Diseases of the Circulatory System," "Mental Disorders," and "Injury").
The levels allowed in the multi-level CCS depends on the version/type of ICD codes used:
dx9 (ICD-9-CM diagnosis): Allows levels 1 - 4
pr9 (ICD-9-CM procedure): Allows levels 1 - 3
dx10 and pr10 (ICD-10): Allows levels 1 - 2
An example using CCS for diagnosis codes is shown below:
CCS_lvl1 | CCS_level2 | CCS (single-level) |
DX-1 | DX-1.1 | DX1, DX2, DX3, DX9 |
DX-1 | DX-1.2 | DX4 |
DX-1 | DX-1.3 | DX5, DX6, DX7 |
DX-1 | DX-1.4 | DX8 |
DX-1 | DX-1.5 | DX10
|
It also splits single-level CCS categories to provide more detail.
For example, the single-level CCS diagnosis category 4
(Mycoses)
can be further split into 1.2.1 (Candidiasis of the mouth) and
1.2.2 (Other mycoses).
Further details can be found on the CCS fact sheet.
The notation used in the original CCS categories has a few limitations in how it names categories.
First, the CCS category CCS = '3'
maps to "Other bacterial
infections" for diagnostic codes, but the same category (CCS = '3'
)
maps to "Laminectomy" for procedures. Second, the CCS category is
supposed to be treated as a string (because HCUP designs their software
for SAS), but R will appropriately assume these categories are numbers.
The third issue is the ambiguity of single-level and multi-level CCS categories. In the original software, the first level of the multi-level CCS uses the same syntax as the single-level categories. For example, "4" represents "Mycoses" as a single-level category, but maps to "Diseases of the blood and blood-forming organs" as a multi-level category!
This all turns out to be incredibly confusing as the same number "3"
could
represent:
"Other bacterial infections" if it's the single-level category for a diagnosis
"Endocrine; nutritional; and metabolic diseases and immunity disorders" if it's the multi-level category for a diagnosis
"Laminectomy" if it's the single-level category for a procedure
"Operations on the eye" if it's the multi-level category for a procedure
To address these issues, this package prepends "DX"
or "PR" before the default CCS category (e.g. 3
becomes DX3
or PR3
for diagnoses or procedures, respectively). For the multi-level categories,
the prefixes are "DX-" and "PR-".
Although this is a trivial change for most applications, it is mentioned here because (for the purposes of reproducibility) this notation should be changed back to the original format for any publications or uses beyond this package.
A vector of the same length as icd_codes
. If level="all"
,
then a tibble will be returned, with each ICD code per row
HCUP page for CCS with ICD-9
HCUP page for CCS beta with ICD-10
See explain_ccs
to convert the CCS category into a
description of the category
Use ccsr_dx
to use CCSR categories, which are prefered
for ICD-10 data
CCS_dx9_map
,
CCS_pr9_map
,
CCS_dx10_map
, and
CCS_pr10_map
in the
hcup.data
package for the datasets
library(dplyr)
## Look up ICD-9 DX codes
classify_ccs("8442", code_type = "dx9", level = "single")
# Vectorized
tibble(ICD = c("8442", "1403", "9682", "36463", "3595")) %>%
mutate(CCS = classify_ccs(ICD, code_type = "dx9"),
CCS_expl = explain_ccs(CCS))
## Works the same for ICD-9 PR codes
classify_ccs("066", code_type = "pr9")
## Also works for ICD-10, but CCSR is prefered
classify_ccs("M61019", "dx10", level="single")
classify_ccs("0TY10Z1", "pr10", "single")
## Specify level to use multi-level CCS
c("0223","1100") %>%
classify_ccs(code_type = "dx9", level="1")
# If you want to see all levels use `level="all"`
# which returns a tibble
df <- c("0223","1100") %>%
classify_ccs(code_type = "dx9", level="all")
df
if(rlang::is_installed("dplyr", version = "1.0.0")){
df %>% # requires dplyr::across()
mutate(across(c(CCS, CCS_lvl1), explain_ccs))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.