Carga de datos y librerías Extraer la variable Conclusión

1. CARGA DE DATOS Y LIBRERÍAS

library(readxl)
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(gt)

datos <- read_excel("datos_deslizamientos.xlsx")

2. EXTRAER LA VARIABLE

latitude <- datos$latitude
latitude <- latitude[!is.na(latitude)]

3. CONTEO

3.1 Regla de Sturges

# Número de observaciones
n_lat <- length(latitude)

# Valores mínimo y máximo
min_lat <- min(latitude)
max_lat <- max(latitude)

# Rango
R_lat <- max_lat - min_lat

# Número de clases según Sturges
k_sturges <- ceiling(1 + 3.322 * log10(n_lat))

# Amplitud real
A_sturges <- R_lat / k_sturges

# Límites inferiores
Li_sturges <- seq(
  from = min_lat,
  by = A_sturges,
  length.out = k_sturges
)

# Límites superiores
Ls_sturges <- c(
  Li_sturges[-1],
  max_lat
)

# Marcas de clase
MC_sturges <- (Li_sturges + Ls_sturges) / 2
# Frecuencias absolutas
ni_sturges <- numeric(length(Li_sturges))

for(i in 1:length(Li_sturges)){

  if(i < length(Li_sturges)){

    ni_sturges[i] <- sum(
      latitude >= Li_sturges[i] &
      latitude < Ls_sturges[i]
    )

  }else{

    ni_sturges[i] <- sum(
      latitude >= Li_sturges[i] &
      latitude <= Ls_sturges[i]
    )

  }

}

# Frecuencias relativas
hi_sturges <- round((ni_sturges/n_lat)*100,2)

# Frecuencias acumuladas
Ni_asc_sturges <- cumsum(ni_sturges)

Ni_dsc_sturges <- rev(cumsum(rev(ni_sturges)))

Hi_asc_sturges <- round(cumsum(hi_sturges),2)

Hi_dsc_sturges <- round(rev(cumsum(rev(hi_sturges))),2)

# Intervalos
Intervalo_sturges <- paste0(
  "[",
  round(Li_sturges,2),
  " - ",
  round(Ls_sturges,2),
  ")"
)

Intervalo_sturges[length(Intervalo_sturges)] <- paste0(
  "[",
  round(Li_sturges[length(Li_sturges)],2),
  " - ",
  round(Ls_sturges[length(Ls_sturges)],2),
  "]"
)

# Tabla
TDF_sturges <- data.frame(
  Intervalo = Intervalo_sturges,
  MC = round(MC_sturges,2),
  ni = ni_sturges,
  hi = hi_sturges,
  Ni_asc = Ni_asc_sturges,
  Ni_dsc = Ni_dsc_sturges,
  Hi_asc = Hi_asc_sturges,
  Hi_dsc = Hi_dsc_sturges
)

# Totales
TDF_sturges <- rbind(
  TDF_sturges,
  data.frame(
    Intervalo = "TOTAL",
    MC = "",
    ni = sum(ni_sturges),
    hi = 100,
    Ni_asc = "",
    Ni_dsc = "",
    Hi_asc = "",
    Hi_dsc = ""
  )
)

4. TABLA DE FRECUENCIAS

4.1 Tabla de frecuencias con la regla de Sturges

tabla_sturges <- TDF_sturges %>%
  gt() %>%
  fmt_number(
    columns = MC,
    decimals = 2
  ) %>%
  tab_header(
    title = md("**Tabla N° 1**"),
    subtitle = md(
      paste0(
        "Distribución de frecuencias de Latitud mediante la regla de Sturges (",
        k_sturges,
        " clases)"
      )
    )
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo Geología")
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = Intervalo == "TOTAL")
  )

tabla_sturges
Tabla N° 1
Distribución de frecuencias de Latitud mediante la regla de Sturges (15 clases)
Intervalo MC ni hi Ni_asc Ni_dsc Hi_asc Hi_dsc
[-46.77 - -38.81) -42.79 115 1.04 115 11033 1.04 100.01
[-38.81 - -30.85) -34.83 126 1.14 241 10918 2.18 98.97
[-30.85 - -22.89) -26.87 161 1.46 402 10792 3.64 97.83
[-22.89 - -14.93) -18.91 194 1.76 596 10631 5.4 96.37
[-14.93 - -6.97) -10.95 255 2.31 851 10437 7.71 94.61
[-6.97 - 0.99) -2.99 365 3.31 1216 10182 11.02 92.3
[0.99 - 8.95) 4.97 792 7.18 2008 9817 18.2 88.99
[8.95 - 16.91) 12.93 1196 10.84 3204 9025 29.04 81.81
[16.91 - 24.87) 20.89 841 7.62 4045 7829 36.66 70.97
[24.87 - 32.83) 28.85 1881 17.05 5926 6988 53.71 63.35
[32.83 - 40.79) 36.81 2333 21.15 8259 5107 74.86 46.3
[40.79 - 48.75) 44.77 2194 19.89 10453 2774 94.75 25.15
[48.75 - 56.71) 52.73 484 4.39 10937 580 99.14 5.26
[56.71 - 64.67) 60.69 91 0.82 11028 96 99.96 0.87
[64.67 - 72.63] 68.65 5 0.05 11033 5 100.01 0.05
TOTAL 11033 100.00
Autor: Grupo Geología

4.2 Tabla de frecuencias reducida

# ======================================================
# REDUCCIÓN DE INTERVALOS
# ======================================================

# Número de clases reducido
k_lat <- 12

# Amplitud
A_real <- R_lat / k_lat

A_lat <- ifelse(
  A_real <= 2, 2,
  ifelse(
    A_real <= 5, 5,
    ifelse(
      A_real <= 10, 10,
      ceiling(A_real/10)*10
    )
  )
)

# Límites inferiores
Li0 <- floor(min_lat/A_lat)*A_lat

Li_lat <- seq(
  from = Li0,
  by = A_lat,
  length.out = k_lat
)

# Límites superiores
Ls_lat <- Li_lat + A_lat

# Marcas de clase
MC_lat <- round((Li_lat + Ls_lat)/2,2)

# Frecuencias absolutas
ni_lat <- numeric(length(Li_lat))

for(i in 1:length(Li_lat)){

  if(i < length(Li_lat)){

    ni_lat[i] <- sum(
      latitude >= Li_lat[i] &
      latitude < Ls_lat[i]
    )

  }else{

    ni_lat[i] <- sum(
      latitude >= Li_lat[i] &
      latitude <= Ls_lat[i]
    )

  }

}

# Frecuencias relativas
hi_lat <- round((ni_lat/n_lat)*100,2)

# Frecuencias acumuladas
Ni_asc_lat <- cumsum(ni_lat)

Ni_dsc_lat <- rev(cumsum(rev(ni_lat)))

Hi_asc_lat <- round(cumsum(hi_lat),2)

Hi_dsc_lat <- round(rev(cumsum(rev(hi_lat))),2)

# Tabla de frecuencias reducida
TDF_latitude <- data.frame(
  Li = Li_lat,
  Ls = Ls_lat,
  MC = MC_lat,
  ni = ni_lat,
  hi = hi_lat,
  Ni_asc = Ni_asc_lat,
  Ni_dsc = Ni_dsc_lat,
  Hi_asc = Hi_asc_lat,
  Hi_dsc = Hi_dsc_lat
)

# Totales
TDF_latitude <- rbind(
  TDF_latitude,
  data.frame(
    Li = "TOTAL",
    Ls = "",
    MC = "",
    ni = sum(ni_lat),
    hi = 100,
    Ni_asc = "",
    Ni_dsc = "",
    Hi_asc = "",
    Hi_dsc = ""
  )
)

tabla_latitude <- TDF_latitude %>%
  gt() %>%
  fmt_number(
    columns = MC,
    decimals = 2
  ) %>%
  tab_header(
    title = md("**Tabla N° 2**"),
    subtitle = md(
      paste0(
        "Distribución de frecuencias de Latitud (",
        k_lat,
        " clases)"
      )
    )
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo Geología")
  ) %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = Li == "TOTAL")
  )

tabla_latitude
Tabla N° 2
Distribución de frecuencias de Latitud (12 clases)
Li Ls MC ni hi Ni_asc Ni_dsc Hi_asc Hi_dsc
-50 -40 -45 99 0.90 99 11031 0.9 99.98
-40 -30 -35 147 1.33 246 10932 2.23 99.08
-30 -20 -25 257 2.33 503 10785 4.56 97.75
-20 -10 -15 158 1.43 661 10528 5.99 95.42
-10 0 -5 498 4.51 1159 10370 10.5 93.99
0 10 5 1015 9.20 2174 9872 19.7 89.48
10 20 15 1394 12.63 3568 8857 32.33 80.28
20 30 25 1842 16.70 5410 7463 49.03 67.65
30 40 35 2554 23.15 7964 5621 72.18 50.95
40 50 45 2603 23.59 10567 3067 95.77 27.8
50 60 55 419 3.80 10986 464 99.57 4.21
60 70 65 45 0.41 11031 45 99.98 0.41
TOTAL 11031 100.00
Autor: Grupo Geología

5. GRÁFICAS

5.1 Histogramas

5.1.1 Distribución local de la latitud de deslizamientos a nivel mundial

hist(
  latitude,
  breaks = k_lat,
  col = "grey",
  border = "black",
  main = "Gráfica 5: Distribución local de la latitud de deslizamientos\n a nivel mundial",
  xlab = "Latitude (°)",
  ylab = "Cantidad"
)


5.2 Distribución global de la latitud de deslizamientos a nivel mundial

hist(
  latitude,
  main = "Gráfica 6: Distribución global de la latitud de deslizamientos\n a nivel mundial",
  xlab = "Latitude (°)",
  ylab = "Cantidad",
  col = "grey",
  border = "black",
  ylim = c(0, length(latitude))
)


5.3 Distribución local de la latitud de deslizamientos a nivel mundial

hist(
  latitude,
  breaks = k_lat,
  freq = FALSE,
  col = "grey",
  border = "black",
  main = "Gráfica 7: Distribución local de la latitud de deslizamientos\n a nivel mundial (hi)",
  xlab = "Latitude (°)",
  ylab = "Porcentaje (%)"
)


5.4 Distribución global de la latitud de deslizamientos a nivel mundial (hi)

barplot(
  TDF_latitude$hi[TDF_latitude$Li != "TOTAL"],
  space = 0,
  col = "grey",
  border = "black",
  main = "Gráfica 8: Distribución global de la latitud de deslizamientos\n a nivel mundial (hi)",
  xlab = "Latitude (°)",
  ylab = "Porcentaje (%)",
  names.arg = TDF_latitude$MC[TDF_latitude$Li != "TOTAL"],
  ylim = c(0,100)
)

5.2 Ojivas

plot(
  Ls_lat,
  Ni_asc_lat,
  type = "o",
  col = "blue",
  pch = 19,
  ylim = c(0, max(Ni_asc_lat)),
  main = "Gráfica 11: Ojivas de la variable Latitude de deslizamientos\n a nivel mundial",
  xlab = "Latitud (°)",
  ylab = "Cantidad"
)

lines(
  Li_lat,
  Ni_dsc_lat,
  type = "o",
  col = "red",
  pch = 17
)

legend(
  "right",
  legend = c(
    "Ojiva ascendente (≤)",
    "Ojiva descendente (≥)"
  ),
  col = c("blue","red"),
  pch = c(19,17),
  lty = 1,
  bty = "n"
)

5.3 Boxplot individual

boxplot(
  latitude,
  horizontal = TRUE,
  col = "grey",
  border = "black",
  main = "Gráfica 9: Diagrama de caja de Latitud de deslizamientos\n a nivel mundial",
  xlab = "Latitude (°)",
  outline = TRUE,
  pch = 19,
  outcol = "red"
)

5.4 Histograma con boxplot superpuesto

# Definir los intervalos del histograma
breaks_lat <- c(Li_lat, max(Ls_lat))

# Asegurar que el último límite incluya el valor máximo
breaks_lat[length(breaks_lat)] <- max(latitude)

# Crear el histograma sin dibujarlo
h <- hist(
  latitude,
  breaks = breaks_lat,
  right = FALSE,
  plot = FALSE
)

# Dibujar el histograma
plot(
  h,
  freq = TRUE,
  col = "grey",
  border = "black",
  main = "Distribución de los deslizamientos con\n boxplot superpuesto",
  xlab = "Latitude (°)",
  ylab = "Cantidad"
)
## Warning in plot.histogram(h, freq = TRUE, col = "grey", border = "black", : the
## AREAS in the plot are wrong -- rather use 'freq = FALSE'
# Superponer el boxplot
boxplot(
  latitude,
  horizontal = TRUE,
  add = TRUE,
  axes = FALSE,
  at = max(h$counts) * 0.45,
  boxwex = max(h$counts) * 0.50,
  col = rgb(0.45, 0.80, 1.00, 0.70),
  border = "black",
  outline = TRUE,
  pch = 19,
  outcol = "red"
)

6. INDICADORES ESTADÍSTICOS

6.1 Indicadores de posición

# Límites teóricos
ri <- -90
rs <- 90

# Media
media_lat <- mean(latitude)

# Mediana
mediana_lat <- median(latitude)

# Moda (redondeando a una cifra decimal)
moda_lat <- as.numeric(
  names(which.max(table(round(latitude, 1))))
)

6.2 Indicadores de dispersión

# Rango
rango_lat <- max(latitude) - min(latitude)

# Varianza
var_lat <- var(latitude)

# Desviación estándar
sd_lat <- sd(latitude)

# Coeficiente de variación (%)
CV_lat <- (sd_lat / abs(media_lat)) * 100

6.3 Indicadores de forma

# Coeficiente de asimetría de Fisher
As_lat <- mean((latitude - media_lat)^3) / sd_lat^3

# Exceso de curtosis de Fisher
K_lat <- mean((latitude - media_lat)^4) / sd_lat^4 - 3

6.4 Tabla resumen de indicadores

TablaIndicadores_latitude <- data.frame(
  Variable = "Latitude",
  ri = ri,
  rs = rs,
  Media = round(media_lat, 2),
  Mediana = round(mediana_lat, 2),
  Moda = round(moda_lat, 2),
  Rango = round(rango_lat, 2),
  Varianza = round(var_lat, 2),
  Desv_Estandar = round(sd_lat, 2),
  CV = round(CV_lat, 2),
  Asimetria = round(As_lat, 2),
  Curtosis = round(K_lat, 2)
)

tabla_latitude_indicadores <- TablaIndicadores_latitude %>%
  gt() %>%
  tab_header(
    title = md("Tabla N° 2"),
    subtitle = md("Resumen de indicadores estadísticos de la variable Latitude")
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo Geología")
  )

tabla_latitude_indicadores
Tabla N° 2
Resumen de indicadores estadísticos de la variable Latitude
Variable ri rs Media Mediana Moda Rango Varianza Desv_Estandar CV Asimetria Curtosis
Latitude -90 90 25.88 30.53 45.6 119.4 416.77 20.42 78.88 -1.12 1.1
Autor: Grupo Geología

6.5 Detección de outliers (Método IQR)

Q1_lat <- quantile(latitude, 0.25)
Q3_lat <- quantile(latitude, 0.75)

IQR_lat <- IQR(latitude)

Limite_inferior <- Q1_lat - 1.5 * IQR_lat
Limite_superior <- Q3_lat + 1.5 * IQR_lat

outliers_bajos <- latitude[latitude < Limite_inferior]
outliers_altos <- latitude[latitude > Limite_superior]

outliers <- c(outliers_bajos, outliers_altos)

min_outlier <- min(outliers)
max_outlier <- max(outliers)

min(outliers)
## [1] -46.7748
max(outliers)
## [1] -26.5833

6.6 Tabla de detección de outliers

tabla_outliers <- data.frame(
  Variable = "Latitude",
  Outliers_Detectados = length(outliers),
  Limite_Inferior = Limite_inferior,
  Limite_Superior = Limite_superior,
  Q1 = Q1_lat,
  Q3 = Q3_lat
)

tabla_outliers_gt <- tabla_outliers %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 3**"),
    subtitle = md("Detección de valores atípicos de la latitud de ocurrencia de deslizamientos a nivel mundial")
  ) %>%
  fmt_number(
    columns = 3:6,
    decimals = 2
  ) %>%
  tab_source_note(
    source_note = md("Elaborado por: Grupo 1 – Carrera de Geología")
  )

tabla_outliers_gt
Tabla N° 3
Detección de valores atípicos de la latitud de ocurrencia de deslizamientos a nivel mundial
Variable Outliers_Detectados Limite_Inferior Limite_Superior Q1 Q3
Latitude 287 −26.51 81.29 13.92 40.87
Elaborado por: Grupo 1 – Carrera de Geología

7. CONCLUSIÓN

La variable Latitude fluctúa entre −46.77° y 72.63°, y sus valores giran en torno a 30.53°, con una desviación estándar de 20.42°, siendo un conjunto de datos heterogéneo. El conjunto de valores se concentra principalmente en la parte alta de la variable y presenta una asimetría negativa, con mayor extensión hacia las latitudes menores. Además, se identificaron 287 valores atípicos, que van desde −46.77° hasta −26.58°. Por lo tanto, esto se considera perjudial a nivel mundial.