Variable Cuantitativa Discreta - Años

1 Cargar datos

setwd("C:/Users/Usuario/Documents/Trabajo Estadistica/PROYECTO/")
datos <- read.csv("database.csv", header = TRUE, sep = ",", dec = ".")

Verificamos que rstudio nos lea correctamente los datos:

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 ...

1.1 Cargar librerias

library(knitr)
## Warning: package 'knitr' was built under R version 4.4.3
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.4.3

1.2 Extraemos la variable

anios <- datos$Year

2 Tabla de Distribución De Frecuencias

anios <- datos$Year
tabla_anios <- table(anios)
tabla_anios_df <- as.data.frame(tabla_anios)
colnames(tabla_anios_df) <- c("Año", "ni")

# Calcular frecuencias relativas y acumuladas
hi <- tabla_anios_df$ni / sum(tabla_anios_df$ni)
hi_porc <- round(hi * 100, 2)
Ni_asc <- cumsum(tabla_anios_df$ni)
Ni_dsc <- rev(cumsum(rev(tabla_anios_df$ni)))
Hi_asc <- cumsum(hi_porc)
Hi_dsc <- rev(cumsum(rev(hi_porc)))
# Crear tabla final
TDFanios <- data.frame(
  Año = tabla_anios_df$Año,
  `Frecuencia Absoluta (ni)` = tabla_anios_df$ni,
  `Frecuencia Relativa (%)` = hi_porc,
  `Frecuencia Acumulada Ascendente (Ni↑)` = Ni_asc,
  `Frecuencia Acumulada Descendente (Ni↓)` = Ni_dsc,
  `Frecuencia Relativa Acumulada Ascendente (Hi↑)` = Hi_asc,
  `Frecuencia Relativa Acumulada Descendente (Hi↓)` = Hi_dsc,
  check.names = FALSE
)

2.1 Crear fila de totales

# Crear fila total
fila_total <- data.frame(
  Año = "Total",
  `Frecuencia Absoluta (ni)` = sum(TDFanios$`Frecuencia Absoluta (ni)`),
  `Frecuencia Relativa (%)` = round(sum(TDFanios$`Frecuencia Relativa (%)`), 2),
  `Frecuencia Acumulada Ascendente (Ni↑)` = NA,
  `Frecuencia Acumulada Descendente (Ni↓)` = NA,
  `Frecuencia Relativa Acumulada Ascendente (Hi↑)` = NA,
  `Frecuencia Relativa Acumulada Descendente (Hi↓)` = NA,
  check.names = FALSE
)

2.2 Unir fila total a la tabla

# Unir fila total
TDFanios2 <- rbind(TDFanios, fila_total)
# Mostrar tabla formateada
kable(TDFanios2, format = "html", caption = "Tabla Nº1: Distribución de Frecuencias del Año del Vehículo") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = FALSE, position = "center") %>%
  column_spec(1, bold = TRUE) %>%
  row_spec(nrow(TDFanios2), bold = TRUE, color = "white", background = "#0073C2")
Tabla Nº1: Distribución de Frecuencias del Año del Vehículo
Año Frecuencia Absoluta (ni) Frecuencia Relativa (%) Frecuencia Acumulada Ascendente (Ni↑) Frecuencia Acumulada Descendente (Ni↓) Frecuencia Relativa Acumulada Ascendente (Hi↑) Frecuencia Relativa Acumulada Descendente (Hi↓)
1984 1964 5.15 1964 38113 5.15 100.00
1985 1701 4.46 3665 36149 9.61 94.85
1986 1210 3.17 4875 34448 12.78 90.39
1987 1247 3.27 6122 33238 16.05 87.22
1988 1130 2.96 7252 31991 19.01 83.95
1989 1153 3.03 8405 30861 22.04 80.99
1990 1078 2.83 9483 29708 24.87 77.96
1991 1132 2.97 10615 28630 27.84 75.13
1992 1121 2.94 11736 27498 30.78 72.16
1993 1093 2.87 12829 26377 33.65 69.22
1994 982 2.58 13811 25284 36.23 66.35
1995 967 2.54 14778 24302 38.77 63.77
1996 773 2.03 15551 23335 40.80 61.23
1997 762 2.00 16313 22562 42.80 59.20
1998 812 2.13 17125 21800 44.93 57.20
1999 852 2.24 17977 20988 47.17 55.07
2000 840 2.20 18817 20136 49.37 52.83
2001 911 2.39 19728 19296 51.76 50.63
2002 975 2.56 20703 18385 54.32 48.24
2003 1044 2.74 21747 17410 57.06 45.68
2004 1122 2.94 22869 16366 60.00 42.94
2005 1166 3.06 24035 15244 63.06 40.00
2006 1104 2.90 25139 14078 65.96 36.94
2007 1126 2.95 26265 12974 68.91 34.04
2008 1187 3.11 27452 11848 72.02 31.09
2009 1178 3.09 28630 10661 75.11 27.98
2010 1100 2.89 29730 9483 78.00 24.89
2011 1121 2.94 30851 8383 80.94 22.00
2012 1142 3.00 31993 7262 83.94 19.06
2013 1169 3.07 33162 6120 87.01 16.06
2014 1203 3.16 34365 4951 90.17 12.99
2015 1270 3.33 35635 3748 93.50 9.83
2016 1250 3.28 36885 2478 96.78 6.50
2017 1228 3.22 38113 1228 100.00 3.22
Total 38113 100.00 NA NA NA NA

3 Gráficas de distribución

# Gráfico de barras
barplot(TDFanios$`Frecuencia Absoluta (ni)`,
        main = "Gráfica Nº1: 
        Distribución de Frecuencia por Año",
        xlab = "Año", ylab = "Cantidad",
        col = "yellow",
        ylim = c(0, max(TDFanios$`Frecuencia Absoluta (ni)`) + 5),
        names.arg = TDFanios$Año,
        las = 2)

Dividimos los valores para obtener un modelo adecuado para aplicar:

  1. Primero será de 1984 a 1994

  2. Segundo será de 1995 a 2005

  3. Tercero será de 2006 a 2017

4 De 1984 a 1994

Extraemos la variable y agrupamos

# Filtrar años entre 1984 y 1994
anios_84_94 <- as.numeric(datos$Year)
anios_84_94 <- anios_84_94[!is.na(anios_84_94) & anios_84_94 >= 1984 & anios_84_94 <= 1994]

4.1 Tabla de Distribución De Frecuencias

tabla_84_94 <- table(anios_84_94)
df_84_94 <- as.data.frame(tabla_84_94)
colnames(df_84_94) <- c("Año", "ni")

# Calcular frecuencias relativas y acumuladas
hi <- df_84_94$ni / sum(df_84_94$ni)
hi_porc <- round(hi * 100, 2)
Ni_asc <- cumsum(df_84_94$ni)
Ni_dsc <- rev(cumsum(rev(df_84_94$ni)))
Hi_asc <- cumsum(hi_porc)
Hi_dsc <- rev(cumsum(rev(hi_porc)))
# Crear tabla final
tabla_84_94 <- data.frame(
  Año = df_84_94$Año,
  `Frecuencia Absoluta (ni)` = df_84_94$ni,
  `Frecuencia Relativa (%)` = hi_porc,
  `Frecuencia Acumulada Ascendente (Ni↑)` = Ni_asc,
  `Frecuencia Acumulada Descendente (Ni↓)` = Ni_dsc,
  `Frecuencia Relativa Acumulada Ascendente (Hi↑)` = Hi_asc,
  `Frecuencia Relativa Acumulada Descendente (Hi↓)` = Hi_dsc,
  check.names = FALSE
)

4.1.1 Crear fila de totales

# Fila total
fila_total <- data.frame(
  Año = "Total",
  `Frecuencia Absoluta (ni)` = sum(tabla_84_94$`Frecuencia Absoluta (ni)`),
  `Frecuencia Relativa (%)` = 100.00,
  `Frecuencia Acumulada Ascendente (Ni↑)` = NA,
  `Frecuencia Acumulada Descendente (Ni↓)` = NA,
  `Frecuencia Relativa Acumulada Ascendente (Hi↑)` = NA,
  `Frecuencia Relativa Acumulada Descendente (Hi↓)` = NA,
  check.names = FALSE
)

4.1.2 Unir fila total a la tabla

# Unir fila total
tabla_84_94_completa <- rbind(tabla_84_94, fila_total)
# Mostrar tabla con estilo
kable(tabla_84_94_completa, format = "html", caption = "Tabla Nº2: Distribución de Frecuencias (1984–1994)") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = FALSE, position = "center") %>%
  column_spec(1, bold = TRUE) %>%
  row_spec(nrow(tabla_84_94_completa), bold = TRUE, color = "white", background = "#0073C2")
Tabla Nº2: Distribución de Frecuencias (1984–1994)
Año Frecuencia Absoluta (ni) Frecuencia Relativa (%) Frecuencia Acumulada Ascendente (Ni↑) Frecuencia Acumulada Descendente (Ni↓) Frecuencia Relativa Acumulada Ascendente (Hi↑) Frecuencia Relativa Acumulada Descendente (Hi↓)
1984 1964 14.22 1964 13811 14.22 100.01
1985 1701 12.32 3665 11847 26.54 85.79
1986 1210 8.76 4875 10146 35.30 73.47
1987 1247 9.03 6122 8936 44.33 64.71
1988 1130 8.18 7252 7689 52.51 55.68
1989 1153 8.35 8405 6559 60.86 47.50
1990 1078 7.81 9483 5406 68.67 39.15
1991 1132 8.20 10615 4328 76.87 31.34
1992 1121 8.12 11736 3196 84.99 23.14
1993 1093 7.91 12829 2075 92.90 15.02
1994 982 7.11 13811 982 100.01 7.11
Total 13811 100.00 NA NA NA NA

4.2 Gráficas de distribución

# Gráfico de barras
barplot(tabla_84_94$`Frecuencia Absoluta (ni)`,
        names.arg = tabla_84_94$Año,
        main = "Gráfico Nº2: Distribución de Frecuencia
        por Año (1984–1994)",
        xlab = "Año", ylab = "Cantidad",
        col = "skyblue",
        las = 2,               # Gira etiquetas del eje X
        cex.names = 0.8,       # Tamaño de texto en eje X
        ylim = c(0, max(tabla_84_94$`Frecuencia Absoluta (ni)`) + 5))

4.3 Modelo Uniform

# Número de categorías (años)
k <- nrow(tabla_84_94)
Fo <- tabla_84_94$`Frecuencia Relativa (%)` # Observadas
Fe <- rep(sum(Fo)/k, k)                      # Esperadas bajo uniforme
# Frecuencia relativa observada
hi_obs <- round((Fo / sum(Fo)) * 100, 2)
# Tabla comparativa
tabla_uniforme <- data.frame(
  Año = tabla_84_94$Año,
  `hi (observada %)` = hi_obs,
  `Fe (esperada)` = round(Fe, 2)
)
print(tabla_uniforme)
##     Año hi..observada... Fe..esperada.
## 1  1984            14.22          9.09
## 2  1985            12.32          9.09
## 3  1986             8.76          9.09
## 4  1987             9.03          9.09
## 5  1988             8.18          9.09
## 6  1989             8.35          9.09
## 7  1990             7.81          9.09
## 8  1991             8.20          9.09
## 9  1992             8.12          9.09
## 10 1993             7.91          9.09
## 11 1994             7.11          9.09
# Gráfico comparativo
barplot(rbind(hi_obs, Fe),
        beside = TRUE,
        names.arg = tabla_84_94$Año,
        col = c("lightgreen", "orange"),
        legend.text = c("Frecuencia Observada", "Frecuencia Esperada (Uniforme)"),
        main = "Gráfico Nº3: Modelo de Probabilidad
        Uniform de los años (1984-1994)",
        xlab = "Año", ylab = "Cantidad-Probabilidad",
        las = 2,
        cex.names = 0.8)

4.4 Correlacion

cor_uniforme <- cor(hi_obs, Fe)
## Warning in cor(hi_obs, Fe): La desviación estándar es cero
cat("Correlación observadas vs esperadas:", round(cor_uniforme, 4), "\n")
## Correlación observadas vs esperadas: NA
# Gráfico de correlación
plot(hi_obs, Fe,
     main = "Gráfico Nº4: Correlación de Frecuencias
     en el Modelo Uniform de los años (1984-1994)",
     xlab = "Observada (hi)",
     ylab = "Esperada (P)",
     pch = 19, col = "darkgreen")
abline(lm(Fe ~ hi_obs), col = "red", lwd = 2)

Se observa que los puntos están dispersos horizontalmente alrededor de la línea esperada, lo cual es característico de un modelo uniforme, donde se espera una distribución equilibrada.

4.5 Test Chi-cuadrado

x2_uniforme <- sum((Fo - Fe)^2 / Fe)
vc_uniforme <- qchisq(0.95, df = k - 1)

cat("Estadístico Chi-cuadrado:", round(x2_uniforme, 4), "\n")
## Estadístico Chi-cuadrado: 5.1609
cat("Valor crítico Chi-cuadrado (95%):", round(vc_uniforme, 4), "\n")
## Valor crítico Chi-cuadrado (95%): 18.307
cat("¿x² < valor crítico?", x2_uniforme < vc_uniforme, "\n")
## ¿x² < valor crítico? TRUE
if (x2_uniforme < vc_uniforme) {
  cat("No se rechaza (buen ajuste al modelo uniforme).\n")
} else {
  cat("Se rechaza (mal ajuste al modelo uniforme).\n")
}
## No se rechaza (buen ajuste al modelo uniforme).

5 De 1995 a 2005

# Filtrar años entre 1995 y 2005
anios_95_05 <- as.numeric(datos$Year)
anios_95_05 <- anios_95_05[!is.na(anios_95_05) & anios_95_05 >= 1995 & anios_95_05 <= 2005]

5.1 Tabla de Distribución De Frecuencias

tabla_95_05 <- table(anios_95_05)
df_95_05 <- as.data.frame(tabla_95_05)
colnames(df_95_05) <- c("Año", "Frecuencia Absoluta (ni)")
hi <- df_95_05$`Frecuencia Absoluta (ni)` / sum(df_95_05$`Frecuencia Absoluta (ni)`)
hi_porc <- round(hi * 100, 2)
diferencia <- 100 - sum(hi_porc)
hi_porc[length(hi_porc)] <- hi_porc[length(hi_porc)] + diferencia
Ni_asc <- cumsum(df_95_05$`Frecuencia Absoluta (ni)`)
Ni_dsc <- rev(cumsum(rev(df_95_05$`Frecuencia Absoluta (ni)`)))
Hi_asc <- cumsum(hi_porc)
Hi_dsc <- rev(cumsum(rev(hi_porc)))
# Crear tabla final
tabla_95_05 <- data.frame(
  Año = df_95_05$Año,
  `Frecuencia Absoluta (ni)` = df_95_05$`Frecuencia Absoluta (ni)`,
  `Frecuencia Relativa (%)` = hi_porc,
  `Frecuencia Acumulada Ascendente (Ni↑)` = Ni_asc,
  `Frecuencia Acumulada Descendente (Ni↓)` = Ni_dsc,
  `Frecuencia Relativa Acumulada Ascendente (Hi↑)` = Hi_asc,
  `Frecuencia Relativa Acumulada Descendente (Hi↓)` = Hi_dsc,
  check.names = FALSE
)

5.1.1 Crear fila de totales

fila_total <- data.frame(
  Año = "Total",
  `Frecuencia Absoluta (ni)` = sum(tabla_95_05$`Frecuencia Absoluta (ni)`),
  `Frecuencia Relativa (%)` = 100.00,
  `Frecuencia Acumulada Ascendente (Ni↑)` = NA,
  `Frecuencia Acumulada Descendente (Ni↓)` = NA,
  `Frecuencia Relativa Acumulada Ascendente (Hi↑)` = NA,
  `Frecuencia Relativa Acumulada Descendente (Hi↓)` = NA,
  check.names = FALSE
)

5.1.2 Unir fila total a la tabla

tabla_95_05_completa <- rbind(tabla_95_05, fila_total)
# Mostrar tabla con formato
kable(tabla_95_05_completa, format = "html", caption = "Tabla Nº3: Distribución de Frecuencias (1995–2005)") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = FALSE, position = "center") %>%
  column_spec(1, bold = TRUE) %>%
  row_spec(nrow(tabla_95_05_completa), bold = TRUE, color = "white", background = "#0073C2")
Tabla Nº3: Distribución de Frecuencias (1995–2005)
Año Frecuencia Absoluta (ni) Frecuencia Relativa (%) Frecuencia Acumulada Ascendente (Ni↑) Frecuencia Acumulada Descendente (Ni↓) Frecuencia Relativa Acumulada Ascendente (Hi↑) Frecuencia Relativa Acumulada Descendente (Hi↓)
1995 967 9.46 967 10224 9.46 100.00
1996 773 7.56 1740 9257 17.02 90.54
1997 762 7.45 2502 8484 24.47 82.98
1998 812 7.94 3314 7722 32.41 75.53
1999 852 8.33 4166 6910 40.74 67.59
2000 840 8.22 5006 6058 48.96 59.26
2001 911 8.91 5917 5218 57.87 51.04
2002 975 9.54 6892 4307 67.41 42.13
2003 1044 10.21 7936 3332 77.62 32.59
2004 1122 10.97 9058 2288 88.59 22.38
2005 1166 11.41 10224 1166 100.00 11.41
Total 10224 100.00 NA NA NA NA

5.2 Gráficas de distribución

# Gráfico de barras
barplot(tabla_95_05$`Frecuencia Absoluta (ni)`,
        names.arg = tabla_95_05$Año,
        main = "Gráfico Nº5: Distribución de Frecuencia
        por Años (1995–2005)",
        xlab = "Año", ylab = "Cantidad",
        col = "lightgreen",
        las = 2,
        cex.names = 0.8,
        ylim = c(0, max(tabla_95_05$`Frecuencia Absoluta (ni)`) + 100))

5.3 Modelo Uniform

# Número de categorías (años)
k <- nrow(tabla_95_05)
Fo <- tabla_95_05$`Frecuencia Relativa (%)`  # Frecuencias observadas
Fe <- rep(sum(Fo) / k, k)                     # Frecuencia esperada uniforme
# Tabla comparativa
tabla_uniforme <- data.frame(
  Año = tabla_95_05$Año,
  Observado = Fo,
  Esperado = Fe
)
print(tabla_uniforme)
##     Año Observado Esperado
## 1  1995      9.46 9.090909
## 2  1996      7.56 9.090909
## 3  1997      7.45 9.090909
## 4  1998      7.94 9.090909
## 5  1999      8.33 9.090909
## 6  2000      8.22 9.090909
## 7  2001      8.91 9.090909
## 8  2002      9.54 9.090909
## 9  2003     10.21 9.090909
## 10 2004     10.97 9.090909
## 11 2005     11.41 9.090909
# Gráfico comparativo Observado vs Esperado
barplot(rbind(Fo, Fe),
        beside = TRUE,
        names.arg = tabla_95_05$Año,
        col = c("lightgreen", "orange"),
        legend.text = c("Real", "Modelo"),
        main = "Gráfico No.6: Modelo de Probabilidad
        Uniform de los años (1995–2005)",
        xlab = "Año", ylab = "Cantidad-Probabilidad",
        las = 2,
        cex.names = 0.8)

5.4 Correlación

cor_uniforme <- cor(Fo, Fe)
## Warning in cor(Fo, Fe): La desviación estándar es cero
cat("Correlación observadas vs esperadas:", round(cor_uniforme, 4), "\n")
## Correlación observadas vs esperadas: NA
# Gráfico de correlación
plot(Fo, Fe,
     main = "Gráfico No.7: Correlación de Frecuencias
     en el Modelo Uniform de los años (1995–2005)",
     xlab = "Observada (hi)",
     ylab = "Esperada (P)",
     pch = 19, col = "darkgreen")
abline(lm(Fe ~ Fo), col = "red", lwd = 2)

Se observa que los puntos están dispersos horizontalmente alrededor de la línea esperada, lo cual es característico de un modelo uniforme, donde se espera una distribución equilibrada.

5.5 Test Chi-cuadrado

x2_uniforme <- sum((Fo - Fe)^2 / Fe)
vc_uniforme <- qchisq(0.95, df = k - 1)

cat("Estadístico Chi-cuadrado (Uniforme):", x2_uniforme, "\n")
## Estadístico Chi-cuadrado (Uniforme): 2.005354
cat("Valor crítico Chi-cuadrado (95%):", vc_uniforme, "\n")
## Valor crítico Chi-cuadrado (95%): 18.30704
cat("¿x2 < valor crítico?", x2_uniforme < vc_uniforme, "\n")
## ¿x2 < valor crítico? TRUE
if (x2_uniforme < vc_uniforme) {
  cat("No se rechaza (buen ajuste al modelo uniforme)\n")
} else {
  cat("Se rechaza (mal ajuste al modelo uniforme)\n")
}
## No se rechaza (buen ajuste al modelo uniforme)

6 De 2006 a 2017

# Filtrar años entre 2006 y 2017
anios_06_17 <- as.numeric(datos$Year)
anios_06_17 <- anios_06_17[!is.na(anios_06_17) & anios_06_17 >= 2006 & anios_06_17 <= 2017]

6.1 Tabla de Distribución De Frecuencias

tabla_06_17 <- table(anios_06_17)
df_06_17 <- as.data.frame(tabla_06_17)
colnames(df_06_17) <- c("Año", "Frecuencia Absoluta (ni)")
hi <- df_06_17$`Frecuencia Absoluta (ni)` / sum(df_06_17$`Frecuencia Absoluta (ni)`)
hi_porc <- round(hi * 100, 2)
diferencia <- 100 - sum(hi_porc)
hi_porc[length(hi_porc)] <- hi_porc[length(hi_porc)] + diferencia
Ni_asc <- cumsum(df_06_17$`Frecuencia Absoluta (ni)`)
Ni_dsc <- rev(cumsum(rev(df_06_17$`Frecuencia Absoluta (ni)`)))
Hi_asc <- cumsum(hi_porc)
Hi_dsc <- rev(cumsum(rev(hi_porc)))
# Crear tabla final
tabla_06_17 <- data.frame(
  Año = df_06_17$Año,
  `Frecuencia Absoluta (ni)` = df_06_17$`Frecuencia Absoluta (ni)`,
  `Frecuencia Relativa (%)` = hi_porc,
  `Frecuencia Acumulada Ascendente (Ni↑)` = Ni_asc,
  `Frecuencia Acumulada Descendente (Ni↓)` = Ni_dsc,
  `Frecuencia Relativa Acumulada Ascendente (Hi↑)` = Hi_asc,
  `Frecuencia Relativa Acumulada Descendente (Hi↓)` = Hi_dsc,
  check.names = FALSE
)

6.1.1 Crear fila de totales

fila_total <- data.frame(
  Año = "Total",
  `Frecuencia Absoluta (ni)` = sum(tabla_06_17$`Frecuencia Absoluta (ni)`),
  `Frecuencia Relativa (%)` = 100.00,
  `Frecuencia Acumulada Ascendente (Ni↑)` = NA,
  `Frecuencia Acumulada Descendente (Ni↓)` = NA,
  `Frecuencia Relativa Acumulada Ascendente (Hi↑)` = NA,
  `Frecuencia Relativa Acumulada Descendente (Hi↓)` = NA,
  check.names = FALSE
)

6.1.2 Unir fila total a la tabla

# Unir tabla y fila total
tabla_06_17_completa <- rbind(tabla_06_17, fila_total)
# Mostrar tabla con formato
kable(tabla_06_17_completa, format = "html", caption = "Tabla Nº5: Distribución de Frecuencias (2006–2017)") %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"),
                full_width = FALSE, position = "center") %>%
  column_spec(1, bold = TRUE) %>%
  row_spec(nrow(tabla_06_17_completa), bold = TRUE, color = "white", background = "#0073C2")
Tabla Nº5: Distribución de Frecuencias (2006–2017)
Año Frecuencia Absoluta (ni) Frecuencia Relativa (%) Frecuencia Acumulada Ascendente (Ni↑) Frecuencia Acumulada Descendente (Ni↓) Frecuencia Relativa Acumulada Ascendente (Hi↑) Frecuencia Relativa Acumulada Descendente (Hi↓)
2006 1104 7.84 1104 14078 7.84 100.00
2007 1126 8.00 2230 12974 15.84 92.16
2008 1187 8.43 3417 11848 24.27 84.16
2009 1178 8.37 4595 10661 32.64 75.73
2010 1100 7.81 5695 9483 40.45 67.36
2011 1121 7.96 6816 8383 48.41 59.55
2012 1142 8.11 7958 7262 56.52 51.59
2013 1169 8.30 9127 6120 64.82 43.48
2014 1203 8.55 10330 4951 73.37 35.18
2015 1270 9.02 11600 3748 82.39 26.63
2016 1250 8.88 12850 2478 91.27 17.61
2017 1228 8.73 14078 1228 100.00 8.73
Total 14078 100.00 NA NA NA NA

6.2 Gráficas de distribución

# Barplot de frecuencias observadas
barplot(tabla_06_17$`Frecuencia Absoluta (ni)`,
        names.arg = tabla_06_17$Año,
        main = "Gráfico Nº8: Distribución de Frecuencia
        por Años (2006–2017)",
        xlab = "Año", ylab = "Cantidad",
        col = "skyblue",
        las = 2,
        cex.names = 0.8,
        ylim = c(0, max(tabla_06_17$`Frecuencia Absoluta (ni)`) + 100))

6.3 Modelo Uniforme:

k <- nrow(tabla_06_17)  # número de años
Fo <- tabla_06_17$`Frecuencia Relativa (%)`  # observadas
Fe <- rep(sum(Fo)/k, k)  # esperadas uniformes
# Tabla comparativa
tabla_uniforme <- data.frame(
  Año = tabla_06_17$Año,
  Observado = Fo,
  Esperado = Fe
)
tabla_uniforme
##     Año Observado Esperado
## 1  2006      7.84 8.333333
## 2  2007      8.00 8.333333
## 3  2008      8.43 8.333333
## 4  2009      8.37 8.333333
## 5  2010      7.81 8.333333
## 6  2011      7.96 8.333333
## 7  2012      8.11 8.333333
## 8  2013      8.30 8.333333
## 9  2014      8.55 8.333333
## 10 2015      9.02 8.333333
## 11 2016      8.88 8.333333
## 12 2017      8.73 8.333333
# Gráfico comparativo
barplot(rbind(Fo, Fe),
        beside = TRUE,
        names.arg = tabla_06_17$Año,
        col = c("skyblue", "darkorange"),
        legend.text = c("Real", "Modelo"),
        main = "Gráfico Nº9: Modelo de Probabilidad
        Uniform de los años (2006–2017)",
        xlab = "Año", ylab = "Cantidad-Probabilidad",
        las = 2,
        cex.names = 0.8)

6.4 Correlación

plot(Fo, Fe,
     main = "Gráfico Nº10: Correlación de Frecuencias
     en el Modelo Uniform de los años (2006–2017)",
     xlab = "Observada (hi)",
     ylab = "Esperada (P)",
     pch = 19, col = "darkblue")
abline(lm(Fe ~ Fo), col = "red", lwd = 2)

Se observa que los puntos están dispersos horizontalmente alrededor de la línea esperada, lo cual es característico de un modelo uniforme, donde se espera una distribución equilibrada.

6.5 Test Chi-cuadrado

x2_uniforme <- sum((Fo - Fe)^2 / Fe)
vc_uniforme <- qchisq(0.95, df = k - 1)

cat("Estadístico Chi-cuadrado (Uniforme):", x2_uniforme, "\n")
## Estadístico Chi-cuadrado (Uniforme): 0.216488
cat("Valor crítico Chi-cuadrado (95%):", vc_uniforme, "\n")
## Valor crítico Chi-cuadrado (95%): 19.67514
if (x2_uniforme < vc_uniforme) {
  cat("No se rechaza (buen ajuste al modelo uniforme)\n")
} else {
  cat("Se rechaza (mal ajuste al modelo uniforme)\n")
}
## No se rechaza (buen ajuste al modelo uniforme)

7 Conclusión

La variable “Año” fue analizada en tres periodos: 1984–1994, 1995–2005 y 2006–2017. En todos los casos, la distribución de frecuencias se ajusta bien a un modelo uniforme discreto, según el test de Chi-cuadrado. Esto indica que los registros de vehículos están distribuidos de forma equilibrada a lo largo de los años, sin concentraciones atípicas.