Variable Cuantitativa Continua-CO2 emitido por el tubo de escape

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

2 Extraemos la variable

# Limpieza de datos
co2tubo <- datos$Tailpipe.CO2..FT1.
co2tubo <- as.numeric(co2tubo)
co2tubo <- co2tubo[!is.na(co2tubo) & co2tubo > 0]

Gráfica de la variable

hist(co2tubo)

3 Ajuste del modelo al histograma

3.1 Modelo Log Normal

log_co2 <- log(co2tubo)
ulog <- mean(log_co2)
ulog
## [1] 5.987002
sigmalog <- sd(log_co2)
sigmalog
## [1] 0.2693047
HistogramaLogNormal <- hist(co2tubo, freq = FALSE,
                            main = "Gráfica No.1: Histograma de 
                            Tailpipe CO2 (FT1) con Curva Log-Normal",
                            xlab = "Tailpipe CO2 (FT1)",
                            ylab = "Densidad",
                            col = "#CDC9C9")
x <- seq(min(co2tubo), max(co2tubo), 0.01)
lines(x, dlnorm(x, meanlog = ulog, sdlog = sigmalog), col = "red", lwd = 2)

Frecuencia simple observada

FO <- HistogramaLogNormal$counts
FO
##  [1]    4   12   20   36  118  505 1122 1160 1127  883  428  275  202   76   46
## [16]    9    4

Frecuencia simple esperada

liminf <- HistogramaLogNormal$breaks[-length(HistogramaLogNormal$breaks)]
liminf
##  [1]   0  50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800
limsup <- HistogramaLogNormal$breaks[-1]
limsup
##  [1]  50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850
Plog <- numeric(length(FO))
for (j in 1:length(FO)) {
  Plog[j] <- plnorm(limsup[j], meanlog = ulog, sdlog = sigmalog) -
    plnorm(liminf[j], meanlog = ulog, sdlog = sigmalog)
}
FElog <- Plog * length(co2tubo)

3.1.1 Test de chi-cuadrado

valores_validos_log <- FElog > 0
X2_log <- sum((FO[valores_validos_log] - FElog[valores_validos_log])^2 / FElog[valores_validos_log])
X2_log
## [1] 405626382680
df_log <- sum(valores_validos_log) - 1 - 2
Vc_log <- qchisq(0.90, df = df_log)
Vc_log
## [1] 21.06414
# ¿Se ajusta a distribución log-normal?
X2_log < Vc_log
## [1] FALSE

Como el valor del estadístico χ² es mucho mayor que el valor crítico, se rechaza la hipótesis de que los datos siguen una distribución log-normal.

3.2 Modelo Normal

u <- mean(co2tubo)
u
## [1] 411.8011
sigma <- sd(co2tubo)
sigma
## [1] 103.5849
HistogramaNormal <- hist(co2tubo, freq = FALSE,
                         main = "Gráfica No.2: Histograma de 
                         Tailpipe CO2 (FT1) con Curva Normal",
                         xlab = "Tailpipe CO2 (FT1)",
                         ylab = "Densidad",
                         col = "#CDC9C9")
x <- seq(min(co2tubo), max(co2tubo), 0.01)
lines(x, dnorm(x, mean = u, sd = sigma), col = "red", lwd = 2)

Frecuencia simple observada

FO <- HistogramaNormal$counts
FO
##  [1]    4   12   20   36  118  505 1122 1160 1127  883  428  275  202   76   46
## [16]    9    4

Frecuencia simple esperada

liminf <- HistogramaNormal$breaks[-length(HistogramaNormal$breaks)]
limsup <- HistogramaNormal$breaks[-1]
P <- numeric(length(FO))
for (i in 1:length(FO)) {
  P[i] <- pnorm(limsup[i], mean = u, sd = sigma) - pnorm(liminf[i], mean = u, sd = sigma)
}
FE <- P * length(co2tubo)

3.2.1 Test de chi-cuadrado

valores_validos <- FE > 0
X2_normal <- sum((FO[valores_validos] - FE[valores_validos])^2 / FE[valores_validos])
X2_normal
## [1] 476.0377
df_normal <- sum(valores_validos) - 1 - 2
Vc_normal <- qchisq(0.90, df = df_normal)
Vc_normal
## [1] 21.06414
# ¿Se ajusta a distribución normal?
X2_normal < Vc_normal
## [1] FALSE

Aunque este valor también supera el valor crítico, lo hace en menor magnitud que el ajuste log-normal. Por tanto, aunque ninguno de los modelos ajusta perfectamente, el modelo normal es el que mejor representa los datos de entre los evaluados.

4 Cálculo de Probabilidades

# Definir el intervalo deseado
lim_inf <- 200
lim_sup <- 400
# Calcular la probabilidad de que una observación esté entre 200 y 400
probabilidad_normal <- pnorm(lim_sup, mean = u, sd = sigma) - 
  pnorm(lim_inf, mean = u, sd = sigma)
probabilidad_normal * 100  # Resultado como porcentaje
## [1] 43.42063
# Graficar la curva normal y sombrear el área correspondiente
x_vals <- seq(min(co2tubo), max(co2tubo), length.out = 1000)
plot(x_vals, dnorm(x_vals, mean = u, sd = sigma),
     type = "l", lwd = 2, col = "skyblue3",
     main = "Gráfica. Cálculo de Probabilidades (Normal)",
     xlab = "Tailpipe CO2 (FT1)", ylab = "Densidad de probabilidad")
# Sombrear el área entre los límites definidos
x_sombreado <- seq(lim_inf, lim_sup, length.out = 1000)
y_sombreado <- dnorm(x_sombreado, mean = u, sd = sigma)
polygon(c(x_sombreado, rev(x_sombreado)), 
        c(y_sombreado, rep(0, length(y_sombreado))), 
        col = rgb(1, 0, 0, 0.5))
# Añadir leyenda
legend("topright", legend = c("Modelo Normal", "Área de Probabilidad"), 
       col = c("skyblue3", "red"), lwd = 2, pch = c(NA, 15))

5 Intervalo de Confianza

# Tamaño de la muestra
n <- length(co2tubo)
# Error estándar de la media
error <- sigma / sqrt(n)
# Intervalo de confianza al 95%: media ± 2 * error estándar
li <- u - 2 * error
ls <- u + 2 * error
# Mostrar los valores
u      # media muestral
## [1] 411.8011
sigma  # desviación estándar muestral
## [1] 103.5849
error  # margen de error
## [1] 1.334277
li     # límite inferior del intervalo
## [1] 409.1325
ls     # límite superior del intervalo
## [1] 414.4696

6 Conclusión

La variable Tailpipe CO2 (FT1) es el que ajusta al modelo normal, con un parámetro estimado de 411.8011, y desviación estándar de 103.5849. La probabilidad de que una observación esté entre 200 y 400 unidades es de: 43.42%. Además, mediante el teorema del límite central, sabemos que la media poblacional se encuentra en el intervalo entre 409.13 y 414.46 (sin depurar y depurada) con un 95% de confianza.