## 1- Descargue los datos de Gapminder
library(gapminder)
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
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(ggplot2)
View(gapminder)
## 2- Solucione el problema de datos faltantes si los hay, elimine las observaciones.
sum(is.na(gapminder))
## [1] 0
## 3- Convierte las variables categóricas a factor
# Convertir todas las variables categóricas en factores en el conjunto de datos "gapminder"
gapminder <- gapminder %>%
mutate_if(is.character, as.factor)
# Verificar que todas las variables categóricas se hayan convertido en factores
str(gapminder)
## tibble [1,704 × 6] (S3: tbl_df/tbl/data.frame)
## $ country : Factor w/ 142 levels "Afghanistan",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ continent: Factor w/ 5 levels "Africa","Americas",..: 3 3 3 3 3 3 3 3 3 3 ...
## $ year : int [1:1704] 1952 1957 1962 1967 1972 1977 1982 1987 1992 1997 ...
## $ lifeExp : num [1:1704] 28.8 30.3 32 34 36.1 ...
## $ pop : int [1:1704] 8425333 9240934 10267083 11537966 13079460 14880372 12881816 13867957 16317921 22227415 ...
## $ gdpPercap: num [1:1704] 779 821 853 836 740 ...
## 4- Convierta la variable "gdpPercap" en logartimo natural
# Convertir la variable "gdpPercap" en logaritmo natural
gapminder$gdpPercap <- log(gapminder$gdpPercap)
# Verificar que se haya hecho el cambio correctamente
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 6.66
## 2 Afghanistan Asia 1957 30.3 9240934 6.71
## 3 Afghanistan Asia 1962 32.0 10267083 6.75
## 4 Afghanistan Asia 1967 34.0 11537966 6.73
## 5 Afghanistan Asia 1972 36.1 13079460 6.61
## 6 Afghanistan Asia 1977 38.4 14880372 6.67
## 5- Renombrar todas la variables y déjelas en Español
# Definir los nombres nuevos en español
nombres_nuevos <- c("Pais", "Continente", "Año", "Expectativa_vida", "Poblacion", "PIB_per_capita")
# Renombrar las variables con los nuevos nombres
names(gapminder) <- nombres_nuevos
# Verificar que los nombres se hayan cambiado correctamente
head(gapminder)
## # A tibble: 6 × 6
## Pais Continente Año Expectativa_vida Poblacion PIB_per_capita
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.8 8425333 6.66
## 2 Afghanistan Asia 1957 30.3 9240934 6.71
## 3 Afghanistan Asia 1962 32.0 10267083 6.75
## 4 Afghanistan Asia 1967 34.0 11537966 6.73
## 5 Afghanistan Asia 1972 36.1 13079460 6.61
## 6 Afghanistan Asia 1977 38.4 14880372 6.67
## 6- Filtre a aquellos paises que tengan una población mayor a mil millones de habitantes
# Filtrar los países con una población mayor a mil millones de habitantes
gapminder_filtrado <- subset(gapminder, Poblacion > 1e9)
# Verificar que se hayan filtrado correctamente los países
head(gapminder_filtrado)
## # A tibble: 6 × 6
## Pais Continente Año Expectativa_vida Poblacion PIB_per_capita
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 China Asia 1982 65.5 1000281000 6.87
## 2 China Asia 1987 67.3 1084035000 7.23
## 3 China Asia 1992 68.7 1164970000 7.41
## 4 China Asia 1997 70.4 1230075000 7.74
## 5 China Asia 2002 72.0 1280400000 8.05
## 6 China Asia 2007 73.0 1318683096 8.51
## 7- Grafique la esperanza de vida a lo largo de los años según continente e interprete
# Graficar la esperanza de vida a lo largo de los años por continente
ggplot(gapminder, aes(x = Año, y = Expectativa_vida, color = Continente, group = Continente)) +
geom_point(size = 3, alpha = 0.8) +
scale_color_brewer(palette = "Dark2") +
labs(title = "Esperanza de vida por continente",
x = "Año",
y = "Esperanza de vida") +
theme_minimal() +
theme(plot.title = element_text(hjust = 0.5, size = 22, face = "bold"),
axis.title.x = element_text(size = 16, margin = margin(t = 10)),
axis.title.y = element_text(size = 16, margin = margin(r = 10)),
axis.text = element_text(size = 14),
legend.position = "bottom",
legend.title = element_blank(),
legend.text = element_text(size = 14),
panel.grid.major = element_line(size = 0.2),
panel.grid.minor = element_blank())
## Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

#INTERPRETACIÓN: Cada punto de este gráfico representa la vida promedio de un continente en un año específico. Con este gráfico podemos notar cómo la esperanza de vida de todos los continentes ha ido en aumento a través de los años, pero si nos fijamos, podemos notar que uno de los continentes con mayor esperanza de vida es Europa, mientras que por el lado contrario, nos encontramos con África, el cual es el continente con la esperanza de vida más baja de todos. Si bien su esperanza ha ido en aumento, aún sigue siendo baja si la comparamos con los demás continentes.
## 8- Realice un gráfico Boxplot de la esperanza de vida por continente e interprete
boxplot(gapminder$Expectativa_vida ~ gapminder$Continente,
xlab = "Continente",
ylab = "Esperanza de vida",
main = "Esperanza de vida por continente")

#INTERPRETACIÓN: Hablando a grandes rasgos, notamos que la función de este gráfico es mostrarnos de manera concisa cómo varía la esperanza de vida entre los continentes. Si nos centramos y lo miramos detalladamente, nos podemos dar cuenta de que el continente de Europa es el que cuenta con la mayor esperanza de vida en comparación con los otros, ya que este posee una mediana (la cual es representada por la línea de en medio de cada caja) de alrededor de 70 a 75 años. Por otro lado, también nos encontramos con África, el cual es el continente que cuenta con la esperanza de vida más baja, con una mediana de alrededor de 45 a 50 años. Gracias a los bigotes de las cajas, podemos mirar que hay valores atípicos en África, América y Asia. Esto podría ser porque hay algunos países de esos continentes que tienen una esperanza de vida más alta o más baja que el resto de países.
## 9- Realice un gráfico scatterplot de la relación entre el pib per capita y la esperanza de vida e interprete
plot(gapminder$PIB_per_capita, gapminder$Expectativa_vida,
xlab = "PIB per cápita",
ylab = "Esperanza de vida",
main = "Relación entre el PIB per cápita y la esperanza de vida")

#INTERPRETACIÓN: Si observamos el gráfico, podemos notar que los puntos están todos juntos formando un patrón. Esto nos quiere decir que el PIB per cápita y la esperanza de vida están relacionados entre sí, y que a medida que el PIB aumente, la esperanza de vida lo hará de igual forma. Pero si observamos, hay algunos puntos dispersos, esto quiere decir que podría haber otros factores que influyen en la esperanza de vida en un país.
## 10- Dividir los datos en conjuntos de entrenamiento y prueba
# Configurar la semilla aleatoria para reproducibilidad
set.seed(123)
# Dividir los datos en conjuntos de entrenamiento y prueba
trainIndex <- createDataPartition(gapminder$Expectativa_vida, p = .8, list = FALSE)
trainData <- gapminder[trainIndex, ]
testData <- gapminder[-trainIndex, ]
## 11- Entrenar un modelo de regresión lineal simple para predecir la esperanza de vida en función del ingreso per cápita
# Entrenamos el modelo de regresión lineal simple
model <- lm(Expectativa_vida ~ PIB_per_capita, data = trainData)
# Mostramos los resultados del modelo
summary(model)
##
## Call:
## lm(formula = Expectativa_vida ~ PIB_per_capita, data = trainData)
##
## Residuals:
## Min 1Q Median 3Q Max
## -32.856 -4.354 1.178 4.760 19.246
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -9.1328 1.3884 -6.578 6.79e-11 ***
## PIB_per_capita 8.4146 0.1685 49.951 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 7.663 on 1362 degrees of freedom
## Multiple R-squared: 0.6469, Adjusted R-squared: 0.6466
## F-statistic: 2495 on 1 and 1362 DF, p-value: < 2.2e-16
# 12- Evaluar el rendimiento del modelo en el conjunto de prueba
# Calculamos las predicciones del modelo para el conjunto de prueba
predictions <- predict(model, newdata = testData)
# Calculamos el coeficiente de determinación R cuadrado para el modelo
r_squared <- cor(testData$Expectativa_vida, predictions)^2
print(paste0("R cuadrado del modelo: ", round(r_squared, 3)))
## [1] "R cuadrado del modelo: 0.674"
# Calculamos el RMSE para el modelo
rmse <- sqrt(mean((testData$Expectativa_vida - predictions)^2))
print(paste0("RMSE del modelo: ", round(rmse, 3)))
## [1] "RMSE del modelo: 7.443"