“Año del Bicentenario, de la consolidación de nuestra Independencia, y de la conmemoración de las heroicas batallas de Junín y Ayacucho”


Tema: Análisis de Datos para el Índice de Desarrollo Global (IDG) - Informe Final

Curso: Estadística Aplicada a la Computación

Docente: Victor Manuel Guevara Ponce

Alumno: Alvaro Raul Viera Ruesta

Indice

I. Aspectos generales

1.1 Nombre de la organización

1.2 Descripción del caso que se va a analizar

II. Fundamentos básicos de la Estadística

2.1 Objetivo de estudio

2.2 Población de estudio

2.3 Muestra

2.4 Unidad de análisis

III. Variables y tipo de variables

3.1 Importación al entorno de trabajo

3.2 Variables y descripción de cada variable

IV. Manejo de base de datos

4.1 Carga y visualización de los datos

V. Tablas de frecuencia (Para cada variable)

5.1 Tablas de frecuencia de las variables

VI. Representación gráfica de datos.

6.1 Graficos de las tablas EDescripción por I1

VII. Medidas estadísticas de tendencia

7.1 Media aritmética

7.2 Mediana

7.3 Moda

VIII. Medidas estadísticas de posición

8.1 Categorizar en 4 grupos a el I1

8.2 Calcular e interpretar los cuartiles para la I2

8.3 Dividir en 10 grupo

8.4 Dividir en 100 grupo

8.5 Asimetria

8.6 Curtosis

IX. Manejo de datos Missing

9.1 Verificación de valores perdidos

9.2 Corrección de missing

9.2.1 Eliminar filas o columnas con missin

9.2.2 Aplicando técnicas de imputación

9.2.3 Utilizando otra librería para imputar datos

9.2.4 Imputación utilizando vecinos más cercanos

X. Manejo de valores outliers

10.1 Detección de outtliers univariado - gráfica

10.1.1 Gráfico de cajas

10.2. Correción

10.2.1 Eliminar los atípicos

XI. Transformación de variables

11.1 Transformación de raíz cuadrada

11.2 Transformación exponencial

11.3 Transformación logarítmica

11.4 Comparación de transformaciones

XII. Estandarización y normalización de variables

12.1 Estandarización

12.1.1 Método 1 Por partes

12.1.2 Método 2 Directo

12.1.3 Método 3 Apoyarse en las funciones de R

12.2 Normalización

12.2.1 Método 1

12.2.2 Método 2 Función

12.2.3 Aplicando a todo el caso

XIII. Modelamiento predictivo

13.1 Regreción lineal

13.1.1 Diagrama de dispersión o puntos

13.1.2 Coeficiente de correlación

13.1.3. Regresión lineal simple

13.2 Regreción angular

13.2.1 Representación de las observaciones

13.2.2 Generar el modelo de regresión logística

13.2.3 Gráfico del modelo

13.2.4 Frecuencias de las variables I2 por el I1

13.2.5 Comparando modelos

13.2.6 Regresión logistica

I. Aspectos generales

1.1. Nombre de la organización

“Índice de Desarrollo Global (IDG)”

1.2. Descripción del caso que se va a analizar

El Índice de Desarrollo Global (IDG) es una organización internacional que se dedica a analizar y evaluar el desarrollo de diferentes regiones y países del mundo. Utiliza un conjunto de indicadores (I1 a I7) para medir diversos aspectos como el crecimiento económico, la educación, la salud, la sostenibilidad, entre otros.

En este caso, el GDI ha recopilado datos de diversas regiones (Z1 a Z12) sobre los indicadores mencionados. Cada región tiene valores específicos para cada indicador, y el GDI busca entender y comparar el desarrollo en estas áreas geográficas. El análisis de estos datos puede revelar patrones interesantes y proporcionar información valiosa sobre las fortalezas y debilidades de cada región en términos de desarrollo.

Los indicadores incluyen variables como el crecimiento económico (I1), la esperanza de vida (I2), la educación (I3), la igualdad de género (I4), la sostenibilidad ambiental (I5), la calidad de vida (I6), y la infraestructura (I7). Los valores numéricos asociados con cada indicador representan medidas específicas en esas áreas para cada región.

II. Fundamentos básicos de la Estadística

2.1. Objetivo de estudio

El objetivo de este estudio parece ser analizar diversas regiones geográficas en términos de múltiples variables representadas por I1 a I7. El conjunto de datos presenta información cuantitativa sobre aspectos específicos de estas regiones.

2.2. Población de estudio

La población de estudio en este caso son las distintas regiones geográficas identificadas por las etiquetas Z1 a Z12. Cada región representa una unidad en la población de estudio.

2.3. Muestra

En el contexto de esta información, no se menciona directamente la presencia de una muestra específica. Parece ser que los valores proporcionados para las variables I1 a I7 son datos agregados para cada región geográfica, y no una muestra extraída de una población más grande. Sin embargo, si hay alguna información adicional sobre cómo se recopilan estos datos, podría proporcionar más claridad.

2.4. Unidad de análisis

La unidad de análisis parece ser cada región geográfica identificada por las etiquetas Z1 a Z12. Cada una de estas regiones se analiza en función de las variables I1 a I7, que representan diferentes aspectos cuantitativos de interés.

III. Variables y tipo de variables

3.1. Importación al entorno de trabajo

# Instalar y cargar los paquetes necesarios
if (!require(ggplot2)) {
  install.packages("ggplot2")
  library(ggplot2)
}
## Loading required package: ggplot2

3.2. Variables y descripción de cada variable

Etiqueta (Z): Código de identificación de la región geográfica. Descripción: Nombre o descripción de la región geográfica. I1: Valor numérico para la variable I1. I2: Valor numérico para la variable I2. I3: Valor numérico para la variable I3. I4: Valor numérico para la variable I4. I5: Valor numérico para la variable I5. I6: Valor numérico para la variable I6. I7: Valor numérico para la variable I7.

IV. Manejo de base de datos

4.1. Carga y visualización de los datos

# Cargar los datos
idg <- read.csv("caso1.csv", sep = ";", stringsAsFactors = TRUE, encoding = "latin1");
head(idg)
##   Etiqueta          Descripción  I1   I2    I3   I4  I5 I6    I7
## 1       Z1    América del norte 213 68.1  97.0 84.0 5.5 23 148.0
## 2       Z2         Asia Oceanía 520 53.3 107.8 45.3 4.0 21 108.2
## 3       Z3               Europa 250 77.3 111.4 47.8 5.4 24  82.2
## 4       Z4 Países En transición 114 54.0  86.9 34.2 5.2 27   6.1
## 5       Z5 Países En transición  12  9.2  24.3  3.5 5.6 10   1.5
## 6       Z6       Estados Árabes  37 15.4  53.7 12.5 5.2 20   2.7

V. Tablas de frecuencia

5.1. Tablas de frecuencia de las variables

Solo las tablas I1, I2, I3, I4, I5, I6, I7 se pueden realizar tablas de frecuencia

# Tabla de frecuencia para la tabla I1
library(agricolae)
tabla_frecuencia_I2 <- table.freq(hist(idg$I1,breaks = "Sturges", 
                                          plot = FALSE))
tabla_frecuencia_I2
##   Lower Upper Main Frequency Percentage CF   CPF
## 1     0   100   50         8       66.7  8  66.7
## 2   100   200  150         1        8.3  9  75.0
## 3   200   300  250         2       16.7 11  91.7
## 4   300   400  350         0        0.0 11  91.7
## 5   400   500  450         0        0.0 11  91.7
## 6   500   600  550         1        8.3 12 100.0
# Tabla de frecuencia para la tabla I2
library(agricolae)
tabla_Petal.Width <- table.freq(hist(idg$I2,breaks = "Sturges", 
                                          plot = FALSE))
tabla_Petal.Width
##   Lower Upper Main Frequency Percentage CF   CPF
## 1     0    20   10         5       41.7  5  41.7
## 2    20    40   30         2       16.7  7  58.3
## 3    40    60   50         3       25.0 10  83.3
## 4    60    80   70         2       16.7 12 100.0
# Tabla de frecuencia para la tabla I3
library(agricolae)
tabla_Petal.Width <- table.freq(hist(idg$I3,breaks = "Sturges", 
                                          plot = FALSE))
tabla_Petal.Width
##   Lower Upper Main Frequency Percentage CF   CPF
## 1     0    20   10         1        8.3  1   8.3
## 2    20    40   30         1        8.3  2  16.7
## 3    40    60   50         4       33.3  6  50.0
## 4    60    80   70         2       16.7  8  66.7
## 5    80   100   90         2       16.7 10  83.3
## 6   100   120  110         2       16.7 12 100.0
# Tabla de frecuencia para la tabla I4
library(agricolae)
tabla_Petal.Width <- table.freq(hist(idg$I4,breaks = "Sturges", 
                                          plot = FALSE))
tabla_Petal.Width
##   Lower Upper Main Frequency Percentage CF   CPF
## 1     0    20   10         8       66.7  8  66.7
## 2    20    40   30         1        8.3  9  75.0
## 3    40    60   50         2       16.7 11  91.7
## 4    60    80   70         0        0.0 11  91.7
## 5    80   100   90         1        8.3 12 100.0
# Tabla de frecuencia para la tabla I5
library(agricolae)
tabla_Petal.Width <- table.freq(hist(idg$I5,breaks = "Sturges", 
                                          plot = FALSE))
tabla_Petal.Width
##   Lower Upper Main Frequency Percentage CF   CPF
## 1   2.0   2.5 2.25         2       16.7  2  16.7
## 2   2.5   3.0 2.75         1        8.3  3  25.0
## 3   3.0   3.5 3.25         1        8.3  4  33.3
## 4   3.5   4.0 3.75         1        8.3  5  41.7
## 5   4.0   4.5 4.25         2       16.7  7  58.3
## 6   4.5   5.0 4.75         0        0.0  7  58.3
## 7   5.0   5.5 5.25         4       33.3 11  91.7
## 8   5.5   6.0 5.75         1        8.3 12 100.0
# Tabla de frecuencia para la tabla I6
library(agricolae)
tabla_Petal.Width <- table.freq(hist(idg$I6,breaks = "Sturges", 
                                          plot = FALSE))
tabla_Petal.Width
##   Lower Upper Main Frequency Percentage CF   CPF
## 1     5    10  7.5         4       33.3  4  33.3
## 2    10    15 12.5         2       16.7  6  50.0
## 3    15    20 17.5         1        8.3  7  58.3
## 4    20    25 22.5         4       33.3 11  91.7
## 5    25    30 27.5         1        8.3 12 100.0
# Tabla de frecuencia para la tabla I7
library(agricolae)
tabla_Petal.Width <- table.freq(hist(idg$I7,breaks = "Sturges", 
                                          plot = FALSE))
tabla_Petal.Width
##   Lower Upper Main Frequency Percentage CF   CPF
## 1     0    50   25         9       75.0  9  75.0
## 2    50   100   75         1        8.3 10  83.3
## 3   100   150  125         2       16.7 12 100.0

VI. Representación gráfica de datos.

6.1. Graficos de las tablas Descripción por I1

# Cargar librería ggplot2 para visualización de datos
library(ggplot2)
 
# Crear gráfico de barras para el I1 de la Descripción con colores
grafico_barras_Descripción_I1 <- ggplot(idg, aes(x = Descripción, y = I1, fill = Descripción)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Distribución de Descripción por I1:",
       x = "Descripción",
       y = "I1",
       fill = "Descripción") +
  scale_fill_manual(values = c(
    "América del norte" = "blue",
    "Asia Oceanía" = "green",
    "Países En transición" = "orange",
    "Estados Árabes" = "yellow",
    "América Latina Y El Caribe" = "pink",
    "Asia Oriental Y Oceanía" = "purple",
    "China" = "brown",
    "Asia Meridional" = "gold",
    "India" = "red",
    "Países Menos Adelantados" = "darkslategray",
    "Europa" = "azure"
  )) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
# Visualizar gráfico de barras
print(grafico_barras_Descripción_I1)

# Crear histograma para el I1 de la Descripción
histograma_I1 <- ggplot(idg, aes(x = I1, fill = Descripción)) +
  geom_bar(position = "identity", alpha = 0.7) +  # Cambiar a geom_bar y quitar binwidth
  labs(title = "Histograma de I1 de Descripción",
       x = "I1",
       y = "Count",  # Cambiar a Count ya que ahora estamos usando stat="count"
       fill = "Descripción") +
  theme_minimal()

# Visualizar el histograma
print(histograma_I1)

# Crear gráfico de cajas para el I1 de la Especie
boxplot_I1 <- ggplot(idg, aes(x = Descripción, y = I1)) +
  geom_boxplot() +
  labs(title = "Distribución de I1 por EDescripción",
       x = "Descripción",
       y = "I1") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
 
# Visualizar el gráfico de cajas
print(boxplot_I1)

# Crear gráfico de densidad para el I1 de la Especie
density_plot <- ggplot(idg, aes(x = I1, fill = Descripción)) +
  geom_density(alpha = 0.5) +
  labs(title = "Distribución de Densidad de I1 por EDescripción",
       x = "I1",
       y = "Densidad") +
  theme_minimal()
 
# Visualizar el gráfico de densidad
print(density_plot)
## Warning: Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Groups with fewer than two data points have been dropped.
## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf

## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf

## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf

## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf

## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf

## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf

## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf

## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf

## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf

## Warning in max(ids, na.rm = TRUE): ningun argumento finito para max; retornando
## -Inf

# Crear diagrama circular para EDescripción y I1
pie_chart_Descripción_I1 <- ggplot(idg, aes(x = "Descripción", y = I1, fill = Descripción)) +
  geom_bar(stat = "identity", width = 1, color = "black") +
  coord_polar("y") +
  labs(title = "Distribución de EDescripción por I1",
       fill = "Descripción") +
  theme_minimal() +
  theme(legend.position = "bottom")
 
# Visualizar diagrama circular
print(pie_chart_Descripción_I1)

VII. Medidas estadísticas de tendencia

##Datos de los I2
I2<- c(68,54,77,54,9,15,51,28,28,9,4,10)

7.1. Media aritmética

#Opción 1
promedio = sum(I2)/length(I2)
promedio
## [1] 33.91667
#Opción 2
mean(I2)
## [1] 33.91667

7.2. Mediana

median(I2)
## [1] 28

7.3. Moda

# Opción 1 (tabla)
table(I2)
## I2
##  4  9 10 15 28 51 54 68 77 
##  1  2  1  1  2  1  2  1  1
# Opción 2
library(modeest)
## 
## Attaching package: 'modeest'
## The following object is masked from 'package:agricolae':
## 
##     skewness
mfv(I2)
## [1]  9 28 54

VIII. Medidas estadísticas de posición

8.1. Categorizar en 4 grupos a el I1

quantile(idg$I2)
##     0%    25%    50%    75%   100% 
##  4.800 10.550 28.800 53.475 77.300

8.2. Calcular e interpretar los cuartiles para la I2

quantile(idg$I2)
##     0%    25%    50%    75%   100% 
##  4.800 10.550 28.800 53.475 77.300

8.3. Dividir en 10 grupo

quantile(idg$I2, probs = seq(0, 1, 0.1))
##    0%   10%   20%   30%   40%   50%   60%   70%   80%   90%  100% 
##  4.80  9.26 10.00 12.18 20.72 28.80 42.22 52.64 53.86 66.69 77.30

8.4. Dividir en 100 grupo

quantile(idg$I2, probs = seq(0, 1, 0.01))
##     0%     1%     2%     3%     4%     5%     6%     7%     8%     9%    10% 
##  4.800  5.284  5.768  6.252  6.736  7.220  7.704  8.188  8.672  9.156  9.260 
##    11%    12%    13%    14%    15%    16%    17%    18%    19%    20%    21% 
##  9.326  9.392  9.458  9.524  9.590  9.656  9.722  9.788  9.890 10.000 10.110 
##    22%    23%    24%    25%    26%    27%    28%    29%    30%    31%    32% 
## 10.220 10.330 10.440 10.550 10.660 10.770 11.168 11.674 12.180 12.686 13.192 
##    33%    34%    35%    36%    37%    38%    39%    40%    41%    42%    43% 
## 13.698 14.204 14.710 15.216 16.331 17.794 19.257 20.720 22.183 23.646 25.109 
##    44%    45%    46%    47%    48%    49%    50%    51%    52%    53%    54% 
## 26.572 28.035 28.712 28.734 28.756 28.778 28.800 28.822 28.844 28.866 28.888 
##    55%    56%    57%    58%    59%    60%    61%    62%    63%    64%    65% 
## 30.010 32.452 34.894 37.336 39.778 42.220 44.662 47.104 49.546 51.188 51.430 
##    66%    67%    68%    69%    70%    71%    72%    73%    74%    75%    76% 
## 51.672 51.914 52.156 52.398 52.640 52.882 53.124 53.321 53.398 53.475 53.552 
##    77%    78%    79%    80%    81%    82%    83%    84%    85%    86%    87% 
## 53.629 53.706 53.783 53.860 53.937 54.282 55.833 57.384 58.935 60.486 62.037 
##    88%    89%    90%    91%    92%    93%    94%    95%    96%    97%    98% 
## 63.588 65.139 66.690 68.192 69.204 70.216 71.228 72.240 73.252 74.264 75.276 
##    99%   100% 
## 76.288 77.300

8.5. Asimetria

library(fBasics)
## 
## Attaching package: 'fBasics'
## The following objects are masked from 'package:modeest':
## 
##     ghMode, ghtMode, gldMode, hypMode, nigMode, skewness
## The following objects are masked from 'package:agricolae':
## 
##     kurtosis, skewness
skewness(idg$I2)
## [1] 0.3128164
## attr(,"method")
## [1] "moment"
hist(idg$I2)

8.6. Curtosis

kurtosis(idg$I2)
## [1] -1.589614
## attr(,"method")
## [1] "excess"

IX. Manejo de datos Missing

# Mostrar
head(idg)
##   Etiqueta          Descripción  I1   I2    I3   I4  I5 I6    I7
## 1       Z1    América del norte 213 68.1  97.0 84.0 5.5 23 148.0
## 2       Z2         Asia Oceanía 520 53.3 107.8 45.3 4.0 21 108.2
## 3       Z3               Europa 250 77.3 111.4 47.8 5.4 24  82.2
## 4       Z4 Países En transición 114 54.0  86.9 34.2 5.2 27   6.1
## 5       Z5 Países En transición  12  9.2  24.3  3.5 5.6 10   1.5
## 6       Z6       Estados Árabes  37 15.4  53.7 12.5 5.2 20   2.7
str(idg)
## 'data.frame':    12 obs. of  9 variables:
##  $ Etiqueta   : Factor w/ 12 levels "Z1","Z10","Z11",..: 1 5 6 7 8 9 10 11 12 2 ...
##  $ Descripción: Factor w/ 11 levels "América del norte",..: 1 4 8 10 10 7 2 5 6 3 ...
##  $ I1         : int  213 520 250 114 12 37 80 57 43 27 ...
##  $ I2         : num  68.1 53.3 77.3 54 9.2 15.4 51.1 28.9 28.7 9.8 ...
##  $ I3         : num  97 107.8 111.4 86.9 24.3 ...
##  $ I4         : num  84 45.3 47.8 34.2 3.5 12.5 17.3 8.9 5.3 6.5 ...
##  $ I5         : num  5.5 4 5.4 5.2 5.6 5.2 4.5 3 2.3 4.3 ...
##  $ I6         : int  23 21 24 27 10 20 22 14 13 9 ...
##  $ I7         : num  148 108.2 82.2 6.1 1.5 ...

9.1. VERIFICACIÓN DE VALORES PERDIDOS

# Verificar columnas con missing
which(colSums(is.na(idg))!= 0)
## named integer(0)

Realizar el análisis utilizando librerias

library(VIM)
library(mice)

resumen_missing <- aggr(idg, numbers=T)

summary(resumen_missing)
## 
##  Missings per variable: 
##     Variable Count
##     Etiqueta     0
##  Descripción     0
##           I1     0
##           I2     0
##           I3     0
##           I4     0
##           I5     0
##           I6     0
##           I7     0
## 
##  Missings in combinations of variables: 
##       Combinations Count Percent
##  0:0:0:0:0:0:0:0:0    12     100

Para determinar mejor lo patrones de comportamiento de missing se puede utilizar la siguiente función

library(VIM)
matrixplot(idg)

otra representación

#Con librería mice
library(mice)
md.pattern(idg, rotate.names = TRUE)
##  /\     /\
## {  `---'  }
## {  O   O  }
## ==>  V <==  No need for mice. This data set is completely observed.
##  \  \|/  /
##   `-----'

##    Etiqueta Descripción I1 I2 I3 I4 I5 I6 I7  
## 12        1           1  1  1  1  1  1  1  1 0
##           0           0  0  0  0  0  0  0  0 0

La librería visdat permite visualizar missing pero los ordena por tipo de datos

library(visdat)
vis_dat(idg)

Para obtener columnas con porcentajes de missing

vis_miss(idg)

9.2. Corrección de missing

9.2.1. Eliminar filas o columnas con missin

En este caso se va a eliminar filas:

idg_corregido1 <- na.omit(idg)
str(idg_corregido1)
## 'data.frame':    12 obs. of  9 variables:
##  $ Etiqueta   : Factor w/ 12 levels "Z1","Z10","Z11",..: 1 5 6 7 8 9 10 11 12 2 ...
##  $ Descripción: Factor w/ 11 levels "América del norte",..: 1 4 8 10 10 7 2 5 6 3 ...
##  $ I1         : int  213 520 250 114 12 37 80 57 43 27 ...
##  $ I2         : num  68.1 53.3 77.3 54 9.2 15.4 51.1 28.9 28.7 9.8 ...
##  $ I3         : num  97 107.8 111.4 86.9 24.3 ...
##  $ I4         : num  84 45.3 47.8 34.2 3.5 12.5 17.3 8.9 5.3 6.5 ...
##  $ I5         : num  5.5 4 5.4 5.2 5.6 5.2 4.5 3 2.3 4.3 ...
##  $ I6         : int  23 21 24 27 10 20 22 14 13 9 ...
##  $ I7         : num  148 108.2 82.2 6.1 1.5 ...
# Verificar columnas con missing
which(colSums(is.na(idg_corregido1))!= 0)
## named integer(0)

9.2.2. Aplicando técnicas de imputación

Imputación por medidas de tendencia central

library(DMwR2)
idg_corregido2<-centralImputation(idg) #DMwR, mediana (númerico), moda(no númerico)
str(idg_corregido2)
## 'data.frame':    12 obs. of  9 variables:
##  $ Etiqueta   : Factor w/ 12 levels "Z1","Z10","Z11",..: 1 5 6 7 8 9 10 11 12 2 ...
##  $ Descripción: Factor w/ 11 levels "América del norte",..: 1 4 8 10 10 7 2 5 6 3 ...
##  $ I1         : int  213 520 250 114 12 37 80 57 43 27 ...
##  $ I2         : num  68.1 53.3 77.3 54 9.2 15.4 51.1 28.9 28.7 9.8 ...
##  $ I3         : num  97 107.8 111.4 86.9 24.3 ...
##  $ I4         : num  84 45.3 47.8 34.2 3.5 12.5 17.3 8.9 5.3 6.5 ...
##  $ I5         : num  5.5 4 5.4 5.2 5.6 5.2 4.5 3 2.3 4.3 ...
##  $ I6         : int  23 21 24 27 10 20 22 14 13 9 ...
##  $ I7         : num  148 108.2 82.2 6.1 1.5 ...
# Verificar columnas con missing
which(colSums(is.na(idg_corregido2))!= 0)
## named integer(0)

9.2.3. Utilizando otra librería para imputar datos

library(VIM)
idg_corregido3 <- initialise(idg, method = "median") #media (continuos) mediana (discretos), moda(no númerico)
str(idg_corregido3)
## 'data.frame':    12 obs. of  9 variables:
##  $ Etiqueta   : Factor w/ 12 levels "Z1","Z10","Z11",..: 1 5 6 7 8 9 10 11 12 2 ...
##  $ Descripción: Factor w/ 11 levels "América del norte",..: 1 4 8 10 10 7 2 5 6 3 ...
##  $ I1         : num  213 520 250 114 12 37 80 57 43 27 ...
##  $ I2         : num  68.1 53.3 77.3 54 9.2 15.4 51.1 28.9 28.7 9.8 ...
##  $ I3         : num  97 107.8 111.4 86.9 24.3 ...
##  $ I4         : num  84 45.3 47.8 34.2 3.5 12.5 17.3 8.9 5.3 6.5 ...
##  $ I5         : num  5.5 4 5.4 5.2 5.6 5.2 4.5 3 2.3 4.3 ...
##  $ I6         : num  23 21 24 27 10 20 22 14 13 9 ...
##  $ I7         : num  148 108.2 82.2 6.1 1.5 ...
# Verificar columnas con missing
which(colSums(is.na(idg_corregido3))!= 0)
## named integer(0)

9.2.4. Imputación utilizando vecinos más cercanos

library(DMwR2)
idg_corregido4<-knnImputation(idg, k=10)
str(idg_corregido4)
## 'data.frame':    12 obs. of  9 variables:
##  $ Etiqueta   : Factor w/ 12 levels "Z1","Z10","Z11",..: 1 5 6 7 8 9 10 11 12 2 ...
##  $ Descripción: Factor w/ 11 levels "América del norte",..: 1 4 8 10 10 7 2 5 6 3 ...
##  $ I1         : int  213 520 250 114 12 37 80 57 43 27 ...
##  $ I2         : num  68.1 53.3 77.3 54 9.2 15.4 51.1 28.9 28.7 9.8 ...
##  $ I3         : num  97 107.8 111.4 86.9 24.3 ...
##  $ I4         : num  84 45.3 47.8 34.2 3.5 12.5 17.3 8.9 5.3 6.5 ...
##  $ I5         : num  5.5 4 5.4 5.2 5.6 5.2 4.5 3 2.3 4.3 ...
##  $ I6         : int  23 21 24 27 10 20 22 14 13 9 ...
##  $ I7         : num  148 108.2 82.2 6.1 1.5 ...
# Verificar columnas con missing
which(colSums(is.na(idg_corregido4))!= 0)
## named integer(0)

X. Manejo de valores outliers

10.1. Detección de outtliers univariado - gráfica

El análisis solo se realiza para variable cuantitativas

10.1.1. Gráfico de cajas

Gráfico de cajas y bigotes

#Gráfico de cajas y bigotes
boxplot(idg$I2)

Según los resultados, el I1 no tiene valores atípicos

Obteniendo valores atípicos para la variable I1

boxplot(idg$I1)

Para todo

boxplot(idg)

Para I2

boxplot(idg$I2)

Según los resultados, se identifica valores atípicos. Vamos a identificarlo y plantear estrategia de corrección

# Calcular el RIC (RIC = Q3 - Q1)
q1 <- quantile(idg$I2, 0.25)
q3 <- quantile(idg$I2, 0.75)
RIC <- q3-q1
RIC
##    75% 
## 42.925
# Limites o bigotes (Superior e inferior)
bigote_inferior <- q1-1.5*RIC
bigote_inferior
##      25% 
## -53.8375
bigote_superior <- q3+1.5*RIC
bigote_superior
##      75% 
## 117.8625
# Identificar lo valores atípicos
outliers_det <- idg$I2[idg$I2 < bigote_inferior | idg$I2 > bigote_superior]
outliers_det
## numeric(0)

10.2. Correción

10.2.1 Eliminar los atípicos

idg_sin_atipicos <- idg[!idg$I2 %in% outliers_det,]
idg_sin_atipicos
##    Etiqueta                Descripción  I1   I2    I3   I4  I5 I6    I7
## 1        Z1          América del norte 213 68.1  97.0 84.0 5.5 23 148.0
## 2        Z2               Asia Oceanía 520 53.3 107.8 45.3 4.0 21 108.2
## 3        Z3                     Europa 250 77.3 111.4 47.8 5.4 24  82.2
## 4        Z4       Países En transición 114 54.0  86.9 34.2 5.2 27   6.1
## 5        Z5       Países En transición  12  9.2  24.3  3.5 5.6 10   1.5
## 6        Z6             Estados Árabes  37 15.4  53.7 12.5 5.2 20   2.7
## 7        Z7 América Latina Y El Caribe  80 51.1  56.6 17.3 4.5 22  10.7
## 8        Z8    Asia Oriental Y Oceanía  57 28.9  61.5  8.9 3.0 14   7.3
## 9        Z9                      China  43 28.7  66.6  5.3 2.3 13   5.5
## 10      Z10            Asia Meridional  27  9.8  44.5  6.5 4.3  9   1.9
## 11      Z11                      India  32  4.8  48.7  6.4 3.5  9   1.9
## 12      Z12   Países Menos Adelantados   7 10.8  18.4  3.2 2.5  8   0.4

Para confirmar vamos a realizar un gráfico de cajas con la nueva data

boxplot(idg_sin_atipicos$I2)

XI. Transformación de variables

11.1. Transformación de raíz cuadrada

# Original
hist(idg$I2, 12)

Para sacar la raiz cuadrada, simplemente se puede utilizar la función sqrt

sqrt(idg$I2)
##  [1] 8.252272 7.300685 8.792042 7.348469 3.033150 3.924283 7.148426 5.375872
##  [9] 5.357238 3.130495 2.190890 3.286335

Graficamente

hist(sqrt(idg$I2))

11.2. Transformación exponencial

exp(idg$I2)
##  [1] 3.762307e+29 1.405710e+23 3.723604e+33 2.830753e+23 9.897129e+03
##  [6] 4.876801e+06 1.557572e+22 3.557218e+12 2.912404e+12 1.803374e+04
## [11] 1.215104e+02 4.902080e+04

para poder observarlo graficamente se tiene:

hist(exp(idg$I2))

Forma 2

I2_exp<- exp(idg$I2)
hist(I2_exp)

11.3. Transformación logarítmica

log(idg$I2)
##  [1] 4.220977 3.975936 4.347694 3.988984 2.219203 2.734368 3.933784 3.363842
##  [9] 3.356897 2.282382 1.568616 2.379546

graficamente

hist(log(idg$I2))

Cambiar la base 2

log(idg$I2, base=2)
##  [1] 6.089583 5.736064 6.272397 5.754888 3.201634 3.944858 5.675251 4.852998
##  [9] 4.842979 3.292782 2.263034 3.432959

graficamente

hist(log(idg$I2, base=2))

11.4. Comparación de transformaciones

#Obtener solo tranaformaciones
I2_sqrt <- sqrt(idg$I2)
I2_exp <- exp(idg$I2)
I2_ln <- log(idg$I2)
I2_log2 <- log(idg$I2, base=2)
I2_log5 <- log(idg$I2, base=5)

Ver graficamente cada una:

par(mfrow=c(3,2))
hist(idg$I2)
hist(I2_sqrt)
hist(I2_exp)
hist(I2_ln)
hist(I2_log2)
hist(I2_log5)

par(mfrow=c(1,1))

La visualización de la distribución puede mejorarse con la gráfica de densidad

par(mfrow=c(3,2))
plot(density(idg$I2), main = "Distribución de I2 originales")
plot(density(I2_sqrt), main = "Distribución de I2 transformadas - sqrt")
plot(density(I2_exp), main = "Distribución de I2 transformadas - exp")
plot(density(I2_ln), main = "Distribución de I2 transformadas - ln")
plot(density(I2_log2), main = "Distribución de I2 transformadas - log2")
plot(density(I2_log5), main = "Distribución de I2 transformadas - log5")

par(mfrow=c(1,1))    

gráfica general

# Convertir las columnas seleccionadas a numéricas si es necesario
idg[, 1:5] <- sapply(idg[, 1:5], as.numeric)

# Verificar si hay algún problema con la conversión
print(sapply(idg[, 1:5], class))
##    Etiqueta Descripción          I1          I2          I3 
##   "numeric"   "numeric"   "numeric"   "numeric"   "numeric"
# Ahora puedes calcular la correlación sin problemas
library(PerformanceAnalytics)
chart.Correlation(cor(idg[, 1:5]), histogram = TRUE)

XII. Estandarización y normalización de variables

12.1. Estandarización

head(idg)
##   Etiqueta Descripción  I1   I2    I3   I4  I5 I6    I7
## 1        1           1 213 68.1  97.0 84.0 5.5 23 148.0
## 2        5           4 520 53.3 107.8 45.3 4.0 21 108.2
## 3        6           8 250 77.3 111.4 47.8 5.4 24  82.2
## 4        7          10 114 54.0  86.9 34.2 5.2 27   6.1
## 5        8          10  12  9.2  24.3  3.5 5.6 10   1.5
## 6        9           7  37 15.4  53.7 12.5 5.2 20   2.7

Vamos a aplicar estandarización Z a la variable longitud de manera manual

12.1.1. Método 1 Por partes

idg$I2
##  [1] 68.1 53.3 77.3 54.0  9.2 15.4 51.1 28.9 28.7  9.8  4.8 10.8
media_I2 <- mean(idg$I2)
media_I2
## [1] 34.28333
desv_est <- sd(idg$I2)
desv_est
## [1] 25.39373
I2_estandar <- (idg$I2-media_I2)/desv_est
I2_estandar
##  [1]  1.3316936  0.7488725  1.6939877  0.7764384 -0.9877766 -0.7436219
##  [7]  0.6622370 -0.2119946 -0.2198705 -0.9641488 -1.1610478 -0.9247690

12.1.2. Método 2 Directo

I2_estandar2 <- (idg$I2-mean(idg$I2))/sd(idg$I2)
I2_estandar2
##  [1]  1.3316936  0.7488725  1.6939877  0.7764384 -0.9877766 -0.7436219
##  [7]  0.6622370 -0.2119946 -0.2198705 -0.9641488 -1.1610478 -0.9247690

12.1.3. Método 3 Apoyarse en las funciones de R

R tiene múltiple funciones para estandarizar, la clásica es la función scale

#Función scale
I2_estandar3 <- scale(idg$I2)
I2_estandar3
##             [,1]
##  [1,]  1.3316936
##  [2,]  0.7488725
##  [3,]  1.6939877
##  [4,]  0.7764384
##  [5,] -0.9877766
##  [6,] -0.7436219
##  [7,]  0.6622370
##  [8,] -0.2119946
##  [9,] -0.2198705
## [10,] -0.9641488
## [11,] -1.1610478
## [12,] -0.9247690
## attr(,"scaled:center")
## [1] 34.28333
## attr(,"scaled:scale")
## [1] 25.39373

La ventaja de la función de R, es que se puede enviar todo el caso

idg_cuanti_scale <- scale(idg[ ,1:5])
head(idg_cuanti_scale)
##        Etiqueta Descripción          I1         I2         I3
## [1,] -1.5254255  -1.5842361  0.65048086  1.3316936  1.0572068
## [2,] -0.4160251  -0.6931033  2.70921926  0.7488725  1.4116145
## [3,] -0.1386750   0.4950738  0.89860243  1.6939877  1.5297504
## [4,]  0.1386750   1.0891623 -0.01341198  0.7764384  0.7257700
## [5,]  0.4160251   1.0891623 -0.69742278 -0.9877766 -1.3284818
## [6,]  0.6933752   0.1980295 -0.52977307 -0.7436219 -0.3637054

12.2. Normalización

12.2.1. Método 1

I2_normal <- (idg$I2-min(idg$I2))/(max(idg$I2)-min(idg$I2))
I2_normal
##  [1] 0.87310345 0.66896552 1.00000000 0.67862069 0.06068966 0.14620690
##  [7] 0.63862069 0.33241379 0.32965517 0.06896552 0.00000000 0.08275862

12.2.2. Método 2 Función

library(scales)
rescale(idg$I2)
##  [1] 0.87310345 0.66896552 1.00000000 0.67862069 0.06068966 0.14620690
##  [7] 0.63862069 0.33241379 0.32965517 0.06896552 0.00000000 0.08275862

12.2.3. Aplicando a todo el caso

la función rescale solo permite aplicarse a vectores, no es posible directamente apicar al data frame.

library(caret)
## Loading required package: lattice
pre_procesamiento<-preProcess(idg[,1:5]) # Así por defecto muestra la est. Z
predict(pre_procesamiento, idg[,1:5]) 
##      Etiqueta Descripción          I1         I2          I3
## 1  -1.5254255 -1.58423607  0.65048086  1.3316936  1.05720682
## 2  -0.4160251 -0.69310328  2.70921926  0.7488725  1.41161449
## 3  -0.1386750  0.49507377  0.89860243  1.6939877  1.52975038
## 4   0.1386750  1.08916230 -0.01341198  0.7764384  0.72577002
## 5   0.4160251  1.08916230 -0.69742278 -0.9877766 -1.32848183
## 6   0.6933752  0.19802951 -0.52977307 -0.7436219 -0.36370540
## 7   0.9707253 -1.28719181 -0.24141558  0.6622370 -0.26854038
## 8   1.2480754 -0.39605902 -0.39565331 -0.2119946 -0.10774431
## 9   1.5254255 -0.09901475 -0.48953714 -0.2198705  0.05961487
## 10 -1.2480754 -0.99014754 -0.59683296 -0.9641488 -0.66560823
## 11 -0.9707253  0.79211803 -0.56330302 -1.1610478 -0.52778302
## 12 -0.6933752  1.38620656 -0.73095272 -0.9247690 -1.52209342
library(caret)
pre_procesamiento<-preProcess(idg[,1:5], method = "range") 
predict(pre_procesamiento, idg[,1:5]) 
##      Etiqueta Descripción          I1         I2         I3
## 1  0.00000000         0.0 0.401559454 0.87310345 0.84516129
## 2  0.36363636         0.3 1.000000000 0.66896552 0.96129032
## 3  0.45454545         0.7 0.473684211 1.00000000 1.00000000
## 4  0.54545455         0.9 0.208576998 0.67862069 0.73655914
## 5  0.63636364         0.9 0.009746589 0.06068966 0.06344086
## 6  0.72727273         0.6 0.058479532 0.14620690 0.37956989
## 7  0.81818182         0.1 0.142300195 0.63862069 0.41075269
## 8  0.90909091         0.4 0.097465887 0.33241379 0.46344086
## 9  1.00000000         0.5 0.070175439 0.32965517 0.51827957
## 10 0.09090909         0.2 0.038986355 0.06896552 0.28064516
## 11 0.18181818         0.8 0.048732943 0.00000000 0.32580645
## 12 0.27272727         1.0 0.000000000 0.08275862 0.00000000

XIII. Modelamiento predictivo

13.1. Regreción lineal

13.1.1. Diagrama de dispersión o puntos

Los siguientes datos son extraidos desde idg.csv

nuevos_datos <- data.frame(
  I2= c(68,54,77,54,9,15,51,28,28,9,4,10),
  I1= c(213,520,250,114,12,37,80,57,43,27,32,7)
)

nuevos_datos
##    I2  I1
## 1  68 213
## 2  54 520
## 3  77 250
## 4  54 114
## 5   9  12
## 6  15  37
## 7  51  80
## 8  28  57
## 9  28  43
## 10  9  27
## 11  4  32
## 12 10   7
# Gráfico con plot
plot(nuevos_datos)

# Gráfico con pairs
pairs(nuevos_datos)

# Realizamos un gráfico mejorado
library(PerformanceAnalytics)
chart.Correlation(nuevos_datos)
## Warning in par(usr): argument 1 does not name a graphical parameter

#Realizamos un gráfico mejorado
library(corrplot)
## corrplot 0.92 loaded
corrplot(cor(nuevos_datos))

13.1.2. Coeficiente de correlación

# Mediante la función cor
cor(nuevos_datos) # Matriz de correlaciones
##           I2        I1
## I2 1.0000000 0.6823813
## I1 0.6823813 1.0000000

Coeficiente de correlación:

r = 0.6823813

13.1.3. Regreción lineal simple

# lm, notación: Y ~ X, data=
modelo_idg <- lm(I2 ~ I1, data=idg)

# Resumen de resultados
summary(modelo_idg)
## 
## Call:
## lm(formula = I2 ~ I1, data = idg)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -27.43 -13.41  -4.20  20.20  27.61 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept) 20.94636    7.30741   2.866   0.0168 *
## I1           0.11497    0.03972   2.894   0.0160 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 19.65 on 10 degrees of freedom
## Multiple R-squared:  0.4558, Adjusted R-squared:  0.4014 
## F-statistic: 8.377 on 1 and 10 DF,  p-value: 0.01599
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept) 20.94636    7.30741   2.866   0.0168 *
## I1           0.11497    0.03972   2.894   0.0160 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 19.65 on 10 degrees of freedom
## Multiple R-squared:  0.4558, Adjusted R-squared:  0.4014 
## F-statistic: 8.377 on 1 and 10 DF,  p-value: 0.01599

13.2. Regreción angular

13.2.1. Representación de las observaciones

# Mejoramos el grafico
ggplot(data = idg, aes(x = I2, y = I1, color = I2)) +
  geom_boxplot(outlier.shape = NA) +
  geom_jitter(width = 0.1) +
  theme_bw() +
  theme(legend.position = "null")
## Warning: Continuous x aesthetic
## ℹ did you forget `aes(group = ...)`?
## Warning: The following aesthetics were dropped during statistical transformation: colour
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

13.2.2. Generar el modelo de regresión logística

modelgest<-glm(I2~I1, data= idg, family = gaussian())

summary(modelgest)
## 
## Call:
## glm(formula = I2 ~ I1, family = gaussian(), data = idg)
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept) 20.94636    7.30741   2.866   0.0168 *
## I1           0.11497    0.03972   2.894   0.0160 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 385.9812)
## 
##     Null deviance: 7093.3  on 11  degrees of freedom
## Residual deviance: 3859.8  on 10  degrees of freedom
## AIC: 109.34
## 
## Number of Fisher Scoring iterations: 2

13.2.3. Gráfico del modelo

# Codificación 0,1 de la variable respuesta
idg$I1 <- as.character(idg$I1)
idg$I1 <- as.numeric(idg$I1)

# Gráfico de dispersión
plot(I1 ~ I2, idg, col = "darkblue",
     main = "Modelo regresión lineal general",
     ylab = "P(I1=1|I2)",
     xlab = "I2", pch = 16)

# Añade la línea de regresión
abline(coef(modelgest), col = "firebrick", lwd = 2.5)

13.2.4. Frecuencias de las variables I2 por el I1

ggplot(idg, aes(I2))+
  geom_histogram(binwidth= .25, fill="red", colour="black")+
  labs(x = "I2", y = "Frecuencia")+
  
  ggtitle("Frecuencia vs I2")

ggplot(idg, aes(I1))+
  geom_histogram(binwidth= 4, fill="red", colour="black")+
  labs(x= "I1", y="Frecuancia")+
  
  ggtitle("Frecuencia vs I1")

13.2.5. Comparando modelos

ggplot(idg, aes(x=I2, y=I1)) +
  geom_jitter(height=0.10) +
  stat_smooth( method="glm", method.args = list(family = "binomial")) +
  geom_smooth(color="yellow")+
  geom_smooth(method = lm, color="purple")+
  labs(x= "I2", y= "I1")+
  ggtitle("Modelos de probabilidades de I2 que puede ver en I1")
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Computation failed in `stat_smooth()`
## Caused by error:
## ! y values must be 0 <= y <= 1
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'

13.2.6 Regresión logistica

¿Qué es la regresión logística


La regresión logística es una técnica de análisis de datos que utiliza las matemáticas para encontrar las relaciones entre dos factores de datos. Luego, utiliza esta relación para predecir el valor de uno de esos factores basándose en el otro. Normalmente, la predicción tiene un número finito de resultados, como un sí o un no.

Por ejemplo, supongamos que desea adivinar si el visitante de su sitio web va a hacer clic en el botón de pago de su carrito de compras o no. El análisis de regresión logística analiza el comportamiento de los visitantes anteriores, como el tiempo que permanecen en el sitio web y la cantidad de artículos que hay en el carrito. Determina que, si anteriormente los visitantes pasaban más de cinco minutos en el sitio y agregaban más de tres artículos al carrito, hacían clic en el botón de pago. Con esta información, la función de regresión logística puede predecir el comportamiento de un nuevo visitante en el sitio web.

¿Por qué es importante la regresión logística?


La regresión logística es una técnica importante en el campo de la inteligencia artificial y el machine learning (AI/ML). Los modelos de ML son programas de software que puede entrenar para realizar tareas complejas de procesamiento de datos sin intervención humana. Los modelos de ML creados mediante regresión logística ayudan a las organizaciones a obtener información procesable a partir de sus datos empresariales. Pueden usar esta información para el análisis predictivo a fin de reducir los costos operativos, aumentar la eficiencia y escalar más rápido. Por ejemplo, las empresas pueden descubrir patrones que mejoran la retención de los empleados o conducen a un diseño de productos más rentable.