Anda di halaman 1dari 5

Reemplazo de valores perdidos

AuthorNicholas J. Cox, Durham University, UK

1. Los problemas
Los usuarios a menudo desean reemplazar los valores perdidos por valores vecinos
que no faltan, particularmente cuando las observaciones ocurren en algún orden
definido, a menudo (pero no siempre) un orden de tiempo. Normalmente, esto ocurre
cuando los valores de alguna variable deben ser idénticos dentro de los bloques de
observaciones, pero, por alguna razón, los valores no se pierden explícitamente en el
conjunto de datos solo para ciertas observaciones, la mayoría de las veces la primera.
Entonces, hay un deseo de copiar valores dentro de bloques de observaciones.

Alternativamente, los usuarios a menudo desean reemplazar los valores perdidos en


una secuencia, generalmente en una secuencia de tiempo. Estos problemas se pueden
resolver con métodos similares.

Una situación diferente, que no se aborda directamente en esta pregunta frecuente,


es cuando se conocen valores de alguna variable que varía en el tiempo solo para
ciertas observaciones. Entonces hay una necesidad de imputación o interpolación
entre valores conocidos. Copiar el último valor hacia adelante es poco probable que
sea un buen método de interpolación, a menos que, como se acaba de decir, se sepa
que los valores permanecieron constantes en un nivel establecido hasta el siguiente
nivel establecido. De cualquier manera, los usuarios que aplican los métodos descritos
aquí para la imputación o la interpolación asumen la responsabilidad de lo que hacen.

Tenga en cuenta que todos los métodos de interpolación mencionados aquí (y algunos
otros) se implementan directamente en el mipolado de comandos contribuido por la
comunidad (que se puede descargar desde el SSC).

2. Sin tsset: copiando valores no perdidos


Veamos primero el caso en el que no ha configurado sus datos (consulte, por ejemplo,
[TS] tsset para obtener una explicación), pero supondremos que los datos se han
colocado en el orden correcto, por ejemplo, escribiendo

. sort time

Si los valores faltantes ocurrieron solos, entonces podrían ser reemplazados por el
valor anterior

. replace myvar = myvar[_n-1] if missing(myvar)

o por el siguiente valor

. replace myvar = myvar[_n+1] if missing(myvar)

Aquí, la notación de subíndices utilizada es que _n siempre se refiere a cualquier


observación dada, _n − 1 a la observación anterior y _n + 1 a la siguiente observación,
dado el orden de clasificación actual. No hay, por supuesto, ninguna observación antes
de la primera, o después de la última, por lo que siempre falta myvar [0], ya que es
myvar para cualquier número de observación que sea negativo o mayor que el número
de observaciones en los datos. Consulte [U] 13.7 Subíndices explícitos para obtener
más información sobre los subíndices.

missing(myvar) captura tanto las faltas numéricas como las fallas de la cadena. Si
myvar es numérico, podrías escribir

. replace myvar = myvar[_n+1] if myvar >= .

porque . <.a <.b <... <.z son los valores numéricos que faltan. La mayoría de los
problemas involucran valores numéricos faltantes, por lo que, a partir de ahora, los
ejemplos serán solo para variables numéricas. Sin embargo, si myvar fuera cadena,

. replace myvar = myvar[_n+1] if myvar == ""

sería la sintaxis correcta, no el comando anterior, porque la cadena vacía "" falta una
cadena.

3. Copiando los valores anteriores hacia abajo: el efecto cascada.


Los valores faltantes pueden aparecer en bloques de dos o más. Supongamos que
desea reemplazar las faltas por el valor de no faltante anterior, siempre que haya
ocurrido, de modo que dado

desea reemplazar no solo myvar [2], sino también myvar [3] con 42.

. replace myvar = 42 in 2/3

es una solución interactiva, pero, para conjuntos de datos más grandes, necesita una
forma más sistemática de proceder. Para obtener esto, es útil saber que reemplazar
siempre usa el orden de clasificación actual: el valor para la observación 2 siempre se
reemplaza antes que para la observación 3, por lo que el valor de reemplazo para 2 se
puede usar para calcular el valor de reemplazo para 3.

. replace myvar = myvar[_n-1] if myvar >= .


logra este propósito myvar [1] no ha cambiado, porque myvar [1] no falta. myvar [2] se
reemplaza por el valor de myvar [1], es decir, 42, porque falta myvar [2]. Pero myvar
[3] se reemplaza por el nuevo valor de myvar [2], 42, no su valor original, falta (.). De
esta manera, los valores no perdidos se copian en cascada en el orden de clasificación
actual. Naturalmente, uno o más valores faltantes al inicio de los datos no se pueden
reemplazar de esta manera, ya que ningún valor que no falte precede a ninguno de
ellos.

¿Qué sucede si desea utilizar solo el valor anterior y no desea este efecto en cascada?
Necesitas copiar la variable y reemplazar desde eso:

. gen mycopy = myvar


. reemplace myvar = mycopy [_n-1] si myvar> =.
No se está haciendo un reemplazo en mycopy, por lo que no hay efecto de cascada.
Reemplazar solo mira a mycopy y retrocede una observación.

4. Copiando los siguientes valores hacia arriba.


El caso opuesto es el reemplazo siguiendo los valores, pero debido a que reemplazar
respeta el orden actual, esta no es solo la imagen reflejada del reemplazo por los
valores anteriores. En la práctica, es más fácil revertir la serie y trabajar a la inversa.

. tiempo de gsort
. Reemplace myvar = myvar [_n-1] si myvar> =.
gsort le permite obtener ordenación inversa; ver [D] gsort. El tiempo de orden del
comando pone los valores más altos al final, mientras que gsort −time coloca los
valores más altos primero. Es como si hubieras generado una variable que fue
multiplicada por el tiempo por -1 y ordenada en ella, y, de hecho, esto es exactamente
lo que gsort hace entre bastidores, aunque la variable es temporal y se elimina
después de que haya cumplido su propósito.

. Reemplace myvar = myvar [_n + 1] si myvar> =.


No produce un efecto cascada. myvar [2] sería reemplazado por myvar existente [3],
myvar [3] sería reemplazado por myvar [4] existente, y así sucesivamente. A lo sumo,
uno de cualquier bloque de valores perdidos sería reemplazado. Esto podría, por
supuesto, ser exactamente lo que quieres.

Una vez más, no se puede hacer nada con los valores faltantes al final de la serie
(colocados al principio después del gsort). Después del reemplazo, probablemente
querrá revertir la clasificación una vez más

. tiempo de clasificación
5. Complicaciones: varias variables y estructura del panel.
Dos complicaciones comunes son

Quiere hacer esto con varias variables: use foreach. ordene o gsort una vez, reemplace
todas las variables usando foreach y, si es necesario, ordene nuevamente.
Usted tiene datos del panel, por lo que el reemplazo apropiado es un valor no faltante
para cada individuo en el panel.
Supongamos que los individuos son identificados por id. Hay solo algunos detalles
adicionales para revisar, como

. por id (tiempo), ordena: reemplaza myvar = myvar [_n-1] si myvar> =.


o

. gsort id-time
. silenciosamente por id: reemplaza myvar = myvar [_n-1] si myvar> =.
. tipo de tiempo de identificación
La clave de muchos problemas de administración de datos con los datos del panel se
encuentra en la siguiente clasificación por algunos cálculos en: Para obtener más
información, consulte las secciones del manual indexado en :.

6. Con tsset
Si tiene que configurar sus datos, digamos, escribiendo

. tiempo tsset
entonces

. Reemplace myvar = L. myvar si myvar> =.


tiene el efecto de copiar en cascada, mientras que

. Reemplace myvar = F. myvar si myvar> =.


no tiene tal efecto El valor de tsset es que toma en cuenta las brechas en sus datos y
(si hubiera declarado una variable de panel) de cualquier estructura de panel a sus
datos.

7. Valores faltantes en las secuencias.


En algunos conjuntos de datos, las variables de tiempo vienen con espacios, algo así
como
Podemos usar un método similar y confiar en la cascada:

. reemplazar año = 1988 en 1


. reemplazar año = año [_n-1] + 1 si falta (año)
La diferencia es simplemente que cada valor es uno más que el anterior. Si los datos
fueran una vez por década, cada valor sería 10 más, y así sucesivamente. Nuevamente,
los valores faltantes al comienzo de una secuencia requieren cirugía especial, como se
muestra aquí. Con los datos del panel tsset, use L.year + 1 en lugar del año [_n-1] + 1.

https://www.stata.com/support/faqs/data-management/replacing-missing-values/

Anda mungkin juga menyukai