6 votos

¿Hay un paquete de R con una función bonita que puede tratar eficazmente con valores atípicos?

Uno de los conjuntos de datos que trato es bastante extraño. El datawarehouse he descargado los datos de tiene mucho 999999999 valores en una de las variables. Al parecer, el sistema informático en el que el almacenamiento de datos se encuentra en no admite el almacenamiento de los valores null. Por lo tanto, utilizan 999999999 como el "valor" null". Ahora si acabo de ejecutar pretty en I en la variable, se le da no sensical rangos.

  • Hay un paquete con una versión de pretty que puede lidiar con valores atípicos por ponerlos en el rango de decir (100,Alto) ?

18voto

DavLink Puntos 101

Si va a importar sus datos con un comando como, por ejemplo,

read.table('yourfile.txt', header=TRUE, ...)

usted puede indicar cuáles son los valores a ser considerados como "nulo" o NA valores, especificando na.strings = "999999999". También podemos considerar diferentes valores para indicar NA valores. Considere el siguiente archivo (fake.txt) donde queremos tratar "." y "999999999" como NA valores:

1 2 .
3 999999999 4
5 6 7

a continuación, en R haríamos:

> a <- read.table("fake.txt", na.strings=c(".","999999999"))
> a
  V1 V2 V3
1  1  2 NA
2  3 NA  4
3  5  6  7

De lo contrario, siempre se puede filtrar los datos según lo indicado por @Sacha en su comentario. Aquí, podría ser algo como

a[a=="." | a==999999999] <- NA

Editar

En caso de que haya varios valores anormales que se puede observar en las diferentes columnas con valores diferentes, pero usted sabe que el probable rango de valores admisibles, se puede aplicar una función a cada columna. Por ejemplo, definir el siguiente filtro:

my.filter <- function(x, threshold=100) ifelse(x > threshold, NA, x)

entonces

a.filt <- apply(a, 2, my.filter)

se sustituye cada valor > 100 con NA en la matriz a.

Ejemplo:

> a <- replicate(10, rnorm(10))
> a[1,3] <- 99999999
> a[5,6] <- 99999999
> a[8,10] <- 99999990
> summary(a[,3])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 -1e+00   0e+00   0e+00   1e+07   1e+00   1e+08 
> af <- apply(a, 2, my.filter)
> summary(af[,3])
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
-1.4640 -0.2680  0.4671 -0.0418  0.4981  0.7444  1.0000 

Puede ser basado en vectores de curso:

> summary(my.filter(a[,3], 500))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
-1.4640 -0.2680  0.4671 -0.0418  0.4981  0.7444  1.0000 

1voto

Owen Fraser-Green Puntos 642

Yo encuentro esto muy frecuentemente cuando se trata con clientes diaria de datos de series de tiempo. Parece que muchos de los sistemas de contabilidad de IGNORAR los datos diarios que no se producen decir, no hay transacciones fueron registradas para ese día (el intervalo de tiempo/cubo) y no de relleno en un '0" número . Desde el análisis de series de tiempo requieren de una lectura para cada intervalo/cubo necesitamos inyectar un "0" para la omitido la observación. La intervención de Detección es esencialmente un esquema para detectar la anomalía y reemplazarlo con un valor esperado basado en la identificación de un perfil del/la señal/de predicción. Si hay muchos de estos "valores perdidos" el sistema se puede descomponer El problema se vuelve un poco más complejo cuando hay una fuerte día-de-la-semana del perfil en los datos históricos y un "secuencial revisión de los valores" no son registrados, lo que sugiere que los valores de sustitución se obtiene mediante el cálculo de local promedios diarios como un precursor para el ajuste fino de estos valores.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X