1. Librerías 2. Variable 3. Frecuencias

ESTADÍSTICA INFERENCIAL

1. CARGA DE LIBRERÍAS Y BASE DE DATOS

# ============================================================
# ESTADÍSTICA INFERENCIAL
# MODELO NORMAL
# VARIABLE: TAMAÑO DE LOS DESLIZAMIENTOS
# ============================================================


# ============================================================
# 1. CARGA DE LIBRERÍAS
# ============================================================

library(dplyr)
library(readxl)
library(gt)
library(knitr)


# ============================================================
# CARGA DE LA BASE DE DATOS
# ============================================================

datos <- read.csv2(
  "dataset_deslizamientos.csv",
  header = TRUE,
  stringsAsFactors = FALSE,
  fileEncoding = "latin1"
)

2. SELECCIÓN Y TRANSFORMACIÓN DE LA VARIABLE

# ============================================================
# 2. SELECCIÓN Y TRANSFORMACIÓN DE LA VARIABLE
# ============================================================

# Transformación de la variable cualitativa ordinal:
#
# small      = 1
# medium     = 2
# large      = 3
# very_large = 4


datos <- datos %>%
  mutate(
    
    landslide_size_num = case_when(
      
      landslide_size == "small" ~ 1,
      
      landslide_size == "medium" ~ 2,
      
      landslide_size == "large" ~ 3,
      
      landslide_size == "very_large" ~ 4,
      
      TRUE ~ NA_real_
    )
  )


# Extracción de la variable

variable_num <- datos$landslide_size_num


# Eliminación de valores ausentes

variable_num <- variable_num[
  !is.na(variable_num)
]

3. TABLA DE FRECUENCIAS

# ============================================================
# 3. TABLA DE FRECUENCIAS
# ============================================================

tabla_modelo <- datos %>%
  
  filter(
    !is.na(landslide_size_num)
  ) %>%
  
  count(
    landslide_size_num,
    name = "ni"
  ) %>%
  
  mutate(
    
    categoria = case_when(
      
      landslide_size_num == 1 ~ "small",
      
      landslide_size_num == 2 ~ "medium",
      
      landslide_size_num == 3 ~ "large",
      
      landslide_size_num == 4 ~ "very_large"
    ),
    
    hi = ni / sum(ni),
    
    hi_porcentaje = hi * 100
  ) %>%
  
  arrange(
    landslide_size_num
  ) %>%
  
  select(
    x = landslide_size_num,
    categoria,
    ni,
    hi,
    hi_porcentaje
  )


tabla_modelo
##   x  categoria   ni         hi hi_porcentaje
## 1 1      small 2767 0.27207473     27.207473
## 2 2     medium 6551 0.64414946     64.414946
## 3 3      large  750 0.07374631      7.374631
## 4 4 very_large  102 0.01002950      1.002950

4.1 CONJETURA DEL MODELO

# ============================================================
# 4. CONJETURA DEL MODELO
# ============================================================

# La variable original es cualitativa ordinal.
#
# Se transformó numéricamente conservando el orden:
#
# small      = 1
# medium     = 2
# large      = 3
# very_large = 4
#
# Se propone evaluar si los valores codificados pueden
# aproximarse mediante una distribución normal.
#
# H0: La variable transformada se ajusta a una distribución normal.
#
# H1: La variable transformada no se ajusta a una distribución normal.

4.2 CÁLCULO DE PARÁMETROS

# ============================================================
# 5. CÁLCULO DE PARÁMETROS
# ============================================================


# Tamaño de la muestra

n <- length(
  variable_num
)


# Media

mu_normal <- mean(
  variable_num
)


# Desviación estándar

sigma_normal <- sd(
  variable_num
)


# Mostrar los parámetros

n
## [1] 10170
mu_normal
## [1] 1.821731
sigma_normal
## [1] 0.5951419

4.3 CÁLCULO DE PROBABILIDADES DEL MODELO NORMAL

# ============================================================
# 6. CÁLCULO DE PROBABILIDADES
# ============================================================


# Intervalos:
#
# small:
# X < 1.5
#
# medium:
# 1.5 <= X < 2.5
#
# large:
# 2.5 <= X < 3.5
#
# very_large:
# X >= 3.5


# Probabilidad de small

P_small_normal <- pnorm(
  
  1.5,
  
  mean = mu_normal,
  
  sd = sigma_normal
)


# Probabilidad de medium

P_medium_normal <- pnorm(
  
  2.5,
  
  mean = mu_normal,
  
  sd = sigma_normal
) -
  
  pnorm(
    
    1.5,
    
    mean = mu_normal,
    
    sd = sigma_normal
  )


# Probabilidad de large

P_large_normal <- pnorm(
  
  3.5,
  
  mean = mu_normal,
  
  sd = sigma_normal
) -
  
  pnorm(
    
    2.5,
    
    mean = mu_normal,
    
    sd = sigma_normal
  )


# Probabilidad de very_large

P_very_large_normal <- 1 -
  
  pnorm(
    
    3.5,
    
    mean = mu_normal,
    
    sd = sigma_normal
  )


# Vector de probabilidades

prob_normal <- c(
  
  P_small_normal,
  
  P_medium_normal,
  
  P_large_normal,
  
  P_very_large_normal
)


# Verificar que las probabilidades sumen 1

sum(
  prob_normal
)
## [1] 1

4.4 FRECUENCIAS ESPERADAS

# ============================================================
# 7. FRECUENCIAS ESPERADAS
# ============================================================


frecuencia_esperada_normal <-
  
  prob_normal * n


# Tabla comparativa

tabla_normal <- tabla_modelo %>%
  
  mutate(
    
    prob_normal =
      prob_normal,
    
    esperada_normal =
      frecuencia_esperada_normal
  )


tabla_normal
##   x  categoria   ni         hi hi_porcentaje prob_normal esperada_normal
## 1 1      small 2767 0.27207473     27.207473 0.294393472      2993.98161
## 2 2     medium 6551 0.64414946     64.414946 0.578396043      5882.28776
## 3 3      large  750 0.07374631      7.374631 0.124808917      1269.30668
## 4 4 very_large  102 0.01002950      1.002950 0.002401569        24.42396

5.1 GRÁFICA DEL MODELO NORMAL

# ============================================================
# 8. GRÁFICA
# CURVA NORMAL SOBRE EL HISTOGRAMA
# ============================================================


# Reducir márgenes

par(
  mar = c(4, 4, 3, 1)
)


# Histograma

hist(
  
  variable_num,
  
  breaks = c(
    0.5,
    1.5,
    2.5,
    3.5,
    4.5
  ),
  
  probability = TRUE,
  
  col = "#EEDFCC",
  
  border = "black",
  
  main =
    "Ajuste de la distribución normal",
  
  xlab =
    "Tamaño del deslizamiento codificado",
  
  ylab =
    "Densidad"
)


# Valores para la curva

x_curve <- seq(
  
  0.5,
  
  4.5,
  
  length.out = 1000
)


# Densidad normal

y_curve <- dnorm(
  
  x_curve,
  
  mean = mu_normal,
  
  sd = sigma_normal
)


# Superponer curva normal

lines(
  
  x_curve,
  
  y_curve,
  
  lwd = 3
)

5.2 GRÁFICA DE CORRELACIÓN

# ============================================================
# 9. GRÁFICA DE CORRELACIÓN
# FRECUENCIAS OBSERVADAS VS ESPERADAS
# ============================================================


# Frecuencias observadas en porcentaje

Fo <- tabla_modelo$hi_porcentaje


# Frecuencias esperadas en porcentaje

Fe <- tabla_normal$prob_normal * 100


# Gráfica de correlación

plot(
  
  Fo,
  
  Fe,
  
  xlim = c(
    0,
    max(Fo, Fe)
  ),
  
  ylim = c(
    0,
    max(Fo, Fe)
  ),
  
  main =
    "Gráfica Nº3: Correlación de frecuencias",
  
  xlab =
    "Frecuencia observada (%)",
  
  ylab =
    "Frecuencia esperada (%)",
  
  pch = 19,
  
  col = "darkblue"
)


# Línea de igualdad

abline(
  
  a = 0,
  
  b = 1,
  
  col = "red",
  
  lwd = 2
)

5.3 CORRELACIÓN DE PEARSON

# ============================================================
# 10. CORRELACIÓN DE PEARSON
# ============================================================


Correlacion <- cor(
  
  Fo,
  
  Fe
) * 100


Correlacion
## [1] 99.15535

5.4 CHI-CUADRADO Y UMBRAL DE ACEPTACIÓN

# ============================================================
# 11. NÚMERO DE CATEGORÍAS
# ============================================================


K <- length(
  
  tabla_modelo$x
)


K
## [1] 4
# ============================================================
# 12. GRADOS DE LIBERTAD
# ============================================================


gl <- K - 1


gl
## [1] 3
# ============================================================
# 13. CHI-CUADRADO DE PEARSON
# ============================================================


x2 <- sum(
  
  (Fo - Fe)^2 / Fe
)


x2
## [1] 5.428614
# ============================================================
# 14. UMBRAL DE ACEPTACIÓN
# ============================================================


# Nivel de confianza del 99%
# alpha = 0.01


vc <- qchisq(
  
  0.99,
  
  gl
)


vc
## [1] 11.34487
# Comparación del estadístico con el valor crítico

x2 < vc
## [1] TRUE

5.5 TEST DE CHI-CUADRADO

# ============================================================
# 15. TEST DE CHI-CUADRADO CON chisq.test()
# ============================================================


test_normal <- chisq.test(
  
  x = tabla_modelo$ni,
  
  p = prob_normal
)


test_normal
## 
##  Chi-squared test for given probabilities
## 
## data:  tabla_modelo$ni
## X-squared = 552.09, df = 3, p-value < 2.2e-16

6.1 TABLA RESUMEN DE BONDAD DEL MODELO

# ============================================================
# 16. TABLA RESUMEN DE BONDAD DEL MODELO
# ============================================================


Variable <- c(
  
  "Tamaño del deslizamiento"
)


tabla_resumen <- data.frame(
  
  Variable,
  
  round(
    Correlacion,
    2
  ),
  
  round(
    x2,
    2
  ),
  
  round(
    vc,
    2
  )
)


colnames(
  
  tabla_resumen
) <- c(
  
  "Variable",
  
  "Test Pearson (%)",
  
  "Chi Cuadrado",
  
  "Umbral de aceptación"
)


kable(
  
  tabla_resumen,
  
  format = "markdown",
  
  caption =
    "Tabla Nº2: Resumen de bondad del modelo normal"
)
Tabla Nº2: Resumen de bondad del modelo normal
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
Tamaño del deslizamiento 99.16 5.43 11.34

6.2 CÁLCULO DE PROBABILIDADES

# ============================================================
# 17. CÁLCULO DE PROBABILIDADES
# ============================================================


# Probabilidad de small

P_small_normal
## [1] 0.2943935
# Probabilidad de medium

P_medium_normal
## [1] 0.578396
# Probabilidad de large

P_large_normal
## [1] 0.1248089
# Probabilidad de very_large

P_very_large_normal
## [1] 0.002401569
# Probabilidad acumulada hasta medium

P_hasta_medium_normal <- pnorm(
  
  2.5,
  
  mean = mu_normal,
  
  sd = sigma_normal
)


# Probabilidad de large o very_large

P_grandes_normal <- 1 -
  
  pnorm(
    
    2.5,
    
    mean = mu_normal,
    
    sd = sigma_normal
  )


P_hasta_medium_normal
## [1] 0.8727895
P_grandes_normal
## [1] 0.1272105

6.3 CONCLUSIÓN

# ============================================================
# 18. CONCLUSIÓN
# ============================================================


if (
  
  x2 < vc
  
) {
  
  conclusion_normal <-
    
    paste(
      
      "El valor de Chi cuadrado calculado es menor",
      
      "que el umbral de aceptación.",
      
      "Por lo tanto, no se rechaza la hipótesis nula",
      
      "y el modelo normal presenta un ajuste compatible",
      
      "con los datos."
    )
  
} else {
  
  conclusion_normal <-
    
    paste(
      
      "El valor de Chi cuadrado calculado es mayor",
      
      "que el umbral de aceptación.",
      
      "Por lo tanto, se rechaza la hipótesis nula",
      
      "y el modelo normal no presenta un ajuste adecuado",
      
      "para los datos."
    )
}


conclusion_normal
## [1] "El valor de Chi cuadrado calculado es menor que el umbral de aceptación. Por lo tanto, no se rechaza la hipótesis nula y el modelo normal presenta un ajuste compatible con los datos."