Advertisement
jjdeharo

del_outliers

Mar 14th, 2015
325
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 1.36 KB | None | 0 0
  1. # Elimina outliers si son significativos. Usa test de Grubbs
  2. # Devuelve los datos sin outliers
  3. # Comprueba si la distribución es normal
  4. # x: Vector que contiene los datos
  5. # p.o: nivel de significación para eliminar outliers
  6. # p.n: nivel de significación para el test de distribución normal
  7.  
  8. del.outliers <- function(x, p.g=0.05, p.n=0.01) {
  9.   if(!is.vector(x) || !is.numeric(x)) {
  10.     cat("El argumento debe ser un vector numérico\n")
  11.     return(invisible(NULL))
  12.   }
  13.   norm <- shapiro.test(x)
  14.   if (norm$p.value <= p.n ) {
  15.     cat("La distribución no es normal. Programa interrumpido\n")
  16.     return(norm)
  17.   }
  18.  
  19.   if (!require(outliers)) {
  20.     r<- readline("Se necesita la librería 'outliers'. ¿Instalar? (s/n) ")
  21.     if (r=="S" || r == "s") {
  22.       install.packages("outliers")
  23.     } else {
  24.       return("Programa terminado\n")
  25.     }
  26.   }
  27.  
  28.   ou <- 0
  29.   i <- 0
  30.   n <- length(x)
  31.   repeat {
  32.     if(grubbs.test(x)$p.value <= p.g) {
  33.  
  34.       i <- i + 1
  35.       ou[i] <- outlier(x)
  36.       x <- rm.outlier(x)
  37.     } else {
  38.       n <- n - length(x)
  39.       if ( n == 1){
  40.         cat("Se ha eliminado 1 outlier:\n",ou)
  41.       } else {
  42.         if (n == 0) {
  43.           cat("No se ha eliminado ningún outlier\n")
  44.         } else {
  45.          
  46.           cat("Se han eliminado",n,"outliers:\n",ou)
  47.         }
  48.       }
  49.       return(invisible(x))
  50.     }
  51.   }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement