################1####################

install.packages("gapminder")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
library(gapminder)
data("gapminder")
help("gapminder")

################2####################

# Contar el número de datos faltantes por variable
colSums(is.na(gapminder))
##   country continent      year   lifeExp       pop gdpPercap 
##         0         0         0         0         0         0
# Eliminar las observaciones con datos faltantes
datos_completos <- gapminder[complete.cases(gapminder), ]
#datos_completos <- datos[complete.cases(datos), ]

# Contar el número de observaciones con datos completos
nrow(datos_completos)
## [1] 1704

################3####################

# Convertir variables categóricas a factores
gapminder$country <- as.factor(gapminder$country)
class(gapminder$country)
## [1] "factor"
gapminder$continent <- as.factor(gapminder$continent)
class(gapminder$continent)
## [1] "factor"

#########4#######

# Convertir la variable en logaritmo natural
gapminder$log_gdpPercap <- log(gapminder$gdpPercap)

# Transformar la variable gdpPercap en logaritmo natural
gapminder$log_gdpPercap <- log(gapminder$gdpPercap)

# Reemplazar la columna original con los nuevos datos
gapminder$gdpPercap <- gapminder$log_gdpPercap

# Eliminar la columna temporal
gapminder$log_gdpPercap <- NULL

# Verificar los primeros registros para confirmar la transformación
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#########

# Crear vector con nuevos nombres en español
nombres_espanol <- c("País", "Continente", "Año", "Expectativa_de_vida", "Población", "PIB_per_cápita")

# Renombrar todas las variables en español
names(gapminder) <- nombres_espanol

gapminder
## # A tibble: 1,704 × 6
##    País        Continente   Año Expectativa_de_vida Población PIB_per_cápita
##    <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
##  7 Afghanistan Asia        1982                39.9  12881816           6.89
##  8 Afghanistan Asia        1987                40.8  13867957           6.75
##  9 Afghanistan Asia        1992                41.7  16317921           6.48
## 10 Afghanistan Asia        1997                41.8  22227415           6.45
## # ℹ 1,694 more rows

########6#########

install.packages("dyplyr")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
## Warning: package 'dyplyr' is not available for this version of R
## 
## A version of this package for your version of R might be available elsewhere,
## see the ideas at
## https://cran.r-project.org/doc/manuals/r-patched/R-admin.html#Installing-packages
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
# Filtrar los países con una población mayor a mil millones de habitantes
paises_mayor_mil_millones <- gapminder %>% filter(Población > 1000000000)


# Verificar los primeros registros de la tabla resultante

paises_mayor_mil_millones
## # A tibble: 8 × 6
##   País  Continente   Año Expectativa_de_vida  Población PIB_per_cápita
##   <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 India Asia        2002                62.9 1034172547           7.47
## 8 India Asia        2007                64.7 1110396331           7.80

########7#########

# Cargar la librería ggplot2
library(gapminder)
library(dplyr)
library(ggplot2)

# Graficar la esperanza de vida por continente

ggplot(gapminder, aes(x = Año, y = Expectativa_de_vida, color = Continente)) +
  geom_line() +
  labs(title = "Esperanza de vida por continente",
       x = "Año",
       y = "Esperanza de vida")

#Podemos observar que la esperanza de vida ha aumentado en todos los continentes desde 1950, con una tendencia general hacia un aumento constante en la mayoría de los casos. África tiene la menor esperanza de vida en comparación con otros continentes, mientras que Europa y América del Norte tienen las esperanzas de vida más altas.

########8#########

# Crear el gráfico de caja (boxplot)
ggplot(gapminder, aes(x = Continente, y = Expectativa_de_vida)) +
  geom_boxplot() +
  labs(title = "Esperanza de vida por continente",
       x = "Continente",
       y = "Esperanza de vida")

#Podemos observar que la esperanza de vida promedio varía significativamente entre los diferentes continentes, con Europa y América del Norte teniendo la esperanza de vida más alta y África teniendo la esperanza de vida más baja. Los boxplots también muestran que América del Norte, Europa y Asia tienen una distribución de esperanza de vida relativamente estrecha, mientras que América del Sur y África tienen una distribución más amplia con mayores variaciones en la esperanza de vida.

########9#########

# Crear el scatter plot
ggplot(gapminder, aes(x = PIB_per_cápita, y = Expectativa_de_vida)) +
  geom_point() +
  labs(title = "Relación entre PIB per cápita y Esperanza de vida",
       x = "PIB per cápita",
       y = "Esperanza de vida") +
  theme_minimal()

#Podemos observar que existe una tendencia general de que los países con un PIB per cápita más alto tienen una esperanza de vida más alta. Sin embargo, también podemos observar que hay una gran variabilidad en la esperanza de vida para países con el mismo nivel de PIB per cápita, lo que sugiere que existen otros factores que influyen en la esperanza de vida además del PIB per cápita

########10#########

# Cargar el paquete caret
install.packages("caret")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
library(caret)
## Loading required package: lattice
# Establecer la semilla aleatoria para reproducibilidad
set.seed(123)

# Crear índices de división para el conjunto de datos gapminder
indexes <- createDataPartition(gapminder$Expectativa_de_vida, times = 1, p = 0.8, list = FALSE)

# Crear conjunto de entrenamiento
train <- gapminder[indexes, ]

# Crear conjunto de prueba
test <- gapminder[-indexes, ]

########11#########

install.packages("stats")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
## Warning: package 'stats' is a base package, and should not be updated
library(stats)

# Establecer semilla aleatoria para reproducibilidad
set.seed(123)

# Dividir los datos en entrenamiento y prueba
train_prop <- 0.7
train_index <- sample(nrow(gapminder), round(train_prop * nrow(gapminder)))
train_data <- gapminder[train_index, ]
test_data <- gapminder[-train_index, ]

# Entrenar el modelo de regresión lineal simple
lm_model <- lm(Expectativa_de_vida ~ PIB_per_cápita, data = train_data)

# Mostrar el resumen del modelo
summary(lm_model)
## 
## Call:
## lm(formula = Expectativa_de_vida ~ PIB_per_cápita, data = train_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -32.733  -4.071   1.098   4.845  19.399 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)     -9.3416     1.4923   -6.26 5.37e-10 ***
## PIB_per_cápita   8.4220     0.1805   46.65  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.723 on 1191 degrees of freedom
## Multiple R-squared:  0.6463, Adjusted R-squared:  0.646 
## F-statistic:  2176 on 1 and 1191 DF,  p-value: < 2.2e-16

########12#########

# Entrenar un modelo de regresión lineal simple
lm_model <- train(Expectativa_de_vida ~ PIB_per_cápita, data = train, method = "lm")

# Realizar predicciones en el conjunto de prueba
predictions <- predict(lm_model, newdata = test)

# Calcular el error cuadrático medio (RMSE) en el conjunto de prueba
rmse <-mean((test$Expectativa_de_vida - predictions)^2)

# Imprimir el RMSE
cat("El RMSE en el conjunto de prueba es:", rmse, "\n")
## El RMSE en el conjunto de prueba es: 55.40462