Grupo 1. Regresión lineal múltiple

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.

Data

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

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:

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