CARRERA DE GEOLOGÍA
GRUPO N°2
ANÁLISIS ESTADÍSTICO INFERENCIAL
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
## Installing package into '/cloud/lib/x86_64-pc-linux-gnu-library/4.6'
## (as 'lib' is unspecified)
##
## 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
#CARGA DE DATASET
Volcanes_Globales <- read.csv("global_volcano_eruption_intelligence.csv", header = T, sep = ";", dec = ".")
#SELECCION VARIABLE
retornoV<- Volcanes_Globales$avg_eruption_return_period_years
# Eliminar NA
retorno <- na.omit(retornoV)
## [1] 898
## [1] 8
## [1] 200
# Frecuencia absoluta
ni <- numeric(k)
for (i in 1:k) {
if (i == 1) {
# Primer intervalo: [0, 200]
ni[i] <- sum(
retorno >= Li[i] &
retorno <= Ls[i],
na.rm = TRUE
)
} else {
# Resto de intervalos: (Li, Ls]
ni[i] <- sum(
retorno > Li[i] &
retorno <= Ls[i],
na.rm = TRUE
)
}
}
# Frecuencia relativa
hi <- ni / n
# ==============================================================================
# TABLA DE DISTRIBUCIÓN DE FRECUENCIAS
# ==============================================================================
TDFretorno <- data.frame(
Intervalo = etiquetas,
ni = ni,
hi = round(hi * 100, 2)
)
# Agregar fila TOTAL
TDFretorno <- rbind(
TDFretorno,
data.frame(
Intervalo = "TOTAL",
ni = sum(ni),
hi = 100
)
)
# Mostrar tabla
TDFretorno
## Intervalo ni hi
## 1 [0 - 200] 626 69.71
## 2 (200 - 400] 176 19.60
## 3 (400 - 600] 46 5.12
## 4 (600 - 800] 24 2.67
## 5 (800 - 1000] 13 1.45
## 6 (1000 - 1200] 6 0.67
## 7 (1200 - 1400] 6 0.67
## 8 (1400 - 1600] 1 0.11
## 9 TOTAL 898 100.00
| Distribución de Frecuencias del Período de Retorno de los Volcanes | ||
| Análisis de frecuencias mediante ocho intervalos de amplitud de 200 años | ||
| Intervalo del Período de Retorno (años) | Frecuencia Absoluta (ni) | Frecuencia Relativa (hi) (%) |
|---|---|---|
| [0 - 200] | 626 | 69.71 |
| (200 - 400] | 176 | 19.60 |
| (400 - 600] | 46 | 5.12 |
| (600 - 800] | 24 | 2.67 |
| (800 - 1000] | 13 | 1.45 |
| (1000 - 1200] | 6 | 0.67 |
| (1200 - 1400] | 6 | 0.67 |
| (1400 - 1600] | 1 | 0.11 |
| TOTAL | 898 | 100.00 |
hist(
retorno,
breaks = breaks_retorno,
freq = TRUE,
xaxt = "n",
col = "lightblue",
border = "black",
main = "Histograma de Frecuencias Absolutas",
xlab = "Período de Retorno (años)",
ylab = "Cantidad"
)
axis(
side = 1,
at = breaks_retorno,
labels = round(breaks_retorno, 0),
las = 2
)
#PARAMETROS
# Número total de volcanes
n <- sum(TDFretorno$ni[TDFretorno$Intervalo != "TOTAL"])
# Datos agrupados (frecuencias absolutas)
x <- TDFretorno$ni[TDFretorno$Intervalo != "TOTAL"]
# Marcas de clase
marcas_clase <- (Li + Ls) / 2
# Media observada mediante datos agrupados
media_observada <- sum(marcas_clase * x) / n
# Parámetro de la distribución Exponencial LAMBDA
lambda <- 1 / media_observada
# Mostrar resultados
media_observada
## [1] 203.5635
lambda
## [1] 0.004912473
#==============================================================================
# FRECUENCIAS OBSERVADAS
# ==============================================================================
Fo <- TDFretorno$hi[TDFretorno$Intervalo != "TOTAL"]
# ==============================================================================
# FRECUENCIAS ESPERADAS - MODELO EXPONENCIAL
# ==============================================================================
P_exp <- numeric(length(Li))
for(i in 1:length(Li)){
P_exp[i] <- pexp(
Ls[i],
rate = lambda
) -
pexp(
Li[i],
rate = lambda
)
}
# Frecuencia esperada porcentual
Fe <- P_exp * 100
# Mostrar resultados
Fo
## [1] 69.71 19.60 5.12 2.67 1.45 0.67 0.67 0.11
Fe
## [1] 62.56239590 23.42186209 8.76858400 3.28274776 1.22898211 0.46010146
## [7] 0.17225096 0.06448663
# GRÁFICA
par(oma = c(1, 1, 1, 1))
hist(
retorno,
freq = FALSE,
breaks = breaks_retorno,
main = "Gráfica Nº3. Comparación de la realidad con el modelo Exponencial del período de retorno volcánico",
xlab = "Período de retorno (años)",
ylab = "Densidad de probabilidad",
col = "cyan",
border = "gray30"
)
box(which = "outer", col = "black")
# Histograma sin graficar para obtener frecuencias
histograma <- hist(
retorno,
plot = FALSE,
breaks = breaks_retorno
)
h <- length(histograma$counts)
h
## [1] 8
# Curva del modelo exponencial
curve(
dexp(
x,
rate = lambda
),
from = min(retorno),
to = max(retorno),
add = TRUE,
col = "red",
lwd = 3
)
# Frecuencias observadas (%)
Fo <- TDFretorno$hi[TDFretorno$Intervalo != "TOTAL"]
# Frecuencias esperadas (%)
Fe <- P_exp * 100
# Gráfica
plot(
Fo,
Fe,
main = "Gráfica N°4: Correlación de frecuencias\nentre la realidad y el modelo exponencial del período de retorno",
xlab = "Frecuencia observada (%)",
ylab = "Frecuencia esperada (%)",
pch = 19,
col = "darkblue",
xlim = c(0, max(c(Fo, Fe)) * 1.1),
ylim = c(0, max(c(Fo, Fe)) * 1.1)
)
# Línea de ajuste perfecto
abline(
a = 0,
b = 1,
col = "red",
lwd = 2
)
# Correlación entre realidad y modelo Exponencial
Correlacion <- cor(Fo, Fe) * 100
Correlacion
## [1] 99.40248
# Evaluación del Test de Pearson (>80%)
if(Correlacion > 80){
print("APRUEBA EL TEST DE PEARSON")
}else{
print("NO APRUEBA EL TEST DE PEARSON")
}
## [1] "APRUEBA EL TEST DE PEARSON"
# Frecuencias absolutas observadas
Fo_abs <- TDFretorno$ni[TDFretorno$Intervalo != "TOTAL"]
# Tamaño de la muestra
n <- sum(Fo_abs)
n
## [1] 898
# Frecuencias absolutas esperadas
Fe_abs <- P_exp * n
# Grados de libertad
# gl = número de intervalos - parámetros estimados - 1
# La distribución exponencial tiene 1 parámetro: lambda
grados_libertad <- length(Fo_abs) - 2
grados_libertad
## [1] 6
# Nivel de confianza
nivel_confianza <- 0.9999999
# Estadístico Chi-cuadrado
x2 <- sum(
(Fo_abs - Fe_abs)^2 / Fe_abs
)
x2
## [1] 41.89031
# Valor crítico Chi-cuadrado
umbral_aceptacion <- qchisq(
nivel_confianza,
df = grados_libertad
)
umbral_aceptacion
## [1] 43.33776
# Evaluación del modelo
if (x2 < umbral_aceptacion) {
print("APRUEBA EL TEST DE CHI-CUADRADO")
} else {
print("NO APRUEBA EL TEST DE CHI-CUADRADO")
}
## [1] "APRUEBA EL TEST DE CHI-CUADRADO"
| Variable | Test Pearson (%) | Chi Cuadrado | Umbral de aceptación |
|---|---|---|---|
| Período de retorno (años) | 99.4 | 41.89 | 43.34 |
## Trabajamos con todo nuestro dataset para el cálculo de parámetros
retorno_completo <- as.numeric(retorno)
retorno_completo <- na.omit(retorno_completo)
# Tamaño de la población
n_completo <- length(retorno_completo)
n_completo
## [1] 898
media_completa <- mean(retorno_completo)
media_completa
## [1] 189.8882
# ==============================================================================
# Parámetro lambda del modelo exponencial
# ==============================================================================
lambda_completo <- 1 / media_completa
lambda_completo
## [1] 0.005266256
limite_inferior <- 400
limite_superior <- 800
probabilidad_retorno <- pexp(
limite_superior,
rate = lambda_completo
) -
pexp(
limite_inferior,
rate = lambda_completo
)
# Probabilidad en porcentaje
probabilidad_retorno * 100
## [1] 10.68609
# Datos completos
retorno_completo <- as.numeric(retorno_completo)
retorno_completo <- na.omit(retorno_completo)
# Tamaño de muestra
n <- length(retorno_completo)
# Media muestral (solo usada para calcular el intervalo)
media_muestral <- mean(retorno_completo)
media_muestral
## [1] 189.8882
# Desviación estándar muestral
desviacion <- sd(retorno_completo)
desviacion
## [1] 209.0615
# Error estándar
e <- desviacion / sqrt(n)
e
## [1] 6.976474
# Límites del intervalo de confianza aproximado 95%
li <- media_muestral - 2 * e
ls <- media_muestral + 2 * e
| Límite inferior | Media poblacional | Límite superior | Error estándar |
|---|---|---|---|
| 175.94 | μ | 203.84 | 6.98 |