Selección del mejor punto de diagnóstico en una prueba diagnóstica

La pasada semana, en un examen, me preguntaron cuál era el mejor punto para una prueba diagnóstica; era necesario razonar mi respuesta. Seguramente mi respuesta fue correcta pero mi razonamiento no lo fue y por eso quería redimirme. Para evaluar las pruebas diagnósticas con una respuesta binaria si/no contamos con la sensibilidad y la especificidad. La sensibilidad es la capacidad que tiene la prueba para acertar sobre los que de verdad tiene que acertar, la probabilidad de etiquetar como enfermos aquellos que verdaderamente están enfermos. La especificidad es una medida que nos indica cuanto nos hemos equivocado con los “unos”, la probabilidad de etiquetar enfermos a pacientes sanos. Una forma de medir cuanto acertamos y cuanto nos equivocamos con nuestra prueba. Para analizar el comportamiento de nuestra prueba diagnóstica debemos determinar un punto de corte. Para ilustrar como seleccionar el mejor punto de corte vamos a emplear unos datos sacados de la web de bioestadística del Hospital ramón y Cajal y vamos a elaborar una curva ROC con R y ggplot2. ...

5 de febrero de 2014 · rvaquerizo

Jornadas de R gratuitas en Galicia

Buena iniciativa en la que seguro que algún lector está interesado: http://www.galpon.org/content/2a-xornada-dos-sabados-libres-na-altamar-estatistica-con-r-i En este enlace podéis ver con más detalle el contenido del curso. Saludos.

4 de febrero de 2014 · rvaquerizo

Análisis del discurso de navidad del Rey de España 2013

Me llena de orgullo y satisfacción mostraros un ejemplo de uso de la librería wordcloud para la realización de nubes de palabras con R. Esta entrada no es muy innovadora porque ya tenemos alguna similar en el blog. Lo primero que tenéis que hacer es descargaros el discurso del Rey y ejecutad este código: #Lectura del archivo ubicacion="C:\\temp\\juancar.txt" texto = read.table (ubicacion,sep="\r") #Dejamos todas las palabras en mayúsculas texto = toupper(textoV1) #El texto lo transformamos en una lista separada por espacios texto_split = strsplit(texto, split=" ") #Deshacemos esa lista y tenemos el data.frame texto_col = as.character(unlist(texto_split)) texto_col = data.frame(texto_col) names(texto_col) = c("V1") #Eliminamos algunos caracteres regulares texto_colV1 = sub("([[:space:]])","",texto_colV1) texto_colV1 = sub("([[:digit:]])","",texto_colV1) texto_colV1 = sub("([[:punct:]])","",texto_colV1) #Creamos una variable longitud de la palabra texto_collargo = nchar(texto_colV1) #Quitamos palabras cortas texto_col = subset(texto_col,largo>4) #Nube de palabras #install.packages('wordcloud') library(wordcloud) library(RColorBrewer) pesos = data.frame(table(texto_colV1)) #Paleta de colores pal = brewer.pal(6,"RdYlGn") #Realizamos el gráfico png('C:\\temp\\Discurso del rey españa 2013.png', width=500, height=500) wordcloud(pesosVar1,pesosFreq,scale=c(4,.2),min.freq=2, max.words=Inf, random.order=FALSE,colors=pal,rot.per=.15) dev.off() Interesante el uso de la librería RColorBrewer. Particularmente me gusta mucho el resultado que nos da wordcloud para la realización de las nubes de palabras con una sintaxis sencilla. Considero imprescindible el uso de random.order=FALSE. Espero que os sea de utilidad. ...

26 de diciembre de 2013 · rvaquerizo

Seleccionar un elemento de un objeto de R

Quedarnos con un elemento específico de un objeto en R. Viene de una duda planteada por un lector que surgía a raíz de un post dedicado al p-valor y al tamaño muestral. Jose Ignacio desea almacenar en un objeto el p-valor asociado a un test de Wald para la independencia entre los niveles de un factor. Una sugerencia para poder trabajar con este elemento: ```r y = c(rep(1,200),rep(0,100)) x = c(rep(1,32),rep(0,168),rep(1,15),rep(0,85)) datos = data.frame(cbind(y,x)) table(datos) modelo.1=glm(y~x,data=datos,family=binomial) summary(modelo.1) Para la realización del test de Wald con R vamos a emplear la librería lmtest : ...

23 de diciembre de 2013 · rvaquerizo

Truco (malo) de R. Leer datos desde Excel

Tenemos unos datos en Excel y deseamos crear un objeto en R con ellos. La forma más sencilla es seleccionar y copiar los datos y ejecutar el siguiente código: ```r datos = read.delim("clipboard") str(datos) Muy sencillo, pero necesitaba «fustigarme». Si deseamos llevar los datos de R a Excel (el camino contrario) hacemos: write.table(datos,"clipboard", sep="\t",row.names=FALSE) Igual de sencillo. No hagáis como yo, no olvidéis este código. Saludos.

3 de diciembre de 2013 · rvaquerizo

Ya están en marcha las V Jornadas de R

Una noticia por todos conocida. Ya están en marcha las V Jornadas de R. Esta vez son en Zaragoza el 12 y 13 de diciembre. En el siguiente enlace tenéis toda la información: http://r-es.org/V+Jornadas Creo que no podré ir debido a la política de vacaciones tan anticuada que tienen algunas compañías. Saludos.

23 de julio de 2013 · rvaquerizo

Trabajando con factores en R. Attach frente a within

Un ejemplo de trabajo con datos en R. Transformamos factores de dos formas distintas. Por un lado empleamos within con recode de la librería car y por otro lado empleamos el mítico attach. Manejo de datos con within : ```r datos library(car) datos prog id reconocimientos reconocimientos2 = recode(num_awards,"0='Sin renococimiento';1='1 reconocimiento'; else='Más de un reconocimiento'") }) Manejo de datos con attach/detach : ```r attach(datos) datosmath_cat[math<50 ] <- "D" datosmath_cat[math >= 50 & math < 60] <- "C" datosmath_cat[math >= 60&math<75] <- "B" datosmath_cat[math >= 75] <- "A" datos$math_cat detach(datos) No voy a entrar en que es más óptimo, tarda menos y demás. En mi opinión es mejor utilizar within pacece más «pulcro» y la verdad es que la función recode nos facilita mucho el trabajo pero como siempre tenemos múltiples posibilidades con R, por eso es R. Saludos.

14 de mayo de 2013 · rvaquerizo

Lectura conjunta de “Analyzing Linguistic Data”

Mi compañero y amigo Carlos Gil junto con Victor Peinado van a iniciar un interesante proyecto. Un grupo de lectura del libro Analyzing Linguistic Data: A practical introduction to Statistics desde aquí nos hacemos eco de este proyecto que podéis seguir desde aquí. El calendario del curso es: An Introduction to R: (1 semana, del 6/05 al 12/05) Graphical Data Exploration: (1 semana, del 13/05 al 19/05) Probability Distributions: (1 semana, del 20/05 al 26/05) Basic Statistical Methods: (2 semanas, del 27/05 al 9/06) Clustering and Classification: (2 semanas, del 10/06 al 23/06) Regression Modeling: (2 semanas, del 24/06 al 7/07) Mixed Models: (2 semanas, del 8/07 al 21/07) Será todo un éxito, como las anteriores convocatorias. Saludos.

25 de abril de 2013 · rvaquerizo

Mosaic plot con R

Los gráficos de mosaico (mosaic plot) me gustan cada vez más. Hoy quería confesaros una cosa, no me gustan los gráficos. Sé que en esta bitácora electrónica hay muchos ejemplos de gráficos y muchos trucos referente a ellos. Pero siempre prefiero un dato representado en una tabla. Después de esta confesión voy a rebatirme a mí mismo. Es muy complicado ver algo en una tabla de contingencia cuando tenemos 3 o cuatro dimensiones. Sin embargo con un mosaic plot como el que tenemos arriba somos capaces de estudiar cruces de frecuencia para 3-4 dimensiones. Para hacerlo empleamos R, en concreto el paquete vcd. Para ilustrar el ejemplo con datos nos vamos a la web de un conocido libro para el uso de GLM en seguros. No entramos en muchos detalles, el código es muy simple, si tengo ocasión lo complicaré: ...

23 de abril de 2013 · rvaquerizo

Gráfico de correlaciones entre variables

Los gráficos de correlaciones no me gustan especialmente pero empiezo a verlos en algunas presentaciones. En R tenemos algunos ejemplos interesantes pero con códigos que, bajo mi prisma, son complejos. Por este motivo me he puesto manos a la obra para realizar este gráfico de correlaciones con un código lo más sencillo posible. Para ello vamos a emplear ggplot2: library(ggplot2) datos = cor(mtcars) datos.lista = melt(datos) names(datos.lista)=c("Variable_1","Variable_2","Correlacion") escala = seq(-1,1,0.1) Vamos a emplear el famoso conjunto de datos mtcars para ilustrar el ejemplo. Con él creamos la matriz de correlaciones pero esta matriz la hemos de transformar en una lista, para ello empleamos la función melt del paquete reshape, en este punto hemos pasado de una matriz de correlaciones a una lista con pares de variables y su correspondiente coeficiente de correlación. A esta lista le asignamos los nombres que deseamos con la función names y por último generamos un vector que denominamos escala que nos permitirá establecer los colores que deseamos utilizar cuando pintemos nuestra matriz de correlaciones. ...

20 de febrero de 2013 · rvaquerizo