Parcial 1 Gráficos Plots | Base de datos temp_carbon{dslabs}

# instancia de librerías a utilizar
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(dslabs)
library(dplyr)
library(ggplot2)
library(RColorBrewer)
library(DT)

data("temp_carbon")

Se revisará la base de datos, para identificar registros nulos. Para luego almacenar en otro data frame los registros que no presentan inconsistencias (NA).

Tabla de datos

# Consulta de información general de temp_carbon
str(temp_carbon)
## 'data.frame':    268 obs. of  5 variables:
##  $ year            : num  1880 1881 1882 1883 1884 ...
##  $ temp_anomaly    : num  -0.11 -0.08 -0.1 -0.18 -0.26 -0.25 -0.24 -0.28 -0.13 -0.09 ...
##  $ land_anomaly    : num  -0.48 -0.4 -0.48 -0.66 -0.69 -0.56 -0.51 -0.47 -0.41 -0.31 ...
##  $ ocean_anomaly   : num  -0.01 0.01 0 -0.04 -0.14 -0.17 -0.17 -0.23 -0.05 -0.02 ...
##  $ carbon_emissions: num  236 243 256 272 275 277 281 295 327 327 ...
# Filtro de registros con NA
NA_temp_carbon <- temp_carbon %>% filter(is.na(temp_anomaly == TRUE | land_anomaly == TRUE | ocean_anomaly == TRUE | carbon_emissions == TRUE))

# Nuevo DataFrame con la información limpia sin NA
new_temp_carbon <- temp_carbon %>% 
  filter(!is.na(temp_anomaly) & 
         !is.na(land_anomaly) & 
         !is.na(ocean_anomaly) & 
         !is.na(carbon_emissions))

datatable(new_temp_carbon) 

Análisis:

Se identificaron 133 registros en los cuales presenta en cualquier campo un NA, lo que evita un análisis consistente de la información.

Ahora se continúa el análisis con el data frame new_temp_carbon el cual contiene 135 registros.

Histograma de frecuencia

# Cálculo de la media y mediana
media <- mean(new_temp_carbon$carbon_emissions, na.rm = TRUE)
mediana <- median(new_temp_carbon$carbon_emissions, na.rm = TRUE)

hist(new_temp_carbon$carbon_emissions,
     main = "Histograma del Promedio de las Emisiones de Carbono",
     xlab = "Promedio de Emisiones de Carbono",
     ylab = "Frecuencia",
     labels = TRUE,
     ylim = c(0,60),
     col = brewer.pal(10, "Paired"),
     border = "black",
     breaks = 10) #permite crear 10 puntos de quiebre en el eje X
axis(1, at = seq(0, max(new_temp_carbon$carbon_emissions, na.rm = TRUE), by = 1000)) #asegura que se dibujen en el eje X cada 1000.
grid(nx = NA, 
     ny = NULL,
     col = "lightgray",
     lty = "dotted")

# Líneas punteadas verticales para la media y mediana
abline(v = media, col = "red", lwd = 2, lty = 2) 
abline(v = mediana, col = "blue", lwd = 2, lty = 2) 
# Leyenda para las líneas
legend("topright", 
       legend = c("Media", "Mediana"), 
       col = c("red", "blue"), 
       lty = 2, 
       lwd = 2)

Análisis:

En el histograma de Emisiones de Carbono se evidencia que 51 años en que se registró el total de emisiones está entre 0 y 1.000. Aunque se logra evidenciar que son pocos los años en los cuales se han registrado un índice de emisiones de carbono entre 8.000 y 10.000, siendo las cifras más altas.

Se resuelven los puntos del parcial:
  1. Poner el valor numérico sobre cada columna
  2. Modificar el eje X que se muestre de 1 en 1 (en mi caso se visualiza de 1.000 en 1.000)
  3. Agregar dos líneas verticales (mediana, media)

Histograma de densidad

# Nuevo campo de tasas de crecimiento de emisiones
new_temp_carbon$tasa_crecimiento_carbon <- c(NA, diff(new_temp_carbon$carbon_emissions) / head(new_temp_carbon$carbon_emissions, -1))
new_temp_carbon <- new_temp_carbon %>% filter(!is.na(tasa_crecimiento_carbon))

hist(new_temp_carbon$tasa_crecimiento_carbon,
     main = "Histograma de tasas de crecimiento de emisiones",
     xlab = "Tasa de emisiones de carbono",
     ylab = "Densidad",
     labels = TRUE,
     ylim = c(0,70),
     col = brewer.pal(10, "Paired"),
     )
grid(nx = NA, 
     ny = NULL,
     col = "lightgray",
     lty = "dotted")
lines(density(new_temp_carbon$tasa_crecimiento_carbon), col = "black", lwd = 2)

Análisis:

Permite analizar la distribución de las tasas de crecimiento de las emisiones de carbono. Los picos en la línea de densidad (entre 0.0 y .01) indican los valores o rangos de la tasa de crecimiento de las emisiones de carbono donde hay más concentración de datos, proporcionando una reprsentación continua de las emiciones.

Se resuelven los puntos del parcial:
  1. Crear tabla de porcentajes y gráficas mostrando el dato
  2. Interpretar gráfico de densidad y frecuencia

Gráfico de barras utilizando ggplot()

# Gráfico de barras de Emisiones de Carbono por año
ggplot(data = new_temp_carbon, aes(x = year, y = carbon_emissions)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  labs(title = "Emisiones de Carbono por Año",
       x = "Año",
       y = "Emisiones de Carbono") +
  theme_minimal()

Análisis:

Teniendo en cuenta el histograma de Emisiones de carbono por Año se evidencia consistencia con el histograma anterior de la distribución de emisiones de carbono, donde posterior a los años 2000 se evidenció un crecimiento entre los 6000 y 10000. También se evidencia que al pasar del tiempo aproximadamente desde 1960 la curva de registro de emisiiones ha sido más exponencial que los años anteriores.

Gráfico Boxplot

# Calcular el rango intercuartílico (IQR)
Q1 <- quantile(new_temp_carbon$tasa_crecimiento_carbon, 0.25, na.rm = TRUE)  # Primer cuartil
Q3 <- quantile(new_temp_carbon$tasa_crecimiento_carbon, 0.75, na.rm = TRUE)  # Tercer cuartil
IQR <- Q3 - Q1  # Rango intercuartílico

# Definir los límites para valores atípicos
limite_inferior <- Q1 - 1.5 * IQR
limite_superior <- Q3 + 1.5 * IQR

# Filtrar los valores que no son atípicos
new_temp_carbon_sin_atipicos <- new_temp_carbon %>% 
  filter(tasa_crecimiento_carbon >= limite_inferior & tasa_crecimiento_carbon <= limite_superior)

summary_tasas <- summary(new_temp_carbon_sin_atipicos$tasa_crecimiento_carbon)
media_tasas_crecimiento <- as.numeric(summary_tasas[4])
min_tasas_crecimiento <- as.numeric(summary_tasas[1])
firstQu_tasas_crecimiento <- as.numeric(summary_tasas[2])
mediana_tasas_crecimiento <- as.numeric(summary_tasas[3])
thirdQu_tasas_crecimiento <- as.numeric(summary_tasas[5])
max_tasas_crecimiento <- as.numeric(summary_tasas[6])

boxplot(new_temp_carbon_sin_atipicos$tasa_crecimiento_carbon,
        col="lightblue",
        ylab="Tasa de crecimiento de emisiones",
        outline=FALSE,
        main="Gráfico Boxplot",
        ylim = c(-0.1, 0.15))

#Adicionar la media
points(media_tasas_crecimiento,col="red",pch=20)
text(paste("Media. ",round(media_tasas_crecimiento, 2)),x=1.1,y=0.02, col = "black") 

#Adicionar el Min.
points(min_tasas_crecimiento,col="blue",pch=20)
abline(h = min_tasas_crecimiento, col = "blue", lwd = 1, lty = 2) 
text(paste("Min. ",round(min_tasas_crecimiento, 2)),x=0.7,y=min_tasas_crecimiento+0.006, col = "black") 
#Adicionar 1st Qu.
points(firstQu_tasas_crecimiento,col="lightgreen",pch=20)
abline(h = firstQu_tasas_crecimiento, col = "lightgreen", lwd = 1, lty = 2) 
text(paste("1st Qu. ",round(firstQu_tasas_crecimiento, 2)),x=0.7,y=firstQu_tasas_crecimiento+0.006, col = "black") 
#Adicionar Median
points(mediana_tasas_crecimiento,col="orange",pch=20)
abline(h = mediana_tasas_crecimiento, col = "orange", lwd = 1, lty = 2) 
text(paste("Mediana. ",round(mediana_tasas_crecimiento, 2)),x=0.7,y=mediana_tasas_crecimiento+0.006, col = "black") 
#Adicionar 3rd Qu.
points(thirdQu_tasas_crecimiento,col="yellow",pch=20)
abline(h = thirdQu_tasas_crecimiento, col = "orange", lwd = 1, lty = 2) 
text(paste("3rd Qu. ",round(thirdQu_tasas_crecimiento, 2)),x=0.7,y=thirdQu_tasas_crecimiento+0.006, col = "black") 
#Adicionar Max
points(max_tasas_crecimiento,col="red",pch=20)
abline(h = max_tasas_crecimiento, col = "red", lwd = 1, lty = 2) 
text(paste("Max. ",round(max_tasas_crecimiento, 2)),x=0.7,y=max_tasas_crecimiento+0.006, col = "black") 

Análisis:

Este boxplot permite ver cómo se distribuyen las tasas de crecimiento de las emisiones de carbono sin valores atípicos, proporcionando una visión clara de la mediana, el rango intercuartílico, y los valores mínimos y máximos de la distribución. La caja en el centro del gráfico representa el rango intercuartílico (IQR). Este es el rango que abarca desde el primer cuartil (Q1 o 25%) hasta el tercer cuartil (Q3 o 75%), el cual demuestra que la mayor parte de los datos se encuentran en una tasa de crecimiento de emisiones entre 0.03 y 0.06. La línea horizontal dentro de la caja es la mediana (o segundo cuartil, Q2), que indica el valor central de la distribución, es decir, el punto que divide los datos en dos partes iguales. Está marcada con una línea naranja y un punto, mostrando el valor exacto en la gráfica (0.04). Los “bigotes” son las líneas que salen de la caja hacia los valores mínimo y máximo, es decir las líneas más lejanas en el gráfico, que demuestran los valores sin datos atípicos.

Se resuelven los puntos del parcial:
  1. Gráfico Boxplot, agregar los puntos que se muestran al ejecutar summary()

Comparación entre gráficos

par(mfrow=c(1,2))

hist(new_temp_carbon$carbon_emissions,
     main = "Histograma del Emisiones",
     xlab = "Promedio de Emisiones de Carbono",
     ylab = "Frecuencia",
     labels = TRUE,
     ylim = c(0,60),
     col = brewer.pal(10, "Paired"),
     border = "black")

boxplot(new_temp_carbon_sin_atipicos$tasa_crecimiento_carbon,
        col="lightgreen",
        ylab="Tasa de crecimiento de emisiones",
        outline=FALSE,
        main="Gráfico Boxplot",
        ylim = c(-0.1, 0.15))
#Adicionar la media
points(media_tasas_crecimiento,col="red",pch=20)
text(paste("Media. ",round(media_tasas_crecimiento, 2)),x=1.1,y=0.02, col = "black") 

Se resuelven los puntos del parcial:
  1. Utilizar par() para mostrar 2 gráficos