2.3 Muestra
8.1 Categorizar en 4 grupos a el I1
8.2 Calcular e interpretar los cuartiles para la I2
8.5 Asimetria
8.6 Curtosis
9.1 Verificación de valores perdidos
9.2.1 Eliminar filas o columnas con missin
9.2.2 Aplicando técnicas de imputación
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
11.1 Transformación de raíz cuadrada
11.2 Transformación exponencial
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
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
“Índice de Desarrollo Global (IDG)”
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.
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.
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.
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.
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.
# Instalar y cargar los paquetes necesarios
if (!require(ggplot2)) {
install.packages("ggplot2")
library(ggplot2)
}
## Loading required package: ggplot2
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.
# 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
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
# 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)
##Datos de los I2
I2<- c(68,54,77,54,9,15,51,28,28,9,4,10)
#Opción 1
promedio = sum(I2)/length(I2)
promedio
## [1] 33.91667
#Opción 2
mean(I2)
## [1] 33.91667
median(I2)
## [1] 28
# 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
quantile(idg$I2)
## 0% 25% 50% 75% 100%
## 4.800 10.550 28.800 53.475 77.300
quantile(idg$I2)
## 0% 25% 50% 75% 100%
## 4.800 10.550 28.800 53.475 77.300
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
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
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)
kurtosis(idg$I2)
## [1] -1.589614
## attr(,"method")
## [1] "excess"
# 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 ...
# 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)
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)
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)
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)
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)
El análisis solo se realiza para variable cuantitativas
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)
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)
# 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))
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)
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))
#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)
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
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
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
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
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
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
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
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))
# 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
# 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
# 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?
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
# 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)
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")
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'
¿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.