Ir al contenido principal

[R] [Manejo de Datos Faltantes] [Imputación Aleatoria] Estrategias en R para Imputar Valores Faltantes en Conjuntos de Datos con Ejemplos Prácticos

 Este programa en R realiza varias operaciones de imputación para tratar valores faltantes (NA) en un conjunto de datos cargado desde un archivo CSV. Aquí está el desglose de cada sección del código:


### 1. Cargar los datos

```r

data <- read.csv("../data/tema1/missing-data.csv", na.strings = "")

```

Se carga un archivo CSV ubicado en `"../data/tema1/missing-data.csv"` en un `data.frame` llamado `data`. La opción `na.strings = ""` especifica que las celdas vacías en el archivo se interpretarán como valores faltantes (`NA`) en R.


### 2. Crear una nueva columna con la media para valores NA en "Income"

```r

data$Income.mean <- ifelse(is.na(data$Income),

                           mean(data$Income, na.rm = TRUE),

                           data$Income)

```

Aquí, el programa crea una nueva columna, `Income.mean`, que reemplaza los valores `NA` en la columna `Income` con la media de los valores no `NA` en esa misma columna. Esto se logra utilizando `ifelse`, que evalúa si el valor es `NA` y, si es así, lo reemplaza con la media. `mean(data$Income, na.rm = TRUE)` calcula la media ignorando valores `NA`.


### 3. Definir una función de imputación aleatoria `rand.impute`

```r

rand.impute <- function(x) {

  missing <- is.na(x)

  n.missing <- sum(missing)

  x.obs <- x[!missing]

  imputed <- x

  imputed[missing] <- sample(x.obs, n.missing, replace = TRUE)

  return(imputed)

}

```

Esta función `rand.impute` toma un vector `x` (como una columna) y reemplaza los valores `NA` con una muestra aleatoria de los valores observados (no `NA`). El proceso:

   - Identifica los elementos que son `NA` con `is.na(x)`.

   - Calcula cuántos valores `NA` hay en `x`.

   - Obtiene los valores observados `x.obs` (sin `NA`).

   - Reemplaza los `NA` en `x` con una muestra aleatoria de los valores en `x.obs`, usando `sample`.


### 4. Definir una función de imputación para un `data.frame`

```r

random.impute.data.frame <- function(dataframe, cols) {

  names <- names(dataframe)

  for (col in cols) {

    name <- paste(names[col], ".imputed", sep = "")

    dataframe[[name]] <- rand.impute(dataframe[[col]])

  }

  return(dataframe)

}

```

Esta función `random.impute.data.frame` aplica la función de imputación aleatoria `rand.impute` a columnas específicas en un `data.frame`. Los pasos son:

   - Toma el `data.frame` y una lista de columnas (`cols`) a imputar.

   - Itera sobre las columnas especificadas y, para cada una, crea una nueva columna con el sufijo `.imputed` que contiene los valores originales, pero con los `NA` reemplazados aleatoriamente.


### 5. Recargar los datos y reemplazar ceros por `NA`

```r

data <- read.csv("../data/tema1/missing-data.csv", na.strings = "")

data$Income[data$Income == 0] <- NA

```

Los datos se recargan para asegurar que el `data.frame` esté limpio. Luego, se reemplazan los ceros en la columna `Income` con `NA`, indicando que los ceros se consideran valores faltantes en este contexto.


### 6. Aplicar la función de imputación aleatoria

```r

data <- random.impute.data.frame(data, c(1, 2))

```

Finalmente, se llama a la función `random.impute.data.frame` para aplicar la imputación aleatoria a las columnas especificadas. En este caso, se imputan la primera y segunda columna del `data.frame` `data`.

Comentarios

Entradas populares de este blog

[DATA SCIENCE] [R PROGRAMMING] [DATA VISUALIZATION] Explorando Técnicas de Análisis y Visualización de Datos en R

  Introducción En el análisis de datos, la correcta partición y visualización de los datasets es crucial para obtener conclusiones precisas y valiosas. En este artículo, exploraremos diversas técnicas en R para particionar datasets, crear histogramas, scatterplots, boxplots, y ajustar curvas de regresión y suavizado. 1. Partición de Datasets La partición de datasets es una etapa fundamental en el proceso de machine learning. Permite dividir los datos en conjuntos de entrenamiento, validación y prueba para asegurar que nuestros modelos se entrenen y evalúen adecuadamente. Función para Particionar Datasets # Función para automatizar la partición de datasets partition_data <- function(data, target_column, train_ratio = 0.7, validate_ratio = NULL, seed = 123) {   # Establecer la semilla para reproducibilidad   set.seed(seed)      # Crear partición de entrenamiento   training_ids <- createDataPartition(data[[target_column]], p = train_ratio, list = FA...

[DATA SCIENCE] Guion de formación en matemáticas y R sobre matrices de confusión, diagramas de mosaico, análisis de componentes principales y diagramas ROC.

Guion de Formación en Matemáticas y R Guion de Formación en Matemáticas y R Este guion está diseñado para aprender y consolidar conocimientos sobre matrices de confusión, diagramas de mosaico, análisis de componentes principales (PCA) y diagramas ROC utilizando la plataforma R. 1. Matrices de Confusión Teoría Matemática: Definición: Una matriz de confusión evalúa el rendimiento de un modelo de clasificación. Consiste en una tabla que compara las predicciones del modelo con los valores reales. Componentes: Verdaderos Positivos (TP) Falsos Positivos (FP) Verdaderos Negativos (TN) Falsos Negativos (FN) Métricas derivadas: Precisión: Precision = TP / (TP + FP) Sensibilidad: Recall = TP / (TP + FN) Especificidad: Specificity = TN /...

[Machine Learning][Python][Clasificación] Understanding Support Vector Machines with Python

Support Vector Machines con Python Support Vector Machines con Python Support Vector Machines (SVM) son algoritmos de aprendizaje supervisado muy potentes, a menudo utilizados para problemas de clasificación. Este artículo demuestra cómo utilizar SVM en Python con la biblioteca scikit-learn y proporciona una explicación de la teoría subyacente. 1. Implementación en Python Código en Python: import numpy as np # Biblioteca para trabajar con arreglos y operaciones matemáticas import matplotlib.pyplot as plt # Biblioteca para crear gráficos y visualizaciones from sklearn import datasets # Módulo para cargar y manejar conjuntos de datos estándar from sklearn.model_selection import train_test_split # Función para dividir los datos en entrenamiento y prueba from sklearn.svm import SVC # Clase para implementar Support Vector Machines # 1. Cargar datos # Usaremos el dataset de iris, seleccionando solo dos clases para sim...