Red de conocimiento informático - Problemas con los teléfonos móviles - Manejo de valores faltantes en lenguaje r

Manejo de valores faltantes en lenguaje r

2016-08-23 05:17 Pregúntale al leñador al cortar madera.

Hay muchas razones por las que faltan datos y la mayoría de los métodos estadísticos suponen que se trata de matrices, vectores y marcos de datos completos.

Clasificación de datos faltantes:

Falta completamente al azar: si los datos faltantes para una variable no están relacionados con ninguna otra variable observada o no observada, los datos faltan completamente al azar. de (MCAR).

Falta al azar: Si los datos faltantes en una variable están correlacionados con otras variables observadas y no con sus propios valores no observados, los datos faltan al azar (MAR).

Falta no al azar: Si los datos que faltan no pertenecen a MCAR o Marr, los datos faltan no al azar (NMAR).

Hay muchas maneras de lidiar con los datos faltantes, pero es necesario probar en la práctica cuál es el mejor método para usted.

La siguiente figura muestra cómo lidiar con los datos faltantes:

Pasos generales para manejar los datos faltantes:

1 Identificar los datos faltantes

2 .Detectar la causa de la pérdida de datos.

3. Elimine ejemplos que contengan valores faltantes o reemplace (interpolar) los valores faltantes con valores razonables.

1. Identificar datos faltantes:

En lenguaje R, NA representa valores faltantes, NaN representa valores imposibles, Inf e -Inf representan infinito positivo e infinito negativo.

Aquí se recomiendan cuatro funciones: is.na, is.nan, is.finite, is.infinite.

x lt-c(2, NA, 0/0, 5/0)

#Juzgar valores faltantes

is.na(x)

p>

#Juzga el valor imposible

Sur(x)

#Juzga el valor infinito

es.infinito(x )

#Juzgar valores normales

es .limited(x)

Recomendar una función: complete.case() se puede utilizar para identificar filas sin valores faltantes ​​en una matriz o marco de datos!

Muestra las filas que faltan en los datos (la suspensión del conjunto de datos proviene del paquete VIM)

Suspensión[! complete.cases(sleep),]

Determina cuántas lagunas hay en el conjunto de datos.

Para conjuntos de datos complejos, ¿cómo extraer mejor los datos faltantes?

La función md.pattern() en el paquete mouse puede generar una tabla que muestra patrones de valores faltantes en forma de matriz o marco de datos.

Nota: 0 significa que no faltan valores en la columna de la variable y 1 significa que faltan valores.

La primera línea proporciona el número de valores faltantes (* * *cuántas filas).

La primera columna indica la moda de cada valor faltante.

La última línea proporciona el número de valores faltantes para cada variable.

La última columna proporciona el número de variables (variables con valores faltantes).

En este conjunto de datos, faltan 38 datos.

Visualización gráfica de los datos faltantes:

aggr(sleep, prop=F, números=T)

matrixplot(sleep)

Los colores claros indican valores pequeños, los colores oscuros indican valores grandes y el valor predeterminado es el rojo.

Matriz de borde (suspensión)

Hay demasiadas variables mencionadas anteriormente, podemos elegir algunas variables para mostrar:

x lt-sleep [, 1: 5]

x[,c(1,2,4)] lt; - log10(x[,c(1,2,4)])

Matriz de margen

p>

Para mayor claridad, se pueden mostrar por parejas:

marginplot(sleep[c("Gest", "Dream")))

Aquí puedes ver (Esquina inferior izquierda), a Dream y Gest les faltan datos de 12 y 4 respectivamente.

El diagrama de cuadro rojo de la izquierda muestra la distribución de Dream cuando falta el valor de Gest, y el diagrama de cuadro azul muestra la distribución de Dream cuando no falta el valor de Gest. Nuevamente, el diagrama de caja de Gest está en la parte inferior.

2. Procesamiento de datos de valores faltantes

Método de eliminación de filas: se eliminarán todas las filas con valores faltantes en el conjunto de datos. Generalmente se supone que los datos faltantes se generan de forma completamente aleatoria y que los valores faltantes son solo una pequeña parte y no tendrán un gran impacto en los resultados.

Es decir, el tamaño de la muestra debe ser lo suficientemente grande como para que no haya una desviación importante después de eliminar los valores faltantes.

Las funciones para eliminar filas son na.omit() y complete.case().

newdata lt-na.omit(sleep)

sum(is.na(newdata))

newdata lt-sleep[complete.cases(sleep) ,]

sum(is.na(newdata))

Relleno igual a media/mediana: este método es simple y tosco. Este método es aceptable y puede producir resultados satisfactorios si el valor de relleno tiene poco efecto en el resultado.

Método 1:

newdata lt-sleep

mean(new data$Dream, na.rm = T)

newdata[ is.na(newdata$Dream), " Dream "] lt; -1.972

Método 2:

El paquete Hmisc es relativamente simple y puede interpolar la media, la mediana, etc. También puede insertar valores específicos.

Biblioteca (Hmisc)

estimación(newdata$Dream, media)

estimación(newdata$Dream, mediana)

impute( newdata$Dream, 2)

Datos faltantes en la interpolación del paquete de ratones: interpolación multivariada de ecuaciones en cadena, primero use la función de ratones para modelar y luego use la función completa para generar datos completos.

La siguiente figura muestra el proceso de operación del paquete mouse:

Mice(): a partir de un marco de datos con valores faltantes, devuelve un objeto con múltiples conjuntos de datos completos (el valor predeterminado puede ser simular 5 conjuntos de datos completos).

Con(): el modelado estadístico se puede aplicar a cada conjunto de datos completo por turno.

Pool(): Integra el resultado único generado con ().

biblioteca(ratón)

nuevos datos lt-sleep

datos lt-mouse(nuevos datos, m = 5, método = 'pmm', maxit =100, seed=1)

Aquí, m es el valor predeterminado 5, que se refiere al número de conjuntos de datos de interpolación.

El método de interpolación es pmm: coincidencia media prevista. Otros métodos se pueden ver a través de métodos (ratón).

Maxit se refiere al número de iteraciones y seed se refiere al número de semillas establecidas (sinónimo de set.seed).

Resumen de datos interpolados:

Resumen (datos)

En este podemos ver las observaciones que faltan para las variables en el conjunto de datos y el método de interpolación para cada una. variable, VisitSequence muestra las variables interpoladas de izquierda a derecha y PredictorMatrix muestra las variables con datos faltantes durante el proceso de interpolación. Estas variables utilizan información de otras variables en el conjunto de datos. (En la matriz, las filas representan variables de interpolación, las columnas representan variables que proporcionan información para la interpolación, 1 y 0 representan usados ​​y no utilizados respectivamente.

)

Ver los datos interpolados generales:

data$imp

Ver los datos interpolados de una variable específica:

data$imp $Dream

Finalmente, lo más importante es generar un conjunto de datos completo

completedata lt-complete (data)

Juzga si faltan valores, si no, el resultado regresa FLASE.

anyNA (datos completos)

Con base en los resultados de interpolación anteriores, podemos verificar la distribución de los datos originales y los datos interpolados.

Biblioteca (celosía)

xyplot(data, Dream~NonD Sleep Span Gest, pch=21)

La interpolación en la figura es la forma del Punto magenta, las observaciones son puntos azules.

Gráfico de densidad (datos)

La línea roja en la figura es la curva de densidad de datos de cada conjunto de datos interpolados, y la línea azul es la curva de densidad de los datos de observación.

Ranura de tira (datos, pch = 21)

En la figura anterior, 0 representa los datos originales, 1-5 representa los datos interpolados cinco veces y el punto magenta representa después valor de interpolación.

Analicemos los datos y ajustemos un modelo lineal:

Datos completos:

Biblioteca (ratón)

newdata lt-sleep

datos lt-mouse(datos nuevos, m=5, método='pmm', maxit=100, semilla=1)

modelo lt-with(datos, lm(Sueño~ Span Gest))

Pooling lt-Pool (Modelo)

Resumen (Resumen)

Fim se refiere a la proporción de información faltante para cada variable, lambda se refiere a la contribución de cada variable a los datos faltantes.

Datos faltantes (se eliminarán automáticamente durante la operación):

lm.fit lt- lm(Dream~Span Gest, data = sleep, na.action=na.omit)

p>

Resumen (lm.fit)

Después de la regresión lineal entre los conjuntos de datos completos y faltantes, las estimaciones de parámetros y los valores p son generalmente consistentes. Los valores faltantes son completamente aleatorios. Si la proporción que falta es relativamente grande, no es adecuado utilizar el método de eliminación y se recomienda utilizar el método de interpolación múltiple.

Método de interpolación KNN: la función de interpolación KNN utiliza el método del vecino más cercano K para completar los valores faltantes. Para los registros que requieren interpolación, las k observaciones más cercanas se calculan en función de la distancia euclidiana. Luego, los k datos del vecino más cercano se ponderan por la distancia recíproca para calcular el valor de llenado y, finalmente, este valor se usa para reemplazar el valor faltante.

Biblioteca (DMwR)

newdata lt-sleep

knnOutput lt- knnImputation(nuevos datos)

anyNA(knnOutput)

p>

Encabezado(knnSalida)