13 votos

utilizando información del vecino en la imputación de los datos o de encontrar fuera de los datos (en R)

He conjunto de datos con la suposición de que los vecinos más cercanos son los mejores predictores. Sólo un ejemplo perfecto de dos vías gradiente de visualiza-

enter image description here

Supongamos que tenemos un caso donde unos valores que faltan, fácilmente podemos predecir sobre la base de los vecinos y de tendencia.

enter image description here

Correspondiente de la matriz de datos en R (ficticio ejemplo para la sesión de ejercicio):

miss.mat <- matrix (c(5:11, 6:10, NA,12, 7:13, 8:14, 9:12, NA, 14:15, 10:16),ncol=7, byrow = TRUE)
miss.mat 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    5    6    7    8    9   10   11
[2,]    6    7    8    9   10   NA   12
[3,]    7    8    9   10   11   12   13
[4,]    8    9   10   11   12   13   14
[5,]    9   10   11   12   NA   14   15
[6,]   10   11   12   13   14   15   16

Notas: (1) La propiedad de los valores perdidos se supone que para ser aleatorio, puede suceder en cualquier lugar.

(2) Todos los puntos de datos de una sola variable, pero su valor se asume que están influenciados por neighbors de fila y columna adyacente a ellos. Así que la posición en la matriz es importante y puede ser considerada como otra variable.

Mi esperanza en algunas situaciones que pueden predecir algunos valores (puede haber errores) y corregir el sesgo (sólo ejemplo, permite generar este tipo de error en los datos de prueba) :

> mat2 <- matrix (c(4:10, 5, 16, 7, 11, 9:11, 6:12, 7:13, 8:14, 9:13, 4,15, 10:11, 2, 13:16),ncol=7, byrow = TRUE)
> mat2

    [,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,]    4    5    6    7    8    9   10
[2,]    5   16    7   11    9   10   11
[3,]    6    7    8    9   10   11   12
[4,]    7    8    9   10   11   12   13
[5,]    8    9   10   11   12   13   14
[6,]    9   10   11   12   13    4   15
[7,]   10   11    2   13   14   15   16

Los ejemplos anteriores son sólo la ilustración (pueden ser contestadas visualmente) pero el ejemplo real puede ser más confuso. Estoy buscando si hay método robusto para hacer este tipo de análisis. Creo que esto debería ser posible. ¿Cuál sería el método adecuado para realizar este tipo de análisis ? cualquier programa R / paquete de sugerencias para hacer este tipo de análisis ?

enter image description here

7voto

jldugger Puntos 7490

La pregunta es cuál es el modo de utilizar la más cercana a los vecinos en una sólida manera de identificar y corregir localizada valores atípicos. ¿Por qué no hacer exactamente eso?

El procedimiento consiste en calcular una robusta locales suave, evaluar los residuos, y de cero que son demasiado grandes. Esto satisface todos los requisitos directamente y es lo suficientemente flexible como para adaptarse a diferentes aplicaciones, ya que se puede variar el tamaño de la vecindad local y el umbral para la identificación de valores atípicos.

(¿Por qué la flexibilidad es tan importante? Porque tal procedimiento tiene buenas posibilidades de la identificación de ciertas localizada comportamientos como "periféricas". Como tal, todos estos procedimientos pueden ser considerados suavizadores. Van a eliminar algunos de los detalles junto con la aparente valores atípicos. El analista necesita algún tipo de control sobre el trade-off entre conservar los detalles y no detectar local de valores atípicos.)

Otra ventaja de este procedimiento es que no requiere de una matriz rectangular de valores. De hecho, puede incluso ser aplicado a los irregulares de datos mediante el uso de un local más suave adecuado para estos datos.

R, así como la más completa de las estadísticas de los paquetes, tiene varias robusto local suavizadores integradas, como loess. En el ejemplo siguiente se procesan utilizando. La matriz ha $79$ filas y $49$ columnas: casi $4000$ entradas. Representa una complicada función de tener varios extremos locales así como toda una línea de puntos donde no es derivable (un "pliegue"). A poco más de $5\%$ de los puntos--una proporción muy alta de ser considerados "periféricos"--se han añadido Gaussiano errores cuya desviación estándar es sólo $1/20$ de la desviación estándar de los datos originales. Este sintético conjunto de datos con lo que presenta muchas de las difíciles características de los datos realistas.

Figures

Tenga en cuenta que (como por R convenios), las filas de la matriz se dibujan como líneas verticales. Todas las imágenes, excepto para los residuos, se hillshaded para ayudar a mostrar pequeñas variaciones en sus valores. Sin esto, casi todos los locales de los valores atípicos serían invisibles!

Al comparar el "Imputado" (fija) a la "Real" (original no contaminado) de las imágenes, es evidente que la eliminación de los valores extremos se ha pulido algunos, pero no todos, de la raya (la cual se de$(0,79)$$(49, 30)$; es evidente como la luz cian ángulo de la raya en los "Residuos" de la trama).

Las motas en los "Residuos" de la trama mostrar la evidente locales aislados de los valores atípicos. Este gráfico también muestra otra estructura (como la que se raya diagonal) atribuible a los datos subyacentes. Se podría mejorar en este procedimiento mediante un modelo espacial de los datos (a través de métodos geoestadísticos), pero describiendo e ilustrando nos llevaría demasiado lejos de aquí.

Por CIERTO, este código informaron el hallazgo de sólo $102$ de la $200$ valores atípicos que se han introducido. Esto no es un fracaso del procedimiento. Debido a que los valores atípicos se distribuyeron Normalmente, alrededor de la mitad de ellos estaban tan cerca de cero--$3$ o menos en tamaño, en comparación con los valores subyacentes de tener una gama de más de $600$--a la que no hizo ningún cambio detectable en la superficie.

#
# Create data.
#
set.seed(17)
rows <- 2:80; cols <- 2:50
y <- outer(rows, cols, 
           function(x,y) 100 * exp((abs(x-y)/50)^(0.9)) * sin(x/10) * cos(y/20))
y.real <- y
#
# Contaminate with iid noise.
#
n.out <- 200
cat(round(100 * n.out / (length(rows)*length(cols)), 2), "% errors\n", sep="")
i.out <- sample.int(length(rows)*length(cols), n.out)
y[i.out] <- y[i.out] + rnorm(n.out, sd=0.05 * sd(y))
#
# Process the data into a data frame for loess.
#
d <- expand.grid(i=1:length(rows), j=1:length(cols))
d$y <- as.vector(y)
#
# Compute the robust local smooth.
# (Adjusting `span` changes the neighborhood size.)
#
fit <- with(d, loess(y ~ i + j, span=min(1/2, 125/(length(rows)*length(cols)))))
#
# Display what happened.
#
require(raster)
show <- function(y, nrows, ncols, hillshade=TRUE, ...) {
  x <- raster(y, xmn=0, xmx=ncols, ymn=0, ymx=nrows)
  crs(x) <- "+proj=lcc +ellps=WGS84"
  if (hillshade) {
    slope <- terrain(x, opt='slope')
    aspect <- terrain(x, opt='aspect')
    hill <- hillShade(slope, aspect, 10, 60)
    plot(hill, col=grey(0:100/100), legend=FALSE, ...)
    alpha <- 0.5; add <- TRUE
  } else {
    alpha <- 1; add <- FALSE
  }
  plot(x, col=rainbow(127, alpha=alpha), add=add, ...)
}

par(mfrow=c(1,4))
show(y, length(rows), length(cols), main="Data")

y.res <- matrix(residuals(fit), nrow=length(rows))
show(y.res, length(rows), length(cols), hillshade=FALSE, main="Residuals")
#hist(y.res, main="Histogram of Residuals", ylab="", xlab="Value")

# Increase the `8` to find fewer local outliers; decrease it to find more.
sigma <- 8 * diff(quantile(y.res, c(1/4, 3/4)))
mu <- median(y.res)
outlier <- abs(y.res - mu) > sigma
cat(sum(outlier), "outliers found.\n")

# Fix up the data (impute the values at the outlying locations).
y.imp <- matrix(predict(fit), nrow=length(rows))
y.imp[outlier] <- y[outlier] - y.res[outlier]

show(y.imp, length(rows), length(cols), main="Imputed")
show(y.real, length(rows), length(cols), main="Real")

4voto

Patrick Puntos 183

Yo le aconsejo que eche un vistazo a este artículo [0]. El problema que pretende abordar parece encajar su descripción de suyo bastante bien, excepto que el método propuesto por el autor es un poco más refinado que NN-inputation (aunque se utiliza algo similar como punto de partida).

(a lo largo, voy a suponer que $\pmb X$, $n$ $p$ matriz de datos ha sido estandarizado: cada columna ha sido divida por el loco en el pre-procesamiento de paso del análisis)

La idea de este enfoque es obtener un rango de $k$ robusta PCA descomposición de la matriz de datos en una forma que es resistente a la posible presencia de valores atípicos (esto se hace mediante el uso de un almacén de la pérdida de la función cuando la estimación de la PCA de los componentes) y los valores perdidos (esto se hace mediante el uso de un EM-tipo de método de imputación). Como explico a continuación, una vez que usted tiene un PCA de la descomposición de su conjunto de datos, rellenando los elementos que faltan (y la evaluación de la incertidumbre de estas estimaciones es bastante sencillo).

El primer paso de cada iteración es la imputación de datos paso. Esto se hace en el algoritmo EM: los desaparecidos están llenados por el valor que se espera de ellos que tienen (este es el E-step).

En la segunda parte de los dos pasos en el procedimiento iterativo, uno se adapta a un (robusto) de la PCA a la aumentada datos obtenidos en el paso anterior. Esto se traduce en una descomposición espectral de $\pmb X$ a $\pmb t\in\mathbb{R}^p$ (estimación del centro), una $p$ $k$ ortogonal de la matriz $\pmb L$ $k$ $k$ matriz diagonal $\pmb D$ ( $k\leq p$ ), que es una especie de robustified, PCA basado, M-paso.

Para resumir el papel, aquí es el algoritmo general que proponemos:

  • Set $l=0$. Obtener una estimación $\pmb W^0$ donde los elementos que faltan están llenos de las estimaciones iniciales. Para cada uno de los desaparecidos de la célula, estas estimaciones iniciales son los promedios de la fila y la columna de sabios en los camellones de la que no faltan elementos de $\pmb X$ (los datos originales de la matriz).

  • Entonces, ¿ hasta convergencia:

    una. ¿robusto PCA en $\pmb W^l$ y obtener las estimaciones $(\pmb t^l,\pmb L^l,\pmb D^l)$

    b. set $l=l+1$

    c. el uso de $\pmb Y^{l}=\pmb L^{l-1}(\pmb W^{l-1}-\pmb t^{l-1}) (\pmb L^{l-1})'$

    d. llenar la falta de elementos de $\pmb W^{l}$ por lo que se espera que se basa en el modelo de $\pmb W^{l}\sim\mathcal{N}(\pmb t^{l-1},\pmb L^{l-1} \pmb D^{l-1}(\pmb L^{l-1})')$ (como en el E paso del algoritmo EM) y el que no faltan elementos por las entradas correspondientes de a $\pmb Y^{l}$.

Iterate (a->c) hasta $||\pmb W^{l-1}-\pmb W^l||_F$ es menor que un cierto umbral. El vector de la estimación del parámetro obtenido en la final iteración se almacenan como $(\pmb t,\pmb L,\pmb D)$.

La idea, es que en cada iteración, el modelo para los datos de $(\pmb t^{l-1},\pmb L^{l-1} \pmb D^{l-1})$ se mueve cada vez más lejos de la ingenuidad, las estimaciones iniciales, mientras que el robusta M paso, se evita que los valores atípicos de influir en el conjunto de los parámetros.

Este enfoque también ofrece una gran variedad de herramienta de diagnóstico para comprobar la calidad de la imputación. Por ejemplo, usted podría también producir múltiples sorteos de $\mathcal{N}(\pmb t^{l-1},\pmb L\pmb D(\pmb L)')$ pero esta vez, para los que no faltan elementos de los datos de la matriz y ver lo mucho que la distribución de las generadas (contrafactuales) de datos coincide con el valor observado para cada uno de los que no faltan las células.

No sé de un ready made R la aplicación de este enfoque, pero uno fácilmente puede ser producido a partir de la sub-componentes (principalmente un robusto algoritmo PCA), y estos están bien implementadas en R, vea la rrcov paquete (el papel es tranquilo informativo sobre este tema).

  • [0] Serneels S. y Verdonck, T. (2008). Análisis de componentes principales de datos que contiene los valores atípicos y los elementos que faltan. Computacional Estadísticas y Análisis de Datos vol:52 asunto:3 páginas:1712-1727.

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