Как использовать код ICD10 в регрессионной модели в R? - PullRequest
1 голос
/ 01 апреля 2019

Я пытаюсь найти коды ICD10, которые вызывают определенные заболевания. Но ICD10 имеет буквенно-цифровую классификацию, например A00.00. Существует 1000 таких классификаций, но я не уверен, как использовать их в моей регрессионной модели. Любое предложение, пожалуйста.

Данные Пациент, существующий ICD10 диабетик (Y) P1 A00.10 1 P2 A00.20 0 P1 C00.1 1 P3 Z01 1 ....

Ответы [ 3 ]

0 голосов
/ 01 апреля 2019

Я бы предложил установить «здоровый» в качестве контрольного уровня вашей факторной переменной, содержащей диагноз, поскольку это даст вам коэффициенты, которые показывают, как меняется ваша зависимая переменная при сравнении здоровых пациентов с пациентами с определенным заболеванием. Конечно, вы можете сгруппировать болезни, как это предлагает Жан-Клод Арбау.

Это может выглядеть примерно так:

# your vector with the diagnosis
diagnosis <- c("healthy", "P1 A00.10 1", "P2 A00.20 0", "P1 C00.1 1", "P3 Z01 1")

# grouping your vector. I have no idea about ICD10 groups, so this is only to show how this would work in R
diagnosis[diagnosis %in% c("P1 A00.10 1", "P2 A00.20 0")] <- "diabetes"
diagnosis[diagnosis %in% c("P1 C00.1 1", "P3 Z01 1")] <- "cancer"

# make the vector a factor with healthy as the reference
diagnosis <- factor(diagnosis)
diagnosis <- relevel(diagnosis, ref = "healthy")

# now you can use the variable in a regression
set.seed(1) # making it reproducible
dv <- rnorm(length(diagnosis)) # generating a dependent variable
summary(lm(dv ~ diagnosis)) # linear regression

# the coeficients look like this
...
Coefficients:
              Estimate Std. Error t value Pr(>|t|)
(Intercept)        -0.6265     0.8126  -0.771    0.521
diagnosiscancer     1.5888     0.9952   1.597    0.251
diagnosisdiabetes   0.3005     0.9952   0.302    0.791
...
0 голосов
/ 09 апреля 2019

Эффективный способ сделать это - использовать концепцию сопутствующих заболеваний. Мой пакет R icd делает это для стандартизированных наборов заболеваний, например «Диабет», «Рак», «Болезнь сердца». Существует выбор карт сопутствующих заболеваний, поэтому вы можете выбрать одну, которая соответствует вашим интересам, например, Карты PCCC в icd могут использоваться для педиатрии, остальные - для взрослых и охватывают различные болезненные состояния.

Например, как описано во введении виньетка . На самом деле это коды ICD-9, но вы можете использовать ICD-10.

patients <- data.frame(
   visit_id = c(1000, 1000, 1000, 1000, 1001, 1001, 1002),
   icd9 = c("40201", "2258", "7208", "25001", "34400", "4011", "4011"),
   poa = c("Y", NA, "N", "Y", "X", "Y", "E"),
   stringsAsFactors = FALSE
   )
patients
  visit_id  icd9  poa
1     1000 40201    Y
2     1000  2258 <NA>
3     1000  7208    N
4     1000 25001    Y
5     1001 34400    X
6     1001  4011    Y
7     1002  4011    E
icd::comorbid_ahrq(patients)
CHF Valvular  PHTN   PVD  HTN Paralysis NeuroOther Pulmonary    DM  DMcx Hypothyroid Renal Liver
1000  TRUE    FALSE FALSE FALSE TRUE     FALSE      FALSE     FALSE  TRUE FALSE       FALSE FALSE FALSE
1001 FALSE    FALSE FALSE FALSE TRUE      TRUE      FALSE     FALSE FALSE FALSE       FALSE FALSE FALSE
1002 FALSE    FALSE FALSE FALSE TRUE     FALSE      FALSE     FALSE FALSE FALSE       FALSE FALSE FALSE
       PUD   HIV Lymphoma  Mets Tumor Rheumatic Coagulopathy Obesity WeightLoss FluidsLytes BloodLoss
1000 FALSE FALSE    FALSE FALSE FALSE      TRUE        FALSE   FALSE      FALSE       FALSE     FALSE
1001 FALSE FALSE    FALSE FALSE FALSE     FALSE        FALSE   FALSE      FALSE       FALSE     FALSE
1002 FALSE FALSE    FALSE FALSE FALSE     FALSE        FALSE   FALSE      FALSE       FALSE     FALSE
     Anemia Alcohol Drugs Psychoses Depression
1000  FALSE   FALSE FALSE     FALSE      FALSE
1001  FALSE   FALSE FALSE     FALSE      FALSE
1002  FALSE   FALSE FALSE     FALSE      FALSE

С "DM" означает сахарный диабет, а "DMcx" означает диабет с осложнениями, например, ретинопатией или почечной недостаточностью. Это с американской модификацией AHRQ стандартных категорий Elixhauser.

Если у вас есть бинарные флаги для болезненных состояний, вы можете использовать их в любой статистической или машинной модели обучения.

0 голосов
/ 01 апреля 2019

Возможно, вы захотите декодировать ICD10 в переменную с одним или несколькими слоями.Одним из способов может быть создание переменной в виде dat $ диабетов с уровнями 0 (без заболевания) и 1 (заболевание).Способом может быть использование grepl.Кстати, общая схема диабета в кодах ICD10 - E08 (пожалуйста, отметьте http://eicd10.com/index.php?srchtext=diabetes&Submit=Search&action=search), вместо A00 - холера.

dat$diabates <- as.integer(grepl(pattern = "E08", x = dat$ICD10))
###Add to pattern a common pattern in ICD 10 code
as.numeric(as.character(dat$diabetes))->dat$diabetes

Если у вас есть несколько различных схем (повторяя процедуру для каждого шаблона)чем вы можете создать новые переменные и объединить их. Например:

dat$diabetes_final<-0 
dat$diabetes_final[which(dat$diabetes1 ==1 | dat$diabetes2==1)]<-1
...