# Cargar la librería tidyverse para manipular los datos
install.packages("tidyverse")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.1 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# Descargar los datos de Gapminder y asignarlos a un objeto llamado "datos"
datos <- read.csv("https://raw.githubusercontent.com/jennybc/gapminder/master/data-raw/08_gap-every-five-years.tsv", sep = "\t")
# Mostrar los primeros registros de los datos
head(datos)
## country continent year lifeExp pop gdpPercap
## 1 Afghanistan Asia 1952 28.801 8425333 779.4453
## 2 Afghanistan Asia 1957 30.332 9240934 820.8530
## 3 Afghanistan Asia 1962 31.997 10267083 853.1007
## 4 Afghanistan Asia 1967 34.020 11537966 836.1971
## 5 Afghanistan Asia 1972 36.088 13079460 739.9811
## 6 Afghanistan Asia 1977 38.438 14880372 786.1134
# Revisar datos faltantes
sapply(datos, function(x) sum(is.na(x)))
## country continent year lifeExp pop gdpPercap
## 0 0 0 0 0 0
# Eliminar observaciones con valores faltantes
datos <- na.omit(datos)
# Verificar datos completos
complete_rows <- complete.cases(datos)
sum(complete_rows)
## [1] 1704
# Convertir variables categóricas a factores
datos$continent <- as.factor(datos$continent)
datos$country <- as.factor(datos$country)
datos$year <- as.factor(datos$year)
# Mostrar los niveles de la variable "continent"
levels(datos$continent)
## [1] "Africa" "Americas" "Asia" "Europe" "Oceania"
levels(datos$country)
## [1] "Afghanistan" "Albania"
## [3] "Algeria" "Angola"
## [5] "Argentina" "Australia"
## [7] "Austria" "Bahrain"
## [9] "Bangladesh" "Belgium"
## [11] "Benin" "Bolivia"
## [13] "Bosnia and Herzegovina" "Botswana"
## [15] "Brazil" "Bulgaria"
## [17] "Burkina Faso" "Burundi"
## [19] "Cambodia" "Cameroon"
## [21] "Canada" "Central African Republic"
## [23] "Chad" "Chile"
## [25] "China" "Colombia"
## [27] "Comoros" "Congo, Dem. Rep."
## [29] "Congo, Rep." "Costa Rica"
## [31] "Cote d'Ivoire" "Croatia"
## [33] "Cuba" "Czech Republic"
## [35] "Denmark" "Djibouti"
## [37] "Dominican Republic" "Ecuador"
## [39] "Egypt" "El Salvador"
## [41] "Equatorial Guinea" "Eritrea"
## [43] "Ethiopia" "Finland"
## [45] "France" "Gabon"
## [47] "Gambia" "Germany"
## [49] "Ghana" "Greece"
## [51] "Guatemala" "Guinea"
## [53] "Guinea-Bissau" "Haiti"
## [55] "Honduras" "Hong Kong, China"
## [57] "Hungary" "Iceland"
## [59] "India" "Indonesia"
## [61] "Iran" "Iraq"
## [63] "Ireland" "Israel"
## [65] "Italy" "Jamaica"
## [67] "Japan" "Jordan"
## [69] "Kenya" "Korea, Dem. Rep."
## [71] "Korea, Rep." "Kuwait"
## [73] "Lebanon" "Lesotho"
## [75] "Liberia" "Libya"
## [77] "Madagascar" "Malawi"
## [79] "Malaysia" "Mali"
## [81] "Mauritania" "Mauritius"
## [83] "Mexico" "Mongolia"
## [85] "Montenegro" "Morocco"
## [87] "Mozambique" "Myanmar"
## [89] "Namibia" "Nepal"
## [91] "Netherlands" "New Zealand"
## [93] "Nicaragua" "Niger"
## [95] "Nigeria" "Norway"
## [97] "Oman" "Pakistan"
## [99] "Panama" "Paraguay"
## [101] "Peru" "Philippines"
## [103] "Poland" "Portugal"
## [105] "Puerto Rico" "Reunion"
## [107] "Romania" "Rwanda"
## [109] "Sao Tome and Principe" "Saudi Arabia"
## [111] "Senegal" "Serbia"
## [113] "Sierra Leone" "Singapore"
## [115] "Slovak Republic" "Slovenia"
## [117] "Somalia" "South Africa"
## [119] "Spain" "Sri Lanka"
## [121] "Sudan" "Swaziland"
## [123] "Sweden" "Switzerland"
## [125] "Syria" "Taiwan"
## [127] "Tanzania" "Thailand"
## [129] "Togo" "Trinidad and Tobago"
## [131] "Tunisia" "Turkey"
## [133] "Uganda" "United Kingdom"
## [135] "United States" "Uruguay"
## [137] "Venezuela" "Vietnam"
## [139] "West Bank and Gaza" "Yemen, Rep."
## [141] "Zambia" "Zimbabwe"
levels(datos$year)
## [1] "1952" "1957" "1962" "1967" "1972" "1977" "1982" "1987" "1992" "1997"
## [11] "2002" "2007"
# Convertir variable gdpPercap en logaritmo natural
datos$log_gdpPercap <- log(datos$gdpPercap)
# Renombrar las variables
nombres_nuevos <- c("pais", "continente", "año", "esperanza_vida", "poblacion", "PIB_per_capita", "region")
nombres_viejos <- c("country", "continent", "year", "lifeExp", "pop", "gdpPercap", "gdpPercap")
names(datos) <- setNames(nombres_nuevos, nombres_viejos)
# Mostrar las primeras filas de los datos con las variables renombradas
head(datos)
## pais continente año esperanza_vida poblacion PIB_per_capita region
## 1 Afghanistan Asia 1952 28.801 8425333 779.4453 6.658583
## 2 Afghanistan Asia 1957 30.332 9240934 820.8530 6.710344
## 3 Afghanistan Asia 1962 31.997 10267083 853.1007 6.748878
## 4 Afghanistan Asia 1967 34.020 11537966 836.1971 6.728864
## 5 Afghanistan Asia 1972 36.088 13079460 739.9811 6.606625
## 6 Afghanistan Asia 1977 38.438 14880372 786.1134 6.667101
# Filtrar países con población mayor a mil millones de habitantes
datos_filtrados <- datos %>% filter(poblacion > 1000000000)
# Mostrar los resultados
datos_filtrados
## pais continente año esperanza_vida poblacion PIB_per_capita region
## 1 China Asia 1982 65.525 1000281000 962.4214 6.869452
## 2 China Asia 1987 67.274 1084035000 1378.9040 7.229044
## 3 China Asia 1992 68.690 1164970000 1655.7842 7.412030
## 4 China Asia 1997 70.426 1230075000 2289.2341 7.735973
## 5 China Asia 2002 72.028 1280400000 3119.2809 8.045358
## 6 China Asia 2007 72.961 1318683096 4959.1149 8.508983
## 7 India Asia 2002 62.879 1034172547 1746.7695 7.465523
## 8 India Asia 2007 64.698 1110396331 2452.2104 7.804745
library(ggplot2)
ggplot(datos, aes(x = año, y = esperanza_vida, color = continente, size = PIB_per_capita)) +
geom_point(alpha = 0.7) +
scale_color_viridis_d() +
scale_size(range = c(3, 12)) +
labs(x = "Año", y = "Esperanza de vida", title = "Esperanza de vida y PIB per cápita a lo largo de los años según los continentes") +
theme_bw() +
theme(plot.title = element_text(hjust = 0.5, size = 14),
panel.grid.major = element_line(color = "grey", linetype = "dashed"))
Este gráfico muestra cómo la esperanza de vida y el PIB per cápita han evolucionado en diferentes continentes a lo largo del tiempo. Cada punto representa un país y está codificado por color según el continente al que pertenece y por tamaño según su PIB per cápita.
Eje X: Este eje muestra el año. Podemos ver que el gráfico se extiende desde el año 1952 hasta el año 2007. Este eje nos permite ver la evolución de la esperanza de vida y el PIB per cápita a lo largo del tiempo.
Eje Y: Este eje muestra la esperanza de vida. Podemos ver que la esperanza de vida aumenta a medida que nos movemos hacia arriba en el eje. Este eje nos permite ver cómo varía la esperanza de vida en función del PIB per cápita y el continente.
Color: El color de los puntos representa los continentes. Cada continente está representado por un color diferente, lo que permite ver cómo se comparan las diferentes regiones del mundo en términos de esperanza de vida y PIB per cápita.
Tamaño: El tamaño de los puntos representa el PIB per cápita. Podemos ver que los puntos más grandes representan países con un PIB per cápita más alto. Este elemento nos permite ver cómo se relacionan el PIB per cápita y la esperanza de vida.
Alpha: El nivel de transparencia de los puntos. Los puntos más oscuros son más opacos, mientras que los puntos más claros son más transparentes. Este elemento ayuda a reducir el efecto de superposición de los puntos y facilita la visualización de las áreas con mayor densidad de puntos.
Podemos observar que la mayoría de los países han experimentado un aumento en la esperanza de vida y el PIB per cápita a lo largo del tiempo, pero algunos continentes han avanzado más que otros. En particular, se puede ver que América y Europa tienen la mayoría de los países con altos niveles de PIB per cápita y esperanza de vida, mientras que África y Asia tienen más países con niveles bajos. También se puede notar que los países con PIB per cápita más alto tienden a tener una esperanza de vida más alta, lo que sugiere una fuerte correlación entre los dos indicadores.
library(ggplot2)
# Graficar la esperanza de vida por continente utilizando un boxplot
ggplot(datos, aes(x = continente, y = esperanza_vida, fill = continente)) +
geom_boxplot() +
xlab("Continente") +
ylab("Esperanza de vida") +
ggtitle("Esperanza de vida por continente")
Este gráfico muestra la esperanza de vida por continente utilizando un boxplot. En el eje horizontal se encuentra el nombre de los continentes, mientras que en el eje vertical se muestra la esperanza de vida en años. Cada caja representa la distribución de la esperanza de vida para cada continente, donde la línea en el medio de la caja es la mediana, la parte inferior de la caja es el primer cuartil y la parte superior de la caja es el tercer cuartil. Los puntos por encima y por debajo de las cajas son valores atípicos o fuera del rango intercuartil de la distribución. El color de cada caja corresponde al continente correspondiente. A partir del gráfico, se puede observar que la esperanza de vida es más alta en Europa y América, y es más baja en África. Además, los datos de América y Europa tienen una distribución más uniforme en comparación con Asia y África, lo que significa que hay una mayor variabilidad en los datos de esperanza de vida en Asia y África.
# Graficar la relación entre el PIB per cápita y la esperanza de vida en un scatterplot
ggplot(datos, aes(x = PIB_per_capita, y = esperanza_vida, color = continente)) +
geom_point() +
xlab("PIB per cápita") +
ylab("Esperanza de vida") +
ggtitle("Relación entre PIB per cápita y esperanza de vida por continente")
El gráfico muestra la relación entre dos variables: el PIB per cápita y la esperanza de vida. Cada punto representa un país, y está coloreado según su continente. En general, se observa una relación positiva entre el PIB per cápita y la esperanza de vida. Esto sugiere que a medida que el PIB per cápita aumenta, también lo hace la esperanza de vida. Además, se puede ver que los países africanos están principalmente en la parte inferior izquierda del gráfico, lo que indica que tienen bajos niveles de PIB per cápita y esperanza de vida. Los países europeos y americanos, en cambio, tienden a estar en la parte superior derecha del gráfico, lo que indica que tienen altos niveles de PIB per cápita y esperanza de vida. También se puede observar que hay una gran variabilidad en la relación entre el PIB per cápita y la esperanza de vida dentro de cada continente. Por ejemplo, aunque la mayoría de los países africanos tienen bajos niveles de ambas variables, hay algunos países africanos que tienen niveles más altos de PIB per cápita y esperanza de vida. Por lo tanto, la relación entre el PIB per cápita y la esperanza de vida no es determinista y está influenciada por muchos otros factores.
datos <- as.data.frame(datos)
# Dividir los datos en conjuntos de entrenamiento y prueba
set.seed(123)
indice_entrenamiento <- sample(length(datos), 0.7 * length(datos))
datos_entrenamiento <- datos[indice_entrenamiento, ]
datos_prueba <- datos[-indice_entrenamiento, ]
head(datos_entrenamiento)
## pais continente año esperanza_vida poblacion PIB_per_capita region
## 7 Afghanistan Asia 1982 39.854 12881816 978.0114 6.885521
## 3 Afghanistan Asia 1962 31.997 10267083 853.1007 6.748878
## 6 Afghanistan Asia 1977 38.438 14880372 786.1134 6.667101
## 2 Afghanistan Asia 1957 30.332 9240934 820.8530 6.710344
head(datos_prueba)
## pais continente año esperanza_vida poblacion PIB_per_capita region
## 1 Afghanistan Asia 1952 28.801 8425333 779.4453 6.658583
## 4 Afghanistan Asia 1967 34.020 11537966 836.1971 6.728864
## 5 Afghanistan Asia 1972 36.088 13079460 739.9811 6.606625
## 8 Afghanistan Asia 1987 40.822 13867957 852.3959 6.748051
## 9 Afghanistan Asia 1992 41.674 16317921 649.3414 6.475959
## 10 Afghanistan Asia 1997 41.763 22227415 635.3414 6.454162
# Entrenar un modelo de regresión lineal simple
modelo_reg_lin <- lm(esperanza_vida ~ PIB_per_capita, data = datos_entrenamiento)
# Imprimir un resumen del modelo
summary(modelo_reg_lin)
##
## Call:
## lm(formula = esperanza_vida ~ PIB_per_capita, data = datos_entrenamiento)
##
## Residuals:
## 7 3 6 2
## 1.745 -2.998 5.112 -3.859
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 13.73151 30.68626 0.447 0.698
## PIB_per_capita 0.02493 0.03558 0.701 0.556
##
## Residual standard error: 5.151 on 2 degrees of freedom
## Multiple R-squared: 0.1971, Adjusted R-squared: -0.2044
## F-statistic: 0.4909 on 1 and 2 DF, p-value: 0.5561
# Predecir la esperanza de vida para el conjunto de prueba
predicciones <- predict(modelo_reg_lin, newdata = datos_prueba)
# Calcular el error cuadrático medio de las predicciones
MSE <- mean((datos_prueba$esperanza_vida - predicciones)^2)
# Predecir la esperanza de vida en el conjunto de prueba
y_pred <- predict(modelo_reg_lin, newdata = datos_prueba)
# Calcular el coeficiente de determinación (R^2)
R2 <- summary(modelo_reg_lin)$r.squared
# Mostrar los resultados
print(paste0("Error cuadrático medio: ", MSE))
## [1] "Error cuadrático medio: 74955.6433659074"
cat("Coeficiente de determinación (R^2): ", R2, "\n")
## Coeficiente de determinación (R^2): 0.1970699