Yo tengo un PhViD

October 6, 2011
By

This post was kindly contributed by Farmacovigilancia nerd2!=nerd - go there to comment and to read the full post.

Luego de instalar y conocer los rudimentos de R y de instalar los componentes necesarios, podemos utilizar el paquete "PhViD" de R para detectar señales.
Es conveniente primero, si no lo han hecho ya, revisar las nociones básicas de tablas de 2 x 2 y el concepto de independencia en las mismas.
Bueno, voy a desarrollar el uso básico de los algoritmos para detección de señales en bases de datos de Eventos Adversos.
Lo primero que necesitamos es tener una tabla con datos para analizar.Las tablas que se utilizan habitualmente son sumamente extensas y esto hace quesea difícil manipular los datos de una forma entendible en primera instancia.Por eso, utilizaré una tabla pequeña con datos ficticios. La tabla puededescargarse del siguiente link: ListitaEventosDroga.
Descargamos y guardamos la tabla en cualquier carpeta, recordando dónde y vamos aimportarla a R.
La importación y exportación de datos a y desde R es una de las tareasmenos intuitivas en este software, pero con algo de práctica se le toma lamano.
Para hacerlo, usaremos la instrucción “read.csv”, la cual permite leerun archivo del tipo “csv” que consta de un archivo de texto común y que tienelos datos de las columnas separados por algún carácter (generalmente una coma,por eso “csv” quiere decir “comma separated variable”) y una línea para cadafila de la tabla.
El método read.csv recibe algunos parámetros. El más importante es elque indica la ruta del archivo a importar. Aquí, lo más importante es entrecomillarla ruta del archivo y que, a diferencia de la forma de indicar la ruta en Windows,se usa el carácter “/” en lugar de “\” para separar los nombres de lascarpetas.
Los otros parámetros que usaremos serán “header = TRUE” que indica quenuestro archivo tiene los títulos de las columnas, y “sep = “,””, indicando queel separador de columnas es la coma. Finalmente, hay que saber queconvertiremos la tabla en un objeto que sea manipulable por el nombre delmismo, asignando la instrucción para importar la tabla a una variable.
La estructura del comando debería seguir este patrón:

variableObjeto = read.csv(“rutaArchivo”, header=TRUE, sep = “,”)

donde “variableObjeto” será reemplazado por el nombre del objeto acrear (el mismo es totalmente arbitrario y pueden elegir el que quieran,siempre y cuando lo recuerden para luego poderlo invocar) y “rutaArchivo” porla ruta para llegar al archivo alojado en el disco. En mi caso la instrucciónserá la siguiente:

x1=read.csv("C:/Users/Francisco/Documents/Repositorios/00-PhVid/listitaeventodroga.csv",header = TRUE, sep = ",")
Ahora podemos visualizar la tabla con solo escribir elnombre del objeto, como en el siguiente ejemplo:
> x1
        Droga    Evento  n
1 lamotrigina   prurito 10
2   omeprazol   prurito  1
3 lamotrigina       tos  1
4   omeprazol   diarrea  1
5    aspirina sialorrea  1
6  ibuprofeno depresion  1

Vemos que R muestra una tabla con 4 columnas. La primera de ellas essolamente una etiqueta con el número de línea, colocado por R, pero no tieneningún valor durante el análisis a realizar. De tal modo, la primer columna útiles la que indica el nombre de la droga, la siguiente la que indica el eventoocurrido, y la última indicando el número de reportes para esa combinaciónDroga-Evento.
Todas las tablas que tengamos que analizar con el paquete “PhViD”deberán tener esta estructura, respetando esas 3 columnas. El número deasociaciones Droga-Evento no tiene limitaciones (a excepción de la memoria delsistema que estemos usando).
Como se puede ver fácilmente, la relación entre los pares Droga-Eventose halla intencionalmente exagerada, resaltando la ocurrencia de uno de ellos(lamotrigina-prurito). Es conveniente repetir que los datos son totalmenteinventados a los fines de este tutorial.
Bueno, como expliqué previamente, al iniciar R se cargan solamente lospaquetes básicos. Para dotar a R de las capacidades que necesitamos hay que cargareste paquete. Escribimos la siguiente instrucción:

> library(PhViD)

Así el paquete se carga en el espacio de trabajo actual y podemosutilizar sus métodos para manipular los objetos creados.

Si les llega a dar algún error avisando que no puede instalar "LBE", tipean lo siguiente:


source("http://bioconductor.org/biocLite.R")
biocLite("LBE")

Y luego vuelven a tipear "library(PhViD)". Con eso debería solucionarse.
Si bien antes dije que la tabla debe tener una estructura determinada,PhViD necesita cambiar el formato que le entregamos para realizar el análisisque queremos. Para esto, tiene el método “as.PhViD”. Como siempre, asignamos elresultado del método a un nuevo objeto, con la siguiente instrucción:

> l1=as.PhViD(x1)

Ahora el objeto “l1” contiene mis datos en un formato que es analizablemediante los métodos que aporta PhViD.
Voy a mostrar los pasos usando la metodología usada por el Uppsala MonitoringCentre, con el algoritmo llamado “Bayes Confidence Propagation Neural Network”(BCPNN). El método a usar es justamente el “BCPNN”. Los mismos pasos puedenusarse para aplicar cualquiera de los otros algoritmos disponibles en elpaquete.
Crearemos un objeto usando el método BCPNN. Podemos nombrar al objetode cualquier manera, yo lo llamaré “bl1.1”. Para ello simplemente pasamos elobjeto “l1” previamente creado, por el método BCPNN asignándolo a la variablenueva.

> bl1.1=BCPNN(l1)
El nuevo objeto creado tiene varios miembros capaces de entregarnos losresultados obtenidos. Si queremos ver los miembros de bl1.1 usamos el método “names”de la siguiente manera.
> names(bl1.1)
[1] "INPUT.PARAM" "ALLSIGNALS"  "SIGNALS"     "NB.SIGNALS"
Los miembros que nos interesan son “SIGNALS” y “ALLSIGNALS”, que nosentregan la lista de pares detectados como señales positivas ordenados porranking y la lista ordenada por ranking de los valores obtenidos para todos lospares, respectivamente.

> bl1.1$SIGNALS

Nos muestra la tabla con las señales positivas:

par
drug code
event effect
count
expected count
post.H0
n11/E
drug margin
event margin
FDR
FNR
Se
Sp
lamotrigina prurito
lamotrigina
prurito
10
8.066666667
0.180741235
1.239669421
11
11
0.180741235
0.735913946
0.222650697
1
Que en nuestro caso consta solamente del par “lamotrigina prurito”. 

A su vez: 
> bl1.1$ALLSIGNALS

par
drug code
event effect
count
expected count
post.H0
n11/E
drug margin
event margin
FDR
FNR
Se
Sp
lamotrigina prurito
lamotrigina
prurito
10
8.066666667
0.180741235
1.239669421
11
11
0.180741235
0.735913946
0.222650697
1
aspirina sialorrea
aspirina
sialorrea
1
0.066666667
0.295550161
15
1
1
0.238145698
0.715077741
0.414099668
0.922108741
ibuprofeno depresion
ibuprofeno
depresion
1
0.066666667
0.295550161
15
1
1
0.257280519
0.718620375
0.605548639
0.794740052
omeprazol diarrea
omeprazol
diarrea
1
0.133333333
0.330254358
7.5
2
1
0.275523979
0.725705643
0.787566019
0.667371363
lamotrigina tos
lamotrigina
tos
1
0.733333333
0.541284471
1.363636364
11
1
0.328676077
0.781665645
0.912231554
0.525046743
omeprazol prurito
omeprazol
prurito
1
1.466666667
0.677049884
0.681818182
2
11
0.386738379
Inf
1
0.29177773
Nos da la tabla con todos los pares ordenados por intensidad de señal. 
Obviamente todos estos números son difíciles de leer, pero analizaremosalguna de las columnas y les mostraré, que en el corazón del método residenmecanismos que ya conocemos. 
En primer lugar, la primera columna contiene las etiquetas con lospares combinados. La segunda y tercera columnas son los nombres de las drogas yeventos, respectivamente. La tercera columna es solamente el número de veces enlas que aparece esa combinación. Hasta aquí, salvo por el orden, no es más quelo que se hallaba contenido en la tabla original. 
La columna “expected count” corresponde a lo que conocemos como “valoresperado” en las tablas de 2 x 2 desarrollado previamente. Para verlo másfácil, construiremos la tabla para el par “lamotrigina prurito”. Necesitamoslas marginales y el total general. Sabemos que el total de reportes es de 15.El número de reportes para ese par es de 10. Continuamos colocando el número dereportes que contienen “prurito” y el número de reportes que  contienen “lamotrigina”. La tabla quedaríaasí:


lamotrigina

si
no
prurito
si
10

11
no




11

15
Podemos ver que estos dos últimos valores son los que estánpresentes en las columnas “drug margin” y “event margin”. Esinteresante que con sólo conocer éstos valores, podemos calcular el resto sinnecesidad de volver a los datos y es por esto que BCPNN solamente guarda estosvalores. La tabla completa sería:


lamotrigina

si
no
prurito
si
10
1
11
no
1
3
4

11
4
15
Sabemos que estos son los “valores observados” y quepodemos calcular a través de ellos los “valores esperados”. Esta vez lo haremossin redondear los números. La tabla es:


lamotrigina

si
no
prurito
si
8.06666667
2.93333333
11
no
2.93333333
1.06666667
4

11
4
15

Chan! Resulta que el valor esperado para la celda correspondiente al par “lamotriginaprurito” es el mismo que el de la columna expected count”. Exactamente lomismo obtendremos calculando las tablas correspondientes a cada par. 
Agregaré que la columna “n11/E” no es nada más que el valor obtenidodividiendo “count” sobre “expected.count”. El resto de las columnas seránanalizadas en entregas posteriores. 




Con esto ya podemos usar el paquete PhViD para generación de señales.Claro que otro tema es que hacer luego de tenerlas, ¿no? 
Bueno, los que se animen, a probar. Espero sus comentarios.

Tags: , ,

Comments are closed.