He creado un proceso que asocia miembros de dos conjuntos , concretamente los códigos de la Jerarquía de la Clasificación Internacional de Enfermedades (CIE) y el más rico semánticamente Ontología de la Enfermedad Monarca (MonDO). (MonDO ya hace algo similar, pero mi método también asocia los códigos CIE que tienen una ruta de acceso a un término MonDO a través de otros términos en una nube de datos vinculados).
Me gustaría encontrar la asociación MonDO que más se enriquezca para cada término de la CIE. (Un código CIE puede estar asociado a múltiples términos MonDO, y viceversa. ) He comenzado con un enfoque "a martillo y a clavo" que me resulta familiar: un cálculo hipergeométrico como el que se utilizaría para el enriquecimiento del conjunto de genes( 1 , 2 ), salvo que estoy calculando un estadístico de prueba con la función de R dnorm
en lugar de comprobar las hipótesis y devolver los valores p.
Me siento algo cómodo con el enfoque hipergeométrico (ver más abajo), pero mi jefe (un profesor de genética) quiere que pruebe un enfoque de entropía de la información o de información mutua. No tengo ni idea de cómo empezar con eso. Mis lecturas me han llevado a creer que la información mutua se refiere a la relación entre dos variables, no entre niveles específicos de esas variables. En este sentido, R infotheo::mutinformation
y widyr::pairwise_pmi
ambos parecen devolver estadísticas de resumen para el conjunto de datos, no una evaluación de cada asociación.
Comprobación de la realidad hipergeométrica:
Para las asociaciones DCI que he comprobado, el término MonDO con la estadística hipergeométrica más baja suele tener la mejor alineación semántica (subjetivamente hablando), incluso si la similitud léxica es baja. Por ejemplo, mi proceso encuentra las siguientes asociaciones de ICD9CM:250.4
"Diabetes con manifestaciones renales":
+---------------+----------------+--------------------------------------+
| MonDO.term | hyperg.density | MonDO.label |
+---------------+----------------+--------------------------------------+
| MONDO:0005016 | -7.8638915 | diabetic nephropathy |
| MONDO:0005015 | -4.0628001 | diabetes mellitus (disease) |
| MONDO:0005240 | -4.0516889 | kidney disease |
| MONDO:0002908 | -4.0406997 | glucose metabolism disease |
| MONDO:0037792 | -3.9797537 | carbohydrate metabolism disease |
| MONDO:0020595 | -3.5348043 | disease of retroperitoneum |
| MONDO:0002118 | -3.4197708 | urinary system disease |
| MONDO:0005066 | -3.2170997 | metabolic disease |
| MONDO:0005151 | -3.1992739 | endocrine system disease |
| MONDO:0021145 | -2.4329025 | disease of genitourinary system |
| MONDO:0044965 | -1.9260256 | abdominal and pelvic region disorder |
| MONDO:0021199 | -0.1740629 | disease by anatomical system |
| MONDO:0024505 | -0.1172667 | disorder by anatomical region |
+---------------+----------------+--------------------------------------+
Lo estoy modelando como una urna que contiene una bola por cada código CIE. Cada bola está anotada con uno o más términos MonDO. Refiriéndome a la fórmula de R
dval <- dhyper(x, m, n, k)
Estoy usando el 1 para ambos x
y k
Porque sé que estoy sacando un código CIE conocido, y probando el enriquecimiento de un término MonDO que mi método tiene asociado. N
es el número total de códigos CIE que han sido asociados con al menos un código MonDO, m
es el número total de los códigos CIE asociados que se han asociado específicamente a un código MonDO determinado, y n = N - m
.