# Cargar los datos
setwd("/cloud/project")
datos <- read.csv("MPG_consumo.csv", header = TRUE, sep = ",", dec = ".")
# Seleccionar la variable continua
variable <- na.omit(datos$Tailpipe.CO2.in.Grams.Mile..FT1.)
# NĆŗmero de intervalos fijo
n <- length(variable)
k <- ceiling(1 + 3.322 * log10(n))
# Calcular rango y amplitud
R <- max(variable) - min(variable)
A <- ceiling(R / k)
# LĆmites inferiores y superiores
lim_inf <- seq(from = min(variable), by = A, length.out = k)
lim_sup <- lim_inf + A - 1 # corregido para evitar superposición
# Marcas de clase
MC <- (lim_inf + lim_sup) / 2
# Frecuencias absolutas
ni <- numeric(k)
for (i in 1:k) {
if (i == k) {
ni[i] <- sum(variable >= lim_inf[i] & variable <= lim_sup[i])
} else {
ni[i] <- sum(variable >= lim_inf[i] & variable < lim_sup[i])
}
}
# Frecuencia relativa
hi <- round(ni / sum(ni), 4)
# Frecuencias acumuladas
Ni_asc <- cumsum(ni)
Fi_asc <- round(cumsum(hi), 4)
Ni_desc <- rev(cumsum(rev(ni)))
Fi_desc <- round(rev(cumsum(rev(hi))), 4)
# Crear tabla
tabla_frecuencia <- data.frame(
Intervalo = paste0(round(lim_inf, 2), " - ", round(lim_sup, 2)),
MC = round(MC, 2),
ni = ni,
hi = hi,
Ni_desc = Ni_desc,
Fi_desc = Fi_desc,
Ni_asc = Ni_asc,
Fi_asc = Fi_asc
)
# Mostrar tabla
print(tabla_frecuencia, row.names = FALSE)
## Intervalo MC ni hi Ni_desc Fi_desc Ni_asc Fi_asc
## 0 - 74 37 139 0.0037 37984 1.0001 139 0.0037
## 75 - 149 112 30 0.0008 37845 0.9964 169 0.0045
## 150 - 224 187 208 0.0055 37815 0.9956 377 0.0100
## 225 - 299 262 1242 0.0327 37607 0.9901 1619 0.0427
## 300 - 374 337 5928 0.1561 36365 0.9574 7547 0.1988
## 375 - 449 412 10961 0.2886 30437 0.8013 18508 0.4874
## 450 - 524 487 9623 0.2533 19476 0.5127 28131 0.7407
## 525 - 599 562 4983 0.1312 9853 0.2594 33114 0.8719
## 600 - 674 637 2152 0.0567 4870 0.1282 35266 0.9286
## 675 - 749 712 2025 0.0533 2718 0.0715 37291 0.9819
## 750 - 824 787 470 0.0124 693 0.0182 37761 0.9943
## 825 - 899 862 136 0.0036 223 0.0058 37897 0.9979
## 900 - 974 937 0 0.0000 87 0.0022 37897 0.9979
## 975 - 1049 1012 47 0.0012 87 0.0022 37944 0.9991
## 1050 - 1124 1087 35 0.0009 40 0.0010 37979 1.0000
## 1125 - 1199 1162 0 0.0000 5 0.0001 37979 1.0000
## 1200 - 1274 1237 5 0.0001 5 0.0001 37984 1.0001
# Histograma manual con las frecuencias absolutas
barplot(tabla_frecuencia$ni,
main = "Histograma: Distribución de Tailpipe CO2",
xlab = "Intervalos",
ylab = "Frecuencia absoluta",
col = "skyblue",
names.arg = tabla_frecuencia$Intervalo,
ylim = c(0, max(tabla_frecuencia$ni) + 5))

# Ojivas (ascendente y descendente) con lĆneas conectadas
plot(tabla_frecuencia$MC, tabla_frecuencia$Ni_asc,
type = "o", col = "green",
main = "OjivasFrecuencias acumuladas de Tailpipe CO2",
xlab = "Marca de clase (CO2 g/mi)",
ylab = "Frecuencia acumulada",
ylim = c(0, max(tabla_frecuencia$Ni_asc) + 5),
pch = 16)
lines(tabla_frecuencia$MC, tabla_frecuencia$Ni_desc,
type = "o", col = "red", pch = 17)
legend("bottomright",
legend = c("Ojiva Ascendente", "Ojiva Descendente"),
col = c("green", "red"),
pch = c(16, 17),
lty = 1)

# Diagrama de caja (boxplot)
boxplot(variable,
horizontal = TRUE,
col = "orange",
main = "Diagrama de Caja: Tailpipe CO2 (g/mi)",
xlab = "Emisión de CO2 (g/mi)")
