Pedro Concejero Cerezo
2014-Jun-23 14:32 UTC
[R-es] Resumen de R-help-es, Vol 64, Envío 33
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-request@r-project.org<mailto:r-help-es-request@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 +0000 From: Marta valdes lopez <martavaldes85@gmail.com><mailto:martavaldes85@gmail.com> To: r-help-es@r-project.org<mailto:r-help-es@r-project.org> Subject: [R-es] Como construir una curva ROC Message-ID: <CAE0cxbGAk4Uu6aphBES0OdVyB10X2sdmkc-4aLp0H96-uAsXHw@mail.gmail.com><mailto:CAE0cxbGAk4Uu6aphBES0OdVyB10X2sdmkc-4aLp0H96-uAsXHw@mail.gmail.com> 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 obtener lo que quiero, si alguien me puede orientar un poco, agradeceria. Adjunto mis datos para tener una idea. Muchas gracias, un saludo ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140620/49a6085b/attachment.html><https://stat.ethz.ch/pipermail/r-help-es/attachments/20140620/49a6085b/attachment.html> ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: amanhecer ROC csv.csv Type: text/csv Size: 51489 bytes Desc: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140620/49a6085b/attachment.bin><https://stat.ethz.ch/pipermail/r-help-es/attachments/20140620/49a6085b/attachment.bin> ------------------------------ _______________________________________________ R-help-es mailing list R-help-es@r-project.org<mailto:R-help-es@r-project.org> https://stat.ethz.ch/mailman/listinfo/r-help-es Fin de Resumen de R-help-es, Vol 64, Envío 33 ********************************************* -- Pedro Concejero BI & Big Data - Internal Exploitation - Telefónica CCDO & Telefónica I+D<http://www.tid.es> E-mail: pedro.concejero@tid.es<mailto:pedro.concejero@tid.es> skype: pedro.concejero twitter: @ConcejeroPedro linkedin <http://www.linkedin.com/in/pedroconcejero/es> Únete a la lista R en español<https://stat.ethz.ch/mailman/listinfo/r-help-es#%21> y a tu gRupo local R, el mío es el gRupo R madRid <http://r-es.org/Grupo+de+Inter%C3%A9s+Local+de+Madrid+-+GIL+Madrid&structure=Comunidad> ________________________________ Este mensaje se dirige exclusivamente a su destinatario. Puede consultar nuestra política de envío y recepción de correo electrónico en el enlace situado más abajo. This message is intended exclusively for its addressee. We only send and receive email on the basis of the terms set out at: http://www.tid.es/ES/PAGINAS/disclaimer.aspx [[alternative HTML version deleted]]
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 <pedroc@tid.es> 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-request@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 +0000 > From: Marta valdes lopez <martavaldes85@gmail.com> <martavaldes85@gmail.com> > To: r-help-es@r-project.org > Subject: [R-es] Como construir una curva ROC > Message-ID: > <CAE0cxbGAk4Uu6aphBES0OdVyB10X2sdmkc-4aLp0H96-uAsXHw@mail.gmail.com> <CAE0cxbGAk4Uu6aphBES0OdVyB10X2sdmkc-4aLp0H96-uAsXHw@mail.gmail.com> > 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 obtener lo que quiero, si alguien me puede > orientar un poco, agradeceria. > > Adjunto mis datos para tener una idea. > > Muchas gracias, un saludo > ------------ próxima parte ------------ > Se ha borrado un adjunto en formato HTML... > URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140620/49a6085b/attachment.html> <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140620/49a6085b/attachment.html> > ------------ próxima parte ------------ > A non-text attachment was scrubbed... > Name: amanhecer ROC csv.csv > Type: text/csv > Size: 51489 bytes > Desc: no disponible > URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140620/49a6085b/attachment.bin> <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140620/49a6085b/attachment.bin> > > ------------------------------ > > _______________________________________________ > R-help-es mailing listR-help-es@r-project.orghttps://stat.ethz.ch/mailman/listinfo/r-help-es > > > Fin de Resumen de R-help-es, Vol 64, Envío 33 > ********************************************* > > > > -- > > > > > > > *Pedro Concejero BI & Big Data - Internal Exploitation - Telefónica CCDO & > Telefónica I+D <http://www.tid.es> E-mail: pedro.concejero@tid.es > <pedro.concejero@tid.es> skype: pedro.concejero twitter: @ConcejeroPedro > linkedin <http://www.linkedin.com/in/pedroconcejero/es> Únete a la lista R > en español <https://stat.ethz.ch/mailman/listinfo/r-help-es#%21> y a tu > gRupo local R, el mío es el gRupo R madRid > <http://r-es.org/Grupo+de+Inter%C3%A9s+Local+de+Madrid+-+GIL+Madrid&structure=Comunidad>* > > ------------------------------ > > Este mensaje se dirige exclusivamente a su destinatario. Puede consultar > nuestra política de envío y recepción de correo electrónico en el enlace > situado más abajo. > This message is intended exclusively for its addressee. We only send and > receive email on the basis of the terms set out at: > http://www.tid.es/ES/PAGINAS/disclaimer.aspx >[[alternative HTML version deleted]]
Hola, Gracias, me funciono¡ Echare un vistazo a lo de hacer las ROC dinamicas. Gracias por la ayuda, un saludo El 23 de junio de 2014, 16:42, Marta valdes lopez <martavaldes85@gmail.com> escribió:> 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 <pedroc@tid.es> > 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-request@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 +0000 >> From: Marta valdes lopez <martavaldes85@gmail.com> <martavaldes85@gmail.com> >> To: r-help-es@r-project.org >> Subject: [R-es] Como construir una curva ROC >> Message-ID: >> <CAE0cxbGAk4Uu6aphBES0OdVyB10X2sdmkc-4aLp0H96-uAsXHw@mail.gmail.com> <CAE0cxbGAk4Uu6aphBES0OdVyB10X2sdmkc-4aLp0H96-uAsXHw@mail.gmail.com> >> 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 obtener lo que quiero, si alguien me puede >> orientar un poco, agradeceria. >> >> Adjunto mis datos para tener una idea. >> >> Muchas gracias, un saludo >> ------------ próxima parte ------------ >> Se ha borrado un adjunto en formato HTML... >> URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140620/49a6085b/attachment.html> <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140620/49a6085b/attachment.html> >> ------------ próxima parte ------------ >> A non-text attachment was scrubbed... >> Name: amanhecer ROC csv.csv >> Type: text/csv >> Size: 51489 bytes >> Desc: no disponible >> URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140620/49a6085b/attachment.bin> <https://stat.ethz.ch/pipermail/r-help-es/attachments/20140620/49a6085b/attachment.bin> >> >> ------------------------------ >> >> _______________________________________________ >> R-help-es mailing listR-help-es@r-project.orghttps://stat.ethz.ch/mailman/listinfo/r-help-es >> >> >> Fin de Resumen de R-help-es, Vol 64, Envío 33 >> ********************************************* >> >> >> >> -- >> >> >> >> >> >> >> *Pedro Concejero BI & Big Data - Internal Exploitation - Telefónica CCDO >> & Telefónica I+D <http://www.tid.es> E-mail: pedro.concejero@tid.es >> <pedro.concejero@tid.es> skype: pedro.concejero twitter: @ConcejeroPedro >> linkedin <http://www.linkedin.com/in/pedroconcejero/es> Únete a la lista R >> en español <https://stat.ethz.ch/mailman/listinfo/r-help-es#%21> y a tu >> gRupo local R, el mío es el gRupo R madRid >> <http://r-es.org/Grupo+de+Inter%C3%A9s+Local+de+Madrid+-+GIL+Madrid&structure=Comunidad>* >> >> ------------------------------ >> >> Este mensaje se dirige exclusivamente a su destinatario. Puede consultar >> nuestra política de envío y recepción de correo electrónico en el enlace >> situado más abajo. >> This message is intended exclusively for its addressee. We only send and >> receive email on the basis of the terms set out at: >> http://www.tid.es/ES/PAGINAS/disclaimer.aspx >> > >[[alternative HTML version deleted]]