Grupo conformado por Andrés Sánchez, Juan Felipe Lopez, Matheo Sanchez
La regresión lineal es una herramienta estadística fundamental utilizada para modelar la relación entre una variable dependiente y una o más variables independientes. Su objetivo principal es identificar y cuantificar la influencia de las variables explicativas sobre la variable de respuesta, permitiendo hacer predicciones y evaluar tendencias en los datos.
El modelo de regresión lineal más sencillo es el de regresión lineal simple, que se expresa mediante la ecuación:
Y=β0+β1X+εY = \beta_0 + \beta_1 X + \varepsilon
donde YY es la variable dependiente, XX es la variable independiente, β0\beta_0 es el intercepto, β1\beta_1 es el coeficiente de regresión que mide el impacto de XX sobre YY, y ε\varepsilon es el término de error que captura la variabilidad no explicada por el modelo.
Cuando se incorporan múltiples variables independientes, el modelo se convierte en una regresión lineal múltiple, que se expresa como:
Y=β0+β1X1+β2X2+⋯+βnXn+εY = \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \dots + \beta_n X_n + \varepsilon
en donde cada XiX_i representa una variable independiente y su correspondiente coeficiente βi\beta_i indica el efecto de esa variable sobre la variable dependiente YY.
Para estimar los coeficientes del modelo, se emplea el método de mínimos cuadrados ordinarios (MCO), que busca minimizar la suma de los cuadrados de las diferencias entre los valores observados y los valores predichos por el modelo. Esta minimización permite obtener la mejor recta de ajuste que describe la relación entre las variables de manera eficiente.
Uno de los aspectos clave en la regresión lineal es la validación de sus supuestos. Entre ellos se encuentran la linealidad entre las variables, la independencia de los errores, la homocedasticidad (varianza constante de los errores) y la normalidad de los errores. Si estos supuestos no se cumplen, la interpretación de los coeficientes y la confiabilidad de las predicciones pueden verse afectadas.
El análisis de regresión lineal es ampliamente utilizado en diversas disciplinas, como la economía, la ingeniería, la biología y las ciencias sociales. En el ámbito académico y profesional, se aplica para entender relaciones causa-efecto, identificar factores determinantes y optimizar procesos con base en datos históricos y tendencias observadas.
En este contexto, el presente trabajo tiene como finalidad evaluar nuestros conocimientos en regresión lineal y ponerlos a prueba mediante la aplicación de sus principios a un conjunto de datos específico. A través del análisis de los resultados obtenidos, podremos reforzar nuestra comprensión de los conceptos estadísticos y mejorar nuestra capacidad para interpretar modelos y tomar decisiones basadas en evidencia.
parcial1 <- readxl::read_excel("parcial1.xlsx")
require(ggplot2)
library(gridExtra)
# Gráfico de dispersión de Utilidad vs Descuento concedido (X2)
g1 = ggplot(parcial1, aes(x=descuento, y=utilidad)) +geom_point(color="blue") + # Puntos en azul
theme_bw() +
geom_smooth(method = "lm", se=FALSE, color="red") + # Línea de regresión en rojo
labs(title = paste("Correlación =", round(cor(parcial1$descuento, parcial1$utilidad), 4)),
x="Descuento concedido (%)",
y="Utilidad (millones de $)")
# Gráfico de dispersión de Utilidad vs Participación en el mercado (X1)
g2 = ggplot(parcial1, aes(x=Mercado, y=utilidad)) +
geom_point(color="blue") +
theme_bw() +
geom_smooth(method = "lm", se=FALSE, color="red") +
labs(title = paste("Correlación =", round(cor(parcial1$Mercado, parcial1$utilidad), 4)),
x="Participación en el mercado (%)",
y="Utilidad (millones de $)")
# Mostrar gráficos en la misma fila
grid.arrange(g1, g2, nrow = 1)
El modelo de regresión lineal esperado es: Y=240.133+4.739X1-0.376X2. Donde Y= utilidad, X1 = participación en el mercado (%) y x2 = descuento concedido (%). Entonces, el modelo de regresión indica que la participación en el mercado (X1) tiene un impacto positivo en la utilidad mientras que el descuento concedido no tiene efecto relevante. Es decir si se aumenta un 1% en la participación en el mercado, aumenta la utilidad en 4.739 millones de dolares. Por otro lado, si se sube el 1% en el descuento concedido reduce la utilidad en 0.376 millones de dolares
# Ajustar el modelo de regresión lineal múltiple
modelo <- lm(utilidad ~ Mercado + descuento, data = parcial1)
# Mostrar resumen del modelo
summary(modelo)
##
## Call:
## lm(formula = utilidad ~ Mercado + descuento, data = parcial1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -30.567 -13.460 -4.608 12.914 40.956
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 240.133 49.694 4.832 0.00189 **
## Mercado 4.739 1.335 3.551 0.00934 **
## descuento -0.376 3.045 -0.123 0.90519
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 25.78 on 7 degrees of freedom
## Multiple R-squared: 0.6537, Adjusted R-squared: 0.5548
## F-statistic: 6.608 on 2 and 7 DF, p-value: 0.02443
Se tiene en cuenta el analisis realizado anteriormente en el punto B. Además, cuando el mercado =0% y el descuento =0%, se espera una utilidad de 240.133 millones de dolares
Teniendo en cuenta el valor de prueba 0.05, podemos evaluar el resultado. El valor que nos da el modelo es 0.0244<0.05, por lo que confirmamos que el modelo . Es estadísiticamente significativo. Esto se debe a que rechazamos la hipótesis de que ninguna variable influye en Y (descuento y mercado). Como el valor es menor que 0.05, se concluye que al menos una de las variables tiene impacto en la utilidad. Esto quiere decir que hay menos del 2.44% de probabilidad de que los resutlados sean por casualidad.
# Ajustar el modelo de regresión
modelo <- lm(utilidad ~ Mercado + descuento, data = parcial1)
# Mostrar el resumen del modelo (aquí aparece el p-valor de la prueba F)
summary(modelo)
##
## Call:
## lm(formula = utilidad ~ Mercado + descuento, data = parcial1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -30.567 -13.460 -4.608 12.914 40.956
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 240.133 49.694 4.832 0.00189 **
## Mercado 4.739 1.335 3.551 0.00934 **
## descuento -0.376 3.045 -0.123 0.90519
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 25.78 on 7 degrees of freedom
## Multiple R-squared: 0.6537, Adjusted R-squared: 0.5548
## F-statistic: 6.608 on 2 and 7 DF, p-value: 0.02443
# Extraer el p-valor de la prueba F
p_valor_f <- summary(modelo)$fstatistic
p_valor <- pf(p_valor_f[1], p_valor_f[2], p_valor_f[3], lower.tail = FALSE)
cat("P-valor de la prueba F:", p_valor, "\n")
## P-valor de la prueba F: 0.02442749
# Evaluación de la significancia global del modelo
if (p_valor < 0.05) {
cat("El modelo es estadísticamente significativo (rechazamos H0).")
} else {
cat("El modelo NO es estadísticamente significativo (no se rechaza H0).")
}
## El modelo es estadísticamente significativo (rechazamos H0).
Realizando la prueba de a=0.05 (5%)
Mercado: 0.00933, es signifivatica porque es menor que 0.05
Descuento: 0.90519, no es significativa porque es mucho mayor que 0.05, por lo que se podría eliminar del modelo. Esto se debe a que es 90.5% probable que sea por azar su efecto
# Ajustar el modelo de regresión
modelo <- lm(utilidad ~ Mercado + descuento, data = parcial1)
# Obtener el resumen del modelo (incluye los p-valores de cada variable)
summary(modelo)
##
## Call:
## lm(formula = utilidad ~ Mercado + descuento, data = parcial1)
##
## Residuals:
## Min 1Q Median 3Q Max
## -30.567 -13.460 -4.608 12.914 40.956
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 240.133 49.694 4.832 0.00189 **
## Mercado 4.739 1.335 3.551 0.00934 **
## descuento -0.376 3.045 -0.123 0.90519
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 25.78 on 7 degrees of freedom
## Multiple R-squared: 0.6537, Adjusted R-squared: 0.5548
## F-statistic: 6.608 on 2 and 7 DF, p-value: 0.02443
# Extraer los p-valores de los coeficientes del modelo
p_valores <- summary(modelo)$coefficients[,4]
cat("P-valor de Mercado:", p_valores["Mercado"], "\n")
## P-valor de Mercado: 0.009336619
cat("P-valor de Descuento:", p_valores["descuento"], "\n")
## P-valor de Descuento: 0.9051922
# Evaluar la significancia de cada variable
if (p_valores["Mercado"] < 0.05) {
cat("La variable 'Mercado' es significativa y debe mantenerse en el modelo.\n")
} else {
cat("La variable 'Mercado' NO es significativa y podría eliminarse.\n")
}
## La variable 'Mercado' es significativa y debe mantenerse en el modelo.
if (p_valores["descuento"] < 0.05) {
cat("La variable 'descuento' es significativa y debe mantenerse en el modelo.\n")
} else {
cat("La variable 'descuento' NO es significativa y podría eliminarse.\n")
}
## La variable 'descuento' NO es significativa y podría eliminarse.
El modelo tiene una buena capacidad de predicción de la utilidad, aunque no perfecta. El 80.85% de la variabilidad de la utilidad. Se puede explicar con las variables mercado y descuento (teniendo en cuenta que después se debe eliminar el descuento por lo que se explicó en el punto E)
# Ajustar el modelo de regresión múltiple
modelo <- lm(utilidad ~ Mercado + descuento, data = parcial1)
# Extraer R^2
r_cuadrado <- summary(modelo)$r.squared
# Calcular el coeficiente de correlación múltiple (R)
r_multiple <- sqrt(r_cuadrado)
# Mostrar los resultados
cat("R^2 (Coeficiente de determinación):", r_cuadrado, "\n")
## R^2 (Coeficiente de determinación): 0.6537467
cat("Coeficiente de correlación múltiple (R):", r_multiple, "\n")
## Coeficiente de correlación múltiple (R): 0.808546
# Interpretación
if (r_multiple > 0.8) {
cat("El modelo tiene una fuerte relación con la utilidad.\n")
} else if (r_multiple > 0.5) {
cat("El modelo tiene una relación moderada con la utilidad.\n")
} else {
cat("El modelo tiene una relación débil con la utilidad.\n")
}
## El modelo tiene una fuerte relación con la utilidad.
R^2 = 0.6537. Esto significa que el 65.37% de la variabilidad de la utilidad es explicada por las variables del modelo. Concluimos que el modelo tiene una capacidad moderada de predicción.
# Ajustar el modelo de regresión
modelo <- lm(utilidad ~ Mercado + descuento, data = parcial1)
# Obtener el coeficiente de determinación R^2
r_cuadrado <- summary(modelo)$r.squared
# Mostrar el resultado
cat("Coeficiente de determinación (R^2):", r_cuadrado, "\n")
## Coeficiente de determinación (R^2): 0.6537467
# Interpretación del R^2
if (r_cuadrado > 0.8) {
cat("El modelo explica muy bien la variabilidad de la utilidad.\n")
} else if (r_cuadrado > 0.5) {
cat("El modelo explica moderadamente la variabilidad de la utilidad.\n")
} else {
cat("El modelo explica pobremente la variabilidad de la utilidad.\n")
}
## El modelo explica moderadamente la variabilidad de la utilidad.
Al eliminar la variable descuento, el modelo final es: Y=234.588+4.698*Mercado. Al comparar este modelo con el anterior R^2 casi no cambió (de 0.6537 a 0.653) Lo que confirma que el descuento no aporta valor. Se concluye que el modelo final es útil, simple y eficiente, ya que solo usa una variable significativa.
Si una empresa quiere aumentar su utilidad, debe enfocarse en aumenta su participacion en el mercado, ya que está directamente relacionada con sus ganancias.
Para este problema el modelo que se utilizará es el siguiente:
library(readxl)
# Importar datos desde el archivo Excel (ya que mencionaste que usaste "import dataset", este paso puede omitirse)
datos <- read_excel("paricalpt2.xlsx")
# Ajustar el modelo de regresión lineal múltiple
modelo <- lm(Y ~ X_1 + X_2 + X_3, data = datos)
# Resumen del modelo
summary(modelo)
##
## Call:
## lm(formula = Y ~ X_1 + X_2 + X_3, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.3011 -0.9608 -0.2925 1.0013 3.1938
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 23.03885 4.35332 5.292 7.29e-05 ***
## X_1 -1.21388 0.23970 -5.064 0.000115 ***
## X_2 0.04284 0.04676 0.916 0.373139
## X_3 0.18298 0.10113 1.809 0.089216 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.491 on 16 degrees of freedom
## Multiple R-squared: 0.6995, Adjusted R-squared: 0.6432
## F-statistic: 12.42 on 3 and 16 DF, p-value: 0.0001899
Se entiende que si una variable evaluada en a=0.05 esta probando que tenga un 5% de probabilidad de que afecte el resultado cuando es un p<5% significa que no es tan probable que sea por azar, es decir, se confía en el impacto que tiene dicha variable en Y
El nuevo modelo es : Y=26.1204-1.0379X_1. Se interpreta que cuando X_1 = 0, el tiempo estimado de actividad deportiva es aproximadamente 26.12. Esto indica que el aumento en una unidad de X_1 reduce el tiempo de actividad deportiva en 1.31 horas
library(readxl)
datos <- read_excel("C:/Users/andre/OneDrive/Escritorio/Estadistica/paricalpt2.xlsx")
# Ajustar el modelo sin variables no significativas (solo X_1)
modelo_refinado <- lm(Y ~ X_1, data = datos)
# Resumen del nuevo modelo
summary(modelo_refinado)
##
## Call:
## lm(formula = Y ~ X_1, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.5787 -0.6846 -0.5405 1.4213 3.4977
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 26.1204 4.1316 6.322 5.87e-06 ***
## X_1 -1.3079 0.2393 -5.465 3.44e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.573 on 18 degrees of freedom
## Multiple R-squared: 0.6239, Adjusted R-squared: 0.603
## F-statistic: 29.86 on 1 and 18 DF, p-value: 3.436e-05
Con la primera prueba vemos que la linealidad se cumple por lo que es confiable el nuevo modelo #DE la segunda pruba de homocedasticidad se ve que los residuos no muestran un patrón claro, pero hay cierta dispericón uniforme. Lo que muestra que hay ciertas dudas con esta prueba . Puede que los residuos no sean perfectamente normales. Sin embargo, con la prueba que realizamos en la C, el modelo matematico nuevo tiene una certeza del (R^2) 62.39%. Demostrando que el modelo explica dicho porcentaje de la vairbalidad de Y a partir de X1
Prueba 1: Linealidad: Este supuesto indica la relación entre Y y X_1 debe ser líneal
plot(datos$X_1, datos$Y, main = "Relacion entre X_1 y Y",
xlab = "X_1", ylab = "Y", pch = 19)
abline(modelo_refinado, col = "red", lwd = 2)
Prueba 2: Homocedasticidad: Este supuesto es para comprobar que los residuos tienen varianza constante
Prueba 3: Normalidad de residuos: Este supuesto verifica que si los residuos siguen una distribucion aproximadamente normal, el supuesto se cumple.
hist(residuals(modelo_refinado), main = "Histograma de los residuos",
xlab = "Residuos", col = "lightblue", border = "black")
qqnorm(residuals(modelo_refinado))
qqline(residuals(modelo_refinado), col = "red", lwd = 2)
Para el interrogante: ¿Cuánto tiempo por semana invierte un estudiante de una universidad local en alguna práctica deportiva?. Se puede responder que solo se tiene que remplazar X_1 que es el numero de creditos matriculados
Para el interrogante de ¿El rendimiento académico afecta esta práctica? podemos decir que X_2 siendo la variable de promedio acumulado, no tiene mucha relevancia por la prueba de a=0.05. Teniendo en cuenta que el r^2 es de 62.39%, si se podría explicar cuantas horas semanales se le dedica al deporte. Además, es facil de interpretar ya que solo usa una variable (x_1). Sin embargo, no incluye todas la variables necesarias para determinar la cantidad de horas exactas por semana, como la motivación personal ,el acceso a instalaciones deportivas o carga laboral.
El tiempo semanal dedicado al deporte varía según X_1, y la tendencia muestra que a mayor X_1, menor es el tiempo invertido.
El rendimiento académico parece influir en la práctica deportiva, pero no se puede concluir que sea la única causa.
El modelo es útil, pero no es perfecto para predicciones exactas.
Punto a)
library(readxl)
Base_de_datos_Parcial_3 <- read_excel("C:/Users/andre/OneDrive/Escritorio/Estadistica/punto3.xlsx")
##
## Call:
## lm(formula = `PIB a precios corrientes (Miles de millones de pesos)` ~
## `Azúcar (Toneladas)` + `Cemento Gris (Toneladas)` + `Lingotes de acero (Toneladas)` +
## `Producción de carbón (Toneladas)` + `Vehículos ensamblados (Unidades)`,
## data = Base_de_datos_Parcial_3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -54350 -11581 -933 9944 70161
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3.643e+05 2.177e+05 1.674 0.13805
## `Azúcar (Toneladas)` -5.554e-01 7.209e-01 -0.770 0.46629
## `Cemento Gris (Toneladas)` -1.877e-01 3.675e-01 -0.511 0.62515
## `Lingotes de acero (Toneladas)` -1.780e+01 6.002e+00 -2.966 0.02092 *
## `Producción de carbón (Toneladas)` 2.616e+02 7.183e+01 3.642 0.00827 **
## `Vehículos ensamblados (Unidades)` 2.797e+01 1.148e+01 2.437 0.04494 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 43090 on 7 degrees of freedom
## Multiple R-squared: 0.9533, Adjusted R-squared: 0.92
## F-statistic: 28.6 on 5 and 7 DF, p-value: 0.0001611
Punto B
Representa el valor estimado del PIB cuando todas las variables explicativas son cero.
Aunque no tiene una interpretación económica relevante en este caso, indica el punto base del PIB.
Análisis de variables:
Azúcar:
Cemento gris:
Lingotes de acero:
Producción de carbón:
Vehículos ensamblados:
Punto c)
El coeficiente de correlación múltiple obtenido es R = 0.976391, lo que refleja una relación muy fuerte entre las variables predictoras (azúcar, cemento gris, lingotes de acero, producción de carbón y vehículos ensamblados) y el PIB a precios corrientes.
Dado que R está muy próximo a 1, se evidencia una fuerte relación lineal entre el PIB y las variables explicativas.
modelo <- lm(`PIB a precios corrientes (Miles de millones de pesos)` ~
`Azúcar (Toneladas)` + `Cemento Gris (Toneladas)` +
`Lingotes de acero (Toneladas)` + `Producción de carbón (Toneladas)` +
`Vehículos ensamblados (Unidades)`,
data = Base_de_datos_Parcial_3)
R2 <- summary(modelo)$r.squared
R <- sqrt(R2)
cat("El coeficiente de correlación múltiple R es:", R, "\n")
## El coeficiente de correlación múltiple R es: 0.976391Punto D)
El 95.33% de la variabilidad del PIB es explicada por las variables independientes incluidas en el modelo.
El 4.67% restante se debe a factores no considerados en el modelo, como otras variables económicas o influencias externas.
modelo <- lm(`PIB a precios corrientes (Miles de millones de pesos)` ~
`Azúcar (Toneladas)` + `Cemento Gris (Toneladas)` +
`Lingotes de acero (Toneladas)` + `Producción de carbón (Toneladas)` +
`Vehículos ensamblados (Unidades)`,
data = Base_de_datos_Parcial_3)
summary(modelo)$r.squared
## [1] 0.9533394
Punto e)
Interpretación:
Si el p-valor es menor a 0.10, la variable es significativa y contribuye a explicar el PIB
Si el p-valor es mayor o igual a 0.10, la variable no es significativa y debería considerarse su eliminación
Análisis de variables:
Azúcar:
Cemento gris:
Lingotes de acero
Producción de carbón:
Vehículos ensamblados:
Cada vehículo ensamblado adicional incrementa el PIB en 27.97 unidades. Dado su impacto positivo y su significancia estadística, esta variable debe mantenerse en el modelo.
Punto F)
Lingotes de acero:
Producción de carbón:
Vehículos ensamblados:
La producción de carbón es la variable con mayor impacto positivo en el PIB.
La producción de lingotes de acero tiene un efecto negativo en el PIB, posiblemente debido a factores externos como costos de producción o dinámicas de exportación.
Todas las variables del modelo final son estadísticamente significativas, por lo que no es necesario excluir ninguna.
modelo_nuevo <- lm(`PIB a precios corrientes (Miles de millones de pesos)` ~
`Lingotes de acero (Toneladas)` + `Producción de carbón (Toneladas)` +
`Vehículos ensamblados (Unidades)`,
data = Base_de_datos_Parcial_3)
summary(modelo_nuevo)
##
## Call:
## lm(formula = `PIB a precios corrientes (Miles de millones de pesos)` ~
## `Lingotes de acero (Toneladas)` + `Producción de carbón (Toneladas)` +
## `Vehículos ensamblados (Unidades)`, data = Base_de_datos_Parcial_3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -54020 -13956 -677 18116 69856
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 220570.405 131029.645 1.683 0.126594
## `Lingotes de acero (Toneladas)` -19.141 5.270 -3.632 0.005468 **
## `Producción de carbón (Toneladas)` 239.330 42.116 5.683 0.000301 ***
## `Vehículos ensamblados (Unidades)` 25.723 9.051 2.842 0.019339 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 40140 on 9 degrees of freedom
## Multiple R-squared: 0.9479, Adjusted R-squared: 0.9306
## F-statistic: 54.63 on 3 and 9 DF, p-value: 4.242e-06
library(readxl)
kia_picanto_cali <- readxl::read_excel("C:/Users/andre/OneDrive/Escritorio/Estadistica/kia_picanto_cali.xlsx")
Análisis:
Relación negativa: La línea de regresión (en rojo) muestra una correlación inversa entre los kilómetros recorridos y el precio del vehículo. Es decir, a mayor kilometraje, el valor del automóvil tiende a reducirse.
Distribución de los datos: Se aprecia una alta concentración de vehículos con pocos kilómetros y precios elevados. Sin embargo, también existen algunos casos atípicos con valores significativamente más altos o bajos en relación con su kilometraje.
library(ggplot2)
ggplot(kia_picanto_cali, aes(x = modelo, y = precio)) +
geom_point(color = "blue", alpha = 0.6) +
geom_smooth(method = "lm", color = "red", se = TRUE) +
scale_x_continuous(breaks = seq(min(kia_picanto_cali$modelo, na.rm = TRUE), max(kia_picanto_cali$modelo, na.rm = TRUE), by = 1)) +
scale_y_continuous(labels = scales::comma) +
labs(title = "Relacion entre Modelo y Precio",
x = "Modelo",
y = "Precio") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))
Análisis:
ggplot(kia_picanto_cali, aes(x = antigüedad, y = precio)) +
geom_point(color = "blue", alpha = 0.6) +
geom_smooth(method = "lm", color = "red") +
scale_x_continuous(breaks = seq(0, 20, by = 2), # Asegurar que llegue a 20
limits = c(0, 20),
labels = scales::comma) +
scale_y_continuous(labels = scales::comma) +
labs(title = "Relacion entre Antiguedad y Precio",
x = "Antiguedad",
y = "Precio") +
theme_minimal()
Análisis:
library(ggplot2)
modelo <- lm(precio ~ kilo + modelo + antigüedad, data = kia_picanto_cali)
summary(modelo)
##
## Call:
## lm(formula = precio ~ kilo + modelo + antigüedad, data = kia_picanto_cali)
##
## Residuals:
## Min 1Q Median 3Q Max
## -12191622 -3151596 -613316 2597327 36968158
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -4.701e+09 3.610e+08 -13.024 <2e-16 ***
## kilo 1.816e+01 1.166e+01 1.557 0.122
## modelo 2.350e+06 1.785e+05 13.165 <2e-16 ***
## antigüedad NA NA NA NA
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 5686000 on 117 degrees of freedom
## Multiple R-squared: 0.7253, Adjusted R-squared: 0.7206
## F-statistic: 154.4 on 2 and 117 DF, p-value: < 2.2e-16
Análisis:
Kilometraje: La estimación indica que, en promedio, cada kilómetro adicional se asocia con un incremento de 18,160 pesos en el precio del vehículo. No obstante, dado que el valor p es 0.122, esta relación no es estadísticamente significativa, lo que implica que no hay suficiente evidencia para afirmar que el kilometraje influye en el precio.
Año del modelo: Se observa que por cada año más reciente, el precio del vehículo aumenta en aproximadamente 2.35 millones de pesos. Como el valor p es menor a 0.05, esta variable tiene un impacto claro y significativo en el precio.
library(caret)
control <- trainControl(method = "cv", number = 10)
modelo_cv <- train(precio ~ kilo + modelo,
data = kia_picanto_cali,
method = "lm",
trControl = control)
print(modelo_cv)
## Linear Regression
##
## 120 samples
## 2 predictor
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
## Summary of sample sizes: 108, 109, 108, 107, 108, 108, ...
## Resampling results:
##
## RMSE Rsquared MAE
## 5311568 0.726897 3977396
##
## Tuning parameter 'intercept' was held constant at a value of TRUE
Análisis del modelo:
Coeficiente de determinación (R² =
0.7260808):
Este valor indica que el modelo explica el 74.4% de la variabilidad en
el precio del vehículo. Un R² cercano a 1 representa un mejor ajuste,
por lo que este resultado sugiere un buen desempeño del modelo, aunque
aún hay un 25.6% de variabilidad que no está explicada.
Error cuadrático medio (RMSE = 5,517,913):
Representa el error promedio en la predicción del precio. En este caso,
el modelo tiene una desviación de aproximadamente 5.34 millones de
pesos. Por ejemplo, si el precio real de un Kia Picanto es 40 millones
de pesos, el modelo podría predecir un valor entre 34.66 y 45.34
millones.
Error absoluto medio (MAE = 4,089,897):
Indica que, en promedio, la diferencia absoluta entre los valores reales
y los predichos es de 3.96 millones de pesos. Esto significa que, para
un auto con un precio de 25 millones, el modelo podría estimar valores
entre 21.04 y 28.96 millones.
En general, el modelo tiene un buen ajuste, pero aún presenta un margen de error considerable en la predicción de precios.
library(shiny)
ui <- fluidPage(
titlePanel("Estimador de Precio de Kia Picanto"),
sidebarLayout(
sidebarPanel(
numericInput("kilometros", "Kilómetros recorridos:", value = 50000),
numericInput("modelo", "Año del modelo:", value = 2020),
actionButton("calcular", "Calcular Precio")
),
mainPanel(
textOutput("precio_estimado")
)
)
)
server <- function(input, output) {
modelo <- lm(precio ~ kilo + modelo, data = kia_picanto_cali)
precio <- eventReactive(input$calcular, {
nuevo_auto <- data.frame(Kilometros = input$kilo, Modelo = input$modelo)
predict(modelo, newdata = nuevo_auto)
})
output$precio_estimado <- renderText({
paste("El precio estimado del auto es:", round(precio(), 2), "COP")
})
}
shinyApp(ui = ui, server = server)
La estimación precisa del precio de un vehículo usado es crucial tanto para compradores como para vendedores. Factores como el kilometraje y el año del modelo impactan directamente en la depreciación del automóvil, por lo que contar con una herramienta confiable para calcular su valor puede ser de gran utilidad para concesionarios, aseguradoras, plataformas de compra y venta, así como para usuarios individuales.
Para responder a esta necesidad, se ha desarrollado un modelo de regresión lineal basado en datos reales de vehículos Kia Picanto, el cual permite predecir su precio en función del kilometraje recorrido y el año de fabricación. Para hacer esta funcionalidad accesible, se ha implementado una aplicación web interactiva utilizando Shiny en R, donde los usuarios pueden ingresar las características de su auto y obtener una estimación del precio en tiempo real.
Este modelo tiene aplicaciones prácticas en distintos sectores de la industria automotriz. Los concesionarios pueden utilizarlo para fijar precios de venta, las aseguradoras para calcular el valor asegurado y las entidades financieras para evaluar montos de financiamiento. Además, su integración en plataformas digitales podría generar oportunidades de monetización a través de consultas pagas, suscripciones o la venta de datos analíticos sobre tendencias de depreciación.
Gracias a su precisión y accesibilidad, esta herramienta contribuye a mejorar la transparencia y eficiencia en el mercado de autos usados, facilitando la toma de decisiones informadas para todos los actores involucrados.