1. CARGA DE LIBRERIAS Y DATOS

#Carga de 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)

#  Cargar base de datos
datos_nuevoartes <- read_excel("datos_nuevoartes.xlsx")

2. DEFINICIÓN DE LA VARIABLE

longitude <- datos_nuevoartes$longitude
longitude <- longitude[!is.na(longitude)]

3. PARÁMETROS DE CLASIFICACIÓN

k_long <- 12
n_long <- length(longitude)

min_long <- min(longitude)
max_long <- max(longitude)

R_long <- max_long - min_long
A_real <- R_long / k_long

4. AJUSTE DE AMPLITUD DE CLASE

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

5. DEFINICIÓN DE CLASES

Li0 <- floor(min_long / A_long) * A_long

Li_long <- seq(Li0, by = A_long, length.out = k_long)
Ls_long <- Li_long + A_long

MC_long <- round((Li_long + Ls_long) / 2, 2)

6. CÁLCULO DE FRECUENCIAS

ni_long <- numeric(k_long)

for (i in 1:k_long) {
  if (i < k_long) {
    ni_long[i] <- sum(longitude >= Li_long[i] & longitude < Ls_long[i])
  } else {
    ni_long[i] <- sum(longitude >= Li_long[i] & longitude <= max_long)
  }
}

# --- AJUSTE DE PRECISIÓN PARA EVITAR EL 100.02 ---
# Calculamos hi con 2 decimales para todas menos la última
hi_long <- round((ni_long / sum(ni_long)) * 100, 2)
# Forzamos que la suma sea exactamente 100 ajustando la última fila
hi_long[k_long] <- 100 - sum(hi_long[1:(k_long-1)])

Ni_asc_long <- cumsum(ni_long)
Ni_dsc_long <- rev(cumsum(rev(ni_long)))

# Recalculamos acumuladas sobre los valores ya ajustados
Hi_asc_long <- cumsum(hi_long)
Hi_dsc_long <- rev(cumsum(rev(hi_long)))

7. TABLA DE FRECUENCIAS

TDF_longitude <- data.frame(
  Li = as.character(Li_long), # Convertimos a carácter para permitir el "TOTAL"
  Ls = as.character(Ls_long),
  MC = MC_long,
  ni = ni_long,
  hi = hi_long,
  Ni_asc = Ni_asc_long,
  Ni_dsc = Ni_dsc_long,
  Hi_asc = Hi_asc_long,
  Hi_dsc = Hi_dsc_long
)

TDF_longitude <- rbind(
  TDF_longitude,
  data.frame(
    Li = "TOTAL", Ls = "", MC = NA, ni = sum(ni_long), hi = 100,
    Ni_asc = NA, Ni_dsc = NA, Hi_asc = NA, Hi_dsc = NA
  )
)

8. TABLA DE PRESENTACIÓN

tabla_longitude <- TDF_longitude %>%
  # Aseguramos que las columnas sean numéricas para el formato de gt
  mutate(across(c(ni, hi, Ni_asc, Ni_dsc, Hi_asc, Hi_dsc, MC), as.numeric)) %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 8**"),
    subtitle = md("Distribución de frecuencias de Longitud (°) de los eventos a nivel mundial")
  ) %>%
  # Formato de 2 decimales para relativas y marca de clase
  fmt_number(
    columns = c(hi, Hi_asc, Hi_dsc, MC),
    decimals = 2
  ) %>%
  # Formato de 0 decimales para absolutas
  fmt_number(
    columns = c(ni, Ni_asc, Ni_dsc),
    decimals = 0
  ) %>%
  cols_label(
    Li = "L. Inferior",
    Ls = "L. Superior",
    MC = "Marca Clase",
    ni = "ni",
    hi = "hi (%)",
    Ni_asc = "Ni (asc)",
    Ni_dsc = "Ni (desc)",
    Hi_asc = "Hi (asc %)",
    Hi_dsc = "Hi (desc %)"
  ) %>%
  sub_missing(columns = everything(), missing_text = "") %>%
  tab_style(
    style = cell_text(weight = "bold"),
    locations = cells_body(rows = Li == "TOTAL")
  ) %>%
  tab_source_note(
    source_note = md("Elaborado por: Grupo 2 – Carrera de Geología")
  )

tabla_longitude
Tabla N° 8
Distribución de frecuencias de Longitud (°) de los eventos a nivel mundial
L. Inferior L. Superior Marca Clase ni hi (%) Ni (asc) Ni (desc) Hi (asc %) Hi (desc %)
-180 -150 −165.00 85 0.77 85 11,033 0.77 100.00
-150 -120 −135.00 1,893 17.16 1,978 10,948 17.93 99.23
-120 -90 −105.00 1,221 11.07 3,199 9,055 29.00 82.07
-90 -60 −75.00 1,526 13.83 4,725 7,834 42.83 71.00
-60 -30 −45.00 228 2.07 4,953 6,308 44.90 57.17
-30 0 −15.00 318 2.88 5,271 6,080 47.78 55.10
0 30 15.00 334 3.03 5,605 5,762 50.81 52.22
30 60 45.00 279 2.53 5,884 5,428 53.34 49.19
60 90 75.00 2,034 18.44 7,918 5,149 71.78 46.66
90 120 105.00 1,784 16.17 9,702 3,115 87.95 28.22
120 150 135.00 1,083 9.82 10,785 1,331 97.77 12.05
150 180 165.00 248 2.23 11,033 248 100.00 2.23
TOTAL
11,033 100.00



Elaborado por: Grupo 2 – Carrera de Geología

9. HISTOGRAMAS

9.1 Histograma Local de (ni)

# Margen inferior amplio para los valores del eje X
par(mar=c(5, 4, 4, 2))

# 1. Graficamos sin eje X (names.arg = NULL) para colocarlo manualmente
pos_x <- barplot(ni_long, 
                 col = "grey", 
                 border = "black", 
                 space = 0, 
                 las = 1, 
                 main = "Gráfica 8: Distribución local de la frecuencia absoluta\nde la Longitud (°) de los eventos a nivel mundial", 
                 xlab = "Longitud (°)",
                 ylab = "Frecuencia absoluta (ni)",
                 axes = TRUE)

# 2. Dibujamos el eje X en las intersecciones (puntos de corte)
# Los puntos de corte son Li_long y el último Ls_long
cortes_x <- c(Li_long, max(Ls_long))

# 'pos_x' devuelve el centro de las barras. Al ser space=0, 
# los límites están en 0, 1, 2, ..., k
axis(side = 1, at = 0:length(ni_long), labels = cortes_x, cex.axis = 0.7)

10. MODELOS PROBABILÍSTICOS POR AGRUPACIÓN

10.1 Agrupación 1: Longitud: (−108° a −60°)) – Modelo Normal

10.1.1 Filtrado de datos

lon_108_60 <- longitude[longitude >= -108 & longitude <= -60]

10.1.2 Intervalos

Li_108_60 <- seq(-108, -68, by = 10)
LS_108_60 <- Li_108_60 + 10
MC_108_60 <- (Li_108_60 + LS_108_60) / 2
k_108_60  <- length(Li_108_60)

10.1.3 Frecuencias

ni_108_60 <- numeric(k_108_60)

for (i in 1:k_108_60) {
  if (i < k_108_60) {
    ni_108_60[i] <- sum(lon_108_60 >= Li_108_60[i] & lon_108_60 < LS_108_60[i])
  } else {
    ni_108_60[i] <- sum(lon_108_60 >= Li_108_60[i] & lon_108_60 <= -60)
  }
}

hi_108_60  <- (ni_108_60 / sum(ni_108_60)) * 100
NI_108_60  <- cumsum(ni_108_60)
NID_108_60 <- rev(cumsum(rev(ni_108_60)))
HI_108_60  <- cumsum(hi_108_60)
HID_108_60 <- rev(cumsum(rev(hi_108_60)))

10.1.4 Tabla de frecuencias

Tabla_108_60 <- data.frame(
  Li  = Li_108_60,
  LS  = LS_108_60,
  MC  = MC_108_60,
  ni  = ni_108_60,
  hi  = round(hi_108_60, 2),
  NI  = NI_108_60,
  NID = NID_108_60,
  HI  = round(HI_108_60, 2),
  HID = round(HID_108_60, 2)
)

tabla_gt_108_60 <- Tabla_108_60 %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 9**"),
    subtitle = md("Distribución de frecuencias de la 
                  variable Longitud entre (−108° a −60°) a nivel mundial")
  ) %>%
  fmt_number(columns = c(hi, HI, HID), decimals = 2) %>%
  tab_source_note(
    source_note = md("Autor: Grupo Geología")
  )

tabla_gt_108_60
Tabla N° 9
Distribución de frecuencias de la variable Longitud entre (−108° a −60°) a nivel mundial
Li LS MC ni hi NI NID HI HID
-108 -98 -103 211 10.69 211 1974 10.69 100.00
-98 -88 -93 288 14.59 499 1763 25.28 89.31
-88 -78 -83 881 44.63 1380 1475 69.91 74.72
-78 -68 -73 440 22.29 1820 594 92.20 30.09
-68 -58 -63 154 7.80 1974 154 100.00 7.80
Autor: Grupo Geología

10.1.5 Histograma y ajuste del modelo normal

breaks_lon <- c(Li_108_60, -60)

HistoLon1 <- hist(
  lon_108_60,
  breaks = breaks_lon,
  right = FALSE,
  include.lowest = TRUE,
  freq = TRUE,
  col = "grey",
  border = "black",
  main = " Gráfica 9: Modelo de probabilidad normal  de la  variable
  Longitud entre (−108° a −60°) a nivel mundial",
  xlab = "Longitude (°)",
  ylab = "Frecuencia absoluta"
)
## Warning in plot.histogram(r, freq = freq1, col = col, border = border, angle =
## angle, : the AREAS in the plot are wrong -- rather use 'freq = FALSE'
Fo_abs <- HistoLon1$counts

# Parámetros de la normal
mu_hat    <- mean(lon_108_60)
sigma_hat <- sd(lon_108_60)

# Dominio de la curva
x_norm <- seq(min(breaks_lon), max(breaks_lon), length.out = 400)

# Escalado correcto de la normal
y_norm <- dnorm(x_norm, mean = mu_hat, sd = sigma_hat)
y_norm <- y_norm * diff(breaks_lon)[1] * sum(Fo_abs)

# Dibujar curva
lines(x_norm, y_norm, col = "red", lwd = 2)

legend(
  "topright",
  legend = c("Histograma", "Modelo normal"),
  col = c("grey", "red"),
  lwd = c(10, 2),
  bty = "n"
)

10.1.6 Cálculo de frecuencias esperadas

# Número de clases
k <- length(Fo_abs)

# Probabilidades teóricas por intervalo (Normal)
P <- numeric(k)

for (i in 1:k) {
  P[i] <- pnorm(
    breaks_lon[i + 1],
    mean = mu_hat,
    sd = sigma_hat
  ) - pnorm(
    breaks_lon[i],
    mean = mu_hat,
    sd = sigma_hat
  )
}

# Normalización (seguridad numérica)
P <- P / sum(P)

# Frecuencias esperadas absolutas
Fe_abs <- P * sum(Fo_abs)

Fe_abs
## [1] 147.3760 483.8968 720.1396 486.6754 135.9122
# Coeficiente de correlación de Pearson
pearson_r <- cor(Fo_abs, Fe_abs)
pearson_r
## [1] 0.8910311
# Pearson en porcentaje
pearson_pct <- pearson_r * 100
pearson_pct
## [1] 89.10311

10.1.7 Gráfica de evaluación entre Frecuencia observada y Frecuencia relativa (Test de Pearson)

plot(
  Fo_abs, Fe_abs,
  main = "Gráfica 10: Correlación entre Frecuencia observada y Frecuencia 
  relativa del Modelo normal de la variable Longitud
  entre (−108° a -60°) a nivel mundial",
  xlab = "Frecuencia observada (Fo)",
  ylab = "Frecuencia esperada (Fe)",
  pch = 19,
  col = "blue3"
)

abline(lm(Fe_abs ~ Fo_abs), col = "red", lwd = 2)

Correlacion_Pearson <- pearson_pct
Correlacion_Pearson
## [1] 89.10311

10.1.8 Prueba de Chi-cuadrado

# Nivel de significancia
nivel_significancia <- 0.05

# ----------------------------------------------------
# Frecuencia observada porcentual
# ----------------------------------------------------
Fo <- (Fo_abs / sum(Fo_abs)) * 100
Fo
## [1] 10.688956 14.589666 44.630193 22.289767  7.801418
# ----------------------------------------------------
# Frecuencia esperada porcentual
# ----------------------------------------------------
Fe <- P * 100
Fe
## [1]  7.465856 24.513517 36.481234 24.654278  6.885115
# ----------------------------------------------------
# Estadístico Chi-cuadrado
# ----------------------------------------------------
x2 <- sum((Fe - Fo)^2 / Fe)
x2
## [1] 7.577925
# ----------------------------------------------------
# Grados de libertad
# gl = número de clases - 1
# ----------------------------------------------------
grados_libertad <- length(Fo) - 1
grados_libertad
## [1] 4
# ----------------------------------------------------
# Umbral de aceptación
# ----------------------------------------------------
umbral_aceptacion <- qchisq(1 - nivel_significancia, grados_libertad)
umbral_aceptacion
## [1] 9.487729
# ----------------------------------------------------
# Decisión estadística
# ----------------------------------------------------
Decision_Chi <- ifelse(
  x2 < umbral_aceptacion,
  "SE ACEPTA el modelo de distribución",
  "SE RECHAZA el modelo de distribución"
)

Decision_Chi
## [1] "SE ACEPTA el modelo de distribución"

10.1.9 Gráfica de probabilidad – Modelo exponencial

# Dominio
x_norm <- seq(-108, -60, length.out = 500)

# Densidad normal
y_norm <- dnorm(x_norm, mean = mu_hat, sd = sigma_hat)

plot(
  x_norm, y_norm,
  type = "l",
  lwd = 2,
  col = "blue3",
  main = "Gráfica 11: Cálculo de probabilidades – Modelo normal 
  de la variable Longitud entre (−108° a -60°) a nivel mundial",
  xlab = "Longitude (°)",
  ylab = "Densidad de probabilidad"
)

# Intervalo de probabilidad (ejemplo)
x_sec <- seq(-95, -75, by = 0.1)
y_sec <- dnorm(x_sec, mean = mu_hat, sd = sigma_hat)

polygon(
  c(x_sec, rev(x_sec)),
  c(y_sec, rep(0, length(y_sec))),
  col = rgb(1, 0, 0, 0.5),
  border = NA
)

lines(x_sec, y_sec, col = "red", lwd = 2)

legend(
  "topright",
  legend = c("Modelo normal", "Área de probabilidad"),
  col = c("blue3", "red"),
  lwd = 2,
  bty = "n"
)

# Probabilidad (Normal)
P_norm <- pnorm(-75, mean = mu_hat, sd = sigma_hat) -
  pnorm(-95, mean = mu_hat, sd = sigma_hat)

# Porcentaje
P_norm_pct <- P_norm * 100

P_norm
## [1] 0.6342737
P_norm_pct
## [1] 63.42737

10.1.10 CÁLCULO DE PROBABILIDAD (RANGO −95° A −75°)

¿Cuál es la probabilidad de que un evento ocurra en una longitud entre −95° y −75°?

# El cálculo ya fue realizado en el paso 10.1.9 como 'P_norm_pct'
x_lon <- round(P_norm_pct, 1)

print(paste("La probabilidad es de:", x_lon, "%"))
## [1] "La probabilidad es de: 63.4 %"

10.1.11 Tablas de Resumen Estadístico (Agrupación 1 - Longitud)

# --- PREPARACIÓN DE DATOS ---
# Usamos las variables calculadas en los pasos 10.1.5 a 10.1.8
n_lon1      <- length(lon_108_60)
media_lon1   <- mu_hat
sd_lon1      <- sigma_hat

# --- 1. TABLA N° 10: RESUMEN DEL TEST DE BONDAD AL MODELO ---
tabla_resumen_lon_norm <- data.frame(
  Variable = "Longitud (−108° a −60°)",
  Pearson = Correlacion_Pearson,
  Chi_cuadrado = x2,
  Umbral = umbral_aceptacion
)

tabla_gt_bondad_lon <- tabla_resumen_lon_norm %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 10**"),
    subtitle = md("Resumen del test de bondad al modelo Normal")
  ) %>%
  cols_label(
    Variable = "Variable",
    Pearson = "Test de Pearson (%)",
    Chi_cuadrado = "Chi-cuadrado (f. relativa)",
    Umbral = "Umbral de aceptación"
  ) %>%
  fmt_number(columns = Pearson, decimals = 2) %>%
  fmt_number(columns = c(Chi_cuadrado, Umbral), decimals = 4) %>%
  tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))

tabla_gt_bondad_lon
Tabla N° 10
Resumen del test de bondad al modelo Normal
Variable Test de Pearson (%) Chi-cuadrado (f. relativa) Umbral de aceptación
Longitud (−108° a −60°) 89.10 7.5779 9.4877
Elaborado por: Grupo 2 – Carrera de Geología
# --- 2. TABLA N° 11: TEOREMA DEL LÍMITE CENTRAL ---
error_estandar_lon1 <- sd_lon1 / sqrt(n_lon1)
limit_inf_lon1 <- media_lon1 - 1.96 * error_estandar_lon1
limit_sup_lon1 <- media_lon1 + 1.96 * error_estandar_lon1

tabla_media_lon_norm <- data.frame(
  Limite_inf = limit_inf_lon1,
  Variable = "Longitud (−108° a −60°)",
  Limite_sup = limit_sup_lon1,
  Error_estandar = error_estandar_lon1
)

tabla_gt_limite_lon <- tabla_media_lon_norm %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 11**"),
    subtitle = md("Cálculo del Error Estándar para el Modelo Normal")
  ) %>%
  cols_label(
    Limite_inf = "Límite inferior",
    Variable = "Variable",
    Limite_sup = "Límite superior",
    Error_estandar = "Error estándar"
  ) %>%
  fmt_number(columns = everything(), decimals = 2) %>%
  tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))

tabla_gt_limite_lon
Tabla N° 11
Cálculo del Error Estándar para el Modelo Normal
Límite inferior Variable Límite superior Error estándar
−83.44 Longitud (−108° a −60°) −82.48 0.24
Elaborado por: Grupo 2 – Carrera de Geología

10.1.12 CONCLUSIÓN

La variable LONGITUD entre (−108° a -60°) a sigue un modelo de probabilidad normal, aprobando los test de Pearson (89.10%) y Chi-cuadrado (7.5779) con un umbral de aceptación de 9.4877. De esta manera, se pueden calcular probabilidades; por ejemplo, la probabilidad de que un evento ocurra en una latitud comprendida entre −95° y −75° es del 63.4%. Además, mediante el teorema del límite central, se determina que la media aritmética poblacional se encuentra entre −83.44° y −82.48°, con un error estándar de 0.24.

10.2 Agrupación 2: Longitud (−60° a 30°) – Modelo uniforme

10.2.1 Filtrado de datos

lon_60_30 <- longitude[longitude >= -60 & longitude <= 30]
n <- length(lon_60_30)

10.2.2 Intervalos

Li_60_30 <- c(-60, -30, 0)
LS_60_30 <- c(-30, 0, 30)
MC_60_30 <- (Li_60_30 + LS_60_30) / 2
k_60_30  <- length(Li_60_30)

10.2.3 Frecuencias

ni_60_30 <- numeric(k_60_30)

for (i in 1:k_60_30) {
  if (i < k_60_30) {
    ni_60_30[i] <- sum(lon_60_30 >= Li_60_30[i] & lon_60_30 < LS_60_30[i])
  } else {
    ni_60_30[i] <- sum(lon_60_30 >= Li_60_30[i] & lon_60_30 <= 30)
  }
}

hi_60_30  <- (ni_60_30 / sum(ni_60_30)) * 100
NI_60_30  <- cumsum(ni_60_30)
NID_60_30 <- rev(cumsum(rev(ni_60_30)))
HI_60_30  <- cumsum(hi_60_30)
HID_60_30 <- rev(cumsum(rev(hi_60_30)))

10.2.4 Tabla de frecuencias

Tabla_60_30 <- data.frame(
  Li  = Li_60_30,
  LS  = LS_60_30,
  MC  = MC_60_30,
  ni  = ni_60_30,
  hi  = round(hi_60_30, 2),
  NI  = NI_60_30,
  NID = NID_60_30,
  HI  = round(HI_60_30, 2),
  HID = round(HID_60_30, 2)
)

Tabla_60_30
##    Li  LS  MC  ni    hi  NI NID     HI    HID
## 1 -60 -30 -45 228 25.91 228 880  25.91 100.00
## 2 -30   0 -15 318 36.14 546 652  62.05  74.09
## 3   0  30  15 334 37.95 880 334 100.00  37.95
Tabla_60_30 <- data.frame(
  Li  = Li_60_30,
  LS  = LS_60_30,
  MC  = MC_60_30,
  ni  = ni_60_30,
  hi  = round(hi_60_30, 2),
  NI  = NI_60_30,
  NID = NID_60_30,
  HI  = round(HI_60_30, 2),
  HID = round(HID_60_30, 2)
)

tabla_gt_60_30 <- Tabla_60_30 %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 12**"),
    subtitle = md("Distribución de frecuencias de la 
                  variable Longitud entre (−60° a 30°) a nivel mundial")
  ) %>%
  fmt_number(columns = c(hi, HI, HID), decimals = 2) %>%
  tab_source_note(
    source_note = md("Autor: Grupo Geología")
  )

tabla_gt_60_30
Tabla N° 12
Distribución de frecuencias de la variable Longitud entre (−60° a 30°) a nivel mundial
Li LS MC ni hi NI NID HI HID
-60 -30 -45 228 25.91 228 880 25.91 100.00
-30 0 -15 318 36.14 546 652 62.05 74.09
0 30 15 334 37.95 880 334 100.00 37.95
Autor: Grupo Geología

10.2.5 Histograma y ajuste del modelo uniforme

breaks_lon <- c(Li_60_30, 30)

hist(
  lon_60_30,
  breaks = breaks_lon,
  freq = TRUE,
  col = "grey",
  border = "black",
  main = "Gráfica 12: Modelo de probabilidad uniforme  de la  variable Longitud 
  entre (−60° a 30°) a nivel mundial",
  xlab = "Longitude (°)",
  ylab = "Frecuencia absoluta"
)

# Parámetros uniforme
a <- min(lon_60_30)
b <- max(lon_60_30)

curve(
  dunif(x, min = a, max = b) * n * diff(breaks_lon)[1],
  add = TRUE,
  lwd = 2,
  col = "red"
)

legend(
  "topright",
  legend = c("Histograma", "Modelo uniforme"),
  col = c("grey", "red"),
  lwd = c(10, 2),
  bty = "n"
)

10.2.6 Cálculo de frecuencias esperadas

Fo_abs <- ni_60_30

# Probabilidades teóricas (uniforme)
P <- punif(LS_60_30, min = a, max = b) -
  punif(Li_60_30, min = a, max = b)

P <- P / sum(P)

Fe_abs <- P * sum(Fo_abs)
Fe_abs
## [1] 290.3694 294.8910 294.7396

10.2.7 Gráfica de evaluación entre Frecuencia observada y Frecuencia relativa (Test de Pearson)

# Coeficiente de correlación de Pearson
pearson_r <- cor(Fo_abs, Fe_abs)
pearson_r
## [1] 0.9855951
# Pearson en porcentaje
pearson_pct <- pearson_r * 100
pearson_pct
## [1] 98.55951
# Gráfico Fo vs Fe
plot(
  Fo_abs, Fe_abs,
  main = "Gráfica 13: Correlación entre Frecuencia observada y Frecuencia 
  relativa del Modelo Uniforme de la variable Longitud
  entre (−60° a 30°) a nivel mundial)",
  xlab = "Frecuencia observada (Fo)",
  ylab = "Frecuencia esperada (Fe)",
  pch = 19,
  col = "blue3"
)

# Recta de ajuste
abline(lm(Fe_abs ~ Fo_abs), col = "red", lwd = 2)

# Resultado final
Correlacion_Pearson <- pearson_pct
Correlacion_Pearson
## [1] 98.55951

10.2.8 Prueba de Chi-cuadrado

nivel_significancia <- 0.05

Fo <- (Fo_abs / sum(Fo_abs)) * 100
Fe <- P * 100

x2 <- sum((Fo - Fe)^2 / Fe)
x2
## [1] 2.322392
grados_libertad <- length(Fo) - 1
grados_libertad
## [1] 2
umbral_aceptacion <- qchisq(1 - nivel_significancia, grados_libertad)
umbral_aceptacion
## [1] 5.991465
Decision_Chi <- ifelse(
  x2 < umbral_aceptacion,
  "SE ACEPTA el modelo UNIFORME",
  "SE RECHAZA el modelo UNIFORME"
)

Decision_Chi
## [1] "SE ACEPTA el modelo UNIFORME"

10.2.9 Gráfica de probabilidad – Modelo exponencial

# Parámetros uniforme
a <- -60
b <- 30

x_uni <- seq(a, b, length.out = 500)
y_uni <- dunif(x_uni, min = a, max = b)

plot(
  x_uni, y_uni,
  type = "l",
  lwd = 2,
  col = "blue3",
  main = "Gráfica 14: Cálculo de probabilidades – Modelo uniforme 
  de la variable Longitud entre (−60° a 30°) a nivel mundial",
  xlab = "Longitude (°)",
  ylab = "Densidad de probabilidad"
)

# Intervalo de probabilidad (ejemplo)
x_sec <- seq(-30, 0, by = 0.1)
y_sec <- dunif(x_sec, min = a, max = b)

polygon(
  c(x_sec, rev(x_sec)),
  c(y_sec, rep(0, length(y_sec))),
  col = rgb(1, 0, 0, 0.5),
  border = NA
)

lines(x_sec, y_sec, col = "red", lwd = 2)

legend(
  "topright",
  legend = c("Modelo uniforme", "Área de probabilidad"),
  col = c("blue3", "red"),
  lwd = 2,
  bty = "n"
)

# Parámetros
a <- -60
b <- 30

# Probabilidad (Uniforme)
P_uni <- punif(0, min = a, max = b) -
  punif(-30, min = a, max = b)

# Porcentaje
P_uni_pct <- P_uni * 100

P_uni
## [1] 0.3333333
P_uni_pct
## [1] 33.33333

10.2.10 CÁLCULO DE PROBABILIDAD

¿Cuál es la probabilidad de que un evento ocurra en una longitud entre −30° y 0°?

# El cálculo ya fue realizado en el paso 10.2.9 como 'P_uni_pct'
x_lon2 <- round(P_uni_pct, 1)

print(paste("La probabilidad es de:", x_lon2, "%"))
## [1] "La probabilidad es de: 33.3 %"

10.2.11 Tablas de Resumen Estadístico (Agrupación 2 - Longitud)

# --- PREPARACIÓN DE DATOS ---
# Usamos las variables calculadas en los pasos 10.2.1 y 10.2.5 a 10.2.8
n_lon2      <- n
media_lon2  <- mean(lon_60_30)
sd_lon2     <- sd(lon_60_30)

# --- 1. TABLA N° 13: RESUMEN DEL TEST DE BONDAD AL MODELO ---
tabla_resumen_lon_uni <- data.frame(
  Variable = "Longitud (−60° a 30°)",
  Pearson = Correlacion_Pearson,
  Chi_cuadrado = x2,
  Umbral = umbral_aceptacion
)

tabla_gt_bondad_lon2 <- tabla_resumen_lon_uni %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 13**"),
    subtitle = md("Resumen del test de bondad al modelo Uniforme")
  ) %>%
  cols_label(
    Variable = "Variable",
    Pearson = "Test de Pearson (%)",
    Chi_cuadrado = "Chi-cuadrado (f. relativa)",
    Umbral = "Umbral de aceptación"
  ) %>%
  fmt_number(columns = Pearson, decimals = 2) %>%
  fmt_number(columns = c(Chi_cuadrado, Umbral), decimals = 4) %>%
  tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))

tabla_gt_bondad_lon2
Tabla N° 13
Resumen del test de bondad al modelo Uniforme
Variable Test de Pearson (%) Chi-cuadrado (f. relativa) Umbral de aceptación
Longitud (−60° a 30°) 98.56 2.3224 5.9915
Elaborado por: Grupo 2 – Carrera de Geología
# --- 2. TABLA N° 14: TEOREMA DEL LÍMITE CENTRAL ---
error_estandar_lon2 <- sd_lon2 / sqrt(n_lon2)
limit_inf_lon2 <- media_lon2 - 1.96 * error_estandar_lon2
limit_sup_lon2 <- media_lon2 + 1.96 * error_estandar_lon2

tabla_media_lon_uni <- data.frame(
  Limite_inf = limit_inf_lon2,
  Variable = "Longitud (−60° a 30°)",
  Limite_sup = limit_sup_lon2,
  Error_estandar = error_estandar_lon2
)

tabla_gt_limite_lon2 <- tabla_media_lon_uni %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 14**"),
    subtitle = md("Cálculo del Error Estándar para el Modelo Uniforme")
  ) %>%
  cols_label(
    Limite_inf = "Límite inferior",
    Variable = "Variable",
    Limite_sup = "Límite superior",
    Error_estandar = "Error estándar"
  ) %>%
  fmt_number(columns = everything(), decimals = 2) %>%
  tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))

tabla_gt_limite_lon2
Tabla N° 14
Cálculo del Error Estándar para el Modelo Uniforme
Límite inferior Variable Límite superior Error estándar
−9.33 Longitud (−60° a 30°) −6.21 0.80
Elaborado por: Grupo 2 – Carrera de Geología

10.2.12 Conclusión

La variable LONGITUD entre (−60° a 30°) sigue un modelo de probabilidad uniforme, aprobando los test de Pearson (98.56%) y Chi-cuadrado (2.3224) con un umbral de aceptación de 5.9915. De esta manera, se pueden calcular probabilidades; por ejemplo, la probabilidad de que un evento ocurra en una longitud comprendida entre −30° y 0° es del 33.3%. Además, mediante el teorema del límite central, se determina que la media aritmética poblacional se encuentra entre −9.33° y −6.21°, con un error estándar de 0.80.

10.3 Agrupación 3: Longitud (>30°) – Modelo Gamma

10.3.1 Filtrado de datos

lon_30_max <- longitude[longitude > 30]
n <- length(lon_30_max)

10.3.2 Intervalos

ancho_clase <- 30
max_lon <- ceiling(max(lon_30_max) / ancho_clase) * ancho_clase

Li_30_max <- seq(30, max_lon - ancho_clase, by = ancho_clase)
LS_30_max <- Li_30_max + ancho_clase
MC_30_max <- (Li_30_max + LS_30_max) / 2
k_30_max  <- length(Li_30_max)

breaks_lon <- c(Li_30_max, max_lon)

10.3.3 Frecuencias

ni_30_max <- numeric(k_30_max)

for (i in 1:k_30_max) {
  if (i < k_30_max) {
    ni_30_max[i] <- sum(lon_30_max >= Li_30_max[i] & lon_30_max < LS_30_max[i])
  } else {
    ni_30_max[i] <- sum(lon_30_max >= Li_30_max[i] & lon_30_max <= max_lon)
  }
}

Fo_abs <- ni_30_max

10.3.4 Tabla de frecuencias

hi_30_max  <- (Fo_abs / sum(Fo_abs)) * 100
NI_30_max  <- cumsum(Fo_abs)
NID_30_max <- rev(cumsum(rev(Fo_abs)))
HI_30_max  <- cumsum(hi_30_max)
HID_30_max <- rev(cumsum(rev(hi_30_max)))

Tabla_30_max <- data.frame(
  Li  = Li_30_max,
  LS  = LS_30_max,
  MC  = MC_30_max,
  ni  = Fo_abs,
  hi  = round(hi_30_max, 2),
  NI  = NI_30_max,
  NID = NID_30_max,
  HI  = round(HI_30_max, 2),
  HID = round(HID_30_max, 2)
)

tabla_gt_30_max <- Tabla_30_max %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 15**"),
    subtitle = md("Distribución de frecuencias de la 
                  variable Longitud (>30°) a nivel mundial")
  ) %>%
  fmt_number(columns = c(hi, HI, HID), decimals = 2) %>%
  tab_source_note(
    source_note = md("Autor: Grupo Geología")
  )

tabla_gt_30_max
Tabla N° 15
Distribución de frecuencias de la variable Longitud (>30°) a nivel mundial
Li LS MC ni hi NI NID HI HID
30 60 45 279 5.14 279 5428 5.14 100.00
60 90 75 2034 37.47 2313 5149 42.61 94.86
90 120 105 1784 32.87 4097 3115 75.48 57.39
120 150 135 1083 19.95 5180 1331 95.43 24.52
150 180 165 248 4.57 5428 248 100.00 4.57
Autor: Grupo Geología

10.3.5 Histograma y ajuste del modelo gamma

x_gamma_data <- lon_30_max - 30

media_g <- mean(x_gamma_data)
var_g   <- var(x_gamma_data)

shape_hat <- media_g^2 / var_g
rate_hat  <- media_g / var_g

x_gamma <- seq(min(x_gamma_data), max(x_gamma_data), length.out = 500)
y_gamma <- dgamma(x_gamma, shape = shape_hat, rate = rate_hat)

# Escalado correcto a frecuencias absolutas
y_gamma <- y_gamma * ancho_clase * sum(Fo_abs)

y_max <- max(c(Fo_abs, y_gamma)) * 1.30   # 👈 SOLO ESTO SE CAMBIA

hist(
  lon_30_max,
  breaks = breaks_lon,
  freq = TRUE,
  col = "grey",
  border = "black",
  ylim = c(0, y_max),
  main = "Gráfica 15: Modelo de probabilidad gamma de la  variable Longitud 
  entre (>30°) a nivel mundial",
  xlab = "Longitude (°)",
  ylab = "Frecuencia absoluta"
)

# Curva gamma (MISMA curva, mismos valores)
lines(x_gamma + 30, y_gamma, col = "red", lwd = 2)

legend(
  "topright",
  legend = c("Histograma", "Modelo Gamma"),
  col = c("grey", "red"),
  lwd = c(10, 2),
  bty = "n"
)

10.3.6 Cálculo de frecuencias esperadas

P <- numeric(k_30_max)

for (i in 1:k_30_max) {
  P[i] <- pgamma(LS_30_max[i] - 30, shape_hat, rate_hat) -
    pgamma(Li_30_max[i] - 30, shape_hat, rate_hat)
}

P <- P / sum(P)
Fe_abs <- P * sum(Fo_abs)
# Frecuencias observadas absolutas (desde la tabla)
Fo_abs <- ni_30_max

# Eliminar clases con frecuencia esperada nula (condición estadística)
validos <- which(Fe_abs > 0 & Fo_abs > 0)

Fo_val <- Fo_abs[validos]
Fe_val <- Fe_abs[validos]

10.3.7 Gráfica de evaluación entre Frecuencia observada y Frecuencia relativa (Test de Pearson)

pearson_r <- cor(Fo_val, Fe_val, method = "pearson")
pearson_pct <- pearson_r * 100

plot(
  Fo_val, Fe_val,
  main = "Gráfica 16: Correlación entre Frecuencia observada y Frecuencia 
  relativa del Modelo gamma de la variable Longitud
   (>30°) a nivel mundial",
  xlab = "Frecuencia observada (Fo)",
  ylab = "Frecuencia esperada (Fe)",
  pch = 19,
  col = "blue3"
)

abline(lm(Fe_val ~ Fo_val), col = "red", lwd = 2)

Correlacion_Pearson <- pearson_pct
Correlacion_Pearson
## [1] 98.35356

10.3.8 Prueba de Chi-cuadrado

nivel_significancia <- 0.05

# Frecuencias porcentuales
Fo <- (Fo_val / sum(Fo_val)) * 100
Fe <- (Fe_val / sum(Fe_val)) * 100

# Estadístico Chi-cuadrado
x2 <- sum((Fo - Fe)^2 / Fe)

# Grados de libertad
# gl = k - p - 1   (p = 2 parámetros Gamma: shape y rate)
k <- length(Fo)
p <- 2
grados_libertad <- k - p - 1

# Valor crítico
umbral_aceptacion <- qchisq(1 - nivel_significancia, grados_libertad)

# Decisión
Decision_Chi <- ifelse(
  x2 < umbral_aceptacion,
  "SE ACEPTA el modelo GAMMA",
  "SE RECHAZA el modelo GAMMA"
)

# Resultados
x2
## [1] 2.155173
grados_libertad
## [1] 2
umbral_aceptacion
## [1] 5.991465
Decision_Chi
## [1] "SE ACEPTA el modelo GAMMA"

10.3.9 Gráfica de probabilidad – Modelo exponencial

# Dominio desplazado (Gamma definida para x > 0)
x_gamma <- seq(0, max(lon_30_max) - 30, length.out = 500)

# Densidad Gamma
y_gamma <- dgamma(x_gamma, shape = shape_hat, rate = rate_hat)

# Transformación al dominio real
x_plot <- x_gamma + 30

plot(
  x_plot, y_gamma,
  type = "l",
  lwd = 2,
  col = "blue3",
  main = "Gráfica 17: Cálculo de probabilidades – Modelo gamma
  de la variable Longitud (>30°) a nivel mundial",
  xlab = "Longitude (°)",
  ylab = "Densidad de probabilidad"
)

# Intervalo de probabilidad (ejemplo)
x_sec <- seq(60, 120, by = 0.5)
x_sec_gamma <- x_sec - 30
y_sec <- dgamma(x_sec_gamma, shape = shape_hat, rate = rate_hat)

polygon(
  c(x_sec, rev(x_sec)),
  c(y_sec, rep(0, length(y_sec))),
  col = rgb(1, 0, 0, 0.5),
  border = NA
)

lines(x_sec, y_sec, col = "red", lwd = 2)

legend(
  "topright",
  legend = c("Modelo Gamma", "Área de probabilidad"),
  col = c("blue3", "red"),
  lwd = 2,
  bty = "n"
)

# Transformación
x1 <- 60 - 30
x2 <- 120 - 30

# Probabilidad (Gamma)
P_gamma <- pgamma(x2, shape = shape_hat, rate = rate_hat) -
  pgamma(x1, shape = shape_hat, rate = rate_hat)

# Porcentaje
P_gamma_pct <- P_gamma * 100

P_gamma
## [1] 0.7518324
P_gamma_pct
## [1] 75.18324

10.3.10 CÁLCULO DE PROBABILIDAD

¿Cuál es la probabilidad de que un evento ocurra en una longitud entre 60° y 120°?

# El cálculo ya fue realizado en el paso 10.3.9 como 'P_gamma_pct'
x_lon3 <- round(P_gamma_pct, 1)

print(paste("La probabilidad es de:", x_lon3, "%"))
## [1] "La probabilidad es de: 75.2 %"

10.3.11 Tablas de Resumen Estadístico (Agrupación 3 - Longitud)

# --- PREPARACIÓN DE DATOS ---
# Usamos las variables calculadas en los pasos 10.3.1 y 10.3.5 a 10.3.8
n_lon3      <- n
media_lon3  <- mean(lon_30_max)
sd_lon3     <- sd(lon_30_max)

# --- 1. TABLA N° 16: RESUMEN DEL TEST DE BONDAD AL MODELO ---
tabla_resumen_lon_gamma <- data.frame(
  Variable = "Longitud (>30°)",
  Pearson = Correlacion_Pearson,
  Chi_cuadrado = x2,
  Umbral = umbral_aceptacion
)

tabla_gt_bondad_lon3 <- tabla_resumen_lon_gamma %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 16**"),
    subtitle = md("Resumen del test de bondad al modelo Gamma")
  ) %>%
  cols_label(
    Variable = "Variable",
    Pearson = "Test de Pearson (%)",
    Chi_cuadrado = "Chi-cuadrado (f. relativa)",
    Umbral = "Umbral de aceptación"
  ) %>%
  fmt_number(columns = Pearson, decimals = 2) %>%
  fmt_number(columns = c(Chi_cuadrado, Umbral), decimals = 4) %>%
  tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))

tabla_gt_bondad_lon3
Tabla N° 16
Resumen del test de bondad al modelo Gamma
Variable Test de Pearson (%) Chi-cuadrado (f. relativa) Umbral de aceptación
Longitud (>30°) 98.35 90.0000 5.9915
Elaborado por: Grupo 2 – Carrera de Geología
# --- 2. TABLA N° 17: TEOREMA DEL LÍMITE CENTRAL ---
error_estandar_lon3 <- sd_lon3 / sqrt(n_lon3)
limit_inf_lon3 <- media_lon3 - 1.96 * error_estandar_lon3
limit_sup_lon3 <- media_lon3 + 1.96 * error_estandar_lon3

tabla_media_lon_gamma <- data.frame(
  Limite_inf = limit_inf_lon3,
  Variable = "Longitud (>30°)",
  Limite_sup = limit_sup_lon3,
  Error_estandar = error_estandar_lon3
)

tabla_gt_limite_lon3 <- tabla_media_lon_gamma %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 17**"),
    subtitle = md("Cálculo del Error Estándar para el Modelo Gamma")
  ) %>%
  cols_label(
    Limite_inf = "Límite inferior",
    Variable = "Variable",
    Limite_sup = "Límite superior",
    Error_estandar = "Error estándar"
  ) %>%
  fmt_number(columns = everything(), decimals = 2) %>%
  tab_source_note(source_note = md("Elaborado por: Grupo 2 – Carrera de Geología"))

tabla_gt_limite_lon3
Tabla N° 17
Cálculo del Error Estándar para el Modelo Gamma
Límite inferior Variable Límite superior Error estándar
97.76 Longitud (>30°) 99.23 0.37
Elaborado por: Grupo 2 – Carrera de Geología

10.3.12 Conclusión

La variable LONGITUD para valores mayores a 30° sigue un modelo de probabilidad gamma, aceptado según el test de Pearson (98.35%) y el criterio de Chi-cuadrado, con un umbral de aceptación de 5.9915. A partir de este modelo, se pueden estimar probabilidades; por ejemplo, la probabilidad de que un evento ocurra en una longitud comprendida entre 60° y 120° es del 75.2%. Además, mediante el teorema del límite central, se establece que la media aritmética poblacional se encuentra entre −97.76° y 99.23°, con un error estándar de 0.37.

11. Tabla Resumen de probabilidades

Resumen_Probabilidades <- data.frame(
  Agrupacion = c("Normal (-108 a -60)", "Uniforme (-60 a 30)", "Gamma (> 30)"),
  Intervalo  = c("[-95, -75]", "[-30, 0]", "[60, 120]"),
  Probabilidad = c(P_norm, P_uni, P_gamma),
  Porcentaje   = c(P_norm_pct, P_uni_pct, P_gamma_pct)
)

Resumen_Probabilidades
##            Agrupacion  Intervalo Probabilidad Porcentaje
## 1 Normal (-108 a -60) [-95, -75]    0.6342737   63.42737
## 2 Uniforme (-60 a 30)   [-30, 0]    0.3333333   33.33333
## 3        Gamma (> 30)  [60, 120]    0.7518324   75.18324
# ====================================================
# TABLA RESUMEN DE PROBABILIDADES POR AGRUPACIÓN
# ====================================================

Resumen_Probabilidades <- data.frame(
  Agrupación = c(
    "Normal (−108 a −60)",
    "Uniforme (−60 a 30)",
    "Gamma (> 30)"
  ),
  Intervalo = c(
    "[−95, −75]",
    "[−30, 0]",
    "[60, 120]"
  ),
  Probabilidad = c(
    P_norm,
    P_uni,
    P_gamma
  ),
  Porcentaje = c(
    P_norm_pct,
    P_uni_pct,
    P_gamma_pct
  )
)

tabla_gt_prob <- Resumen_Probabilidades %>%
  gt() %>%
  tab_header(
    title = md("**Tabla N° 18**"),
    subtitle = md("Resumen de probabilidades por agrupación y modelo de distribución")
  ) %>%
  fmt_number(
    columns = c(Probabilidad),
    decimals = 4
  ) %>%
  fmt_number(
    columns = c(Porcentaje),
    decimals = 2
  ) %>%
  cols_label(
    Agrupación  = "Agrupación / Modelo",
    Intervalo   = "Intervalo analizado (°)",
    Probabilidad = "Probabilidad",
    Porcentaje   = "Probabilidad (%)"
  ) %>%
  tab_source_note(
    source_note = md("Autor: Grupo Geología")
  )

tabla_gt_prob
Tabla N° 18
Resumen de probabilidades por agrupación y modelo de distribución
Agrupación / Modelo Intervalo analizado (°) Probabilidad Probabilidad (%)
Normal (−108 a −60) [−95, −75] 0.6343 63.43
Uniforme (−60 a 30) [−30, 0] 0.3333 33.33
Gamma (> 30) [60, 120] 0.7518 75.18
Autor: Grupo Geología