Las variables ordinales se caracterizan por tener un orden entre sus categorías, aunque no se puede saber con exactitud cuánto hay de diferencia entre ellas. Por eso, al analizarlas en estadística inferencial, no se usan métodos tradicionales. En su lugar, se aplican pruebas como la chi-cuadrado, que permite identificar si existe relación entre variables categóricas. Este tipo de pruebas ayudan a interpretar los datos respetando su naturaleza ordinal, sin asumir distribuciones específicas.
Cargamos los datos:
#Cargar los datos
setwd("C:/Users/Usuario/Documents/Trabajo Estadistica/PROYECTO/")
datos<-read.csv("database.csv",header = TRUE, sep = ",", dec = ".")
str(datos)
## 'data.frame': 38113 obs. of 81 variables:
## $ Vehicle.ID : int 26587 27705 26561 27681 27550 28426 27549 28425 27593 28455 ...
## $ Year : int 1984 1984 1984 1984 1984 1984 1984 1984 1984 1984 ...
## $ Make : chr "Alfa Romeo" "Alfa Romeo" "Alfa Romeo" "Alfa Romeo" ...
## $ Model : chr "GT V6 2.5" "GT V6 2.5" "Spider Veloce 2000" "Spider Veloce 2000" ...
## $ Class : chr "Minicompact Cars" "Minicompact Cars" "Two Seaters" "Two Seaters" ...
## $ Drive : chr "" "" "" "" ...
## $ Transmission : chr "Manual 5-Speed" "Manual 5-Speed" "Manual 5-Speed" "Manual 5-Speed" ...
## $ Transmission.Descriptor : chr "" "" "" "" ...
## $ Engine.Index : int 9001 9005 9002 9006 1830 1880 1831 1881 1524 1574 ...
## $ Engine.Descriptor : chr "(FFS)" "(FFS) CA model" "(FFS)" "(FFS) CA model" ...
## $ Engine.Cylinders : int 6 6 4 4 4 4 6 6 6 6 ...
## $ Engine.Displacement : num 2.5 2.5 2 2 2.5 2.5 4.2 4.2 4.2 4.2 ...
## $ Turbocharger : logi NA NA NA NA NA NA ...
## $ Supercharger : chr "" "" "" "" ...
## $ Fuel.Type : chr "Regular" "Regular" "Regular" "Regular" ...
## $ Fuel.Type.1 : chr "Regular Gasoline" "Regular Gasoline" "Regular Gasoline" "Regular Gasoline" ...
## $ Fuel.Type.2 : chr "" "" "" "" ...
## $ City.MPG..FT1. : int 17 17 18 18 18 18 13 13 15 15 ...
## $ Unrounded.City.MPG..FT1. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ City.MPG..FT2. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Unrounded.City.MPG..FT2. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ City.Gasoline.Consumption..CD. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ City.Electricity.Consumption : num 0 0 0 0 0 0 0 0 0 0 ...
## $ City.Utility.Factor : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Highway.MPG..FT1. : int 24 24 25 25 17 17 13 13 20 19 ...
## $ Unrounded.Highway.MPG..FT1. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Highway.MPG..FT2. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Unrounded.Highway.MPG..FT2. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Highway.Gasoline.Consumption..CD. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Highway.Electricity.Consumption : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Highway.Utility.Factor : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Unadjusted.City.MPG..FT1. : num 21 21 23 23 22 22 16 16 19 19 ...
## $ Unadjusted.Highway.MPG..FT1. : num 34 34 35 35 24 24 18 18 27 26 ...
## $ Unadjusted.City.MPG..FT2. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Unadjusted.Highway.MPG..FT2. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Combined.MPG..FT1. : int 20 20 21 21 17 17 13 13 17 17 ...
## $ Unrounded.Combined.MPG..FT1. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Combined.MPG..FT2. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Unrounded.Combined.MPG..FT2. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Combined.Electricity.Consumption : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Combined.Gasoline.Consumption..CD. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Combined.Utility.Factor : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Annual.Fuel.Cost..FT1. : int 1750 1750 1650 1650 2050 2050 2700 2700 2050 2050 ...
## $ Annual.Fuel.Cost..FT2. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Gas.Guzzler.Tax : chr "" "" "" "" ...
## $ Save.or.Spend..5.Year. : int -2000 -2000 -1500 -1500 -3500 -3500 -6750 -6750 -3500 -3500 ...
## $ Annual.Consumption.in.Barrels..FT1.: num 16.5 16.5 15.7 15.7 19.4 ...
## $ Annual.Consumption.in.Barrels..FT2.: num 0 0 0 0 0 0 0 0 0 0 ...
## $ Tailpipe.CO2..FT1. : int -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ Tailpipe.CO2.in.Grams.Mile..FT1. : num 444 444 423 423 523 ...
## $ Tailpipe.CO2..FT2. : int -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ Tailpipe.CO2.in.Grams.Mile..FT2. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Fuel.Economy.Score : int -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ GHG.Score : int -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ GHG.Score..Alt.Fuel. : int -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ...
## $ My.MPG.Data : chr "N" "N" "N" "N" ...
## $ X2D.Passenger.Volume : int 74 74 0 0 0 0 0 0 0 0 ...
## $ X2D.Luggage.Volume : int 7 7 0 0 0 0 0 0 0 0 ...
## $ X4D.Passenger.Volume : int 0 0 0 0 0 0 0 0 0 0 ...
## $ X4D.Luggage.Volume : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Hatchback.Passenger.Volume : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Hatchback.Luggage.Volume : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Start.Stop.Technology : chr "" "" "" "" ...
## $ Alternative.Fuel.Technology : chr "" "" "" "" ...
## $ Electric.Motor : chr "" "" "" "" ...
## $ Manufacturer.Code : chr "" "" "" "" ...
## $ Gasoline.Electricity.Blended..CD. : chr "False" "False" "False" "False" ...
## $ Vehicle.Charger : chr "" "" "" "" ...
## $ Alternate.Charger : chr "" "" "" "" ...
## $ Hours.to.Charge..120V. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Hours.to.Charge..240V. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Hours.to.Charge..AC.240V. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Composite.City.MPG : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Composite.Highway.MPG : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Composite.Combined.MPG : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Range..FT1. : int 0 0 0 0 0 0 0 0 0 0 ...
## $ City.Range..FT1. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Highway.Range..FT1. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Range..FT2. : chr "" "" "" "" ...
## $ City.Range..FT2. : num 0 0 0 0 0 0 0 0 0 0 ...
## $ Highway.Range..FT2. : num 0 0 0 0 0 0 0 0 0 0 ...
Empezamos el desarrollo para cada variable ordinal:
Tabla de distribución de frecuencias
punteconomica <- datos$Fuel.Economy.Score
punteconomica <- punteconomica[!is.na(punteconomica) & punteconomica != -1 & punteconomica != ""]
TDF_punteco <- table(punteconomica)
Tabla <- as.data.frame(TDF_punteco)
colnames(Tabla) <- c("Puntaje", "ni") # Renombrar columnas
Tabla$hi <- (Tabla$ni / sum(Tabla$ni)) * 100
# Asegurar que Puntaje es carácter
Tabla$Puntaje <- as.character(Tabla$Puntaje)
fila_total <- data.frame(Puntaje = "Total",
ni = sum(Tabla$ni),
hi = sum(Tabla$hi),
stringsAsFactors = FALSE)
# Agregar fila total
Tabla <- rbind(Tabla, fila_total)
# Mostrar tabla final
print(Tabla)
## Puntaje ni hi
## 1 1 130 2.124183
## 2 2 294 4.803922
## 3 3 514 8.398693
## 4 4 1139 18.611111
## 5 5 1555 25.408497
## 6 6 958 15.653595
## 7 7 809 13.218954
## 8 8 458 7.483660
## 9 9 95 1.552288
## 10 10 168 2.745098
## 11 Total 6120 100.000000
Gráficas:
# Ajustar márgenes para etiquetas largas
par(mar = c(8, 4, 3, 2))
# Gráfico de barras (solo sin la fila Total)
barplot(TDF_punteco,
main = "Gráfica No.2:
Distribución del Fuel Economy Score",
xlab = "",
ylab = "Frecuencia Absoluta",
col = "darkgreen",
las = 3, # Rotar etiquetas en eje x
cex.names = 0.8,
cex.axis = 0.9,
cex.main = 1.2,
ylim = c(0, max(TDF_punteco) * 1.2),
border = "black")
# Convertir Puntaje a factor con orden correcto
Tabla <- Tabla[Tabla$Puntaje != "Total", ] # Eliminar fila "Total" para graficar
Tabla$Puntaje <- factor(Tabla$Puntaje, levels = Tabla$Puntaje) # asegurar orden
# Gráfico de barras de frecuencia relativa (%)
barplot(Tabla$hi,
names.arg = Tabla$Puntaje,
main = "Gráfica No.2:
Distribución Relativa del Fuel Economy Score",
xlab = "Puntaje",
ylab = "Frecuencia Relativa (%)",
col = "steelblue",
las = 3,
cex.names = 0.8,
cex.axis = 0.9,
cex.main = 1.2,
ylim = c(0, max(Tabla$hi) * 1.2),
border = "black")
Modelo Binomial:
# Excluir fila Total y convertir a numérico
Tabla <- Tabla[Tabla$Puntaje != "Total", ]
Tabla$Puntaje <- as.numeric(Tabla$Puntaje)
# Parámetros estimados para la binomial
n <- max(Tabla$Puntaje)
media <- sum(Tabla$Puntaje * Tabla$ni) / sum(Tabla$ni)
p <- media / n
p
## [1] 0.5261601
# Frecuencias esperadas
Fe2 <- dbinom(Tabla$Puntaje, size = n, prob = p) * sum(Tabla$ni)
Fo2 <- Tabla$ni
Tabla$esperados <- Fe2
# Gráfico Experimental vs Teórica
barplot(rbind(Fo2, Fe2),
beside = TRUE,
col = c("darkgreen", "orange"),
legend.text = c("Experimental", "Teórica"),
args.legend = list(x = "topright"),
main = "Gráfica No.3:
Distribución Experimental vs Teórica (Binomial)",
names.arg = Tabla$Puntaje,
ylab = "Frecuencia")
#Test Chi-cuadrado
x2_2 <- sum(((Fo2 - Fe2)^2) / Fe2)
k <- length(Fo2) # número de clases
gl_2 <- k - 1 - 1 # grados de libertad: k - 1 - 1
vc_2 <- qchisq(0.95, df = gl_2)
cat("Chi-cuadrado calculado (x2_2):", x2_2, "\n")
## Chi-cuadrado calculado (x2_2): 2942.249
## Valor crítico (vc_2): 15.50731
if (x2_2 < vc_2) {
cat("Resultado: No se rechaza H0 (la binomial se ajusta bien)\n")
} else {
cat("Resultado: Se rechaza H0 (la binomial no se ajusta bien)\n")
}
## Resultado: Se rechaza H0 (la binomial no se ajusta bien)
#Correlación numérica
correlacion <- cor(Fo2, Fe2)
cat("Correlación Experimental vs Teórico:", correlacion, "\n")
## Correlación Experimental vs Teórico: 0.962122
#Gráfico de Correlación
plot(Fe2, Fo2,
main = "Gráfica No.4:
Correlación entre Frecuencias Experimental y Teórica",
xlab = "Frecuencia Experimental(Fe2)",
ylab = "Frecuencia Teórica (Fo2)",
pch = 19,
col = "blue",
xlim = c(min(Fe2), max(Fe2)),
ylim = c(min(Fo2), max(Fo2)))
abline(lm(Fo2 ~ Fe2), col = "red", lwd = 2)
grid()
# Mostrar r en el gráfico
text(x = max(Fe2)*0.7,
y = max(Fo2)*0.9,
labels = paste("r =", round(correlacion, 3)),
col = "darkred", cex = 1.2)
Modelo de Poisson:
Tabla <- Tabla[Tabla$Puntaje != "Total", ]
Tabla$Puntaje <- as.numeric(Tabla$Puntaje)
Tabla$ni <- as.numeric(Tabla$ni)
lambda <- sum(Tabla$Puntaje * Tabla$ni) / sum(Tabla$ni)
cat("Lambda estimado para Poisson:", lambda, "\n")
## Lambda estimado para Poisson: 5.261601
# Rango de puntajes observados
x_vals <- Tabla$Puntaje
# Calcular probabilidades Poisson
probs_pois <- dpois(x_vals, lambda = lambda)
# Frecuencias esperadas
Fe_pois <- probs_pois * sum(Tabla$ni)
# Añadir a la tabla
Tabla$esperados_pois <- Fe_pois
#Gráfico Experimental vs Teórica
barplot(rbind(Tabla$ni, Tabla$esperados_pois),
beside = TRUE,
col = c("darkgreen", "tomato"),
legend.text = c("Experimental", "Teórico (Poisson)"),
args.legend = list(x = "topright"),
names.arg = Tabla$Puntaje,
main = "Gráfica No.5: Distribución
Experimental vs Teórico (Poisson)",
xlab = "Puntaje",
ylab = "Frecuencia")
#Test de Chi-cuadrado (Poisson)
Fo_pois <- Tabla$ni
Fe_pois <- Tabla$esperados_pois
x2_pois <- sum((Fo_pois - Fe_pois)^2 / Fe_pois)
k <- length(Fo_pois)
gl_pois <- k - 1 - 1 # k - 1 - parámetros estimados (λ)
vc_pois <- qchisq(0.95, df = gl_pois)
cat("Chi-cuadrado Poisson:", x2_pois, "\n")
## Chi-cuadrado Poisson: 515.649
## Valor crítico (Poisson): 15.50731
if (x2_pois < vc_pois) {
cat("Resultado: No se rechaza H0 (la Poisson se ajusta bien)\n")
} else {
cat("Resultado: Se rechaza H0 (la Poisson no se ajusta bien)\n")
}
## Resultado: Se rechaza H0 (la Poisson no se ajusta bien)
#Correlación Experimental vs Teórico (Poisson)
cor_pois <- cor(Fo_pois, Fe_pois)
cat("Correlación Experimental vs Teórico (Poisson):", round(cor_pois, 4), "\n")
## Correlación Experimental vs Teórico (Poisson): 0.9336
plot(Fe_pois, Fo_pois,
main = "Gráfica No.6: Correlación de
Frecuencia Observada vs Esperada (Poisson)",
xlab = "Frecuencia Teórico (Poisson)",
ylab = "Frecuencia Experimental",
pch = 19,
col = "purple",
xlim = c(min(Fe_pois), max(Fe_pois)),
ylim = c(min(Fo_pois), max(Fo_pois)))
abline(lm(Fo_pois ~ Fe_pois), col = "red", lwd = 2)
grid()
# Agregar valor de la correlación r
text(x = max(Fe_pois)*0.7,
y = max(Fo_pois)*0.9,
labels = paste("r =", round(cor(Fo_pois, Fe_pois), 3)),
col = "darkred", cex = 1.2)
Conclusion
La variable Fuel.Economy.Score es de tipo ordinal discreta, con puntajes que van del 1 al 10, representando niveles ordenados de eficiencia del combustible. Se analizaron diversos modelos de distribución probabilística para evaluar su capacidad de representar adecuadamente la distribución observada.
Se probaron las siguientes distribuciones:
Binomial: Presentó la mayor correlación con los datos observados (r = 0.962) y una forma de distribución visualmente similar, aunque no superó la prueba de Chi-cuadrado.
Poisson: También mostró una buena correlación (r = 0.934) y una distribución razonablemente parecida, pero igualmente fue rechazada por el test de ajuste.
A pesar de que ninguno de los modelos probabilísticos superó el test de Chi-cuadrado, los modelos binomial y Poisson demostraron un buen ajuste visual y alta correlación, lo que sugiere que pueden ser utilizados como aproximaciones razonables para describir el comportamiento de la variable.
Tabla de distribución de frecuencias
# Extraer y limpiar la variable
Puntuacion <- datos$GHG.Score
Puntuacion <- Puntuacion[!is.na(Puntuacion) & Puntuacion != -1 & Puntuacion != ""]
TDFpuntuacion <- table(Puntuacion)
Tabla <- as.data.frame(TDFpuntuacion)
colnames(Tabla) <- c("Puntaje", "ni")
Tabla$hi <- (Tabla$ni / sum(Tabla$ni)) * 100
Tabla$Puntaje <- as.character(Tabla$Puntaje)
# Fila total
fila_total <- data.frame(
Puntaje = "Total",
ni = sum(Tabla$ni),
hi = sum(Tabla$hi),
stringsAsFactors = FALSE
)
Tabla <- rbind(Tabla, fila_total)
# Mostrar tabla final
print(Tabla)
## Puntaje ni hi
## 1 1 129 2.107843
## 2 2 294 4.803922
## 3 3 513 8.382353
## 4 4 1151 18.807190
## 5 5 1558 25.457516
## 6 6 953 15.571895
## 7 7 815 13.316993
## 8 8 435 7.107843
## 9 9 97 1.584967
## 10 10 175 2.859477
## 11 Total 6120 100.000000
# Ajustar márgenes para etiquetas largas
par(mar = c(8, 4, 3, 2))
# Gráfico de barras - Frecuencia Absoluta
barplot(
height = Tabla$ni[-nrow(Tabla)],
names.arg = Tabla$Puntaje[-nrow(Tabla)],
main = "Gráfica No. 7: Distribución del GHG Score",
xlab = "Puntuación",
ylab = "Frecuencia Absoluta",
col = "gold",
las = 3,
cex.names = 0.8,
cex.axis = 0.9,
cex.main = 1.2,
border = "black"
)
# Gráfico de barras - Frecuencia Relativa
barplot(
height = Tabla$hi[-nrow(Tabla)],
names.arg = Tabla$Puntaje[-nrow(Tabla)],
main = "Gráfica No. 8: Frecuencia Relativa (%) del GHG Score",
xlab = "Puntuación",
ylab = "Frecuencia Relativa (%)",
col = "orange",
las = 3,
cex.names = 0.8,
cex.axis = 0.9,
cex.main = 1.2,
ylim = c(0, max(Tabla$hi[-nrow(Tabla)]) * 1.2),
border = "black"
)
Modelo Binomial:
ghg <- as.numeric(Puntuacion) # ya está limpio
Fo <- table(ghg)
Fo_df <- as.data.frame(Fo)
colnames(Fo_df) <- c("X", "ni")
Fo_df$X <- as.numeric(as.character(Fo_df$X))
n_bin <- max(Fo_df$X)
p_bin <- mean(ghg) / n_bin
Fo_df$esperados <- dbinom(Fo_df$X, size = n_bin, prob = p_bin) * sum(Fo_df$ni)
# Gráfico de barras Experimental vs Teórico - Binomial
barplot(
rbind(Fo_df$ni, Fo_df$esperados),
beside = TRUE,
col = c("darkblue", "tomato"),
legend = c("Experimental", "Teórico"),
names.arg = Fo_df$X,
main = "Gráfica No. 9:Distribución
Binomial Ajustada al GHG Score",
xlab = "Puntuación",
ylab = "Frecuencia",
ylim = c(0, max(c(Fo_df$ni, Fo_df$esperados)) * 1.2)
)
# Correlación binomial
correlacion_bin <- cor(Fo_df$ni, Fo_df$esperados)
cat("Correlación Experimental vs Teórico (Binomial):", round(correlacion_bin, 3), "\n")
## Correlación Experimental vs Teórico (Binomial): 0.961
# Gráfico de correlación - Binomial
plot(Fo_df$esperados, Fo_df$ni,
main = "Gráfica No. 10: Correlación Binomial\nFrecuencia Teórica vs Experimental",
xlab = "Teórica (Binomial)",
ylab = "Experimental",
pch = 19, col = "blue")
abline(lm(ni ~ esperados, data = Fo_df), col = "red", lwd = 2)
text(x = min(Fo_df$esperados), y = max(Fo_df$ni),
labels = paste("r =", round(correlacion_bin, 3)),
pos = 4, col = "darkblue", cex = 0.9)
# Chi-cuadrado
x2_bin <- sum(((Fo_df$ni - Fo_df$esperados)^2) / Fo_df$esperados)
gl_bin <- length(Fo_df$X) - 1
vc_bin <- qchisq(0.95, df = gl_bin)
cat("Chi-cuadrado Binomial:", round(x2_bin, 3), "\n")
## Chi-cuadrado Binomial: 3177.647
## Valor crítico (0.95): 16.919
if (x2_bin < vc_bin) {
cat("No se rechaza H0: El modelo binomial se ajusta bien a los datos.\n")
} else {
cat("Se rechaza H0: El modelo binomial no se ajusta a los datos.\n")
}
## Se rechaza H0: El modelo binomial no se ajusta a los datos.
Modelo Poisson:
# Gráfico de barras Experimental vs Teórico - Poisson
barplot(
rbind(Fo_df$ni, Fo_df$esperados),
beside = TRUE,
col = c("darkgreen", "orange"),
legend = c("Experimental", "Teórico"),
names.arg = Fo_df$X,
main = "Gráfica No.11:
Distribución Poisson Ajustada al GHG Score",
xlab = "Puntuación",
ylab = "Frecuencia",
ylim = c(0, max(c(Fo_df$ni, Fo_df$esperados)) * 1.2)
)
# Correlación Poisson
correlacion_pois <- cor(Fo_df$ni, Fo_df$esperados)
cat("Correlación Experimental vs Teórico (Poisson):", round(correlacion_pois, 3), "\n")
## Correlación Experimental vs Teórico (Poisson): 0.933
# Gráfico de correlación - Poisson
plot(Fo_df$esperados, Fo_df$ni,
main = "Gráfica No. 12: Correlación Poisson\nFrecuencia Teórica vs Experimental",
xlab = "Teórica (Poisson)",
ylab = "Experimental",
pch = 19, col = "darkgreen")
abline(lm(ni ~ esperados, data = Fo_df), col = "red", lwd = 2)
text(x = min(Fo_df$esperados), y = max(Fo_df$ni),
labels = paste("r =", round(correlacion_pois, 3)),
pos = 4, col = "darkgreen", cex = 0.9)
# Chi-cuadrado
x2_pois <- sum(((Fo_df$ni - Fo_df$esperados)^2) / Fo_df$esperados)
gl_pois <- length(Fo_df$X) - 1
vc_pois <- qchisq(0.95, df = gl_pois)
cat("Chi-cuadrado Poisson:", round(x2_pois, 3), "\n")
## Chi-cuadrado Poisson: 527.05
## Valor crítico (0.95): 16.919
if (x2_pois < vc_pois) {
cat("No se rechaza H0: El modelo Poisson se ajusta bien a los datos.\n")
} else {
cat("Se rechaza H0: El modelo Poisson no se ajusta a los datos.\n")
}
## Se rechaza H0: El modelo Poisson no se ajusta a los datos.
Conclusion
Se analizaron los datos de la variable GHG.Score aplicando dos
modelos de distribución probabilística discreta: binomialy Poisson. En
ambos casos, se observó una correlación visual y numérica relativamente
alta entre las frecuencias observadas y las esperadas, lo cual sugiere
que las formas de las distribuciones se asemejan. No obstante, al
aplicar la prueba de Chi-cuadrado, los valores calculados fueron
significativamente mayores al valor crítico en ambos modelos, lo que
llevó a rechazar la hipótesis nula de buen ajuste. Esto indica que,
estadísticamente, ninguno de los dos modelos describe adecuadamente el
comportamiento de la variable. Este resultado podría deberse a que
GHG.Score
es una variable ordinal discreta, cuya
distribución puede estar influenciada por múltiples factores externos
que no se reflejan en un modelo binomial o Poisson puro. Por tanto,
aunque gráficamente los modelos podrían parecer adecuados, desde el
punto de vista estadístico, el ajuste es insuficiente en ambos
casos.
Tabla de distribución de frecuencias
# Extraer y limpiar la variable
Puntuacionalt <- datos$GHG.Score..Alt.Fuel.
Puntuacionalt <- Puntuacionalt[!is.na(Puntuacionalt) & Puntuacionalt != -1 & Puntuacionalt != ""]
TDFpuntuacionalt <- table(Puntuacionalt)
Tabla <- as.data.frame(TDFpuntuacionalt)
colnames(Tabla) <- c("Puntaje", "ni")
Tabla$hi <- (Tabla$ni / sum(Tabla$ni)) * 100
Tabla$Puntaje <- as.character(Tabla$Puntaje)
# Fila total
fila_total <- data.frame(
Puntaje = "Total",
ni = sum(Tabla$ni),
hi = sum(Tabla$hi),
stringsAsFactors = FALSE
)
Tabla <- rbind(Tabla, fila_total)
# Mostrar tabla final
print(Tabla)
## Puntaje ni hi
## 1 0 11 2.029520
## 2 1 18 3.321033
## 3 2 66 12.177122
## 4 3 80 14.760148
## 5 4 135 24.907749
## 6 5 118 21.771218
## 7 6 85 15.682657
## 8 7 16 2.952030
## 9 8 13 2.398524
## 10 Total 542 100.000000
# Ajustar márgenes para etiquetas largas
par(mar = c(8, 4, 3, 2))
# Gráfico de barras - Frecuencia Absoluta
barplot(
height = Tabla$ni[-nrow(Tabla)],
names.arg = Tabla$Puntaje[-nrow(Tabla)],
main = "Gráfica No. 13: Distribución
del GHG Score (Alt Fuel)",
xlab = "Puntuación",
ylab = "Frecuencia Absoluta",
col = "burlywood1",
las = 3,
cex.names = 0.8,
cex.axis = 0.9,
cex.main = 1.2,
border = "black"
)
# Gráfico de barras - Frecuencia Relativa
barplot(
height = Tabla$hi[-nrow(Tabla)],
names.arg = Tabla$Puntaje[-nrow(Tabla)],
main = "Gráfica No. 14: Frecuencia Relativa (%)
del GHG Score (Alt Fuel)",
xlab = "Puntuación",
ylab = "Frecuencia Relativa (%)",
col = "cadetblue2",
las = 3,
cex.names = 0.8,
cex.axis = 0.9,
cex.main = 1.2,
ylim = c(0, max(Tabla$hi[-nrow(Tabla)]) * 1.2),
border = "black"
)
Modelo Binomial:
# Extraer y limpiar la variable
ghg_alt <- datos$GHG.Score..Alt.Fuel.
ghg_alt <- ghg_alt[!is.na(ghg_alt) & ghg_alt != -1 & ghg_alt != ""]
Fo_alt <- table(ghg_alt)
Fo_df_alt <- as.data.frame(Fo_alt)
colnames(Fo_df_alt) <- c("X", "ni")
Fo_df_alt$X <- as.numeric(as.character(Fo_df_alt$X))
# Parámetros binomiales
n_bin_alt <- max(Fo_df_alt$X)
p_bin_alt <- mean(ghg_alt) / n_bin_alt
# Frecuencias esperadas
Fe_bin_alt <- dbinom(Fo_df_alt$X, size = n_bin_alt, prob = p_bin_alt) * sum(Fo_df_alt$ni)
Fo_df_alt$esperados_bin <- Fe_bin_alt
# Gráfico: Experimental vs Teórica
barplot(
rbind(Fo_df_alt$ni, Fo_df_alt$esperados_bin),
beside = TRUE,
col = c("steelblue", "salmon"),
legend = c("Experimental", "Teórica"),
names.arg = Fo_df_alt$X,
main = "Gráfica No. 15: Distribución Binomial
de GHG Score (Alt Fuel)",
xlab = "Puntuación",
ylab = "Frecuencia",
ylim = c(0, max(c(Fo_df_alt$ni, Fo_df_alt$esperados_bin)) * 1.2)
)
# Correlación
correlacion_bin_alt <- cor(Fo_df_alt$ni, Fo_df_alt$esperados_bin)
cat("Correlación Experimental vs Teórica (Binomial):", round(correlacion_bin_alt, 3), "\n")
## Correlación Experimental vs Teórica (Binomial): 0.969
# Gráfico de correlación
plot(Fo_df_alt$esperados_bin, Fo_df_alt$ni,
main = "Gráfica No.16: Correlación
Experimental vs Teórica (Binomial)",
xlab = "Teórica (Binomial)",
ylab = "Experimental",
pch = 19, col = "steelblue")
abline(lm(Fo_df_alt$ni ~ Fo_df_alt$esperados_bin), col = "red", lwd = 2)
text(x = min(Fo_df_alt$esperados_bin), y = max(Fo_df_alt$ni),
labels = paste("r =", round(correlacion_bin_alt, 3)),
pos = 4, col = "darkblue", cex = 0.9)
# Prueba Chi-cuadrado
x2_bin_alt <- sum(((Fo_df_alt$ni - Fo_df_alt$esperados_bin)^2) / Fo_df_alt$esperados_bin)
gl_bin_alt <- length(Fo_df_alt$X) - 1
vc_bin_alt <- qchisq(0.95, df = gl_bin_alt)
cat("Chi-cuadrado calculado:", round(x2_bin_alt, 3), "\n")
## Chi-cuadrado calculado: 114.041
## Valor crítico (0.95): 15.507
# Decisión
if (x2_bin_alt < vc_bin_alt) {
cat("No se rechaza H0: El modelo binomial se ajusta bien a los datos.\n")
} else {
cat("Se rechaza H0: El modelo binomial no se ajusta a los datos.\n")
}
## Se rechaza H0: El modelo binomial no se ajusta a los datos.
Modelo Poisson:
# Usamos los datos ya limpiados:
ghg_alt <- datos$GHG.Score..Alt.Fuel.
ghg_alt <- ghg_alt[!is.na(ghg_alt) & ghg_alt != -1 & ghg_alt != ""]
# Tabla de frecuencia observada
Fo_alt <- table(ghg_alt)
Fo_df_alt <- as.data.frame(Fo_alt)
colnames(Fo_df_alt) <- c("X", "ni")
Fo_df_alt$X <- as.numeric(as.character(Fo_df_alt$X))
# Estimar parámetro lambda (λ) de Poisson
lambda_alt <- mean(ghg_alt)
lambda_alt
## [1] 4.143911
# Calcular frecuencias esperadas bajo Poisson
Fe_pois_alt <- dpois(Fo_df_alt$X, lambda = lambda_alt) * sum(Fo_df_alt$ni)
Fo_df_alt$esperados_pois <- Fe_pois_alt
# Gráfico: Experimental vs Teórica
barplot(
rbind(Fo_df_alt$ni, Fo_df_alt$esperados_pois),
beside = TRUE,
col = c("olivedrab", "gold"),
legend = c("Observada", "Esperada"),
names.arg = Fo_df_alt$X,
main = "Gráfica No.17: Distribución
Poisson de GHG Score (Alt Fuel)",
xlab = "Puntuación",
ylab = "Frecuencia",
ylim = c(0, max(c(Fo_df_alt$ni, Fo_df_alt$esperados_pois)) * 1.2)
)
# Correlación
correlacion_pois_alt <- cor(Fo_df_alt$ni, Fo_df_alt$esperados_pois)
cat("Correlación Experimental vs Teórica (Poisson):", round(correlacion_pois_alt, 3), "\n")
## Correlación Experimental vs Teórica (Poisson): 0.909
# Gráfico de correlación
plot(Fo_df_alt$esperados_pois, Fo_df_alt$ni,
main = "Gráfica No.18: Correlación
Experimental vs Teórica (Poisson)",
xlab = "Teórica (Poisson)",
ylab = "Experimental",
pch = 19, col = "darkolivegreen")
abline(lm(Fo_df_alt$ni ~ Fo_df_alt$esperados_pois), col = "red", lwd = 2)
text(x = min(Fo_df_alt$esperados_pois), y = max(Fo_df_alt$ni),
labels = paste("r =", round(correlacion_pois_alt, 3)),
pos = 4, col = "darkgreen", cex = 0.9)
# Prueba Chi-cuadrado
x2_pois_alt <- sum(((Fo_df_alt$ni - Fo_df_alt$esperados_pois)^2) / Fo_df_alt$esperados_pois)
gl_pois_alt <- length(Fo_df_alt$X) - 1
vc_pois_alt <- qchisq(0.95, df = gl_pois_alt)
cat("Chi-cuadrado calculado:", round(x2_pois_alt, 3), "\n")
## Chi-cuadrado calculado: 56.277
## Valor crítico (0.95): 15.507
if (x2_pois_alt < vc_pois_alt) {
cat("No se rechaza H0: El modelo Poisson se ajusta bien a los datos.\n")
} else {
cat("Se rechaza H0: El modelo Poisson no se ajusta a los datos.\n")
}
## Se rechaza H0: El modelo Poisson no se ajusta a los datos.
Conclusion
Para la variable GHG Score (Alt Fuel), tanto el modelo binomial como el modelo de Poisson fueron evaluados. Sin embargo, ninguno logró un ajuste satisfactorio según la prueba de bondad de ajuste de chi-cuadrado, ya que en ambos casos se rechazó la hipótesis nula. Aunque el modelo binomial presentó una correlación ligeramente mayor entre frecuencias observadas y esperadas, los resultados indican que esta variable no se ajusta adecuadamente a ninguna de las dos distribuciones analizadas.