Category: Spanish

Yo tengo un PhViD

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 que sea difícil manipular los datos de una forma entendible en primera instancia. Por eso, utilizaré una tabla pequeña con datos ficticios. La tabla puede descargarse del siguiente link: ListitaEventosDroga.
Descargamos y guardamos la tabla en cualquier carpeta, recordando dónde y vamos a importarla a R.
La importación y exportación de datos a y desde R es una de las tareas menos intuitivas en este software, pero con algo de práctica se le toma la mano.
Para hacerlo, usaremos la instrucción “read.csv”, la cual permite leer un archivo del tipo “csv” que consta de un archivo de texto común y que tiene los 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 cada fila de la tabla.
El método read.csv recibe algunos parámetros. El más importante es el que indica la ruta del archivo a importar. Aquí, lo más importante es entrecomillar la 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 las carpetas.
Los otros parámetros que usaremos serán “header = TRUE” que indica que nuestro archivo tiene los títulos de las columnas, y “sep = “,””, indicando que el separador de columnas es la coma. Finalmente, hay que saber que convertiremos la tabla en un objeto que sea manipulable por el nombre del mismo, 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 a crear (el mismo es totalmente arbitrario y pueden elegir el que quieran, siempre y cuando lo recuerden para luego poderlo invocar) y “rutaArchivo” por la ruta para llegar al archivo alojado en el disco. En mi caso la instrucción será 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 el nombre 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 es solamente una etiqueta con el número de línea, colocado por R, pero no tiene ningún valor durante el análisis a realizar. De tal modo, la primer columna útil es la que indica el nombre de la droga, la siguiente la que indica el evento ocurrido, y la última indicando el número de reportes para esa combinación Droga-Evento.
Todas las tablas que tengamos que analizar con el paquete “PhViD” deberán tener esta estructura, respetando esas 3 columnas. El número de asociaciones Droga-Evento no tiene limitaciones (a excepción de la memoria del sistema que estemos usando).
Como se puede ver fácilmente, la relación entre los pares Droga-Evento se halla intencionalmente exagerada, resaltando la ocurrencia de uno de ellos (lamotrigina-prurito). Es conveniente repetir que los datos son totalmente inventados a los fines de este tutorial.
Bueno, como expliqué previamente, al iniciar R se cargan solamente los paquetes básicos. Para dotar a R de las capacidades que necesitamos hay que cargar este paquete. Escribimos la siguiente instrucción:
> library(PhViD)
Así el paquete se carga en el espacio de trabajo actual y podemos utilizar 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álisis que queremos. Para esto, tiene el método “as.PhViD”. Como siempre, asignamos el resultado 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 analizable mediante los métodos que aporta PhViD.
Voy a mostrar los pasos usando la metodología usada por el Uppsala Monitoring Centre, con el algoritmo llamado “Bayes Confidence Propagation Neural Network” (BCPNN). El método a usar es justamente el “BCPNN”. Los mismos pasos pueden usarse para aplicar cualquiera de los otros algoritmos disponibles en el paquete.
Crearemos un objeto usando el método BCPNN. Podemos nombrar al objeto de cualquier manera, yo lo llamaré “bl1.1”. Para ello simplemente pasamos el objeto “l1” previamente creado, por el método BCPNN asignándolo a la variable nueva.
> bl1.1=BCPNN(l1)
El nuevo objeto creado tiene varios miembros capaces de entregarnos los resultados 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 nos entregan la lista de pares detectados como señales positivas ordenados por ranking y la lista ordenada por ranking de los valores obtenidos para todos los pares, 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 analizaremos alguna de las columnas y les mostraré, que en el corazón del método residen mecanismos que ya conocemos. 
En primer lugar, la primera columna contiene las etiquetas con los pares combinados. La segunda y tercera columnas son los nombres de las drogas y eventos, respectivamente. La tercera columna es solamente el número de veces en las que aparece esa combinación. Hasta aquí, salvo por el orden, no es más que lo que se hallaba contenido en la tabla original. 
La columna “expected count” corresponde a lo que conocemos como “valor esperado” en las tablas de 2 x 2 desarrollado previamente. Para verlo más fácil, construiremos la tabla para el par “lamotrigina prurito”. Necesitamos las 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 de reportes que contienen “prurito” y el número de reportes que  contienen “lamotrigina”. La tabla quedaría así:


lamotrigina
si
no
prurito
si
10
11
no
11
15

Podemos ver que estos dos últimos valores son los que están presentes en las columnas “drug margin” y “event margin”. Es interesante que con sólo conocer éstos valores, podemos calcular el resto sin necesidad de volver a los datos y es por esto que BCPNN solamente guarda estos valores. 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 que podemos calcular a través de ellos los “valores esperados”. Esta vez lo haremos sin 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 “lamotrigina prurito” es el mismo que el de la columna expected count”. Exactamente lo mismo obtendremos calculando las tablas correspondientes a cada par. 
Agregaré que la columna “n11/E” no es nada más que el valor obtenido dividiendo “count” sobre “expected.count”. El resto de las columnas serán analizadas 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.


Yo tengo un PhViD

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 …

Paquetísimo!

Figura 1El programa R tiene funciones básicas que se encuentran enlos paquetes estándar que vienen con el mismo. Para extender estas funciones sedeben instalar paquetes que se descargan a través de internet. El número deestos paquetes es sumamente …

Paquetísimo!

Figura 1
El programa R tiene funciones básicas que se encuentran en los paquetes estándar que vienen con el mismo. Para extender estas funciones se deben instalar paquetes que se descargan a través de internet. El número de estos paquetes es sumamente extenso y crece día a día. Instalaremos el paquete para búsqueda de señales en Farmacovigilancia denominado “PhViD”.
Figura 2
Lo primero es seleccionar la opción “Instalar paquetes…” del menú “Paquetes” (Figura 1). Luego de hacerlo, aparece una ventana para elegir el repositorio desde donde descargar los paquetes (Figura 2). Esto es así, porque existen múltiples servidores en el mundo que alojan el listado de los paquetes de R. En general lo mejor es elegir un servidor geográficamente cercano pues esto hará que la descarga sea más rápida, aunque puede suceder que alguno de ellos no tenga listado un determinado paquete. Si esto ocurriera habría que cambiar de repositorio.
Figura 3
Luego de seleccionar el repositorio y dar OK, aparecerá la lista de paquetes propiamente dicha, se hallan ordenados alfabéticamente y utilizando la barra de desplazamiento podremos llegar al que estamos buscando que en este caso es “PhViD” (Figura 3). Lo seleccionamos y damos OK. Se realizará la instalación automática del paquete mientras en la consola de R aparecerán líneas que así lo indican (Figura 4) hasta que nuevamente aparecerá el símbolo de  línea de comandos “>”.
Figura 4
Luego de esto, podemos comenzar a utilizar las funciones del paquete. Hay que saber que cualquier paquete para ser utilizado debe cargarse en el espacio de trabajo de R independientemente de que se halle instalado. Esto lo veremos desarrollado en el post específico de utilización de PhViD.

R con R

Res un programa estadístico. Probablemente sea el programa más comúnmente usado en ámbitosacadémicos, pero su uso está creciendo exponencialmente y extendiendoel tipo de usuarios de académicos a empresariales o gubernamentales, porejemplo.Su ven…

R con R

R es un programa estadístico. Probablemente sea el programa más comúnmente usado en ámbitos académicos, pero su uso está creciendo exponencialmente y extendiendo el tipo de usuarios de académicos a empresariales o gubernamentales, por ejemplo.
Su ventaja principal es que se trata de software “open source”. Esto quiere decir que además de ser gratuito, cualquiera (bueno, cualquiera que sepa un poco de programación) pueda hacer programitas que funcionen dentro de R, que realicen tareas específicas que antes no se realizaban o modificar los que ya estaban hechos, y distribuirlos como “paquetes” que pueden agregarse al programa como extensiones del mismo. Así hay programas que realizan desde cálculos complejos hasta gráficos impactantes difíciles de crear con otro software.
Esto hizo que en los últimos años la actividad de creación y distribución de paquetes explotara y puede decirse que prácticamente cualquier técnica estadística que uno pueda leer en una publicación, tiene al menos una implementación en R.
La Farmacovigilancia no se quedó afuera de este movimiento, ya que existe un paquete específico para realizar detección de señales llamado “PhViD”.
Las desventajas de R tienen que ver con que su interfase no es amigable ni intuitiva y que si uno tiende grandes volúmenes de datos (digamos, millones de casos), tiende a volverse lento e ineficiente. Esto último puede mejorarse mediante algunos trucos o variantes del programa madre.
Para aquellos a los que nos gustan los datos, la falta de amigabilidad de R se compensa ampliamente con la capacidad de hacer prácticamente cualquier cosa.
Si quieren ir teniendo un panorama de las capacidades gráficas de R, pueden visitar diferentes galerías que aparecen en Internet, como: http://addictedtor.free.fr/graphiques/
O http://research.stowers-institute.org/efg/R/
Los que quieran tener una idea de todo lo que se puede hacer con R, pueden visitar el excelente blog R-bloggers dedicado solamente a él.
Bueno, veremos cómo descargar e instalar R y nociones básicas para operarlo.
Descarga
La página oficial es http://cran.r-project.org/
Desde ahí puede descargarse el instalador. Si eligen la versión para Windows, les dará 2 opciones. Deben elegir la “base” y allí los llevará al link para descargar la última versión.
Instalación
Luego de descargado, le dan doble click al archivo y siguen las instrucciones. Les sugiero que acepten todas las opciones que les da por defecto y no se metan a hacer cambios hasta que conozcan del tema, ya que cualquier opción que hayan elegido durante la instalación puede luego ser cambiada.
Primeros pasos
Voy a mostrar las reglas generales para manejarse en R. No se asusten, al principio es bastante intimidante. Van a ver que después de un rato se van acostumbrando.
Primero que nada, hagamos una operación básica. Escribimos “2+3” y presionamos “Enter”. 
> 2+3 
[1] 5 
El símbolo “>” está siempre al comienzo de una línea en blanco en la consola, la cual se denomina “línea de comando”, y nos indica en qué lugar escribir. 
Lo que sigue son los comandos en sí. Como ven, el hecho de que haya espacios o no entre números y operadores no tiene ninguna importancia. Si están, es para mayor legibilidad. 
La segunda línea muestra el resultado de la operación y vemos que consta de 2 partes. La primera parte es “[1]” y solamente indica el número de elemento correspondiente al primero de la línea.

 

La segunda parte es el resultado en sí, que en este caso es igual a 5.
Ahora bien, seguramente al hacer operaciones más extensas que la suma anterior querremos guardar el resultado para poder usarlo más tarde. Para eso se crea un “objeto” que lo contenga. En principio, el concepto de objeto es similar al concepto de variable. De tal modo, podemos asignar el resultado de la operación anterior a un objeto de la siguiente manera:
> x=2+3
Ahora “x” contiene el resultado de la operación anterior. Cada vez que necesitemos usar ese valor, podemos hacerlo usando su nombre o sea “x”:
> x
[1] 5
Podríamos crear otro objeto con otro valor, por ejemplo:
> y=5+8
> y
[1] 13
Y luego hacer operaciones con esos objetos, por ejemplo:
> y-x
[1] 8
Las variables x e y son objetos de R. Los objetos en R pueden contener todo tipo de elementos y muchas veces contienen varios tipos. Si queremos ver la lista de objetos que estamos usando en la sesión de R podemos usar el método “objects” de la siguiente manera: 
> objects()
[1] "x" "y"
Los métodos se escriben con paréntesis al final. Vemos que este método nos devuelve la lista de objetos en memoria, que está constituida por los elementos, “x” e “y”. El concepto de objeto es bastante complejo en un principio, pero baste decir que pueden albergar diferente tipo de contenidos, no solamente valores sino tablas, listados, matrices, funciones y mucho más. Veremos otros alcances del concepto cuando esto sea necesario.

Para reutilizar comandos anteriores y no tener que tipearlos cada vez que son requeridos, R guarda un historial en memoria. Este historial puede rememorarse usando las flechas del teclado hacia arriba o abajo. Cada vez que presionamos hacia arriba aparece la siguiente instrucción escrita, en el orden inverso en que fueron introducidas. Si queremos reutilizarla presionamos “Enter”. También podemos editarla antes de utilizarla.

También es importante saber que R es sensible a mayúsculas (“case sensitive”). Por ejemplo, no es lo mismo escribir “Objects()” que “objects()”, ni “x” que “X”.

Lo último que explicaré es que cada vez que abrimos una sesión de R, se crea un ambiente que se llama “espacio de trabajo” o “workspace” en inglés. Este workspace contiene todos los objetos y el historial de comandos utilizados. Al finalizar la sesión, R pregunta si queremos guardarla, si decimos que sí guarda todo el contenido del workspace y los objetos estarán allí al reiniciar R.
 

Si esto les parece interesante, ya saben…
Comenten que es bienvenido. 😉

.aR Primer gurpo de usuarios de R en Argentina

Por suerte hace poco se formó el primer grupo de usuarios de R de Argentina por iniciativa de Juan pablo Braña. La primer reunión está prevista para noviembre. Esperemos que se sume gente y se forme algo interesante.Para los que esten interesado, p…

Mapeando las primarias 2011

Una de las cosas que mas me atraen de R, es su capacidad gráfica, y lo (relativamente) fácil que es crear ciertas visualizaciones.Lamentablemente los resultados de las elecciones primarias fueron levantados de la web, supongo que habrá que esperar a…