setwd("/cloud/project")
datos <- read.csv("DERRAMES_GLOBALEST.csv", header = TRUE, sep = ";" , dec = ".")
str(datos)## 'data.frame': 3550 obs. of 23 variables:
## $ Id : int 6786 6250 8220 6241 6216 6620 6262 6229 6201 6221 ...
## $ Dia : int 19 3 21 16 19 7 10 12 18 29 ...
## $ Mes : int 1 6 4 3 12 10 2 5 3 1 ...
## $ Año : chr "A" "1979" "2010" "1978" ...
## $ Nombre : chr "Arabian Gulf Spills; Persian Gulf, Kuwait" "IXTOC I; Bahia de Campeche, Mexico" "Deepwater Horizon; Gulf of Mexico" "Amoco Cadiz; Brittany, France" ...
## $ Ubicacion : chr "Persian Gulf, Kuwait" "Bahia de Campeche, Mexico" "Gulf of Mexico" "Brittany, France" ...
## $ Latitud : chr "29,5" "19,4083" "28,7367" "48,5833" ...
## $ Longuitud : chr "48" "-92,325" "-88,3872" "-4,71667" ...
## $ Amenaza : chr "Oil" "Oil" "Oil" "Oil" ...
## $ Etiquetas : chr "" "Collision" "" "Grounding" ...
## $ Tipo_de_crudo : chr "Kuwait crude oil" "IXTOC I crude oil" "Diesel, crude oil" "Arabian light crude, Iranian light crude, Bunker C" ...
## $ Cantidad_recuperada_superficie : int NA NA 1 NA NA NA NA NA NA NA ...
## $ Cantidad_recuperada_costas : int NA NA 1 NA NA NA NA NA NA NA ...
## $ Cantidad_tratada_biologicamente : int 1 NA 1 1 NA NA NA NA NA NA ...
## $ Cantidad_dispersada_quimicamente: int NA 1 1 1 NA NA NA 1 1 1 ...
## $ Cantidad_quemada : int NA 1 1 NA NA NA NA 1 1 1 ...
## $ Maximo_liberacion_galones : int 336000009 NA 205000000 68000017 NA NA NA 9240000 36100000 NA ...
## $ Barreras_de_contencion_flotantes: int 35 12 182 17 3 3 7 8 5 6 ...
## $ Causa_principal : chr "Daño del tanque " "Incendio y explosion " "Incendio y explosion " "Daño del tanque " ...
## $ Volumen_derramados_galones : chr "336.000.000" "365.000.000" "600.000.000" "68.000.000" ...
## $ Respuesta_actual_galones : chr "336000000" "252000000" "168000000" "68700000" ...
## $ Fuente_respuesta : chr "description and posts" "posts" "description" "posts" ...
## $ etiqueta_actualizacion : chr "RA updated" "RA newly acquired" "RA updated" "RA updated" ...
## Warning: NAs introduced by coercion
n <- length(latitud)
k <- ceiling(1 + 3.322 * log10(n)) # Sturges
# Límites
min_lat <- min(latitud)
max_lat <- max(latitud)
# Amplitud
A <- (max_lat - min_lat) / k
# Crear breaks
breaks_Latitud <- seq(min_lat, max_lat + A, by = A)
# Crear intervalos
rango_Latitud <- cut(latitud,
breaks = breaks_Latitud,
right = FALSE,
include.lowest = TRUE)
# TABLA DE FRECUENCIAS
TDF_Latitud <- table(rango_Latitud)
tabla_Latitud <- as.data.frame(TDF_Latitud)
# Porcentajes
hi_Latitud <- (tabla_Latitud$Freq / sum(tabla_Latitud$Freq)) * 100
tabla_Latitud$hi <- round(hi_Latitud, 2)
# Frecuencias acumuladas
Niasc_Latitud <- cumsum(tabla_Latitud$Freq)
Hiasc_Latitud <- cumsum(hi_Latitud)
Nidsc_Latitud <- rev(cumsum(rev(tabla_Latitud$Freq)))
Hidsc_Latitud <- rev(cumsum(rev(hi_Latitud)))
# TABLA FINAL
tabla_Latitud_Final <- data.frame(
Rango_Latitud = levels(rango_Latitud),
Frecuencia = tabla_Latitud$Freq,
Porcentaje = tabla_Latitud$hi,
Niasc = Niasc_Latitud,
Hiasc = round(Hiasc_Latitud, 2),
Nidsc = Nidsc_Latitud,
Hidsc = round(Hidsc_Latitud, 2)
)
print(tabla_Latitud_Final )## Rango_Latitud Frecuencia Porcentaje Niasc Hiasc Nidsc Hidsc
## 1 [-78,-54.8) 1 3.57 1 3.57 28 100.00
## 2 [-54.8,-31.7) 2 7.14 3 10.71 27 96.43
## 3 [-31.7,-8.5) 0 0.00 3 10.71 25 89.29
## 4 [-8.5,14.7) 2 7.14 5 17.86 25 89.29
## 5 [14.7,37.8) 13 46.43 18 64.29 23 82.14
## 6 [37.8,61) 9 32.14 27 96.43 10 35.71
## 7 [61,84.2] 1 3.57 28 100.00 1 3.57
h <- hist(latitud,
breaks = breaks_Latitud,
freq = TRUE,
main = "Gráfica N°1: Histograma de la Latitud de derrames Petroleros a Nivel Mundial",
cex.main = 0.8,
xlab = "Latitud (grados)",
ylab = "Frecuencia",
col = terrain.colors(length(breaks_Latitud) - 1),
border = "black",
las = 1,
xlim = c(min(breaks_Latitud), max(breaks_Latitud))) # Rango de 0 a 50
latitud_filtrada <- latitud[latitud >= 0 & latitud <= 50]
breaks_intervalo <- seq(0, 50, by = 10)
mu_lat <- mean(latitud_filtrada)
sigma_lat <- sd(latitud_filtrada)
# Valores para la curva normal
x_vals <- seq(min(breaks_intervalo), max(breaks_intervalo), length.out = 100)
y_vals <- dnorm(x_vals, mean = mu_lat, sd = sigma_lat)
y_vals_scaled <- y_vals * length(latitud_filtrada) * (breaks_intervalo[2] - breaks_intervalo[1])
# Histograma con curva normal
hist(latitud_filtrada,
breaks = breaks_intervalo,
freq = TRUE,
main = "Histograma Latitud 30-50 con Ajuste Normal",
xlab = "Latitud (grados)",
ylab = "Frecuencia",
col = terrain.colors(length(breaks_intervalo) - 1),
border = "black",
las = 1,
xlim = c(min(breaks_intervalo), max(breaks_intervalo)))
lines(x_vals, y_vals_scaled, col = "red", lwd = 2)# Frecuencias observadas y esperadas
n_obs <- length(latitud_filtrada)
u <- mu_lat
sigma <- sigma_lat
limites <- breaks_intervalo
limites[1] <- -Inf
limites[length(limites)] <- Inf
hist_result <- hist(latitud_filtrada, breaks = breaks_intervalo, plot = FALSE)
FO <- hist_result$counts
# Probabilidades según distribución normal
P <- numeric(length(FO))
for (i in 1:length(FO)) {
P[i] <- pnorm(limites[i+1], mean = u, sd = sigma) - pnorm(limites[i], mean = u, sd = sigma)
}
FE <- P * n_obs
valores_validos <- FE >= 1
FO_filt <- FO[valores_validos]
FE_filt <- FE[valores_validos]
tabla <- data.frame(Intervalo = 1:length(FO_filt), FO = FO_filt, FE = FE_filt)
print(tabla)## Intervalo FO FE
## 1 1 5 3.579548
## 2 2 8 7.588438
## 3 3 6 6.892056
## 4 4 2 3.156104
X2_normal <- sum((FO_filt - FE_filt)^2 / FE_filt)
df_normal <- length(FO_filt) - 1 - 2 # k - 1 - parámetros (μ y σ)
Vc_normal <- qchisq(0.95, df = df_normal)
p_valor_normal <- 1 - pchisq(X2_normal, df = df_normal)
cat("Chi-cuadrado:", X2_normal, "\n")## Chi-cuadrado: 1.124942
## Grados de libertad: 1
## Valor crítico (95%): 3.841459
## p-value: 0.2888568
## ¿Se ajusta a la Normal?: TRUE
X2_normal <- sum((FO_filt - FE_filt)^2 / FE_filt)
df_normal <- length(FO_filt) - 1 - 2 # Restar 1 y los parámetros estimados (media y sigma)
Vc_normal <- qchisq(0.95, df = df_normal)
cat("Chi-cuadrado:", X2_normal, "\n")## Chi-cuadrado: 1.124942
## Valor crítico (95%): 3.841459
## ¿Se ajusta a la Normal?: TRUE
# Parámetros de la distribución normal
u <- mean(latitud_filtrada)
sigma <- sd(latitud_filtrada)
# Definir el intervalo deseado
lim_inf <- 10 # por ejemplo 10°
lim_sup <- 30 # por ejemplo 30°
# 3Calcular la probabilidad de que una observación esté entre lim_inf y lim_sup
probabilidad_normal <- pnorm(lim_sup, mean = u, sd = sigma) -
pnorm(lim_inf, mean = u, sd = sigma)
probabilidad_normal * 100 # Resultado como porcentaje## [1] 50.76357
# Graficar la curva normal y sombrear el área correspondiente
x_vals <- seq(min(latitud), max(latitud), length.out = 1000)
plot(x_vals, dnorm(x_vals, mean = u, sd = sigma),
type = "l", lwd = 2, col = "skyblue3",
main = "Gráfica: Probabilidad de Latitud (Normal)",
xlab = "Latitud (grados)", ylab = "Densidad de probabilidad")
# Sombrear el área entre los límites definidos
x_sombreado <- seq(lim_inf, lim_sup, length.out = 1000)
y_sombreado <- dnorm(x_sombreado, mean = u, sd = sigma)
polygon(c(x_sombreado, rev(x_sombreado)),
c(y_sombreado, rep(0, length(y_sombreado))),
col = rgb(1, 0, 0, 0.5))
# Añadir leyenda
legend("topright", legend = c("Modelo Normal", "Área de Probabilidad"),
col = c("skyblue3", "red"), lwd = 2, pch = c(NA, 15))# Intervalo de confianza de la media al 95%
n <- length(latitud) # tamaño de muestra
error <- sigma / sqrt(n) # error estándar
li <- u - 2 * error # límite inferior
ls <- u + 2 * error # límite superior
# Mostrar resultados
u # media muestral## [1] 28.86364
## [1] 10.4576
## [1] 1.976301
## [1] 24.91103
## [1] 32.81624
La variable Latitud ajusta al modelo normal, con un parámetro estimado de 28.86 y desviación estándar de 10.46. La probabilidad de que derrames hayan ocurrido entre las latitudes de entre 10 y 30 unidades es de: 43.42%. Además, mediante el teorema del límite central, sabemos que la media poblacional se encuentra en el intervalo entre 24.91 y 32.82 (sin depurar y depurada) con un 95% de confianza.
# Definir rango fijo
rango_min <- 0
rango_max <- 100
# Filtrar datos dentro del rango
x_rango1 <- Maximo_liberacion_galones[
Maximo_liberacion_galones >= rango_min &
Maximo_liberacion_galones <= rango_max
]
##Tabla de distribución de frecuencias mediante el teorema de Sturges
n <- length(x_rango1)
k <- round(1 + 3.322 * log10(n))
amplitud <- (rango_max - rango_min) / k
# Intervalos según Sturges en 0-40000
breaks_1 <- seq(rango_min, rango_max, by = amplitud)
breaks_1[length(breaks_1)] <- rango_max
# TABLA DE FRECUENCIAS
cut_1 <- cut(x_rango1, breaks = breaks_1,
right = TRUE, include.lowest = TRUE)
TDF_1 <- table(cut_1)
Tabla_1 <- as.data.frame(TDF_1)
hi_1 <- (Tabla_1$Freq / sum(Tabla_1$Freq)) * 100
Ni_asc_1 <- cumsum(Tabla_1$Freq)
Hi_asc_1 <- cumsum(hi_1)
Ni_dsc_1 <- rev(cumsum(rev(Tabla_1$Freq)))
Hi_dsc_1 <- rev(cumsum(rev(hi_1)))
# ETIQUETAS LEGIBLES
intervalos_num <- gsub("\\[|\\]|\\(|\\)", "", as.character(Tabla_1$cut_1))
intervalos_partes <- strsplit(intervalos_num, ",")
etiquetas_legibles <- sapply(intervalos_partes, function(x) {
paste0(
format(round(as.numeric(x[1]), 0), big.mark = ","),
" - ",
format(round(as.numeric(x[2]), 0), big.mark = ",")
)
})
# TABLA FINAL
Tabla_Final_1 <- data.frame(
Intervalo = etiquetas_legibles,
ni = Tabla_1$Freq,
hi = round(hi_1, 2),
Ni_asc = Ni_asc_1,
Hi_asc = round(Hi_asc_1, 2),
Ni_dsc = Ni_dsc_1,
Hi_dsc = round(Hi_dsc_1, 2)
)
print(Tabla_Final_1)## Intervalo ni hi Ni_asc Hi_asc Ni_dsc Hi_dsc
## 1 0 - 11 32 16.67 32 16.67 192 100.00
## 2 11 - 22 10 5.21 42 21.88 160 83.33
## 3 22 - 33 16 8.33 58 30.21 150 78.12
## 4 33 - 44 23 11.98 81 42.19 134 69.79
## 5 44 - 56 24 12.50 105 54.69 111 57.81
## 6 56 - 67 13 6.77 118 61.46 87 45.31
## 7 67 - 78 9 4.69 127 66.15 74 38.54
## 8 78 - 89 19 9.90 146 76.04 65 33.85
## 9 89 - 100 46 23.96 192 100.00 46 23.96
h <- hist(
x_rango1,
breaks = breaks_1,
freq = TRUE,
main = "Histograma del Máximo de Liberación Petrolera (Sturges 0-40000)",
xlab = "Máximo de liberación (galones)",
ylab = "Frecuencia",
col = terrain.colors(length(breaks_1) - 1),
border = "black"
)# Seleccionar los datos en el rango
x_11_78 <- x_rango1[x_rango1 >= 11 & x_rango1 <= 78]
# Histograma simple con frecuencia absoluta
hist(
x_11_78,
breaks = seq(11, 78, by = 11.16),
freq = TRUE,
main = "Histograma del Máximo de Liberación (10 a 80)",
xlab = "Máximo de liberación (galones)",
ylab = "Frecuencia",
col = "lightblue",
border = "black"
)## [1] 43.68041
## [1] 16.33793
# Histograma con densidad
Hist_x_11_78 <- hist(
x_11_78,
breaks = seq(11, 78, by = 11.16),
freq = FALSE,
main = "Distribución Normal del Máximo de Liberación (10 a 80)",
xlab = "Máximo de liberación (galones)",
ylim = c(0, 0.030),
ylab = "Densidad",
col = "lightblue",
border = "black"
)
# Secuencia de valores para la curva normal
x <- seq(min(x_11_78), max(x_11_78), 0.01)
# Curva normal ajustada
curve(
dnorm(x, mean = u, sd = sigma),
col = "red",
lwd = 2,
add = TRUE
)# Verificación del área bajo la curva ≈ 1
Altura <- Hist_x_11_78$density
Area <- sum(Altura * diff(Hist_x_11_78$breaks)) # CORREGIDO
Area # debe dar ≈ 1## [1] 1
## [1] 97
# Frecuencia simple esperada
liminf <- Hist_x_11_78$breaks[-length(Hist_x_11_78$breaks)]
limsup <- Hist_x_11_78$breaks[-1]
P <- numeric(length(FO))
for (i in 1:length(FO)) {
P[i] <- pnorm(limsup[i], mean = u, sd = sigma) -
pnorm(liminf[i], mean = u, sd = sigma)
}
FE <- P * length(x_11_78)
FE## [1] 6.901530 16.403894 24.882387 24.095108 14.895183 5.875876
# Frecuencias observadas
FO <- Hist_x_11_78$counts
# Límites de clase
liminf <- Hist_x_11_78$breaks[-length(Hist_x_11_78$breaks)]
limsup <- Hist_x_11_78$breaks[-1]
# Probabilidades teóricas normales
P <- numeric(length(FO))
for (i in 1:length(FO)) {
P[i] <- pnorm(limsup[i], u, sigma) -
pnorm(liminf[i], u, sigma)
}
# Frecuencias esperadas
FE <- P * length(x_11_78)
# Solo clases válidas (FE > 0)
valores_validos <- FE > 0
# Estadístico de Pearson
X2_normal <- sum((FO[valores_validos] - FE[valores_validos])^2 /
FE[valores_validos])
X2_normal## [1] 5.821382
## [1] 3
## [1] 6.251389
## [1] TRUE
# Estadístico Chi-cuadrado
X2 <- sum(((FO - FE)^2) / FE)
# Solo clases válidas
valores_validos <- FE > 0
X2_normal <- sum((FO[valores_validos] - FE[valores_validos])^2 / FE[valores_validos])
X2_normal## [1] 5.821382
# Grados de libertad: clases válidas - 1 - 2 parámetros estimados
df_normal <- sum(valores_validos) - 1 - 2
# Valor crítico 90%
Vc_normal <- qchisq(0.90, df = df_normal)
Vc_normal## [1] 6.251389
# ¿Se ajusta a una distribución normal?
ajuste_normal <- ifelse(X2_normal < Vc_normal,
"Se ajusta a la distribución normal",
"No se ajusta a la distribución normal")
ajuste_normal## [1] "Se ajusta a la distribución normal"
# Definir el intervalo deseado
lim_inf <- 20
lim_sup <- 50
# Calcular la probabilidad de que una observación esté entre 20 y 50
probabilidad_normal <- pnorm(lim_sup, mean = u, sd = sigma) -
pnorm(lim_inf, mean = u, sd = sigma)
probabilidad_normal * 100 # Resultado como porcentaje## [1] 57.69384
#Graficar la curva normal y sombrear el área correspondiente
x_vals <- seq(min(x_11_78), max(x_11_78), length.out = 1000)
plot(x_vals, dnorm(x_vals, mean = u, sd = sigma),
type = "l", lwd = 2, col = "skyblue3",
main = "Gráfica. Cálculo de Probabilidades (Normal)",
xlab = "Máximo de liberación (galones)",
ylab = "Densidad de probabilidad")
# Sombrear el área entre los límites definidos
x_sombreado <- seq(lim_inf, lim_sup, length.out = 1000)
y_sombreado <- dnorm(x_sombreado, mean = u, sd = sigma)
polygon(c(x_sombreado, rev(x_sombreado)),
c(y_sombreado, rep(0, length(y_sombreado))),
col = rgb(1, 0, 0, 0.5))
# Añadir leyenda
legend("topright",
legend = c("Modelo Normal", "Área de Probabilidad"),
col = c("skyblue3", "red"),
lwd = 2, pch = c(NA, 15))# Tamaño de la muestra
n <- length(x_11_78)
# Error estándar de la media
error <- sigma / sqrt(n)
# Intervalo de confianza al 95%: media ± 2 * error estándar
li <- u - 2 * error
ls <- u + 2 * error
# Mostrar los valores
u # media muestral## [1] 43.68041
## [1] 16.33793
## [1] 1.658866
## [1] 40.36268
## [1] 46.99814
La variable Máximo de liberación (galones) es el que ajusta al modelo normal, con un parámetro estimado de 43.6804, y desviación estándar de 16.3379. La probabilidad de que una observación esté entre 20 y 50 unidades es de: 43.42%. Además, mediante el teorema del límite central, sabemos que la media poblacional se encuentra en el intervalo entre 40.36 y 46.99 con un 95% de confianza.
## Warning: NAs introduced by coercion
## Rango de mayor frecuencia y presencia de pocos valores atípicos
# Definir rango fijo
rango_min <- 0
rango_max <- 40000
# Filtrar datos dentro del rango
x_rango1 <- Respuesta_actual_galones[
Respuesta_actual_galones >= rango_min &
Respuesta_actual_galones <= rango_max
]
## Tabla de distribución de frecuencias mediante el teorema de Sturges
n <- length(x_rango1)
k <- round(1 + 3.322 * log10(n))
amplitud <- (rango_max - rango_min) / k
# Intervalos según Sturges en 0-100
breaks_1 <- seq(rango_min, rango_max, by = amplitud)
breaks_1[length(breaks_1)] <- rango_max
# TABLA DE FRECUENCIAS
cut_1 <- cut(x_rango1, breaks = breaks_1,
right = TRUE, include.lowest = TRUE)
TDF_1 <- table(cut_1)
Tabla_1 <- as.data.frame(TDF_1)
hi_1 <- (Tabla_1$Freq / sum(Tabla_1$Freq)) * 100
Ni_asc_1 <- cumsum(Tabla_1$Freq)
Hi_asc_1 <- cumsum(hi_1)
Ni_dsc_1 <- rev(cumsum(rev(Tabla_1$Freq)))
Hi_dsc_1 <- rev(cumsum(rev(hi_1)))
# ETIQUETAS LEGIBLES
intervalos_num <- gsub("\\[|\\]|\\(|\\)", "", as.character(Tabla_1$cut_1))
intervalos_partes <- strsplit(intervalos_num, ",")
etiquetas_legibles <- sapply(intervalos_partes, function(x) {
paste0(
format(round(as.numeric(x[1]), 0), big.mark = ","),
" - ",
format(round(as.numeric(x[2]), 0), big.mark = ",")
)
})
# TABLA FINAL
Tabla_Final_1 <- data.frame(
Intervalo = etiquetas_legibles,
ni = Tabla_1$Freq,
hi = round(hi_1, 2),
Ni_asc = Ni_asc_1,
Hi_asc = round(Hi_asc_1, 2),
Ni_dsc = Ni_dsc_1,
Hi_dsc = round(Hi_dsc_1, 2)
)
print(Tabla_Final_1 )## Intervalo ni hi Ni_asc Hi_asc Ni_dsc Hi_dsc
## 1 0 - 3,330 1134 74.90 1134 74.90 1514 100.00
## 2 3,330 - 6,670 138 9.11 1272 84.02 380 25.10
## 3 6,670 - 10,000 81 5.35 1353 89.37 242 15.98
## 4 10,000 - 13,300 37 2.44 1390 91.81 161 10.63
## 5 13,300 - 16,700 22 1.45 1412 93.26 124 8.19
## 6 16,700 - 20,000 23 1.52 1435 94.78 102 6.74
## 7 20,000 - 23,300 11 0.73 1446 95.51 79 5.22
## 8 23,300 - 26,700 21 1.39 1467 96.90 68 4.49
## 9 26,700 - 30,000 20 1.32 1487 98.22 47 3.10
## 10 30,000 - 33,300 5 0.33 1492 98.55 27 1.78
## 11 33,300 - 36,700 12 0.79 1504 99.34 22 1.45
## 12 36,700 - 40,000 10 0.66 1514 100.00 10 0.66
h <- hist(
x_rango1,
breaks = breaks_1,
freq = TRUE,
main = "Histograma de la Respuesta Actual (Sturges 0–100)",
xlab = "Respuesta actual (galones)",
ylab = "Frecuencia",
col = terrain.colors(length(breaks_1) - 1),
border = "black"
)#Estimación de parámetros del modelo Gamma
media <- mean(x_rango1)
varianza <- var(x_rango1)
shape <- (media^2) / varianza
scale <- varianza / media
shape## [1] 0.250189
## [1] 14386.11
HistGamma <- hist(x_rango1, freq = FALSE,
breaks = breaks_1,
main = "Histograma de Respuesta Actual (0–100) con Curva Gamma",
xlab = "Respuesta actual (galones)",
ylab = "Densidad",
ylim = c(0, 0.0003),
col = "lightgreen")
x <- seq(min(x_rango1), max(x_rango1), 0.01)
curve(dgamma(x, shape = shape, scale = scale),
col = "red", lwd = 2, add = TRUE)#Frecuencias observadas
FO <- HistGamma$counts
#Frecuencia esperada
liminf <- HistGamma$breaks[-length(HistGamma$breaks)]
limsup <- HistGamma$breaks[-1]
Pgamma <- numeric(length(FO))
for (i in 1:length(FO)) {
Pgamma[i] <- pgamma(limsup[i], shape = shape, scale = scale) -
pgamma(liminf[i], shape = shape, scale = scale)
}
FEgamma <- Pgamma * length(x_rango1)#Frecuencias observadas
FO <- HistGamma$counts
#Frecuencias esperadas (Gamma)
liminf <- HistGamma$breaks[-length(HistGamma$breaks)]
limsup <- HistGamma$breaks[-1]
Pgamma <- numeric(length(FO))
for (i in 1:length(FO)) {
Pgamma[i] <- pgamma(limsup[i], shape = shape, scale = scale) -
pgamma(liminf[i], shape = shape, scale = scale)
}
FEgamma <- Pgamma * length(x_rango1)
#Estadístico de Pearson (Chi-cuadrado)
valores_validos_gamma <- FEgamma > 0
X2_gamma <- sum((FO[valores_validos_gamma] -
FEgamma[valores_validos_gamma])^2 /
FEgamma[valores_validos_gamma])
X2_gamma## [1] 64.99155
## [1] 9
## [1] 16.91898
## [1] FALSE
valores_validos_gamma <- FEgamma > 0
X2_gamma <- sum((FO[valores_validos_gamma] -
FEgamma[valores_validos_gamma])^2 /
FEgamma[valores_validos_gamma])
X2_gamma## [1] 64.99155
## [1] 9
## [1] 16.91898
## [1] FALSE
## Definir el intervalo deseado
lim_inf <- 1000
lim_sup <- 4000
#Calcular la probabilidad de que una observación esté entre 1000 y 4000
prob_gamma <- pgamma(lim_sup, shape = shape, scale = scale) -
pgamma(lim_inf, shape = shape, scale = scale)
prob_gamma * 100# Resultado como porcentaje## [1] 20.1141
#Graficar la curva gamma y sombrear el área correspondiente
x_vals <- seq(min(x_rango1), max(x_rango1), length.out = 1000)
plot(x_vals, dgamma(x_vals, shape = shape, scale = scale),
type = "l", lwd = 2, col = "darkgreen",
main = "Cálculo de Probabilidad – Modelo Gamma",
xlab = "Respuesta actual (galones)",
ylab = "Densidad")
#Sombrear el área entre los límites definidos
x_somb <- seq(lim_inf, lim_sup, length.out = 500)
y_somb <- dgamma(x_somb, shape = shape, scale = scale)
polygon(c(x_somb, rev(x_somb)),
c(y_somb, rep(0, length(y_somb))),
col = rgb(1, 0, 0, 0.4))
# Añadir leyenda
legend("topright",
legend = c("Modelo Gamma", "Área de Probabilidad"),
col = c("skyblue3", "red"),
lwd = 2, pch = c(NA, 15))# Tamaño de la muestra
n <- length(x_rango1)
# Media y desviación estándar muestral
u <- mean(x_rango1)
sigma <- sd(x_rango1)
# Error estándar de la media
error <- sigma / sqrt(n)
# Intervalo de confianza al 95%
li <- u - 2 * error
ls <- u + 2 * error
# Mostrar resultados
u # media muestral## [1] 3599.247
## [1] 7195.775
## [1] 184.9331
## [1] 3229.381
## [1] 3969.113
La variable Respuesta_actual_galones se intentó modelar mediante una distribución Gamma, obteniéndose una media estimada de 3582.727 y una desviación estándar de 7176.363. La probabilidad de que una observación esté entre 10 y 80 galones es de 68.17% bajo este modelo teórico. Sin embargo, de acuerdo con la prueba Chi-cuadrado, el estadístico obtenido es mayor que el valor crítico, por lo que se rechaza la hipótesis de ajuste, concluyéndose que el modelo Gamma no describe adecuadamente el comportamiento real de los datos. Aun así, mediante el teorema del límite central, se estima que la media poblacional se encuentra entre 3215.07 y 3950.38 con un 95% de confianza.