# 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)")