Variables Aleatorias Continuas

Cargar los datos

datos <- read.csv("D:/Data/database.csv", header = TRUE, sep = ";", dec = ".")

Inferencia: Modelo de probabilidad log-normal para MPG en ciudad

mpg_c <- as.numeric(as.character(datos$Unadjusted.City.MPG..FT1.))
## Warning: NAs introducidos por coerción
mpg_c <- na.omit(mpg_c)
mpg_c <- mpg_c[mpg_c > 0]

histograma <- hist(mpg_c, freq = FALSE,
                   main = "Gráfica 1. Modelo de probabilidad log-normal para MPG en ciudad",
                   xlab = "MPG (Ciudad)", ylab = "Densidad de probabilidad",
                   col = "steelblue")

log_mpg <- log(mpg_c)
ulog <- mean(log_mpg)
sigmalog <- sd(log_mpg)

x <- seq(min(mpg_c), max(mpg_c), 0.01)
curve(dlnorm(x, ulog, sigmalog), from = min(mpg_c), to = max(mpg_c), add = TRUE, lwd = 3, col = "darkgreen")

Fo <- histograma$counts
h <- length(Fo)
P <- c()
for (i in 1:h) {
  P[i] <- plnorm(histograma$breaks[i+1], ulog, sigmalog) - plnorm(histograma$breaks[i], ulog, sigmalog)
}
Fe <- P * length(mpg_c)

Test de bondad de ajuste (MPG log-normal)

plot(Fo, Fe, main = "Gráfica 2: Correlación entre frecuencias observadas y esperadas",
     xlab = "Frecuencia Observada", ylab = "Frecuencia Esperada", col = "blue3")
abline(lm(Fe ~ Fo), col = "red", lwd = 2)

correlacion <- cor(Fo, Fe) * 100

n <- length(mpg_c)
Fo_rel <- (Fo / n) * 100
Fe_rel <- P * 100
x2 <- sum((Fe_rel - Fo_rel)^2 / Fe_rel)

alpha <- 0.05
gl <- h - 1
umbral <- qchisq(1 - alpha, gl)

Variable <- c("MPG en ciudad")
tabla_resumen <- data.frame(Variable, round(correlacion, 2), round(x2, 2), round(umbral, 2))
colnames(tabla_resumen) <- c("Variable", "Test Pearson (%)", "Chi Cuadrado", "Umbral de aceptación")
kable(tabla_resumen, format = "markdown", caption = "Tabla. Test de bondad de ajuste para modelo log-normal")
Tabla. Test de bondad de ajuste para modelo log-normal
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
MPG en ciudad 89.95 63.44 27.59

Cálculo de probabilidad (20 < X < 40)

probabilidad_intervalo <- plnorm(40, ulog, sigmalog) - plnorm(20, ulog, sigmalog)
probabilidad_intervalo * 100
## [1] 22.31567
x <- seq(0, 100, by = 0.01)
y <- dlnorm(x, ulog, sigmalog)
plot(x, y, type = "l", col = "darkgreen", lwd = 2,
     main = "Gráfica 3. Cálculo de probabilidades", xlab = "MPG", ylab = "Densidad")

x_fill <- seq(20, 40, by = 0.01)
y_fill <- dlnorm(x_fill, ulog, sigmalog)
polygon(c(x_fill, rev(x_fill)), c(y_fill, rep(0, length(y_fill))), col = rgb(1, 0, 0, 0.4))
legend("topright", legend = c("Modelo Log-normal", "Área entre 20 y 40 MPG"),
       col = c("darkgreen", "red"), lwd = 2, pch = c(NA, 15))

Intervalo de confianza para la media poblacional (MPG)

media_muestral <- mean(mpg_c)
sigma_muestral <- sd(mpg_c)
e <- sigma_muestral / sqrt(length(mpg_c))
li <- media_muestral - 2 * e
ls <- media_muestral + 2 * e

tabla_ic <- data.frame(round(li, 2), Variable, round(ls, 2), round(e, 2))
colnames(tabla_ic) <- c("Límite inferior", "Variable", "Límite superior", "Error estándar")
kable(tabla_ic, format = "markdown", caption = "Tabla. Intervalo de confianza para la media poblacional")
Tabla. Intervalo de confianza para la media poblacional
Límite inferior Variable Límite superior Error estándar
87.45 MPG en ciudad 89.67 0.55

Conclusión MPG

La variable de MPG en ciudad se explica con un modelo de probabilidad log-normal de media 88.56 y una desviación estándar de 104.42; donde la media aritmética poblacional se encuentra entre 87.45 y 89.67, lo que afirmamos con un 95% de confianza.

Inferencia: Modelo de probabilidad normal para Costo Anual de Combustible

c_anual <- as.numeric(as.character(datos$Annual.Fuel.Cost..FT1.))
c_anual <- na.omit(c_anual)
c_anual <- c_anual[c_anual > 0]

histograma_c <- hist(c_anual, freq = FALSE,
                     main = "Gráfica 4. Modelo de probabilidad normal para Costo Anual",
                     xlab = "Costo Anual", ylab = "Densidad de probabilidad",
                     col = "steelblue",
                     yaxt = "n")
axis(2, at = pretty(density(c_anual)$y), labels = format(pretty(density(c_anual)$y), scientific = FALSE))

mu <- mean(c_anual)
sigma <- sd(c_anual)

x_c <- seq(min(c_anual), max(c_anual), 1)
y_c <- dnorm(x_c, mu, sigma)
lines(x_c, y_c, col = "darkgreen", lwd = 3)

Fo_c <- histograma_c$counts
h_c <- length(Fo_c)
P_c <- c()
for (i in 1:h_c) {
  P_c[i] <- pnorm(histograma_c$breaks[i+1], mu, sigma) - pnorm(histograma_c$breaks[i], mu, sigma)
}
Fe_c <- P_c * length(c_anual)

Test de bondad de ajuste (Costo Anual)

plot(Fo_c, Fe_c, main = "Gráfica 5: Correlación entre frecuencias observadas y esperadas",
     xlab = "Frecuencia Observada", ylab = "Frecuencia Esperada", col = "blue3")
abline(lm(Fe_c ~ Fo_c), col = "red", lwd = 2)

correlacion_c <- cor(Fo_c, Fe_c) * 100

n_c <- length(c_anual)
x2_c <- sum((Fe_c - Fo_c)^2 / Fe_c)
umbral_c <- qchisq(1 - alpha, h_c - 1)

Variable <- c("Costo Anual")
tabla_resumen_c <- data.frame(Variable, round(correlacion_c, 2), round(x2_c, 2), round(umbral_c, 2))
colnames(tabla_resumen_c) <- c("Variable", "Test Pearson (%)", "Chi Cuadrado", "Umbral de aceptación")
kable(tabla_resumen_c, format = "markdown", caption = "Tabla. Test de bondad de ajuste para modelo normal")
Tabla. Test de bondad de ajuste para modelo normal
Variable Test Pearson (%) Chi Cuadrado Umbral de aceptación
Costo Anual 98.19 38203063488 19.68

Probabilidad entre 1500 y 2500 (Costo Anual)

probabilidad_c <- pnorm(2500, mu, sigma) - pnorm(1500, mu, sigma)
probabilidad_c * 100
## [1] 64.98101
x_c <- seq(min(c_anual), max(c_anual), 1)
y_c <- dnorm(x_c, mu, sigma)
plot(x_c, y_c, type = "l", col = "darkgreen", lwd = 2,
     main = "Gráfica 6. Cálculo de probabilidades", xlab = "Costo Anual", ylab = "Densidad")

x_fill_c <- seq(1500, 2500, by = 1)
y_fill_c <- dnorm(x_fill_c, mu, sigma)
polygon(c(x_fill_c, rev(x_fill_c)), c(y_fill_c, rep(0, length(y_fill_c))), col = rgb(1, 0, 0, 0.4))
legend("topright", legend = c("Modelo Normal", "Área entre 1500 y 2500"),
       col = c("darkgreen", "red"), lwd = 2, pch = c(NA, 15))

Intervalo de confianza para la media (Costo Anual)

e_c <- sigma / sqrt(n_c)
li_c <- mu - 2 * e_c
ls_c <- mu + 2 * e_c

tabla_ic_c <- data.frame(round(li_c, 2), Variable, round(ls_c, 2), round(e_c, 2))
colnames(tabla_ic_c) <- c("Límite inferior", "Variable", "Límite superior", "Error estándar")
kable(tabla_ic_c, format = "markdown", caption = "Tabla. Intervalo de confianza para la media poblacional (Costo Anual)")
Tabla. Intervalo de confianza para la media poblacional (Costo Anual)
Límite inferior Variable Límite superior Error estándar
1953.45 Costo Anual 1964.74 2.82

Conclusión Costo Anual

La variable de costo anual de combustible se explica con un modelo de probabilidad de distribución normal de media 1949.10 y una desviación estándar de 533.63; donde la media aritmética poblacional se encuentra entre 1953 y 1964, lo que afirmamos con un 95% de confianza.