Archivo de la etiqueta: missing

Trucos SAS. Lista de variables missing

Duda que me plantearon ayer por la tarde. Dada una serie de variables determinar que registro tiene todas esas variables nulas. El truco que planteo puede servir para determinar incluso cuantos valores perdidos tiene esa lista de variables, ese truco me le reservo para otro día. El código lo acompaño con un ejemplo para que se pueda ejecutar y analizar su funcionamiento:

data aleatorio;
do i=1 to 20000;
aleat1=sqrt(rannor(45));
aleat2=sqrt(rannor(5));
aleat3=sqrt(rannor(4));
aleat4=sqrt(rannor(450));
aleat5=sqrt(rannor(40));
output;
end;
run;

data fila_nula;
set aleatorio;
nulo=0;
array varib(*) aleat1--aleat5;
do j=1 to dim(varib);
if not missing(varib(j)) then nulo=i;
end;
drop j;
if nulo=0;
run;

Muy sencillo el truco. Si se encuentra alguna variable que no es nula la variable nulo ya no toma valor 0. Espero que os sea de utilidad. Saludos.

Truco R. Valores perdidos a 0, ejemplo de uso de sapply

Muy habitual partinos la cabeza con valores perdidos en R. Los NA pueden darnos algún quebradero de cabeza. Este truco es muy sencillo, transforma valores  missing a 0 y nos sirve para aplicar funciones a data.frame con la función sapply. Veamos el sencillo ejemplo:


x=c(1,23,5,9,0,NA)
y=c(5,45,NA,78,NA,34)
dataf=data.frame(cbind(x,y))
mean(dataf$x,na.rm=TRUE)
mean(dataf$y,na.rm=TRUE)
#Podría interesarnos tener en cuenta los NAs
sum(dataf$x,na.rm=TRUE)/nrow(dataf)
sum(dataf$y,na.rm=TRUE)/nrow(dataf)

Tenemos un data.frame con dos variables que contienen valores perdidos, deseamos crear una función que  pase estos valores a 0 y aplicarlo al data.frame de partida:


haz.cero.na=function(x){
ifelse(is.na(x),0,x)}
dataf.2=data.frame(sapply(dataf,haz.cero.na))
dataf
dataf.2

Un ejemplo muy sencillo de aplicación de funciones con sapply a data.frames perfectamente extrapolable a matrices y vectores. Erreros tiene una entrada al respecto. Saludos.

¿Qué hacer con los valores perdidos de nuestras variables?

Creo que casi todos los que han hecho modelos matemáticos alguna vez en su vida se han encontrado con la pregunta que titula este breve  artículo. Aunque más que artículo es una reflexión y sobre todo espero que al final sea un pequeño foro de ideas y de métodos con los que hacer frente a este problema.

Lo primero que me planteraría yo es: ¿por qué perdemos datos? Podemos tener una imperfección a la hora de recoger la información y podría ayudarnos a mejorar el proceso. También un valor perdido puede ser un valor en si mismo. No es lo mismo tener un consumo de 0 euros con un teléfono móvil que no tener teléfono móvil, sin embargo si sabemos que tenemos teléfono móvil un valor perdido es un 0 ya que no aparece el consumo en nuestros sistemas; en la telefonía este es un caso prototípico de valor perdido. Otro ejemplo es la medición de un paciente que ha abandonado el estudio, en este caso el dato recogido es nulo, y debemos evaluar si tener en cuenta ese registro para nuestro estudio. El primer paso ante un análisis de los valores perdidos es definir "valor perdido".

Por otro lado podemos tener valores perdidos cuantitativos o cualitativos. Tiene hipoteca si o no, en caso de missing ¿qué ponemos? Importe de la hipoteca, en caso de missing ¿ponemos un 0? Para los valores categóricos podemos poner el valor más frecuente de nuestra muestra pero también puede resultar interesante una nueva categoría "desconocido". Para las variables continuas podemos quedarnos con la media pero hay que tener en cuenta que nos afecta a la aleatoriedad de los datos y a la consistencia de la información. Imaginaos: Tiene hipoteca: "desconocido" Importe de hipoteca: 150.000 Parece un poco incongruente. Además otro de los problemas que nos plantea la aparición de missing es cuantificar el valor de predicción de una variable con un gran número de valores perdidos, puede ser que no nos interese incluirla en el modelo.

En la práctica casi todos los paquetes estadísticos tienen implementados procesos que nos permiten sustituir los valores perdidos. También podemos plantearnos estudios más complejos como la utilización de árboles de decisión o análisis discriminante fijando como target  "el ser valor perdido". Al final es muy probable que todo dependa de la finalidad de nuestro análisis, no es lo mismo una selección de clientes para una campaña de marketing en telefonía  que una prueba médica.

Espero vuestras opiniones. Saludos.