# TEMA: EI de variables nominales
# FECHA: 09/10/2025
# AUTOR: Grupo
# Carga de datos
setwd("/cloud/project/PROYECTO/DATOS")
datos<-read.csv("Derrames_globales.csv",
header= TRUE, sep= ";", dec=",")
# ESTADÍSTICA INFERENCIAL
años<-as.numeric(datos$A.o)
## Warning: NAs introduced by coercion
años<-na.omit(años)
min<- 1981
max<- 2004
breaks <- seq(min, max, by = 6)
if (max(breaks) < max) {
breaks <- c(breaks, max+ 1)
}
labels_intervalos <- paste(breaks[-length(breaks)],
breaks[-1] - 1,
sep = "-")
años_intervalos <- cut(años,
breaks = breaks,
labels = labels_intervalos,
include.lowest = TRUE,
right = TRUE)
TDF_años <- table(años_intervalos)
Tabla_años <- as.data.frame(TDF_años)
barplot(Tabla_años$Freq,
names.arg = Tabla_años$años_intervalos,
col = "salmon3",
main = "diagrama de barras: Gráfica de Distribución de derrames por intervalos de 6 años",
xlab = "Intervalos de años",
ylab = "Cantidad",
cex.names= 0.7)

# Modelo Uniforme
k <- nrow(Tabla_años)
Fo <- Tabla_años$Freq
p_uniforme <- rep(1/k, k)
Fe <- rep(sum(Fo)/k, k)
tabla_uniforme <- data.frame(
Año = Tabla_años$años,
Observado = Fo,
Esperado = Fe)
# Gráfico comparativo
barplot(rbind(Fo, Fe),
beside = TRUE,
names.arg = Tabla_años$años_intervalos,
col = c("salmon3", "yellow3"),
main = "Gráfico No.9: Modelo Uniforme (1981–2004)",
xlab = "Intervalo de Años", ylab = "Frecuencia",
cex.names = 0.8)
legend("topright",
legend = c("Real", "Modelo"),
fill = c("salmon3", "yellow3"),
bty = "n",
cex = 0.6,
inset = c(-0.1, 0))

# Correlación observadas vs esperadas
cor_uniforme <- cor(Fo, Fe)
## Warning in cor(Fo, Fe): the standard deviation is zero
# Test
#Cálculo del estadístico chi-cuadrado
x2<-sum((Fo-Fe)^2/Fe)
#Mostrar el valor de chi-cuadrado
cat("X2=",x2,"\n")
## X2= 4.548576
# VARIABLE AÑOS (2016-2020)
años<-as.numeric(datos$A.o)
## Warning: NAs introduced by coercion
años<-na.omit(años)
años<- años[!is.na(años) & años >= 2016 & años <= 2020]
TDF_años <- table(años)
Tabla_años <- as.data.frame(TDF_años)
# Gráfica de barras
barplot(Tabla_años$Freq,
names.arg = Tabla_años$años,
main = "Gráfico No.1: Distribución por Años (2016–2020)",
xlab = "Año", ylab = "Frecuencia",
col = "salmon",
las = 2,
cex.names = 0.8,
ylim = c(0, max(Tabla_años$Freq) + 100))

# Modelo Uniforme
k <- nrow(Tabla_años)
Fo <- Tabla_años$Freq
p_uniforme <- rep(1/k, k)
Fe <- rep(sum(Fo)/k, k)
tabla_uniforme <- data.frame(
Año = Tabla_años$años,
Observado = Fo,
Esperado = Fe)
# Gráfico comparativo
barplot(rbind(Fo, Fe),
beside = TRUE,
names.arg = Tabla_años$años,
col = c("salmon", "orange"),
main = "Gráfico No.2: Modelo Uniforme (2016–2020)",
xlab = "Año", ylab = "Frecuencia",
las = 2,
cex.names = 0.8)
legend("topright",
legend = c("Real", "Modelo"),
fill = c("salmon", "orange"),
bty = "n",
cex = 0.6,
inset = c(-0.1, 0))

# Correlación observadas vs esperadas
cor_uniforme <- cor(Fo, Fe)
## Warning in cor(Fo, Fe): the standard deviation is zero
# Test
#Cálculo del estadístico chi-cuadrado
x2<-sum((Fo-Fe)^2/Fe)
#Mostrar el valor de chi-cuadrado
cat("X2=",x2,"\n")
## X2= 0.6536965
# VARIABLE MES
mes <- as.numeric(datos$Mes)
mes <- na.omit(mes)
TDF_mes <- table(mes)
Tabla_mes <- as.data.frame(TDF_mes)
nombres_meses <- c("Enero","Febrero","Marzo","Abril","Mayo","Junio",
"Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre")
barplot(Tabla_mes$Freq,
main = "Diagrama de barras: Gráfica de Distribución de meses",
xlab = "Meses del año",
ylab = "Cantidad",
col = "darkred",
names.arg = nombres_meses,
ylim = c(0, max(Tabla_mes$Freq) * 1.1),
las = 2,
cex.names = 0.7)

# Modelo Uniforme
k <- nrow(Tabla_mes)
Fo <- Tabla_mes$Freq
p_uniforme <- rep(1/k, k)
Fe <- rep(sum(Fo)/k, k)
tabla_uniforme <- data.frame(
Mes = Tabla_mes$mes,
Observado = Fo,
Esperado = Fe)
# Gráfico comparativo
barplot(rbind(Fo, Fe),
beside = TRUE,
names.arg = nombres_meses,
col = c("darkred", "salmon"),
main = "Gráfico No.2: Modelo Uniforme",
xlab = "Mes", ylab = "Frecuencia",
las = 2,
cex.names = 0.8)
legend("topright",
legend = c("Real", "Modelo"),
fill = c("darkred", "salmon"),
bty = "n",
cex = 0.6,
inset = c(-0.1, 0))

# Correlación observadas vs esperadas
cor_uniforme <- cor(Fo, Fe)
## Warning in cor(Fo, Fe): the standard deviation is zero
# Test
#Cálculo del estadístico chi-cuadrado
x2<-sum((Fo-Fe)^2/Fe)
#Mostrar el valor de chi-cuadrado
cat("X2=",x2,"\n")
## X2= 20.50366
# VARIABLE BARRERAS DE CONTENCIÓN (0-30)
barreras<-as.numeric(datos$Barreras_de_contencion_flotantes)
barreras<-na.omit(barreras)
barreras<-barreras[!is.na(barreras) & barreras>=0 & barreras<=30]
breaks_1 <- seq(0, 30, by = 2)
cut_1 <- cut(barreras[barreras >= 0 & barreras <= 30], breaks = breaks_1, right = TRUE, include.lowest = TRUE)
TDF_1 <- table(cut_1)
Tabla_1 <- as.data.frame(TDF_1)
barplot(Tabla_1$Freq,
names.arg = Tabla_1$cut_1,
col = "darkblue",
main = "Gráfica de Barras (0 a 30)",
xlab = "Intervalos",
ylab = "Cantidad",
las = 2,
cex.names = 0.7)

# Modelo Geometrico
breaks_1_medias <- breaks_1[-length(breaks_1)] + diff(breaks_1)/2
# Usar el punto medio como el valor numérico para cada intervalo
conteo_geom <- breaks_1_medias
frecuencia_obs <- Tabla_1$Freq
# Estimar parámetro p
media_x <- mean(rep(conteo_geom, frecuencia_obs))
p_hat <- 1 / media_x
# Probabilidades teóricas y frecuencias esperadas
probs_geom <- dgeom(conteo_geom - 1, prob = p_hat)
frecuencia_esp <- round(sum(frecuencia_obs) * probs_geom)
tabla_geom <- data.frame(
Barreras = Tabla_1$cut_1,
X = conteo_geom,
`ni (obs)`= frecuencia_obs,
`ni (esp)`= frecuencia_esp,
`P(x)`= round(probs_geom, 4))
tabla_geom
## Barreras X ni..obs. ni..esp. P.x.
## 1 [0,2] 1 1949 890 0.2591
## 2 (2,4] 3 507 489 0.1422
## 3 (4,6] 5 262 268 0.0781
## 4 (6,8] 7 267 147 0.0429
## 5 (8,10] 9 127 81 0.0235
## 6 (10,12] 11 86 44 0.0129
## 7 (12,14] 13 53 24 0.0071
## 8 (14,16] 15 32 13 0.0039
## 9 (16,18] 17 32 7 0.0021
## 10 (18,20] 19 26 4 0.0012
## 11 (20,22] 21 28 2 0.0006
## 12 (22,24] 23 14 1 0.0004
## 13 (24,26] 25 19 1 0.0002
## 14 (26,28] 27 14 0 0.0001
## 15 (28,30] 29 19 0 0.0001
# Gráfico comparativo observados vs esperados
barplot(rbind(frecuencia_obs, frecuencia_esp),
beside = TRUE,
names.arg = Tabla_1$cut_1,
col = c("darkblue", "orange"),
main = "Gráfico No.2: Modelo Geométrico (0-30)",
xlab = "Barreras de contención", ylab = "Frecuencia",
las = 2,
cex.names = 0.8)
legend("topright",
legend = c("Real", "Modelo"),
fill = c("darkblue", "orange"),
bty = "n",
cex = 0.6,
inset = c(-0.1, 0))

# Correlación observadas vs esperadas
cor_geome <- cor(frecuencia_obs, frecuencia_esp)
# Test
#Cálculo del estadístico chi-cuadrado
frecuencia_esp<- ifelse(frecuencia_esp == 0, 0.0001, frecuencia_esp)
x2<-sum(((frecuencia_obs-frecuencia_esp)^2)/frecuencia_esp)
#Mostrar el valor de chi-cuadrado
cat("X2=",x2,"\n")
## X2= 5572463
k <- length(frecuencia_obs)
Vc<-qchisq(0.95,k-1)
#Mostrar el valor crítico
cat("Valor crítico =", Vc, "\n")
## Valor crítico = 23.68479
# VARIABLE BARRERAS DE CONTENCIÓN (31-380)
barreras<-as.numeric(datos$Barreras_de_contencion_flotantes)
barreras<-na.omit(barreras)
barreras<-barreras[!is.na(barreras) & barreras>=31 & barreras<=380]
breaks_2 <- seq(31, 380, by = 35)
cut_2 <- cut(barreras[barreras >= 31 & barreras <= 380], breaks = breaks_2, right = TRUE, include.lowest = TRUE)
TDF_barreras<-table(cut_2)
Tabla_barreras<-as.data.frame(TDF_barreras)
barplot(Tabla_barreras$Freq,
names.arg = Tabla_barreras$cut_2,
col = "blue",
main = "Gráfica de Barras (31 a 380)",
xlab = "Intervalos",
ylab = "Cantidad",
cex.names = 0.7)

# Modelo exponencial
breaks_2_medias <- breaks_2[-length(breaks_2)] + diff(breaks_2)/2
x_entero <- round(breaks_2_medias)
lambda_exp <- 1 / mean(barreras)
n_total <- length(barreras)
breaks_2_limites <- breaks_2[1:length(breaks_2)]
prob_acumulada_exp <- pexp(breaks_2_limites, rate = lambda_exp)
prob_intervalo_exp <- diff(prob_acumulada_exp)
frecuencias_esperadas_exp <- n_total * prob_intervalo_exp
Tabla_barreras$esperados_exp <- frecuencias_esperadas_exp
cat("Resultado del Modelo Exponencial (lambda =", round(lambda_exp, 4), "):\n")
## Resultado del Modelo Exponencial (lambda = 0.012 ):
print(Tabla_barreras)
## cut_2 Freq esperados_exp
## 1 [31,66] 68 27.230020
## 2 (66,101] 20 17.864401
## 3 (101,136] 10 11.720036
## 4 (136,171] 7 7.688992
## 5 (171,206] 2 5.044405
## 6 (206,241] 2 3.309409
## 7 (241,276] 1 2.171155
## 8 (276,311] 2 1.424398
## 9 (311,346] 1 0.934484
etiquetas_x <- as.character(Tabla_barreras$cut_2)
datos_plot <- t(Tabla_barreras[, c("Freq", "esperados_exp")])
max_freq_plot <- max(Tabla_barreras$Freq, Tabla_barreras$esperados_exp)
par(mfrow=c(1,1), mar=c(8, 4, 4, 2) + 0.1)
barplot(datos_plot,
beside = TRUE,
names.arg = etiquetas_x,
ylim = c(0, max_freq_plot * 1.2),
main = "Modelo Exponencial: Frecuencias Observadas vs. Esperadas",
xlab = "Intervalos de Barrera",
ylab = "Frecuencia (Cantidad)",
col = c("blue", "green3"),
legend.text = c("Observado", "Esperado Exponencial"),
args.legend = list(x = "topright", bty = "n"),
cex.names = 0.8)

correlacion <- cor(Tabla_barreras$Freq, Tabla_barreras$esperados_exp)
correlacion
## [1] 0.9245771
# Chi-Cuadrado
freq_observada_agrupada <- c(
Tabla_barreras$Freq[1],
Tabla_barreras$Freq[2],
Tabla_barreras$Freq[3],
sum(Tabla_barreras$Freq[4:6])
)
freq_esperada_agrupada <- c(
Tabla_barreras$esperados_exp[1],
Tabla_barreras$esperados_exp[2],
Tabla_barreras$esperados_exp[3],
sum(Tabla_barreras$esperados_exp[4:6])
)
chi_cuadrado <- sum((freq_observada_agrupada - freq_esperada_agrupada)^2 / freq_esperada_agrupada)
chi_cuadrado
## [1] 63.13546
# Valor crítico
valor_critico <- qchisq(0.95, df = 2)
valor_critico
## [1] 5.991465