如何在 R 的回归模型中使用 ICD10 代码?

Posted

技术标签:

【中文标题】如何在 R 的回归模型中使用 ICD10 代码?【英文标题】:How to use ICD10 Code in a regression model in R? 【发布时间】:2019-04-01 07:26:10 【问题描述】:

我正在尝试查找导致某些疾病的 ICD10 代码。但 ICD10 具有字母数字分类,例如A00.00 。有 1000 种这样的分类,但我不确定如何在我的回归模型中使用它们。请有任何建议。

数据 患者现有 ICD10 糖尿病 (Y) P1 A00.10 1 P2 A00.20 0 P1 C00.1 1 P3 Z01 1 ....

【问题讨论】:

【参考方案1】:

一种有效的方法是使用合并症的概念。我的 R 包 icd 为标准化的疾病集执行此操作,例如“糖尿病”、“癌症”、“心脏病”。有多种合并症地图可供选择,因此您可以选择与您的兴趣相符的地图,例如icd 中的 PCCC 图可用于儿科,其他用于成人,涵盖多种疾病状态。

例如,如introduction vignette 中所述。这些实际上是 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 类别的修改有关。

当您有疾病状态的二进制标志时,您可以在任何统计或机器学习模型中使用它们。

【讨论】:

非常感谢您帮助我解决这个问题。【参考方案2】:

您可能希望在具有一个或多个层的变量中解码 ICD10。一种方法可能是生成一个变量为 dat$diabates,级别为 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

【讨论】:

您好,感谢您的回复,数据只是我试图提供的样本以供理解。【参考方案3】:

我建议将“健康”设置为包含诊断的因子变量的参考水平,因为这将为您提供在比较健康患者与患有某种疾病的患者时您的因变量如何变化的系数。当然,您可以按照 Jean-Claude Arbaut 的建议对疾病进行分组。

这可能看起来像这样:

# 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
...

【讨论】:

以上是关于如何在 R 的回归模型中使用 ICD10 代码?的主要内容,如果未能解决你的问题,请参考以下文章

(非常)使用逻辑回归的简单量子交易模型

在R中转换icd9代码,当有倍数时只保留最上面的结果

如何比较 ICD-10 字符串或搜索诊断是不是在范围内?

寻找 ICD10 API [关闭]

R:使用 ICD-9 包创建 IC9 代码描述变量

如何在R语言中使用Logistic回归模型