# 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"