Tu fichero tiene los decimales como puntos y no como comas como tu le indicas. Te dejo un ejemplo #--------------------------------------------------------------------------------------------------------------------- setwd(dir="c:/Users/usuario/Desktop/") library(outliers) filename<-"timediff.csv" time<-read.csv(filename, sep=";",header=TRUE,dec=".") # Esto es lo que has de cambiar chisq.out.test(time$TimeDiff) # Ayuda adicional #--------------------------------------------------------------------- # Si no supones normalidad #--------------------------------------------------------------------- time.without.outs <- data.frame(row.names= 1:dim(time)[1], dif = time ) x <- boxplot(time.without.outs$TimeDiff,range= 1.5) # Quita los outliers que se van más de 1.5 rangos itercuartilicios. Puedes poner otro criterio pero este es el habitual time.without.outs$out.rg <- F time.without.outs[ time.without.outs$TimeDiff %in% x$out,]$out.rg <- T # Localizamos los outliers con la condición elegida time.without.outs$TimeDiff.without.out.rg <- time.without.outs$TimeDiff time.without.outs[ time.without.outs$out.rg,]$TimeDiff.without.out.rg <- NA # Borramos los outliers #--------------------------------------------------------------------- # Si supones normalidad bien lo puedes hacer así también #--------------------------------------------------------------------- time.without.outs$out.rg.norm <- F time.without.outs[ time.without.outs$TimeDiff %in% x$out,]$out.rg.norm <- T x <- abs(scale(time.without.outs$TimeDiff)) # Normalizamos la variable time.without.outs$out.rg.norm <- F time.without.outs[ x >= qnorm(0.995),]$out.rg.norm <- T # Quitmos los datos que estén alejados 99.5 % en la distro (suponiedo normalidad) time.without.outs$TimeDiff.without.out.norm <- time.without.outs$TimeDiff time.without.outs[ time.without.outs$out.rg.norm,]$TimeDiff.without.out.norm <- NA #--------------------------------------------------------------------- # Si quieres quitar ambos #--------------------------------------------------------------------- time.without.outs$TimeDiff.without.out.norm.rg <- time.without.outs$TimeDiff time.without.outs[ time.without.outs$out.rg | time.without.outs$out.rg.norm,]$TimeDiff.without.out.norm.rg <- NA summary(time.without.outs) # Donde # TimeDiff.without.out.rg Son los datos sin outliers utilizando un criterio típico cuando no se sabe la distribución de tus datos # TimeDiff.without.out.norm Son los datos sin outliers asumiendo la normalidad de tus datos qqnorm(time.without.outs$TimeDiff.without.out.rg); qqline(time.without.outs$TimeDiff.without.out.rg, col = 2, lwd = 2) qqnorm(time.without.outs$TimeDiff.without.out.norm); qqline(time.without.outs$TimeDiff.without.out.norm, col = 2, lwd =2) hist(time.without.outs$TimeDiff.without.out.rg) hist(time.without.outs$TimeDiff.without.out.norm) ks.test(x= time$TimeDiff, "pnorm", mean(time$TimeDiff), sd(time$TimeDiff)) # A la vista de estos exploratorios yo no lo supondría. # TimeDiff.without.out.norm.rg son los datos sin outliers según los dos criterios # De todas maneras tienes un valor que yo creo que has introducido mal max(time.without.outs$TimeDiff) # Este valor es claramente un error de transcripción de datos. -- [[alternative HTML version deleted]]
Hola! Muchas gracias por la ayuda, pero lo que quiero hacer es que yo se cual es el outlier, es el numero 14478 puede ser un error de transcripcion o lo que sea pero lo que me gustaria hacer seria que a traves de algun tipo de test me dijera que esse es el outlier y poder borrarlo de la base de datos porque no puedo borrarlo porque si; no se si me explico. Y cuando hago la chi cuadrado me sale esto pero no es el numero que quiero> chisq.out.test(as.numeric(time$TimeDiff))chi-squared test for outlier data: as.numeric(time$TimeDiff) X-squared = 24.9399, p-value = 5.915e-07 alternative hypothesis: highest value 435 is an outlier Entonces no se como podria hacer para poder borrarlo de forma logica. Muchas gracias, un saludo 2014-07-11 18:23 GMT+00:00 Javier Villacampa González < javier.villacampa.gonzalez@gmail.com>:> Tu fichero tiene los decimales como puntos y no como comas como tu le > indicas. Te dejo un ejemplo > > > #--------------------------------------------------------------------------------------------------------------------- > setwd(dir="c:/Users/usuario/Desktop/") > library(outliers) > filename<-"timediff.csv" > time<-read.csv(filename, sep=";",header=TRUE,dec=".") # Esto es lo que has > de cambiar > chisq.out.test(time$TimeDiff) > > > # Ayuda adicional > #--------------------------------------------------------------------- > # Si no supones normalidad > #--------------------------------------------------------------------- > time.without.outs <- data.frame(row.names= 1:dim(time)[1], dif = time ) > > > x <- boxplot(time.without.outs$TimeDiff,range= 1.5) # Quita los outliers > que se van más de 1.5 rangos itercuartilicios. Puedes poner otro criterio > pero este es el habitual > > time.without.outs$out.rg <- F > time.without.outs[ time.without.outs$TimeDiff %in% x$out,]$out.rg <- T # > Localizamos los outliers con la condición elegida > > time.without.outs$TimeDiff.without.out.rg <- time.without.outs$TimeDiff > time.without.outs[ time.without.outs$out.rg,]$TimeDiff.without.out.rg <- > NA # Borramos los outliers > > #--------------------------------------------------------------------- > # Si supones normalidad bien lo puedes hacer así también > #--------------------------------------------------------------------- > > > time.without.outs$out.rg.norm <- F > time.without.outs[ time.without.outs$TimeDiff %in% x$out,]$out.rg.norm <- T > x <- abs(scale(time.without.outs$TimeDiff)) # Normalizamos la variable > > time.without.outs$out.rg.norm <- F > time.without.outs[ x >= qnorm(0.995),]$out.rg.norm <- T # Quitmos los > datos que estén alejados 99.5 % en la distro (suponiedo normalidad) > > time.without.outs$TimeDiff.without.out.norm <- time.without.outs$TimeDiff > time.without.outs[ > time.without.outs$out.rg.norm,]$TimeDiff.without.out.norm <- NA > > > #--------------------------------------------------------------------- > # Si quieres quitar ambos > #--------------------------------------------------------------------- > > time.without.outs$TimeDiff.without.out.norm.rg <- > time.without.outs$TimeDiff > time.without.outs[ time.without.outs$out.rg | > time.without.outs$out.rg.norm,]$TimeDiff.without.out.norm.rg <- NA > > summary(time.without.outs) > > # Donde > > # TimeDiff.without.out.rg Son los datos sin outliers utilizando un > criterio típico cuando no se sabe la distribución de tus datos > # TimeDiff.without.out.norm Son los datos sin outliers asumiendo la > normalidad de tus datos > qqnorm(time.without.outs$TimeDiff.without.out.rg); > qqline(time.without.outs$TimeDiff.without.out.rg, col = 2, lwd = 2) > qqnorm(time.without.outs$TimeDiff.without.out.norm); > qqline(time.without.outs$TimeDiff.without.out.norm, col = 2, lwd =2) > > hist(time.without.outs$TimeDiff.without.out.rg) > hist(time.without.outs$TimeDiff.without.out.norm) > ks.test(x= time$TimeDiff, "pnorm", mean(time$TimeDiff), sd(time$TimeDiff)) > # A la vista de estos exploratorios yo no lo supondría. > # TimeDiff.without.out.norm.rg son los datos sin outliers según los dos > criterios > > # De todas maneras tienes un valor que yo creo que has introducido mal > max(time.without.outs$TimeDiff) # Este valor es claramente un error de > transcripción de datos. > > -- > >[[alternative HTML version deleted]]
Hola Marta, si observas cualquier artículo de psicología esto es una práctica típica. Te digo psicología porque creo que tus datos son de ese tipo. Tienes bibiligrafía de artículos cientificos en las que se quitan valores siguiendo los criterios que te he dicho solo has de buscar bibliografía del campo en el que te mueces. Osea que nos quitarlos por que sí, aunque en cada area de ciencia tienes una serie de criterios para acabar con los ouliers. Yo personalmente me fio más de mi buena intuición(y validación) que de un test. De todas maneras seguro que tienes un informe de como recogiste los datos y puedes trazar el origen de este dato en concreto. Creo que eso es mejor que cualquier test. De todas maneras a mi el test me sale:> setwd(dir="c:/Users/usuario/Desktop/")> library(outliers)> filename<-"timediff.csv"> time<-read.csv(filename, sep=";",header=TRUE,dec=".") # Esto es lo que has de cambiar> chisq.out.test(time$TimeDiff)chi-squared test for outlier data: time$TimeDiff X-squared = 73260.07, p-value < 2.2e-16 alternative hypothesis: highest value 14478.4 is an outlier No se si te he sido de mucha ayuda. Un saludo 2014-07-14 12:03 GMT+02:00 Marta valdes lopez <martavaldes85@gmail.com>:> Hola! > > Muchas gracias por la ayuda, pero lo que quiero hacer es que yo se cual es > el outlier, es el numero 14478 puede ser un error de transcripcion o lo que > sea pero lo que me gustaria hacer seria que a traves de algun tipo de test > me dijera que esse es el outlier y poder borrarlo de la base de datos > porque no puedo borrarlo porque si; no se si me explico. > > Y cuando hago la chi cuadrado me sale esto pero no es el numero que quiero > > > chisq.out.test(as.numeric(time$TimeDiff)) > chi-squared test for outlier > data: as.numeric(time$TimeDiff) > X-squared = 24.9399, p-value = 5.915e-07 > alternative hypothesis: highest value 435 is an outlier > > Entonces no se como podria hacer para poder borrarlo de forma logica. > > Muchas gracias, un saludo > > > 2014-07-11 18:23 GMT+00:00 Javier Villacampa González < > javier.villacampa.gonzalez@gmail.com>: > > Tu fichero tiene los decimales como puntos y no como comas como tu le >> indicas. Te dejo un ejemplo >> >> >> #--------------------------------------------------------------------------------------------------------------------- >> setwd(dir="c:/Users/usuario/Desktop/") >> library(outliers) >> filename<-"timediff.csv" >> time<-read.csv(filename, sep=";",header=TRUE,dec=".") # Esto es lo que >> has de cambiar >> chisq.out.test(time$TimeDiff) >> >> >> # Ayuda adicional >> #--------------------------------------------------------------------- >> # Si no supones normalidad >> #--------------------------------------------------------------------- >> time.without.outs <- data.frame(row.names= 1:dim(time)[1], dif = time ) >> >> >> x <- boxplot(time.without.outs$TimeDiff,range= 1.5) # Quita los outliers >> que se van más de 1.5 rangos itercuartilicios. Puedes poner otro criterio >> pero este es el habitual >> >> time.without.outs$out.rg <- F >> time.without.outs[ time.without.outs$TimeDiff %in% x$out,]$out.rg <- T # >> Localizamos los outliers con la condición elegida >> >> time.without.outs$TimeDiff.without.out.rg <- time.without.outs$TimeDiff >> time.without.outs[ time.without.outs$out.rg,]$TimeDiff.without.out.rg <- >> NA # Borramos los outliers >> >> #--------------------------------------------------------------------- >> # Si supones normalidad bien lo puedes hacer así también >> #--------------------------------------------------------------------- >> >> >> time.without.outs$out.rg.norm <- F >> time.without.outs[ time.without.outs$TimeDiff %in% x$out,]$out.rg.norm <- >> T >> x <- abs(scale(time.without.outs$TimeDiff)) # Normalizamos la variable >> >> time.without.outs$out.rg.norm <- F >> time.without.outs[ x >= qnorm(0.995),]$out.rg.norm <- T # Quitmos los >> datos que estén alejados 99.5 % en la distro (suponiedo normalidad) >> >> time.without.outs$TimeDiff.without.out.norm <- time.without.outs$TimeDiff >> time.without.outs[ >> time.without.outs$out.rg.norm,]$TimeDiff.without.out.norm <- NA >> >> >> #--------------------------------------------------------------------- >> # Si quieres quitar ambos >> #--------------------------------------------------------------------- >> >> time.without.outs$TimeDiff.without.out.norm.rg <- >> time.without.outs$TimeDiff >> time.without.outs[ time.without.outs$out.rg | >> time.without.outs$out.rg.norm,]$TimeDiff.without.out.norm.rg <- NA >> >> summary(time.without.outs) >> >> # Donde >> >> # TimeDiff.without.out.rg Son los datos sin outliers utilizando un >> criterio típico cuando no se sabe la distribución de tus datos >> # TimeDiff.without.out.norm Son los datos sin outliers asumiendo la >> normalidad de tus datos >> qqnorm(time.without.outs$TimeDiff.without.out.rg); >> qqline(time.without.outs$TimeDiff.without.out.rg, col = 2, lwd = 2) >> qqnorm(time.without.outs$TimeDiff.without.out.norm); >> qqline(time.without.outs$TimeDiff.without.out.norm, col = 2, lwd =2) >> >> hist(time.without.outs$TimeDiff.without.out.rg) >> hist(time.without.outs$TimeDiff.without.out.norm) >> ks.test(x= time$TimeDiff, "pnorm", mean(time$TimeDiff), sd(time$TimeDiff)) >> # A la vista de estos exploratorios yo no lo supondría. >> # TimeDiff.without.out.norm.rg son los datos sin outliers según los dos >> criterios >> >> # De todas maneras tienes un valor que yo creo que has introducido mal >> max(time.without.outs$TimeDiff) # Este valor es claramente un error de >> transcripción de datos. >> >> -- >> >> >-- [[alternative HTML version deleted]]