Cargar los datos

setwd("D:/Data")
datos <- read.csv("database.csv", header = TRUE, sep = ";", dec =".")

1. Preparación de la variable

cilindros <- datos$Engine.Cylinders
cilindros <- as.numeric(as.character(cilindros))
## Warning: NAs introducidos por coerción
cilindros <- cilindros[!is.na(cilindros) & cilindros >= 2 & cilindros <= 16 & !(cilindros %in% c(5,7))]

2. Tabla de frecuencias

TDF_cilindros <- table(cilindros)
Tabla_cilindros <- as.data.frame(TDF_cilindros)
colnames(Tabla_cilindros) <- c("CILINDROS", "ni_FA")

hi_FR <- Tabla_cilindros$ni_FA / sum(Tabla_cilindros$ni_FA)
Niasc <- cumsum(Tabla_cilindros$ni_FA)
Hiasc <- cumsum(hi_FR)
Nidsc <- rev(cumsum(rev(Tabla_cilindros$ni_FA)))
Hidsc <- rev(cumsum(rev(hi_FR)))

Tabla_cilindrosFinal <- data.frame(
  CILINDROS = as.numeric(as.character(Tabla_cilindros$CILINDROS)),
  ni_FA = Tabla_cilindros$ni_FA,
  hi_FR = round(hi_FR, 4),
  Ni_FAAa = Niasc,
  Hi_FRAa = round(Hiasc, 4),
  Ni_FAAd = Nidsc,
  Hi_FRAd = round(Hidsc, 4)
)
Tabla_cilindrosFinal
##   CILINDROS ni_FA  hi_FR Ni_FAAa Hi_FRAa Ni_FAAd Hi_FRAd
## 1         2    43 0.0012      43  0.0012   34884  1.0000
## 2         3   197 0.0056     240  0.0069   34841  0.9988
## 3         4 13522 0.3876   13762  0.3945   34644  0.9931
## 4         6 12733 0.3650   26495  0.7595   21122  0.6055
## 5         8  7677 0.2201   34172  0.9796    8389  0.2405
## 6        10   145 0.0042   34317  0.9837     712  0.0204
## 7        12   559 0.0160   34876  0.9998     567  0.0163
## 8        16     8 0.0002   34884  1.0000       8  0.0002

3. Gráfico de frecuencia absoluta

barplot(
  height = Tabla_cilindrosFinal$ni_FA,
  main = "Gráfica N°1: Frecuencia Absoluta de Cilindros",
  xlab = "Número de Cilindros",
  ylab = "Cantidad",
  names.arg = Tabla_cilindrosFinal$CILINDROS,
  col = "skyblue"
)

4. Modelo de Poisson

grupo <- cilindros[cilindros %in% c(2,3,4,6,8,10,12)]
tabla_grupo <- table(grupo)
df_grupo <- as.data.frame(tabla_grupo)
colnames(df_grupo) <- c("X", "FO")
df_grupo$X <- as.numeric(as.character(df_grupo$X))

5. Probabilidades observadas

FO_absoluta <- df_grupo$FO
total <- sum(FO_absoluta)
hi <- FO_absoluta / total

6. Modelo Poisson

lambda <- mean(grupo)
P <- dpois(df_grupo$X, lambda)
FE_absoluta <- P * total
P_normalizado <- P / sum(P)

7. Comparación gráfica

barplot(
  rbind(hi, P_normalizado),
  beside = TRUE,
  col = c("skyblue", "darkblue"),
  legend = c("FO (hi)", "FE (P)"),
  names.arg = df_grupo$X,
  main = "Gráfica N°2: Modelo Poisson - Probabilidades por Cilindros",
  xlab = "Cilindros",
  ylab = "Probabilidad"
)

7.1 Boxplot

boxplot(grupo, horizontal = TRUE, col = "lightblue",
        main = "Gráfica N°2.1: Diagrama de Caja - Número de Cilindros",
        xlab = "Cilindros")

8. Correlación Pearson

cor_poisson <- cor(hi, P_normalizado)
plot(hi, P_normalizado,
     main = "Gráfica N°3: Correlación FO vs FE (Poisson)",
     xlab = "FO (Prob. Observada)",
     ylab = "FE (Prob. Esperada)",
     pch = 19, col = "blue")
abline(lm(P_normalizado ~ hi), col = "red", lwd = 2)
text(min(hi), max(P), labels = paste("r =", round(cor_poisson, 3)), pos = 4, col = "blue")

9. Chi-cuadrado

x2 <- sum((FO_absoluta - FE_absoluta)^2 / FE_absoluta)
gl <- length(df_grupo$X) - 1
vc <- qchisq(0.955555555, df = gl)

10. Tabla resumen

Variable <- c("Cilindros")
tabla_resumen <- data.frame(
  Variable,
  Test_Pearson = round(cor_poisson * 100, 2),
  Chi_Cuadrado = round(x2, 2),
  Umbral_aceptacion = round(vc, 2)
)
kable(tabla_resumen, format = "markdown", caption = "Tabla Nº25: Resumen de test de bondad al modelo de probabilidad")
Tabla Nº25: Resumen de test de bondad al modelo de probabilidad
Variable Test_Pearson Chi_Cuadrado Umbral_aceptacion
Cilindros 85.39 35268.36 12.91
#Modelo no aprobado

11. Intervalo de confianza

media_cil <- mean(cilindros)
desv_cil <- sd(cilindros)
n <- length(cilindros)
error <- qnorm(0.955) * (desv_cil / sqrt(n))
LI <- media_cil - error
LS <- media_cil + error
cat("Intervalo de confianza (95%): [", round(LI, 2), ",", round(LS, 2), "]\n")
## Intervalo de confianza (95%): [ 5.74 , 5.77 ]

DV. Poblacional

desv_poblacional <- sqrt(sum((cilindros - mean(cilindros))^2) / length(cilindros))
cat("\nDesviación estándar poblacional:", round(desv_poblacional, 4), "\n")
## 
## Desviación estándar poblacional: 1.7633

Conclusión

La variable Número de cilindros se explica mediante una distribución de Poisson, con un intervalo de confianza que se encuentra entre 5.74 y 5.77 lo que afirmamos con un 95% de confianza.Además la desviación estándar poblacional es de 1.76 lo que representa la variabilidad en numero de cilindros observados, indicando que los valores tienden a estar muy cerca de la media calculada.