Proceso para la Imputacion basada en Modelos
Cuando se utiliza un modelo para imputar, en principio no aceptan valores faltantes por lo que el primer paso es imputar los valores faltantes con dummies. Luego se utiliza el modelo y se va iterando hasta que los valores que hemos sustituido con dummies no cambien. Justo alli se llega a una optima imputacion.
- Preparacion de los datos
# preparamos los datos de la variable a imputar
nhanes_model_df= (
nhanes_df
.select_columns('height', 'weight', 'gender', 'age') # seleccionamos columnas
.sort_values(by='height') # ordenamos en funcion de height
# sustituir los valores faltantes con dummies
.transform_column(
'weight', # variable de interes
lambda x: x.ffill(),
elementwise = False
) # matriz de sombra con el sufijo imp
.missing.bind_shadow_matrix2(
True,
False,
suffix='_imp',
only_missing=False # matriz de sombra para todas las variables
)
)
nhanes_model_df
- Preparacion del modelo
# para este ejemplo vamos a utilizar la regresion lineal como modelo
height_ols = (
nhanes_model_df
.pipe(
lambda df: smf.ols('height ~ weight + gender + age', data=df)
)
.fit()
)
- Generacion de los valores imputados mediante el modelo
# obtener solo las observaciones con valores nulos en la variable height
(
nhanes_model_df
.pipe(
lambda df: df[df.height.isna()]
)
)
# utilizamos el modelo para generar los valores imputados
ols_imputed_values = (
nhanes_model_df
.pipe(
lambda df: df[df.height.isna()]
)
# aplicamos el modelo. Los valores imputados se redondean debido a que son enteros
.pipe(
lambda df: height_ols.predict(df).round()
)
)
ols_imputed_values
- Sustitucion de los valores imputados en el Dataset
# sustituimos los valores imputados generados con
# el modelo en la variable asociada
nhanes_model_df.loc[nhanes_model_df.height.isna(), ['height']] = ols_imputed_values
nhanes_model_df
- Visualizacion de los valores imputados
(
nhanes_model_df
.missing
.scatter_imputation_plot(
x = 'weight', # variable independiente
y = 'height' # variable objetivo
)
)
La grafica nos muestra la imputacion de la variable height en funcion de la variable weight. Observamos dos bloques de datos lo que podria indicar que se trata de la diferencia en peso entre mujeres y hombres.
El siguiente paso para aprovechar mejor el modelo es repetir todos los pasos anteriores pero en la preparacion de los datos, en vez de utilizar los valores dummies para weight, utilizamos la variable height con los valores imputados por el modelo. De esta manera ahora se busca imputar los valores de la variable weight en vez de los de height que ya han sido imputados.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?