#Control 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)

#paso 2
# Subconjuntar los datos y eliminar las observaciones faltantes
gapminder <- gapminder[complete.cases(gapminder), ]

#paso 3
# Convertir la variable "continent" en un factor
gapminder$continent <- factor(gapminder$continent)

#paso 4
# Convertir la variable "gdpPercap" en logaritmo natural
gapminder$gdpPercap <- log(gapminder$gdpPercap)

#paso 5

# Renombrar todas las variables en español
names(gapminder) <- c("País", "Continente", "Año", "Expectativa de vida", "Población", "PIB per cápita")

#paso 6
# Filtrar países con una población mayor a mil millones de habitantes
gapminder_filtrado <- subset(gapminder, Población > 1000000000)

# Mostrar el resultado del filtro
gapminder_filtrado
## # 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
# paso 7
# Cargar la librería ggplot2
install.packages("ggplot2")
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.2'
## (as 'lib' is unspecified)
library(ggplot2)

# Graficar la esperanza de vida a lo largo de los años según el continente
ggplot(gapminder, aes(x=Año, y=`Expectativa de vida`, color=Continente)) +
  geom_line() +
  labs(x="Año", y="Expectativa de vida", color="Continente") +
  theme_minimal()

#paso 8

# Graficar un boxplot de la esperanza de vida por continente
ggplot(gapminder, aes(x=Continente, y=`Expectativa de vida`, fill=Continente)) +
  geom_boxplot() +
  labs(x="Continente", y="Expectativa de vida") +
  scale_fill_discrete(name="Continente") +
  theme_minimal()

#paso 9 
# Graficar un scatterplot de la relación entre PIB per cápita y la esperanza de vida
ggplot(gapminder, aes(x=`PIB per cápita`, y=`Expectativa de vida`, color=Continente)) +
  geom_point() +
  scale_x_log10() +
  labs(x="PIB per cápita (log)", y="Expectativa de vida") +
  scale_color_discrete(name="Continente") +
  theme_minimal()

# paso 10

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
# Fijar la semilla aleatoria para reproducibilidad
set.seed(123)

# Generar los índices aleatorios de entrenamiento y prueba
indices_entrenamiento <- sample(1:nrow(gapminder), round(0.7*nrow(gapminder)))
indices_prueba <- setdiff(1:nrow(gapminder), indices_entrenamiento)

# Dividir los datos en entrenamiento y prueba
datos_entrenamiento <- gapminder[indices_entrenamiento,]
datos_prueba <- gapminder[indices_prueba,]

# paso 11
# Entrenar un modelo de regresión lineal simple
lm_model <- lm(`Expectativa de vida` ~ log(`PIB per cápita`), data = datos_entrenamiento)

# Imprimir los coeficientes del modelo
summary(lm_model)
## 
## Call:
## lm(formula = `Expectativa de vida` ~ log(`PIB per cápita`), 
##     data = datos_entrenamiento)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -30.214  -4.076   1.417   4.631  20.786 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)            -82.879      3.053  -27.14   <2e-16 ***
## log(`PIB per cápita`)   68.146      1.458   46.75   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.712 on 1191 degrees of freedom
## Multiple R-squared:  0.6473, Adjusted R-squared:  0.647 
## F-statistic:  2186 on 1 and 1191 DF,  p-value: < 2.2e-16
#paso 12
# Hacer predicciones en el conjunto de prueba
predictions <- predict(lm_model, datos_prueba)

# Calcular el error cuadrático medio (MSE)
mse <- mean((datos_prueba$`Expectativa de vida` - predictions)^2)

# Imprimir el MSE
cat("El error cuadrático medio (MSE) es:", mse, "\n")
## El error cuadrático medio (MSE) es: 54.35094
# Calcular el coeficiente de determinación (R²)
ss_tot <- sum((datos_prueba$`Expectativa de vida` - mean(datos_prueba$`Expectativa de vida`))^2)
ss_res <- sum((datos_prueba$`Expectativa de vida` - predictions)^2)
r_squared <- 1 - ss_res/ss_tot

# Imprimir el R²
cat("El coeficiente de determinación (R²) en el conjunto de prueba es:", r_squared, "\n")
## El coeficiente de determinación (R²) en el conjunto de prueba es: 0.6665738