2011-05-30 23 views
5

Tengo un problema con el código R, más bien, con valores perdidos. En realidad, no sé cómo imputar esos valores usando el método simple de Hot Deck. Como, por ejemplo, tener estos datos.valores faltantes - Método vecino de Hot Deck

1 1000.24457235   NA  NA   NA   NA  11 
2 10000132 111 2502357 0.19408587 0.19373610 0.6567305 0.01454520 0.13498823  69 
3 10000388 111 4472360 0.14774927 0.14918678 0.6853377 0.05233508 0.11314044 106 
4 10000792 111 666909 0.10520063   NA  NA   NA   NA  14 
5 10002737 111 1139613 0.19944986 0.20114918 0.3564355 0.20135391 0.24106136  23 
6 10002741 111 981574 0.11573570   NA  NA   NA   NA  13 
7 10002929 111 1417192 0.08770932 0.08387991 0.6106012 0.11078473 0.19473415  24 
8 10003396 111 444966 0.19026263 0.18784110 0.5215772 0.16844381 0.12213789  24 
9 10003517 111 1230589 0.16393216 0.16358568 0.4614005 0.26670712 0.10830670  19 
10 10003546 111 760847 0.12384748   NA  NA   NA   NA  10 

Usando quinta columna, tiene que encontrar el valor más cercano, y luego rellenar con que el demandado similar en aquellos lugares, donde se encuentran los valores de NA.

Gracias.

+0

Utilice 'dput' para proporcionar sus datos. Y para formatear el código utilice el ícono de formateo del código '{}' (o alinéelo con cuatro espacios), vea también http://stackoverflow.com/editing-help. – Marek

+0

en realidad, no lo entiendo, pero, cambiado, para entender algo :) – Cris

+0

Agrego formato de datos. Pero cuando desea publicar datos de muestra, puede usar el comando 'dput', como' dput (my_data) '(o' head (dput (my_data)) '), que crea una representación de cadena del objeto R con todos los detalles. – Marek

Respuesta

6

Nunca he utilizado el muestreo en cubierta caliente (o frío). Sin embargo, un poco de Google me llevó a la función rrp.impute en el paquete rrp.

Aquí está un ejemplo sencillo el uso de algunos datos sintéticos:

install.packages("rrp") 
require(rrp) 
set.seed(1) 
key <- 1:100 
## create random values 
value1 <- 10 + 2 * key + rnorm(100, 0, 10) 
## make 5 values into NAs 
missing <- sample(key, 5) 
value1[missing] <- NA 
## build a dataframe 
df <- data.frame(key, value1) 
## do a nearest neighbor hot deck interpolation 
imputed <- rrp.impute(df)$new.data 

## let's visualize this magic 
plot(df) 
points(missing, imputed$value1[missing], col="red") 

Este utiliza el valor por defecto de k = 1, que es lo que creo que usted quiere. El cuadro bonito al final se ve así:

enter image description here

Los círculos rojos son los valores imputados y se puede ver que son simplemente el vecino más cercano.

+0

Acerca de la búsqueda a través de Internet: inside-R tiene un gran motor de búsqueda a través de la documentación del paquete R, [búsqueda de hotdeck] (http://www.inside-r.org/search/node/hotdeck) o [hot deck] (http: //www.inside-r.org/search/node/hot%20deck) ofrece pocos resultados. – Marek

+0

Google está constantemente mejor (al menos para mí) con R. Aquí está la búsqueda que hice: http://www.google.com/search?client=ubuntu&channel=fs&q=hot+deck+imputation+r&ie=utf-8&oe = utf-8 –

1

No sé si hay un paquete de R ya hecho, pero esto hace el truco:

dfr<-data.frame(c1=c(123,132,388,792,2737,2741,2929,3396,3517,3546), 
c2=c(0.244,0.194,0.47,0.105,0.199,0.115,0.087,0.190,0.163,0.123), 
c3=c(NA, 0.193,0.149, NA, 0.201, NA, 0.083,0.187,0.163,NA)) 

hdidx<-which(!is.na(dfr[,3])) 
hd<-dfr[hdidx,] 
md<-dfr[-hdidx,] 
closesthd<-sapply(md[,2], function(curval){which.min(abs(curval-hd[,2]))}) 
md[,3]<-hd[closesthd,3] 

sustituir los números de columnas en las que sea necesario para su caso + quizás tomar otra medida de distancia.

Cuestiones relacionadas