# 1.DESCARGA LOS DATOS GAPMINDER
library(gapminder)
data(gapminder)
head (gapminder)
## # A tibble: 6 × 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.8 8425333 779.
## 2 Afghanistan Asia 1957 30.3 9240934 821.
## 3 Afghanistan Asia 1962 32.0 10267083 853.
## 4 Afghanistan Asia 1967 34.0 11537966 836.
## 5 Afghanistan Asia 1972 36.1 13079460 740.
## 6 Afghanistan Asia 1977 38.4 14880372 786.
# 2.SOLUCIONES EL PROBLEMA DE DATOS FALTANTES
if (sum(is.na(gapminder)) > 0) {
cat("El conjunto de datos de Gapminder tiene datos faltantes.")
} else {
cat("El conjunto de datos de Gapminder no tiene datos faltantes.")
}
## El conjunto de datos de Gapminder no tiene datos faltantes.
# 3.CONVIERTA LAS VARIABLES CATEGORICAS A FACTOR
## Convertir la variable "continent" en un factor
gapminder$continent <- factor(gapminder$continent)
## Imprimir el resultado
head(gapminder$continent)
## [1] Asia Asia Asia Asia Asia Asia
## Levels: Africa Americas Asia Europe Oceania
## Convertir la variable "country" en un factor
gapminder$country <- factor(gapminder$country)
## Imprimir el resultado
head(gapminder$country)
## [1] Afghanistan Afghanistan Afghanistan Afghanistan Afghanistan Afghanistan
## 142 Levels: Afghanistan Albania Algeria Angola Argentina Australia ... Zimbabwe
# 4. CONVIERTA LA VARIALE "gdpPercap" EN LOGARITMO NATURAL
## Transforma la variable gdpPercap en logaritmo natural y guárdala en una nueva variable
gapminder$log_gdpPercap <- log(gapminder$gdpPercap)
# 5. RENOMBRE TODAS LAS VARIABLES Y DEJELAS EN ESPAÑOL
## Define una lista de nombres en español
nombres_espanol <- c("País", "Continente", "Año", "Expectativa_vida", "Población", "PIB_per_cápita","log_PIB_per_cápita")
## Usa la función setNames() para renombrar las variables
names(gapminder) <- setNames(nombres_espanol, names(gapminder))
# 6. FILTRE AQUELLOS PAISES QUE TENGAN UNA POBLACION MAYOR A MIL HABITANTES
# Filtra los países con población mayor a mil millones de habitantes
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
gapminder_filtrado <- gapminder %>% filter(Población > 1e9)
head(gapminder_filtrado)
## # A tibble: 6 × 7
## País Continente Año Expectativa_vida Población PIB_per_cápita
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 China Asia 1982 65.5 1000281000 962.
## 2 China Asia 1987 67.3 1084035000 1379.
## 3 China Asia 1992 68.7 1164970000 1656.
## 4 China Asia 1997 70.4 1230075000 2289.
## 5 China Asia 2002 72.0 1280400000 3119.
## 6 China Asia 2007 73.0 1318683096 4959.
## # ℹ 1 more variable: log_PIB_per_cápita <dbl>
# 7. GRAFIQUE LA ESPERANZA DE VIDA
library(ggplot2)
library(gapminder)
gapminder %>%
group_by(Año, Continente) %>%
summarise(Expectativa_vida = mean(Expectativa_vida)) %>%
ggplot(aes(x=Año, y=Expectativa_vida, color=Continente)) +
geom_point() +
labs(x="Año", y="Esperanza de vida (años)", color="Continente") +
scale_color_manual(values = c("red", "green", "blue", "purple", "orange"))
## `summarise()` has grouped output by 'Año'. You can override using the `.groups`
## argument.

### INTERPRETACION : Se puede observar que la dispersión de los puntos es mayor en los años anteriores a la década de los 70. Esto indica que en estos años la variabilidad en la esperanza de vida es mucho más alta que en años más recientes. Se puede concluir que el gráfico muestra una tendencia clara de aumento de la esperanza de vida en todo el mundo, aunque se destaca la gran diferencia que existe entre los continentes.
### Es posible apreciar que algunos continentes como Europa, América del Norte y Oceanía tienen una esperanza de vida mucho más alta en comparación con África y Asia, siendo África el continente que tiene la esperanza de vida más baja.
# 8. REALIZAR UNA BOXPLOT DE LA ESPERANZA DE VIDA POR CONTINENTE
## Crear el boxplot
ggplot(gapminder, aes(x=Continente, y=Expectativa_vida)) +
geom_boxplot() +
labs(x = "Continente", y = "Esperanza de vida", title = "Boxplot de la esperanza de vida por continente")

### INTERPETRACION : El gráfico de cajas y bigotes nos permite observar que la esperanza de vida varía significativamente entre continentes. Europa, América del Norte y Oceanía presentan una distribución más amplia de la esperanza de vida, con valores que se extienden desde el mínimo hasta el máximo, y una mediana más alta en comparación con África y Asia. Por otro lado, la distribución de la esperanza de vida en África es más limitada, como lo indica la caja más corta y la mediana más baja. En resumen, el gráfico nos muestra que la esperanza de vida es mayor en Europa, América del Norte y Oceanía, mientras que es menor en África y Asia, y que la variabilidad de la esperanza de vida es mayor en los primeros continentes en comparación con los últimos.
# 9. GRAFICO STATTERPLOT DE LA RELACION ENTRE EL PIB PER CAPITA Y LA ESPERANZA DE VIDA
## Crear el scatterplot
ggplot(gapminder, aes(x=PIB_per_cápita, y=Expectativa_vida)) +
geom_point(alpha=0.5) +
scale_x_log10(labels=scales::dollar_format()) +
labs(x = "PIB per cápita", y = "Esperanza de vida", title = "Relación entre PIB per cápita y esperanza de vida")

### INTERPRETACION : Existe una correlación entre el PIB per cápita y la esperanza de vida: a medida que el PIB aumenta, también lo hace la esperanza de vida. Esto demuestra cómo el desarrollo económico y social de los países puede revelar patrones y tendencias a lo largo del tiempo
# 10. DIVIDA LOS DATOS EN CONJUNTOS DE ENTRENAMIENTO Y PRUEBA
# División en conjuntos de entrenamiento y prueba
library(caret)
## Loading required package: lattice
set.seed(123)
train_index <- createDataPartition(gapminder$Expectativa_vida, p = 0.8, list = FALSE)
train_data <- gapminder[train_index, ]
test_data <- gapminder[-train_index, ]
# Verificación de la división
cat("El conjunto de entrenamiento tiene", nrow(train_data), "observaciones y el conjunto de prueba tiene", nrow(test_data), "observaciones.")
## El conjunto de entrenamiento tiene 1364 observaciones y el conjunto de prueba tiene 340 observaciones.
# 11. ENTRENE UN MODELO DE REGRESION LINEAL SIMPLE PARA PREDECIR LA ESPERANZA DE VIDA EN FUNCION DEL INGRESO PER CAPITA
# Entrenamos el modelo de regresión lineal simple
model <- lm(Expectativa_vida ~ PIB_per_cápita, data = train_data)
# Mostramos los resultados del modelo
summary(model)
##
## Call:
## lm(formula = Expectativa_vida ~ PIB_per_cápita, data = train_data)
##
## Residuals:
## Min 1Q Median 3Q Max
## -83.423 -7.818 2.166 8.254 18.376
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 5.399e+01 3.534e-01 152.77 <2e-16 ***
## PIB_per_cápita 7.704e-04 2.953e-05 26.09 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 10.53 on 1362 degrees of freedom
## Multiple R-squared: 0.3332, Adjusted R-squared: 0.3327
## F-statistic: 680.6 on 1 and 1362 DF, p-value: < 2.2e-16
# 12. EVALUE EL RENDIMIENTO DEL MODELO EN EL CONJUNTO DE PRUEBA
# Calculamos las predicciones del modelo para el conjunto de prueba
predictions <- predict(model, newdata = test_data)
# Calculamos el coeficiente de determinación R cuadrado para el modelo
r_squared <- cor(test_data$Expectativa_vida, predictions)^2
print(paste0("R cuadrado del modelo: ", round(r_squared, 3)))
## [1] "R cuadrado del modelo: 0.371"
# Calculamos el RMSE para el modelo
rmse <- sqrt(mean((test_data$Expectativa_vida - predictions)^2))
print(paste0("RMSE del modelo: ", round(rmse, 3)))
## [1] "RMSE del modelo: 10.337"