Descripción del problema:
Una cadena de establecimientos comerciales desea analizar los factores relacionados con sus ventas mensuales, con el propósito de desarrollar un modelo estadístico que permita explicar su comportamiento y realizar predicciones. Para ello, la empresa dispone de información de 280 establecimientos, incluyendo sus ventas, inversiones publicitarias, precios, descuentos y otras características comerciales. El conjunto de datos contiene las siguientes variables.
| Variable | Descripción |
|---|---|
| id_tienda | Identificador de cada establecimiento. |
| ventas_miles | Ventas mensuales del establecimiento, expresadas en miles de dólares. |
| publicidad_digital_miles | Inversión mensual en publicidad digital, en miles de dólares. |
| publicidad_tradicional_miles | Inversión mensual en publicidad tradicional, en miles de dólares. |
| precio_promedio | Precio promedio de los productos vendidos, en dólares. |
| descuento_pct | Porcentaje promedio de descuento aplicado a los productos. |
| competencia_indice | Índice de competencia comercial, donde valores mayores representan mayor competencia. |
| visitas_web_miles | Cantidad mensual de visitas al sitio web, expresada en miles. |
| area_tienda_m2 | Superficie del establecimiento, en metros cuadrados. |
| publicidad_radio_miles | Inversión mensual en publicidad radial, en miles de dólares. |
library(readr)
datos<- read_csv("Grupo1.csv")
## Rows: 280 Columns: 10
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (10): id_tienda, ventas_miles, publicidad_digital_miles, publicidad_trad...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
View(datos)
1. Elabore una tabla que incluya la media, desviación estándar, mínimo y máximo para la variable ventas_miles y los ocho predictores. Identifique la variable predictora con mayor coeficiente de variación e interprete.
media <- apply(datos[,-1],2,mean)
mediana <- apply(datos[,-1],2,median)
des <- apply(datos[,-1],2,sd)
min <- apply(datos[,-1],2,min)
max <- apply(datos[,-1],2,max)
cv <- apply(datos[, -1], 2, function(x) sd(x, na.rm = TRUE) / mean(x, na.rm = TRUE))
esta <- data.frame(
Media = media,
Medianas = mediana,
Desv_est = des,
Cv = cv,
Min = min,
Max = max
)
esta
## Media Medianas Desv_est Cv Min
## ventas_miles 144.212857 142.955 27.059019 0.1876325 88.57
## publicidad_digital_miles 23.603357 23.195 8.673722 0.3674783 8.05
## publicidad_tradicional_miles 20.232679 20.310 6.246025 0.3087098 0.07
## precio_promedio 34.925571 34.865 7.312149 0.2093638 22.31
## descuento_pct 9.000929 8.715 5.335946 0.5928217 0.09
## competencia_indice 4.882571 4.720 2.472381 0.5063686 1.01
## visitas_web_miles 63.659500 63.710 22.554715 0.3543024 24.65
## area_tienda_m2 218.874143 220.900 62.938332 0.2875549 110.78
## publicidad_radio_miles 10.313964 10.485 5.239089 0.5079607 1.06
## Max
## ventas_miles 221.59
## publicidad_digital_miles 38.97
## publicidad_tradicional_miles 36.27
## precio_promedio 47.91
## descuento_pct 17.83
## competencia_indice 9.00
## visitas_web_miles 104.87
## area_tienda_m2 329.99
## publicidad_radio_miles 19.82
La variable descuento_pct, según los cálculos, presento
un 59.28% (0.5928217) de coeficiente de variación entre todas
las variables. Indica que los descuentos presentan mayor cambio
significativo, que cualquier otro factor estudiado, entre las
tiendas.
2. Elabore una matriz de correlaciones de las variables
cuantitativas. Indique las correlaciones más relevantes. Además, cree
dos gráficos de dispersión: ventas_miles frente a
publicidad_digital_miles y frente a
precio_promedio. Describa el patrón observado en cada
gráfico.
Matriz de correlaciones
library(corrplot)
## corrplot 0.95 loaded
R <- cor(datos[,-1], use = "pairwise.complete.obs")
corrplot(R,
method = "color", # colores en lugar de números
type = "lower", # solo triángulo inferior
addCoef.col = "black", # añadir valores en negro
tl.col = "black", # etiquetas de variables en negro
tl.srt = 25, # rotar etiquetas,
number.cex = 0.7,
tl.cex = 0.8,
diag = FALSE) # no mostrar diagonal
La matriz de correlaciones se identifica por su mayor aproximación al
valor de -1 y 1. En este caso, las ventas miles presenta
una relación positiva y fuerte con el factor de
publicidad_digital_miles de 0.75. Por otra parte,
la publicidad_tradicional_miles establece un relación
positiva y moderada de 0.59. Otros factores como el
precio_promedio y competencia_índice,
demuestran una relación negativa y débil.
Gráficos de dispersión
(1)
library(ggplot2)
ggplot(datos, aes(x = ventas_miles, y = publicidad_digital_miles)) +
geom_point(color = "steelblue", size = 2) +
labs(
title = "Relación entre Ventas Mensuales e Inversión Mensual en Publicidad Digital",
xlab = "Ventas Mensuales en Miles de $",
ylab = "Inversión Mensual en Publicidad Digital"
)
## Ignoring unknown labels:
## • xlab : "Ventas Mensuales en Miles de $"
## • ylab : "Inversión Mensual en Publicidad Digital"
(2)
library(ggplot2)
ggplot(datos, aes(x = ventas_miles, y = precio_promedio)) +
geom_point(color = "steelblue", size = 2) +
labs(
title = "Relación entre Ventas Mensuales y Precio Promedio",
xlab = "Ventas Mensuales en Miles de $",
ylab = "Precio Promedio en Artículos"
)
## Ignoring unknown labels:
## • xlab : "Ventas Mensuales en Miles de $"
## • ylab : "Precio Promedio en Artículos"
Según establecido en los gráficos de dispersión, se visualiza un
aumento en las ventas mensuales (ventas_miles) al invertir
en la publicidad digital de las tiendas
(publicidad_digital_miles). Sin embargo, a medida que
aumenta el precio promedio de los artículos en las tiendas, las ventas
mensuales disminuyen significativamente.
3. Con el modelo completo sin ajustar ningún método de selección de variables, identifique cuáles de los ocho predictores son estadísticamente significativos al 5%.
saturado <- ventas_miles ~ publicidad_digital_miles + publicidad_tradicional_miles + precio_promedio + descuento_pct + competencia_indice + visitas_web_miles + area_tienda_m2 + publicidad_radio_miles
reg <- lm(saturado, data=datos)
summary(reg)
##
## Call:
## lm(formula = saturado, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -29.5374 -6.7627 -0.0106 6.5852 25.4106
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 131.550581 5.195105 25.322 < 2e-16 ***
## publicidad_digital_miles 1.880182 0.084084 22.361 < 2e-16 ***
## publicidad_tradicional_miles 0.818654 0.116578 7.022 1.76e-11 ***
## precio_promedio -1.624735 0.081527 -19.929 < 2e-16 ***
## descuento_pct 1.578556 0.110622 14.270 < 2e-16 ***
## competencia_indice -1.918176 0.237491 -8.077 2.20e-14 ***
## visitas_web_miles -0.002752 0.025972 -0.106 0.916
## area_tienda_m2 0.015505 0.009409 1.648 0.101
## publicidad_radio_miles 0.039126 0.111673 0.350 0.726
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.657 on 271 degrees of freedom
## Multiple R-squared: 0.8763, Adjusted R-squared: 0.8726
## F-statistic: 239.9 on 8 and 271 DF, p-value: < 2.2e-16
Entre los factores estadísticamente significativos en las ventas
mensuales, sin ajustar el modelo, se encuentra la
publicidad_digital_miles, el precio_promedio y
el descuento_pct con un p-value de < 2e-16. La
publicidad_tradicional_miles con valor de 1.76e-11
y la competencia_indice con 2.20e-14. Las
variables mencionadas presentan un p-value pequeño menor que
0.05 (5%) estableciendo que las mismas influyen en el
intercepto (ventas_miles).
4. Aplicando los métodos de selección de variables, encuentre el mejor modelo lineal múltiple que puede ajustarse. Explique los métodos usados y como realizó esta elección.
form_log <- ventas_miles ~ publicidad_digital_miles + publicidad_tradicional_miles + precio_promedio + descuento_pct + competencia_indice + visitas_web_miles + area_tienda_m2 + publicidad_radio_miles
# Modelos de nulo y saturado
m0_log <- lm(ventas_miles ~ 1, data = datos) # sin predictores
mF_log <- lm(form_log, data = datos) # todos los predictores
Hacia adelante
# hacia adelante
m1_step_log <- step(m0_log,
scope = list(lower = ~1, upper = formula(mF_log)),
direction = "forward",
k = log(nrow(datos)),
trace = TRUE)
## Start: AIC=1851.52
## ventas_miles ~ 1
##
## Df Sum of Sq RSS AIC
## + publicidad_digital_miles 1 113890 90391 1628.9
## + publicidad_tradicional_miles 1 70471 133810 1738.7
## + precio_promedio 1 44189 160092 1788.9
## + competencia_indice 1 18988 185293 1829.8
## + descuento_pct 1 6404 197877 1848.2
## <none> 204281 1851.5
## + publicidad_radio_miles 1 1055 203226 1855.7
## + area_tienda_m2 1 598 203683 1856.3
## + visitas_web_miles 1 55 204226 1857.1
##
## Step: AIC=1628.86
## ventas_miles ~ publicidad_digital_miles
##
## Df Sum of Sq RSS AIC
## + precio_promedio 1 35644 54747 1494.1
## + descuento_pct 1 11202 79189 1597.5
## + competencia_indice 1 7938 82452 1608.8
## + publicidad_tradicional_miles 1 6321 84070 1614.2
## <none> 90391 1628.9
## + area_tienda_m2 1 735 89656 1632.2
## + visitas_web_miles 1 493 89898 1633.0
## + publicidad_radio_miles 1 134 90257 1634.1
##
## Step: AIC=1494.1
## ventas_miles ~ publicidad_digital_miles + precio_promedio
##
## Df Sum of Sq RSS AIC
## + descuento_pct 1 18354.4 36392 1385.4
## + competencia_indice 1 6126.8 48620 1466.5
## + publicidad_tradicional_miles 1 4458.2 50289 1476.0
## <none> 54747 1494.1
## + visitas_web_miles 1 166.1 54581 1498.9
## + publicidad_radio_miles 1 4.5 54742 1499.7
## + area_tienda_m2 1 1.1 54746 1499.7
##
## Step: AIC=1385.39
## ventas_miles ~ publicidad_digital_miles + precio_promedio + descuento_pct
##
## Df Sum of Sq RSS AIC
## + competencia_indice 1 6434.9 29958 1336.5
## + publicidad_tradicional_miles 1 4829.2 31563 1351.2
## <none> 36392 1385.4
## + publicidad_radio_miles 1 32.0 36360 1390.8
## + area_tienda_m2 1 24.9 36367 1390.8
## + visitas_web_miles 1 0.1 36392 1391.0
##
## Step: AIC=1336.54
## ventas_miles ~ publicidad_digital_miles + precio_promedio + descuento_pct +
## competencia_indice
##
## Df Sum of Sq RSS AIC
## + publicidad_tradicional_miles 1 4403.9 25554 1297.7
## <none> 29958 1336.5
## + area_tienda_m2 1 81.9 29876 1341.4
## + publicidad_radio_miles 1 7.6 29950 1342.1
## + visitas_web_miles 1 0.4 29957 1342.2
##
## Step: AIC=1297.66
## ventas_miles ~ publicidad_digital_miles + precio_promedio + descuento_pct +
## competencia_indice + publicidad_tradicional_miles
##
## Df Sum of Sq RSS AIC
## <none> 25554 1297.7
## + area_tienda_m2 1 268.563 25285 1300.3
## + publicidad_radio_miles 1 22.536 25531 1303.0
## + visitas_web_miles 1 4.298 25549 1303.2
Hacia atrás
# hacia atrás
m2_step_log <- step(mF_log,
direction = "backward",
k = log(nrow(datos)),
trace = TRUE)
## Start: AIC=1311.47
## ventas_miles ~ publicidad_digital_miles + publicidad_tradicional_miles +
## precio_promedio + descuento_pct + competencia_indice + visitas_web_miles +
## area_tienda_m2 + publicidad_radio_miles
##
## Df Sum of Sq RSS AIC
## - visitas_web_miles 1 1 25274 1305.8
## - publicidad_radio_miles 1 11 25284 1306.0
## - area_tienda_m2 1 253 25526 1308.6
## <none> 25273 1311.5
## - publicidad_tradicional_miles 1 4599 29872 1352.6
## - competencia_indice 1 6084 31357 1366.2
## - descuento_pct 1 18990 44263 1462.8
## - precio_promedio 1 37038 62310 1558.5
## - publicidad_digital_miles 1 46629 71902 1598.6
##
## Step: AIC=1305.84
## ventas_miles ~ publicidad_digital_miles + publicidad_tradicional_miles +
## precio_promedio + descuento_pct + competencia_indice + area_tienda_m2 +
## publicidad_radio_miles
##
## Df Sum of Sq RSS AIC
## - publicidad_radio_miles 1 11 25285 1300.3
## - area_tienda_m2 1 257 25531 1303.0
## <none> 25274 1305.8
## - publicidad_tradicional_miles 1 4598 29872 1347.0
## - competencia_indice 1 6083 31357 1360.6
## - descuento_pct 1 19129 44403 1458.0
## - precio_promedio 1 37184 62458 1553.5
## - publicidad_digital_miles 1 46966 72240 1594.3
##
## Step: AIC=1300.33
## ventas_miles ~ publicidad_digital_miles + publicidad_tradicional_miles +
## precio_promedio + descuento_pct + competencia_indice + area_tienda_m2
##
## Df Sum of Sq RSS AIC
## - area_tienda_m2 1 269 25554 1297.7
## <none> 25285 1300.3
## - publicidad_tradicional_miles 1 4591 29876 1341.4
## - competencia_indice 1 6115 31400 1355.3
## - descuento_pct 1 19136 44421 1452.5
## - precio_promedio 1 37344 62629 1548.7
## - publicidad_digital_miles 1 47167 72452 1589.5
##
## Step: AIC=1297.66
## ventas_miles ~ publicidad_digital_miles + publicidad_tradicional_miles +
## precio_promedio + descuento_pct + competencia_indice
##
## Df Sum of Sq RSS AIC
## <none> 25554 1297.7
## - publicidad_tradicional_miles 1 4404 29958 1336.5
## - competencia_indice 1 6010 31563 1351.2
## - descuento_pct 1 19010 44563 1447.7
## - precio_promedio 1 39043 64597 1551.7
## - publicidad_digital_miles 1 47704 73258 1586.9
Híbrido
# híbrido
m3_step_log <- step(m0_log,
scope = list(lower = ~1, upper = formula(mF_log)),
direction = "both",
k = log(nrow(datos)),
trace = TRUE)
## Start: AIC=1851.52
## ventas_miles ~ 1
##
## Df Sum of Sq RSS AIC
## + publicidad_digital_miles 1 113890 90391 1628.9
## + publicidad_tradicional_miles 1 70471 133810 1738.7
## + precio_promedio 1 44189 160092 1788.9
## + competencia_indice 1 18988 185293 1829.8
## + descuento_pct 1 6404 197877 1848.2
## <none> 204281 1851.5
## + publicidad_radio_miles 1 1055 203226 1855.7
## + area_tienda_m2 1 598 203683 1856.3
## + visitas_web_miles 1 55 204226 1857.1
##
## Step: AIC=1628.86
## ventas_miles ~ publicidad_digital_miles
##
## Df Sum of Sq RSS AIC
## + precio_promedio 1 35644 54747 1494.1
## + descuento_pct 1 11202 79189 1597.5
## + competencia_indice 1 7938 82452 1608.8
## + publicidad_tradicional_miles 1 6321 84070 1614.2
## <none> 90391 1628.9
## + area_tienda_m2 1 735 89656 1632.2
## + visitas_web_miles 1 493 89898 1633.0
## + publicidad_radio_miles 1 134 90257 1634.1
## - publicidad_digital_miles 1 113890 204281 1851.5
##
## Step: AIC=1494.1
## ventas_miles ~ publicidad_digital_miles + precio_promedio
##
## Df Sum of Sq RSS AIC
## + descuento_pct 1 18354 36392 1385.4
## + competencia_indice 1 6127 48620 1466.5
## + publicidad_tradicional_miles 1 4458 50289 1476.0
## <none> 54747 1494.1
## + visitas_web_miles 1 166 54581 1498.9
## + publicidad_radio_miles 1 5 54742 1499.7
## + area_tienda_m2 1 1 54746 1499.7
## - precio_promedio 1 35644 90391 1628.9
## - publicidad_digital_miles 1 105345 160092 1788.9
##
## Step: AIC=1385.39
## ventas_miles ~ publicidad_digital_miles + precio_promedio + descuento_pct
##
## Df Sum of Sq RSS AIC
## + competencia_indice 1 6435 29958 1336.5
## + publicidad_tradicional_miles 1 4829 31563 1351.2
## <none> 36392 1385.4
## + publicidad_radio_miles 1 32 36360 1390.8
## + area_tienda_m2 1 25 36367 1390.8
## + visitas_web_miles 1 0 36392 1391.0
## - descuento_pct 1 18354 54747 1494.1
## - precio_promedio 1 42796 79189 1597.5
## - publicidad_digital_miles 1 110805 147198 1771.0
##
## Step: AIC=1336.54
## ventas_miles ~ publicidad_digital_miles + precio_promedio + descuento_pct +
## competencia_indice
##
## Df Sum of Sq RSS AIC
## + publicidad_tradicional_miles 1 4404 25554 1297.7
## <none> 29958 1336.5
## + area_tienda_m2 1 82 29876 1341.4
## + publicidad_radio_miles 1 8 29950 1342.1
## + visitas_web_miles 1 0 29957 1342.2
## - competencia_indice 1 6435 36392 1385.4
## - descuento_pct 1 18662 48620 1466.5
## - precio_promedio 1 40854 70811 1571.8
## - publicidad_digital_miles 1 101173 131131 1744.3
##
## Step: AIC=1297.66
## ventas_miles ~ publicidad_digital_miles + precio_promedio + descuento_pct +
## competencia_indice + publicidad_tradicional_miles
##
## Df Sum of Sq RSS AIC
## <none> 25554 1297.7
## + area_tienda_m2 1 269 25285 1300.3
## + publicidad_radio_miles 1 23 25531 1303.0
## + visitas_web_miles 1 4 25549 1303.2
## - publicidad_tradicional_miles 1 4404 29958 1336.5
## - competencia_indice 1 6010 31563 1351.2
## - descuento_pct 1 19010 44563 1447.7
## - precio_promedio 1 39043 64597 1551.7
## - publicidad_digital_miles 1 47704 73258 1586.9
Modelos resumidos
summary(m1_step_log)
##
## Call:
## lm(formula = ventas_miles ~ publicidad_digital_miles + precio_promedio +
## descuento_pct + competencia_indice + publicidad_tradicional_miles,
## data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -31.0062 -6.8690 -0.4765 6.7669 25.3547
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 136.11468 3.87373 35.138 < 2e-16 ***
## publicidad_digital_miles 1.89021 0.08358 22.617 < 2e-16 ***
## precio_promedio -1.64519 0.08041 -20.461 < 2e-16 ***
## descuento_pct 1.56934 0.10992 14.277 < 2e-16 ***
## competencia_indice -1.90274 0.23703 -8.027 2.95e-14 ***
## publicidad_tradicional_miles 0.79608 0.11585 6.872 4.27e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.657 on 274 degrees of freedom
## Multiple R-squared: 0.8749, Adjusted R-squared: 0.8726
## F-statistic: 383.3 on 5 and 274 DF, p-value: < 2.2e-16
summary(m2_step_log)
##
## Call:
## lm(formula = ventas_miles ~ publicidad_digital_miles + publicidad_tradicional_miles +
## precio_promedio + descuento_pct + competencia_indice, data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -31.0062 -6.8690 -0.4765 6.7669 25.3547
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 136.11468 3.87373 35.138 < 2e-16 ***
## publicidad_digital_miles 1.89021 0.08358 22.617 < 2e-16 ***
## publicidad_tradicional_miles 0.79608 0.11585 6.872 4.27e-11 ***
## precio_promedio -1.64519 0.08041 -20.461 < 2e-16 ***
## descuento_pct 1.56934 0.10992 14.277 < 2e-16 ***
## competencia_indice -1.90274 0.23703 -8.027 2.95e-14 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.657 on 274 degrees of freedom
## Multiple R-squared: 0.8749, Adjusted R-squared: 0.8726
## F-statistic: 383.3 on 5 and 274 DF, p-value: < 2.2e-16
summary(m3_step_log)
##
## Call:
## lm(formula = ventas_miles ~ publicidad_digital_miles + precio_promedio +
## descuento_pct + competencia_indice + publicidad_tradicional_miles,
## data = datos)
##
## Residuals:
## Min 1Q Median 3Q Max
## -31.0062 -6.8690 -0.4765 6.7669 25.3547
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 136.11468 3.87373 35.138 < 2e-16 ***
## publicidad_digital_miles 1.89021 0.08358 22.617 < 2e-16 ***
## precio_promedio -1.64519 0.08041 -20.461 < 2e-16 ***
## descuento_pct 1.56934 0.10992 14.277 < 2e-16 ***
## competencia_indice -1.90274 0.23703 -8.027 2.95e-14 ***
## publicidad_tradicional_miles 0.79608 0.11585 6.872 4.27e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.657 on 274 degrees of freedom
## Multiple R-squared: 0.8749, Adjusted R-squared: 0.8726
## F-statistic: 383.3 on 5 and 274 DF, p-value: < 2.2e-16
Para evaluar el mejor modelo lineal múltiple para la selección de
variables, se aplicó el método selección paso a paso
(Stepwise). Este construye un modelo agregando o
eliminando variables individualmente hacia adelante, hacia atrás e
hibrido a través de los criterios AIC, BIC o p-values. El método hacia
adelante (Forward stepwise selection) añade las
variables, mientras que hacia atrás (Backward stepwise
selection) las elimina individualmente. Adicional, el híbrido
(Forward y backward) aplica ambas funciones
simultáneamente. Al ejecutar los modelos, los tres resultaron con los
mismos p-values (< 2e-16), R^2 ajustado (0.8726) y
los AIC (1297.66). Para interpretar las ventas mensuales, se
puede utilizar cualquier modelo, tanto hacia adelante, hacia atrás e
hibrido; debido a que resultaron con los mismos valores. En este caso,
se seleccionó el formato hibrido nombrado m3_step_log.
5. Presente en una tabla los coeficientes estimados del modelo seleccionado. Interprete cada uno de los coeficientes estimados, respecto al contexto del problema. También interprete el coeficiente de determinación.
| Coeficientes | Estimado |
|---|---|
| Intercepto | 136.11468 |
| publicidad_digital_miles | 1.89021 |
| precio_promedio | -1.64519 |
| descuento_pct | 1.56934 |
| competencia_indice | -1.90274 |
| publicidad_tradicional_miles | 0.79608 |
Intercepto = 136.11468: Las ventas mensuales, en promedio base, estiman ser de $136 mil con todas las variables en 0.
Publicidad_digital_miles = 1.89021: Por cada $1,000 invertidos en publicidad digital, se espera que las ventas aumenten un promedio de $1.89 mil, manteniendo las demás variables constantes.
Precio_promedio = -1.64519: Las ventas mensuales disminuyen un aproximado de $1.65 mil, al aumentar el precio promedio de los artículos en las tiendas, manteniendo las demás variables constantes.
Descuento_pct = 1.56934: Las ventas mensuales aumentan un $1.57 mil al incluir un porcentaje de descuento en los artículos, manteniendo las demás variables constantes.
Competencia_índice = -1.90274: Las ventas mensuales disminuyen un aproximado de $1.90 mil al aumentar una unidad de índice de competencia, manteniendo las demás variables constantes.
Publicidad_tradicional_miles = 0.79608: Por cada $1,000 invertidos en publicidad tradicional, se espera que las ventas aumenten en promedio de 0.80 (miles), manteniendo las demás variables constantes.
R^2 Ajustado = 0.8726: El valor determina un 87.26% de la variabilidad en las ventas mensuales. Es explicada por las variables independientes incluidas en el modelo.
6. Para el modelo seleccionado, analice tanto gráficamente como matemáticamente el cumplimiento de los supuestos del modelo.
Supuesto 1: Normalidad
library(ggplot2)
library(broom)
df <- data.frame(yhat=fitted.values(m3_step_log),
res=rstandard(m3_step_log))
ggplot(df,aes(sample=res)) + stat_qq(color="red") + stat_qq_line(linewidth=2) + labs(x="Características Comerciales",y="Ventas Mensuales") + theme_minimal(base_size = 14)
# Prueba
shapiro.test(df$res)
##
## Shapiro-Wilk normality test
##
## data: df$res
## W = 0.99603, p-value = 0.7032
El “Supuesto 1: Normalidad” establece gráficamente que los residuales se mantienen sobre la línea de regresión, o recta, indicando posible normalidad de los datos. Para comprobar estadísticamente, se aplicó la prueba de “Shapiro-Wilk” que resultó en un p-value de 0.7032 asegurando normalidad en los valores de las características comerciales ante las ventas mensuales.
Supuesto 2: Varianza Constante
ggplot(df,aes(x=yhat,y=res)) + geom_point(alpha=0.6, color="green") + geom_hline(yintercept = 0, linetype="dashed", color="orange") + labs(x="Características Comerciales",y="Ventas Mensuales") + theme_minimal(base_size = 14)
# Prueba
library(lmtest)
bptest(m3_step_log)
##
## studentized Breusch-Pagan test
##
## data: m3_step_log
## BP = 16.431, df = 5, p-value = 0.005715
En el “Supuesto 2: Varianza constante” se visualiza una discrepancia entre los residuales o, en este caso, las características comerciales antes las ventas mensuales. La prueba de “Breusch-Pagan” resultó en un p-value de 0.005715, indicando que la varianza no es constante (Heterocedasticidad).
Supuesto 3: Independencia
library(ggplot2)
library(tidyverse)
df1 <- data.frame(
res = rstandard(m3_step_log)) %>%
mutate(orden = 1:length(res))
ggplot(df1, aes(x = orden, y = res)) +
geom_point(alpha = 0.6, color = "purple") +
geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
labs(x = "Características Comerciales", y = "Ventas Mensuales") +
theme_minimal(base_size = 14)
# Prueba
dwtest(m3_step_log)
##
## Durbin-Watson test
##
## data: m3_step_log
## DW = 2.069, p-value = 0.7183
## alternative hypothesis: true autocorrelation is greater than 0
El “Supuesto 3: Independencia” presenta los residuales dispersos estableciendo que potencialmente los errores de los datos evaluados no correlacionan entre sí. Luego de ejecutar la prueba “Durbin-Watson”, el p-value de 0.7183 determina que los valores no tienen autocorrelación, es decir, tienen independencia.
7. Utilizando el modelo seleccionado, prediga ventas_miles para un establecimiento con las siguientes características:
publicidad_digital_miles = 24
publicidad_tradicional_miles = 20
precio_promedio = 35
descuento_pct = 9
competencia_indice = 5
visitas_web_miles = 65
area_tienda_m2 = 220
publicidad_radio_miles = 10
# Nuevos casos para predicción
nuevos <- data.frame(
publicidad_digital_miles = 24,
publicidad_tradicional_miles = 20,
precio_promedio = 35,
descuento_pct = 9,
competencia_indice = 5,
visitas_web_miles = 65,
area_tienda_m2 = 220,
publicidad_radio_miles = 10
)
Predicción puntual
# Predicción puntual
round(predict(reg, nuevos),2)
## 1
## 144.42
Intervalo de predicción
# Intervalo de predicción
round(predict(reg, nuevos, interval = "prediction", level = 0.95),2)
## fit lwr upr
## 1 144.42 125.38 163.47
Las ventas mensuales para un establecimiento se estiman ser de $144.42 miles cuando se asignan $24 mil a publicidad digital, $20 mil a publicidad tradicional, un precio promedio de $35, un descuento aproximado de 9% y un índice de competencia de 5. Con un 95% de confianza, las ventas se predicen estar entre un intervalo de $125.38 mil – $163.47 mil. La predicción permite capturar la variabilidad para una nueva observación, mientras que el valor puntual presenta un promedio general.