Re: [R-es] Como construir una curva ROC

2014-06-23 Thread Marta valdes lopez
Hola,

Muchas gracias buen aporte, voy a intentar adaptarlo a mis datos.

Gracias, un saludo


El 20 de junio de 2014, 15:32, Carlos Ortega 
escribió:

> Hola,
>
> En la sesión del 27-feb del "Grupo de Usuarios de R de Madrid" (
> http://r-es.org/GILMadrid), Pedro Concejero dio una charla justamente de
> estos dos paquetes, de sus ventajas e inconvenientes.
>
> La sesión está grabada en video...
> https://vimeo.com/87840245
> https://vimeo.com/87841416
>
> Y el material de su presentación está aqui:
> http://r-es.org/tiki-download_file.php?fileId=1192
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
>
>
> El 20 de junio de 2014, 14:11, Marta valdes lopez  > escribió:
>
>> Hola!
>>
>> Tengo que hacer una curva ROC com unos datos que obtuve de hacer una
>> macro de excel y aplicar unas reglas, y basicamente tengo que a partir de
>> la variacion del tiempo y la velocidad del barco obtengo diferentes
>> porcentajes de true positives (TP) y false positives (FP) y con eso deberia
>> de construir una curva ROC.
>>
>> Dada mi ignorância en este tema, no se muy bien por donde empezar ,
>> estuve mirando los manuales de dos paquetes el ROCR y el pROC, alguien me
>> recomienda alguno en particular?
>>
>> Yen los manuales el script del ROCR para hacer la curva era algo asi:
>>
>> library(ROCR)
>> data(ROCR.simple)
>> pred <- prediction( ROCR.simple$predictions, ROCR.simple$labels)
>> perf <- performance(pred,"tpr","fpr")
>> plot(perf)
>> ## precision/recall curve (x-axis: recall, y-axis: precision)
>> perf1 <- performance(pred, "prec", "rec")
>> plot(perf1)
>> ## sensitivity/specificity curve (x-axis: specificity,
>> ## y-axis: sensitivity)
>> perf1 <- performance(pred, "sens", "spec")
>> plot(perf1)
>>
>> Me parecio mas fácil de entender que el del otro paquete pero no se como
>> aplicarlo a mis datos y si voy a obtener lo que quiero, si alguien me puede
>> orientar un poco, agradeceria.
>>
>> Adjunto mis datos para tener una idea.
>>
>> Muchas gracias, un saludo
>>
>> ___
>> R-help-es mailing list
>> R-help-es@r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>

[[alternative HTML version deleted]]

___
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es


Re: [R-es] Resumen de R-help-es, Vol 64, Envío 33

2014-06-23 Thread Pedro Concejero Cerezo
Hola, Marta,
Por lo que he podido ver tus datos ya tienen calculados las tasas de verdaderos 
y falsos positivos (TPR y FPR). También parece que los tienes ordenados por la 
variable FishSpeed y supongo que también por las que parecen marcas de tiempo. 
No necesitas ROCR porque con un simple plot te sale algo parecido a una curva. 
Eso sí, veo que son medidas repetidas en el tiempo para cada valor de 
FishSpeed. Como apaño rápido he promediado por esa variable para que salga algo 
parecido a una curva ROC, lo podrás hacer con el código que pongo abajo.
Te cuento hasta donde sé lo que se puede hacer a partir de aquí:
- Las librerías especializadas en ROC (ROCR y pROC) suponen que tú le pasas 
cada registro y un resultado 0/1 (fallo/acierto) de tal manera que es la propia 
librería la que se encarga de calcular TPR, FPR (entre otros muchos indicadores 
como los que pones en tu código -ojo que FPR es (1-specificity). Con ese 
cálculo se genera un objeto R que facilita luego el dibujo, así como el cálculo 
de área bajo la curva, etc. Así que si tienes los datos en bruto ambas 
librerías te facilitarán mucho todo el proceso.
- Tanto ROCR como pROC incorporan funciones para ROC estáticas (las medidas no 
son repetidas en el tiempo, se suponen casos independientes). ROCR genera 
gráficos más vistosos (va en gustos y depende de muchas cosas, ojo) y quizás 
sea más fácil de usar. pROC añade montones de funciones para comparar y pruebas 
estadísticas para comparar las curvas entre ellas y frente a la predicción nula 
(la diagonal en el espacio ROC).
Según parece, tus datos son dinámicos (se repiten en intervalos para cada 
medida de FIshSpeed), y si lo que quieres es modelizar ROC dinámicas hay 
alternativas en R (pero este enfoque es mucho más complicado que el de ROC 
estática):
- el paquete survivalROC  
http://cran.r-project.org/web/packages/survivalROC/survivalROC.pdf
- y risksetROC http://cran.r-project.org/web/packages/risksetROC/risksetROC.pdf

El siguiente artículo sobre pROC está muy bien para ver las capacidades de la 
librería: http://www.biomedcentral.com/1471-2105/12/77

 con tus datos
# Pon tu directorio de trabajo
setwd("C:/Users/pedroc/Downloads")

list.files()

# Lees el fichero, ojo al separador decimal
rocdata <- read.table(file = "roc.csv",
  header = T,
  sep = ";",
  dec = ",")

# Convertimos los FP Y TP a porcentajes entre 0 y 1
rocdata$FP <- gsub("%", "", rocdata$FP)
rocdata$FP <- gsub(",", ".", rocdata$FP)
rocdata$FP <- as.numeric(rocdata$FP)/100


rocdata$TP <- gsub("%", "", rocdata$TP)
rocdata$TP <- gsub(",", ".", rocdata$TP)
rocdata$TP <- as.numeric(rocdata$TP)/100

# Resulta interesante tener FishSpeed como factor
rocdata$FishSpeed <- as.factor(rocdata$FishSpeed)
summary(rocdata)

# Estas son tus curvas ROC tal y como vienen ordenadas (por FishSpeed y supongo 
que por alguna de tiempo)
# Fíjate que *no* necesitas ROCR
plot(rocdata$FP, rocdata$TP)


# Si promediamos todas las medidas dentro de cada FishSpeed tendremos:
TPaverage <- tapply(rocdata$TP, rocdata$FishSpeed, mean)
FPaverage <- tapply(rocdata$FP, rocdata$FishSpeed, mean)

plot.new()
plot(FPaverage, TPaverage,
 xlim = c(0,1),
 ylim = c(0,1),
 col = "green",
 type = "l")

abline(0, 1, col = "red")


El 20/06/2014 14:12, 
r-help-es-requ...@r-project.org 
escribió:


Asuntos del día:

   1. Como construir una curva ROC (Marta valdes lopez)


--

Message: 1
Date: Fri, 20 Jun 2014 12:11:56 +
From: Marta valdes lopez 

To: r-help-es@r-project.org
Subject: [R-es] Como construir una curva ROC
Message-ID:


Content-Type: text/plain; charset="utf-8"

Hola!

Tengo que hacer una curva ROC com unos datos que obtuve de hacer una macro
de excel y aplicar unas reglas, y basicamente tengo que a partir de la
variacion del tiempo y la velocidad del barco obtengo diferentes
porcentajes de true positives (TP) y false positives (FP) y con eso deberia
de construir una curva ROC.

Dada mi ignorância en este tema, no se muy bien por donde empezar , estuve
mirando los manuales de dos paquetes el ROCR y el pROC, alguien me
recomienda alguno en particular?

Yen los manuales el script del ROCR para hacer la curva era algo asi:

library(ROCR)
data(ROCR.simple)
pred <- prediction( ROCR.simple$predictions, ROCR.simple$labels)
perf <- performance(pred,"tpr","fpr")
plot(perf)
## precision/recall curve (x-axis: recall, y-axis: precision)
perf1 <- performance(pred, "prec", "rec")
plot(perf1)
## sensitivity/specificity curve (x-axis: specificity,
## y-axis: sensitivity)
perf1 <- performance(pred, "sens", "spec")
plot(perf1)

Me parecio mas fácil de entender que el del otro paquete pero no se como
aplicarlo a mis datos y si voy a obt

Re: [R-es] Resumen de R-help-es, Vol 64, Envío 33

2014-06-23 Thread Marta valdes lopez
Hola Pedro,

Muchisimas gracias por tu respuesta, me há aclarado mucho. Es  lo que veia
que ya tenia esas tasas en realidad.
Voy a probar lo que me dices y te cuento.

Gracias! un saludo

Marta


El 23 de junio de 2014, 14:32, Pedro Concejero Cerezo 
escribió:

>  Hola, Marta,
> Por lo que he podido ver tus datos ya tienen calculados las tasas de
> verdaderos y falsos positivos (TPR y FPR). También parece que los tienes
> ordenados por la variable FishSpeed y supongo que también por las que
> parecen marcas de tiempo. No necesitas ROCR porque con un simple plot te
> sale algo parecido a una curva. Eso sí, veo que son medidas repetidas en el
> tiempo para cada valor de FishSpeed. Como apaño rápido he promediado por
> esa variable para que salga algo parecido a una curva ROC, lo podrás hacer
> con el código que pongo abajo.
> Te cuento hasta donde sé lo que se puede hacer a partir de aquí:
> - Las librerías especializadas en ROC (ROCR y pROC) suponen que tú le
> pasas cada registro y un resultado 0/1 (fallo/acierto) de tal manera que es
> la propia librería la que se encarga de calcular TPR, FPR (entre otros
> muchos indicadores como los que pones en tu código -ojo que FPR es
> (1-specificity). Con ese cálculo se genera un objeto R que facilita luego
> el dibujo, así como el cálculo de área bajo la curva, etc. Así que si
> tienes los datos en bruto ambas librerías te facilitarán mucho todo el
> proceso.
> - Tanto ROCR como pROC incorporan funciones para ROC estáticas (las
> medidas no son repetidas en el tiempo, se suponen casos independientes).
> ROCR genera gráficos más vistosos (va en gustos y depende de muchas cosas,
> ojo) y quizás sea más fácil de usar. pROC añade montones de funciones para
> comparar y pruebas estadísticas para comparar las curvas entre ellas y
> frente a la predicción nula (la diagonal en el espacio ROC).
> Según parece, tus datos son dinámicos (se repiten en intervalos para cada
> medida de FIshSpeed), y si lo que quieres es modelizar ROC dinámicas hay
> alternativas en R (pero este enfoque es mucho más complicado que el de ROC
> estática):
> - el paquete survivalROC
> http://cran.r-project.org/web/packages/survivalROC/survivalROC.pdf
> - y risksetROC
> http://cran.r-project.org/web/packages/risksetROC/risksetROC.pdf
>
> El siguiente artículo sobre pROC está muy bien para ver las capacidades de
> la librería: http://www.biomedcentral.com/1471-2105/12/77
>
>  con tus datos
> # Pon tu directorio de trabajo
> setwd("C:/Users/pedroc/Downloads")
>
> list.files()
>
> # Lees el fichero, ojo al separador decimal
> rocdata <- read.table(file = "roc.csv",
>   header = T,
>   sep = ";",
>   dec = ",")
>
> # Convertimos los FP Y TP a porcentajes entre 0 y 1
> rocdata$FP <- gsub("%", "", rocdata$FP)
> rocdata$FP <- gsub(",", ".", rocdata$FP)
> rocdata$FP <- as.numeric(rocdata$FP)/100
>
>
> rocdata$TP <- gsub("%", "", rocdata$TP)
> rocdata$TP <- gsub(",", ".", rocdata$TP)
> rocdata$TP <- as.numeric(rocdata$TP)/100
>
> # Resulta interesante tener FishSpeed como factor
> rocdata$FishSpeed <- as.factor(rocdata$FishSpeed)
> summary(rocdata)
>
> # Estas son tus curvas ROC tal y como vienen ordenadas (por FishSpeed y
> supongo que por alguna de tiempo)
> # Fíjate que *no* necesitas ROCR
> plot(rocdata$FP, rocdata$TP)
>
>
> # Si promediamos todas las medidas dentro de cada FishSpeed tendremos:
> TPaverage <- tapply(rocdata$TP, rocdata$FishSpeed, mean)
> FPaverage <- tapply(rocdata$FP, rocdata$FishSpeed, mean)
>
> plot.new()
> plot(FPaverage, TPaverage,
>  xlim = c(0,1),
>  ylim = c(0,1),
>  col = "green",
>  type = "l")
>
> abline(0, 1, col = "red")
>
>
> El 20/06/2014 14:12, r-help-es-requ...@r-project.org escribió:
>
> Asuntos del día:
>
>1. Como construir una curva ROC (Marta valdes lopez)
>
>
> --
>
> Message: 1
> Date: Fri, 20 Jun 2014 12:11:56 +
> From: Marta valdes lopez  
> To: r-help-es@r-project.org
> Subject: [R-es] Como construir una curva ROC
> Message-ID:
>
> 
> Content-Type: text/plain; charset="utf-8"
>
> Hola!
>
> Tengo que hacer una curva ROC com unos datos que obtuve de hacer una macro
> de excel y aplicar unas reglas, y basicamente tengo que a partir de la
> variacion del tiempo y la velocidad del barco obtengo diferentes
> porcentajes de true positives (TP) y false positives (FP) y con eso deberia
> de construir una curva ROC.
>
> Dada mi ignorância en este tema, no se muy bien por donde empezar , estuve
> mirando los manuales de dos paquetes el ROCR y el pROC, alguien me
> recomienda alguno en particular?
>
> Yen los manuales el script del ROCR para hacer la curva era algo asi:
>
> library(ROCR)
> data(ROCR.simple)
> pred <- prediction( ROCR.simple$predictions, ROCR.simple$labels)
> perf <- performance(pred,"tpr","fpr")
> plot(perf)
> ## precision/recall curve (x-axis: recall, y