Contexto

Una cadena minorista nacional desea analizar los determinantes de las ventas mensuales de sus tiendas. La gerencia sospecha que tanto decisiones estratégicas (gasto en publicidad y política de precios) como características estructurales (región geográfica y tipo de tienda) influyen en el desempeño comercial. En un contexto de alta competencia y márgenes reducidos, la empresa busca identificar cuáles variables explican mejor la variabilidad en ventas y si ciertas configuraciones de negocio resultan sistemáticamente más rentables. El análisis permitirá fundamentar decisiones de inversión y expansión. Las variables que se incluyen para el análisis son:

  • Monthly_Sales_kUSD: Ventas mensuales en miles de dólares.

  • Ad_Spend_kUSD: Gasto mensual en publicidad (miles de dólares).

  • Price_Index: Índice relativo de precios (1.0 = precio promedio del mercado).

  • Region: Región geográfica donde opera la tienda.

  • Store_Type: Tipo de tienda (Mall, Street, Online).

PARTE 1: Análisis exploratorio

Tipos de variables

  • Monthly_Sales_kUSD: Variable de respuesta numérica continua.

  • Ad_Spend_kUSD: Variable explicativa numérica.

  • Price_Index: Variable explicativa numérica.

  • Region: Variable explicativa categórica.

  • Store_Type: Variable explicativa categórica.

Contamos con datos de 100 observaciones para cada variable.

Estadísticas descriptivas

Carga de datos

data <- read.csv("Grupo2.csv")

Medidas de tendencia central y variabilidad

Las medidas de tendencia central y variabilidad se calcularon para las variables numéricas.

summary(data[, c("Monthly_Sales_kUSD", "Ad_Spend_kUSD", "Price_Index")])
##  Monthly_Sales_kUSD Ad_Spend_kUSD    Price_Index    
##  Min.   : 64.90     Min.   :10.10   Min.   :0.7000  
##  1st Qu.: 90.28     1st Qu.:29.00   1st Qu.:0.8840  
##  Median :100.95     Median :37.10   Median :0.9815  
##  Mean   :103.34     Mean   :36.27   Mean   :0.9807  
##  3rd Qu.:113.80     3rd Qu.:44.38   3rd Qu.:1.0610  
##  Max.   :157.60     Max.   :70.70   Max.   :1.3400

Las ventas mensuales de las tiendas varían entre 64 900 y 157 600 dólares, con un promedio de ventas de 103 340 dólares, mientras que el gasto mensual en publicidad fluctúa entre 10 100 y 70 700 dólares (con un promedio de gasto mensual de 36 270 dólares). El índice relativo de precios por su parte, varía entre 0.70 y 1.34 con un promedio de 0.98.

library(knitr)

vars <- data[c("Monthly_Sales_kUSD", "Ad_Spend_kUSD", "Price_Index")]

data.frame(
  Medida = c("sd", "IQR", "CV(%)"),
  sapply(vars, function(x) c(sd(x, na.rm=T), IQR(x, na.rm=T), sd(x, na.rm=T)/mean(x, na.rm=T)*100))
) %>% kable(digits=2)
Medida Monthly_Sales_kUSD Ad_Spend_kUSD Price_Index
sd 17.93 12.28 0.13
IQR 23.53 15.37 0.18
CV(%) 17.35 33.86 13.42

Con respecto a las medidas de variabilidad, el gasto en publicidad tiene la mayor dispersión relativa entre tiendas (CV=33.86%).

Tabla de contingencia y Moda

Para las variables categóricas, se realizó una tabla de contingencia y se calculó la moda para cada variable.

tabla <- table(data$Region, data$Store_Type)
tabla_tot <- addmargins(tabla)

kable(tabla_tot, caption = "Table 1. Distribution of Store Type by Region")
Table 1. Distribution of Store Type by Region
Mall Online Street Sum
East 11 6 7 24
North 7 12 11 30
South 10 6 11 27
West 10 2 7 19
Sum 38 26 36 100

La tabla de contingencia muestra la distribución de los tipos de tienda según la región. La región Norte tiene la mayor cantidad de tiendas (30), y considerando el tipo de tienda, los Mall son los más frecuentes en toda la cadena. Además, las tiendas online destacan en el Norte y son menos comunes en el Oeste.

names(sort(table(data$Region), decreasing = TRUE)[1])
## [1] "North"
names(sort(table(data$Store_Type), decreasing = TRUE)[1])
## [1] "Mall"

Con respecto a la moda, la región con más tiendas es el Norte, y el tipo de tienda más frecuente en toda la cadena son los Mall.

Visualizaciones

# Configurar el área de gráficos: 1 fila, 3 columnas
par(mfrow = c(1, 3))

# Boxplot para Monthly_Sales_kUSD
boxplot(data$Monthly_Sales_kUSD,
        main = "Monthly Sales",
        ylab = "kUSD",
        col = "lightblue",
        ylim = c(0, max(data$Monthly_Sales_kUSD, na.rm = TRUE) * 1.1))  # 10% extra para espacio

# Boxplot para Ad_Spend_kUSD
boxplot(data$Ad_Spend_kUSD,
        main = "Ad Spend",
        ylab = "kUSD",
        col = "lightgreen",
        ylim = c(0, max(data$Ad_Spend_kUSD, na.rm = TRUE) * 1.1))

# Boxplot para Price_Index
boxplot(data$Price_Index,
        main = "Price Index",
        ylab = "Index",
        col = "lightcoral",
        ylim = c(0, max(data$Price_Index, na.rm = TRUE) * 1.1))

La visualización por medio de boxplot se realizó para las variables numéricas. El boxplot de Ventas mensuales muestra una distribución ligeramente sesgada hacia la derecha, con la mayoría de ventas por tienda concentradas alredor de la mediana y algunos valores atípicos altos. El boxplot de Gasto mensual en publicidad presenta una distribución relativamente simétrica. El boxplot de índice relativo de precios muestra que los precios se concentran cerca del centro, con una distribución casi simétrica, aunque aparece un valor atípico alto.

# Configurar el área de gráficos: 1 fila, 2 columnas
par(mfrow = c(1, 2))

# Gráfico de Región
barplot(table(data$Region),
        main = "Number of Observations by Region",
        xlab = "Region",
        ylab = "Frequency",
        col = "skyblue")

# Gráfico de Store Type
barplot(table(data$Store_Type),
        main = "Number of Observations by Store Type",
        xlab = "Store Type",
        ylab = "Frequency",
        col = "lightgreen")

# Restaurar configuración
par(mfrow = c(1, 1))

Según como se mencionó en la tabla de contingencia, en las frecuencias de las variables categóricas, se observa que la región Norte tiene la mayor cantidad de tiendas (30), y considerando el tipo de tienda, los Mall son los más frecuentes.

PARTE 2: Modelo de regresión lineal de corte transversal

Ajuste del modelo

Convertir las variables categóricas a factor

data$Region <- factor(data$Region)
data$Store_Type <- factor(data$Store_Type)

# Verificar estructura
str(data)
## 'data.frame':    100 obs. of  5 variables:
##  $ Monthly_Sales_kUSD: num  157.6 118.9 98.5 89.9 127.2 ...
##  $ Ad_Spend_kUSD     : num  58.7 50.2 40.7 38.9 51.9 40.6 15.5 37 13.9 45.1 ...
##  $ Price_Index       : num  0.913 0.946 1.34 0.854 0.836 0.997 0.821 0.853 0.825 0.86 ...
##  $ Region            : Factor w/ 4 levels "East","North",..: 2 3 3 3 3 4 2 1 2 3 ...
##  $ Store_Type        : Factor w/ 3 levels "Mall","Online",..: 2 1 3 3 3 1 1 1 3 2 ...

Verificar los niveles

levels(data$Region)
## [1] "East"  "North" "South" "West"
levels(data$Store_Type)
## [1] "Mall"   "Online" "Street"

La categoría de referencia para las regiones es Este. Y la categoría de referencia según el tipo de tienda es Mall.

Centrar variables numéricas

data$Price_Index <- data$Price_Index - mean(data$Price_Index)
data$Ad_Spend_kUSD <- data$Ad_Spend_kUSD - mean(data$Ad_Spend_kUSD)

Selección de variables con Akaike AIC

m_full <- lm(Monthly_Sales_kUSD ~ Ad_Spend_kUSD + Price_Index + Region + Store_Type,
              data = data)
m_null <- lm(Monthly_Sales_kUSD ~ 1, data = data)  

1. Modelo hacia atrás

m_back <- step(m_full, direction = "backward", trace = 1)
## Start:  AIC=451.18
## Monthly_Sales_kUSD ~ Ad_Spend_kUSD + Price_Index + Region + Store_Type
## 
##                 Df Sum of Sq     RSS    AIC
## <none>                        7762.0 451.18
## - Price_Index    1     255.2  8017.2 452.42
## - Store_Type     2    2019.2  9781.2 470.30
## - Region         3    2668.7 10430.7 474.73
## - Ad_Spend_kUSD  1   17869.0 25631.0 568.64

El mejor modelo mantiene todas las variables.

2. Modelo hacia adelante.

m_forw <- step(m_null,scope = list(lower = m_null, upper = m_full),
               direction = "forward", trace = 1)
## Start:  AIC=578.25
## Monthly_Sales_kUSD ~ 1
## 
##                 Df Sum of Sq   RSS    AIC
## + Ad_Spend_kUSD  1   19149.5 12666 488.15
## + Region         3    4950.6 26865 567.34
## <none>                       31815 578.25
## + Store_Type     2    1123.9 30691 578.66
## + Price_Index    1       3.9 31811 580.24
## 
## Step:  AIC=488.15
## Monthly_Sales_kUSD ~ Ad_Spend_kUSD
## 
##               Df Sum of Sq     RSS    AIC
## + Region       3   2698.27  9967.6 470.19
## + Store_Type   2   1941.80 10724.1 475.51
## <none>                     12665.9 488.15
## + Price_Index  1    204.39 12461.5 488.52
## 
## Step:  AIC=470.19
## Monthly_Sales_kUSD ~ Ad_Spend_kUSD + Region
## 
##               Df Sum of Sq    RSS    AIC
## + Store_Type   2   1950.44 8017.2 452.42
## <none>                     9967.6 470.19
## + Price_Index  1    186.42 9781.2 470.30
## 
## Step:  AIC=452.42
## Monthly_Sales_kUSD ~ Ad_Spend_kUSD + Region + Store_Type
## 
##               Df Sum of Sq    RSS    AIC
## + Price_Index  1    255.19 7762.0 451.18
## <none>                     8017.2 452.42
## 
## Step:  AIC=451.18
## Monthly_Sales_kUSD ~ Ad_Spend_kUSD + Region + Store_Type + Price_Index

El mejor modelo mantiene todas las variables.

3. Modelo híbrido

m_hyb <- step(m_null,scope = list(lower = m_null, upper = m_full),
              direction = "both", trace = 1)
## Start:  AIC=578.25
## Monthly_Sales_kUSD ~ 1
## 
##                 Df Sum of Sq   RSS    AIC
## + Ad_Spend_kUSD  1   19149.5 12666 488.15
## + Region         3    4950.6 26865 567.34
## <none>                       31815 578.25
## + Store_Type     2    1123.9 30691 578.66
## + Price_Index    1       3.9 31811 580.24
## 
## Step:  AIC=488.15
## Monthly_Sales_kUSD ~ Ad_Spend_kUSD
## 
##                 Df Sum of Sq   RSS    AIC
## + Region         3    2698.3  9968 470.19
## + Store_Type     2    1941.8 10724 475.51
## <none>                       12666 488.15
## + Price_Index    1     204.4 12462 488.52
## - Ad_Spend_kUSD  1   19149.5 31815 578.25
## 
## Step:  AIC=470.19
## Monthly_Sales_kUSD ~ Ad_Spend_kUSD + Region
## 
##                 Df Sum of Sq     RSS    AIC
## + Store_Type     2    1950.4  8017.2 452.42
## <none>                        9967.6 470.19
## + Price_Index    1     186.4  9781.2 470.30
## - Region         3    2698.3 12665.9 488.15
## - Ad_Spend_kUSD  1   16897.2 26864.8 567.34
## 
## Step:  AIC=452.42
## Monthly_Sales_kUSD ~ Ad_Spend_kUSD + Region + Store_Type
## 
##                 Df Sum of Sq     RSS    AIC
## + Price_Index    1     255.2  7762.0 451.18
## <none>                        8017.2 452.42
## - Store_Type     2    1950.4  9967.6 470.19
## - Region         3    2706.9 10724.1 475.51
## - Ad_Spend_kUSD  1   17631.7 25648.9 566.71
## 
## Step:  AIC=451.18
## Monthly_Sales_kUSD ~ Ad_Spend_kUSD + Region + Store_Type + Price_Index
## 
##                 Df Sum of Sq     RSS    AIC
## <none>                        7762.0 451.18
## - Price_Index    1     255.2  8017.2 452.42
## - Store_Type     2    2019.2  9781.2 470.30
## - Region         3    2668.7 10430.7 474.73
## - Ad_Spend_kUSD  1   17869.0 25631.0 568.64

El mejor modelo mantiene todas las variables.

Comparación de modelos seleccionados

AIC_back <- tail(m_back$anova$AIC, 1)
AIC_forw <- tail(m_forw$anova$AIC, 1)
AIC_hyb  <- tail(m_hyb$anova$AIC, 1)

AIC_comp <- data.frame(
  Metodo = c("Backward", "Forward", "Hibrido"),
  AIC = c(AIC_back, AIC_forw, AIC_hyb))

AIC_comp
##     Metodo      AIC
## 1 Backward 451.1825
## 2  Forward 451.1825
## 3  Hibrido 451.1825

Según los resultados obtenidos, el mejor modelo es el que mantiene todas las variables.

Selección de modelo con interacción o sin interacción

1. Sin interacción.

# Modelo sin interacción
mod <- lm(Monthly_Sales_kUSD ~ Ad_Spend_kUSD + Price_Index + Region + Store_Type,
              data = data)
# Ver resultados
summary(mod)
## 
## Call:
## lm(formula = Monthly_Sales_kUSD ~ Ad_Spend_kUSD + Price_Index + 
##     Region + Store_Type, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -17.8924  -6.3417  -0.2626   5.5328  23.3267 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      106.66087    2.18174  48.888  < 2e-16 ***
## Ad_Spend_kUSD      1.13455    0.07796  14.553  < 2e-16 ***
## Price_Index      -12.33687    7.09358  -1.739  0.08535 .  
## RegionNorth        8.86737    2.61169   3.395  0.00101 ** 
## RegionSouth       -4.52363    2.62159  -1.726  0.08779 .  
## RegionWest        -1.52442    2.84871  -0.535  0.59385    
## Store_TypeOnline  -2.89696    2.42644  -1.194  0.23558    
## Store_TypeStreet -10.33292    2.16772  -4.767 6.98e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.185 on 92 degrees of freedom
## Multiple R-squared:  0.756,  Adjusted R-squared:  0.7375 
## F-statistic: 40.73 on 7 and 92 DF,  p-value: < 2.2e-16

2. Con interacción.

# Modelo con interacción
modin <- lm(Monthly_Sales_kUSD ~ Ad_Spend_kUSD * Price_Index * Region * Store_Type,
              data = data)
# Ver resultados
summary(modin)
## 
## Call:
## lm(formula = Monthly_Sales_kUSD ~ Ad_Spend_kUSD * Price_Index * 
##     Region * Store_Type, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -16.3264  -4.1685  -0.0783   3.4139  22.5000 
## 
## Coefficients: (2 not defined because of singularities)
##                                                         Estimate Std. Error
## (Intercept)                                            106.86768    2.72412
## Ad_Spend_kUSD                                            1.47306    0.31137
## Price_Index                                            -11.17579   18.92013
## RegionNorth                                              6.56118    4.73465
## RegionSouth                                             -6.02023    4.41450
## RegionWest                                               4.37408    4.17348
## Store_TypeOnline                                        -7.76120    6.88339
## Store_TypeStreet                                       -14.36199    5.75041
## Ad_Spend_kUSD:Price_Index                                1.03864    2.17213
## Ad_Spend_kUSD:RegionNorth                               -0.36565    0.40908
## Ad_Spend_kUSD:RegionSouth                               -0.28594    0.40849
## Ad_Spend_kUSD:RegionWest                                -0.01634    0.41015
## Price_Index:RegionNorth                                -25.72387   36.50753
## Price_Index:RegionSouth                                -68.58375   57.00354
## Price_Index:RegionWest                                  60.98414   32.12828
## Ad_Spend_kUSD:Store_TypeOnline                          -1.04221    0.46053
## Ad_Spend_kUSD:Store_TypeStreet                          -1.19937    0.71791
## Price_Index:Store_TypeOnline                           -49.12573   46.84129
## Price_Index:Store_TypeStreet                            24.75854   46.95082
## RegionNorth:Store_TypeOnline                            10.29644    8.36382
## RegionSouth:Store_TypeOnline                             0.85908    9.06568
## RegionWest:Store_TypeOnline                            -18.02344   41.09101
## RegionNorth:Store_TypeStreet                             6.67116    7.54876
## RegionSouth:Store_TypeStreet                             9.10051    7.39205
## RegionWest:Store_TypeStreet                            -12.16139    8.51429
## Ad_Spend_kUSD:Price_Index:RegionNorth                   -2.47757    2.83458
## Ad_Spend_kUSD:Price_Index:RegionSouth                   -6.79641    7.78943
## Ad_Spend_kUSD:Price_Index:RegionWest                     2.38035    3.07810
## Ad_Spend_kUSD:Price_Index:Store_TypeOnline              -0.75741    4.46493
## Ad_Spend_kUSD:Price_Index:Store_TypeStreet               4.62528    5.46168
## Ad_Spend_kUSD:RegionNorth:Store_TypeOnline               1.43100    0.56644
## Ad_Spend_kUSD:RegionSouth:Store_TypeOnline               1.11549    0.73620
## Ad_Spend_kUSD:RegionWest:Store_TypeOnline               -0.53238    5.79488
## Ad_Spend_kUSD:RegionNorth:Store_TypeStreet               0.56511    0.85465
## Ad_Spend_kUSD:RegionSouth:Store_TypeStreet               1.09048    0.79180
## Ad_Spend_kUSD:RegionWest:Store_TypeStreet               -1.59066    1.38280
## Price_Index:RegionNorth:Store_TypeOnline                70.41481   58.95181
## Price_Index:RegionSouth:Store_TypeOnline               136.25873   79.20963
## Price_Index:RegionWest:Store_TypeOnline                       NA         NA
## Price_Index:RegionNorth:Store_TypeStreet                25.52878   61.30283
## Price_Index:RegionSouth:Store_TypeStreet                91.55038   75.89690
## Price_Index:RegionWest:Store_TypeStreet                -94.33892   95.91491
## Ad_Spend_kUSD:Price_Index:RegionNorth:Store_TypeOnline  -0.16347    5.43544
## Ad_Spend_kUSD:Price_Index:RegionSouth:Store_TypeOnline  10.26904    9.27076
## Ad_Spend_kUSD:Price_Index:RegionWest:Store_TypeOnline         NA         NA
## Ad_Spend_kUSD:Price_Index:RegionNorth:Store_TypeStreet  -6.66309    6.34457
## Ad_Spend_kUSD:Price_Index:RegionSouth:Store_TypeStreet  -5.30131    9.61992
## Ad_Spend_kUSD:Price_Index:RegionWest:Store_TypeStreet  -29.32679   12.57896
##                                                        t value Pr(>|t|)    
## (Intercept)                                             39.230  < 2e-16 ***
## Ad_Spend_kUSD                                            4.731 1.65e-05 ***
## Price_Index                                             -0.591   0.5572    
## RegionNorth                                              1.386   0.1715    
## RegionSouth                                             -1.364   0.1783    
## RegionWest                                               1.048   0.2993    
## Store_TypeOnline                                        -1.128   0.2645    
## Store_TypeStreet                                        -2.498   0.0156 *  
## Ad_Spend_kUSD:Price_Index                                0.478   0.6345    
## Ad_Spend_kUSD:RegionNorth                               -0.894   0.3754    
## Ad_Spend_kUSD:RegionSouth                               -0.700   0.4869    
## Ad_Spend_kUSD:RegionWest                                -0.040   0.9684    
## Price_Index:RegionNorth                                 -0.705   0.4841    
## Price_Index:RegionSouth                                 -1.203   0.2342    
## Price_Index:RegionWest                                   1.898   0.0630 .  
## Ad_Spend_kUSD:Store_TypeOnline                          -2.263   0.0277 *  
## Ad_Spend_kUSD:Store_TypeStreet                          -1.671   0.1006    
## Price_Index:Store_TypeOnline                            -1.049   0.2990    
## Price_Index:Store_TypeStreet                             0.527   0.6001    
## RegionNorth:Store_TypeOnline                             1.231   0.2236    
## RegionSouth:Store_TypeOnline                             0.095   0.9249    
## RegionWest:Store_TypeOnline                             -0.439   0.6627    
## RegionNorth:Store_TypeStreet                             0.884   0.3808    
## RegionSouth:Store_TypeStreet                             1.231   0.2236    
## RegionWest:Store_TypeStreet                             -1.428   0.1589    
## Ad_Spend_kUSD:Price_Index:RegionNorth                   -0.874   0.3860    
## Ad_Spend_kUSD:Price_Index:RegionSouth                   -0.873   0.3868    
## Ad_Spend_kUSD:Price_Index:RegionWest                     0.773   0.4427    
## Ad_Spend_kUSD:Price_Index:Store_TypeOnline              -0.170   0.8659    
## Ad_Spend_kUSD:Price_Index:Store_TypeStreet               0.847   0.4008    
## Ad_Spend_kUSD:RegionNorth:Store_TypeOnline               2.526   0.0145 *  
## Ad_Spend_kUSD:RegionSouth:Store_TypeOnline               1.515   0.1356    
## Ad_Spend_kUSD:RegionWest:Store_TypeOnline               -0.092   0.9271    
## Ad_Spend_kUSD:RegionNorth:Store_TypeStreet               0.661   0.5113    
## Ad_Spend_kUSD:RegionSouth:Store_TypeStreet               1.377   0.1741    
## Ad_Spend_kUSD:RegionWest:Store_TypeStreet               -1.150   0.2551    
## Price_Index:RegionNorth:Store_TypeOnline                 1.194   0.2375    
## Price_Index:RegionSouth:Store_TypeOnline                 1.720   0.0911 .  
## Price_Index:RegionWest:Store_TypeOnline                     NA       NA    
## Price_Index:RegionNorth:Store_TypeStreet                 0.416   0.6787    
## Price_Index:RegionSouth:Store_TypeStreet                 1.206   0.2330    
## Price_Index:RegionWest:Store_TypeStreet                 -0.984   0.3297    
## Ad_Spend_kUSD:Price_Index:RegionNorth:Store_TypeOnline  -0.030   0.9761    
## Ad_Spend_kUSD:Price_Index:RegionSouth:Store_TypeOnline   1.108   0.2729    
## Ad_Spend_kUSD:Price_Index:RegionWest:Store_TypeOnline       NA       NA    
## Ad_Spend_kUSD:Price_Index:RegionNorth:Store_TypeStreet  -1.050   0.2983    
## Ad_Spend_kUSD:Price_Index:RegionSouth:Store_TypeStreet  -0.551   0.5839    
## Ad_Spend_kUSD:Price_Index:RegionWest:Store_TypeStreet   -2.331   0.0235 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.763 on 54 degrees of freedom
## Multiple R-squared:  0.8697, Adjusted R-squared:  0.761 
## F-statistic: 8.007 on 45 and 54 DF,  p-value: 2.397e-12

Como el \(R^2\) ajustado no mejora sustancialmente, utilizaremos el modelo sin interacción. Además no tenemos evidencia teórica de que el efecto de una variable pueda depender de la otra.

Modelo final

summary(mod)
## 
## Call:
## lm(formula = Monthly_Sales_kUSD ~ Ad_Spend_kUSD + Price_Index + 
##     Region + Store_Type, data = data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -17.8924  -6.3417  -0.2626   5.5328  23.3267 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      106.66087    2.18174  48.888  < 2e-16 ***
## Ad_Spend_kUSD      1.13455    0.07796  14.553  < 2e-16 ***
## Price_Index      -12.33687    7.09358  -1.739  0.08535 .  
## RegionNorth        8.86737    2.61169   3.395  0.00101 ** 
## RegionSouth       -4.52363    2.62159  -1.726  0.08779 .  
## RegionWest        -1.52442    2.84871  -0.535  0.59385    
## Store_TypeOnline  -2.89696    2.42644  -1.194  0.23558    
## Store_TypeStreet -10.33292    2.16772  -4.767 6.98e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 9.185 on 92 degrees of freedom
## Multiple R-squared:  0.756,  Adjusted R-squared:  0.7375 
## F-statistic: 40.73 on 7 and 92 DF,  p-value: < 2.2e-16

Interpretaciones

Intercepto: β0 = 106.66. En promedio las ventas mensuales en la Región Este en las tiendas tipo Mall son de $106 660 cuando el Gasto mensual en publicidad y el índice relativo de precios es 0. \((µ_{Este/Mall} = 106.66)\).

Gasto mensual en publicidad: \(β_1=1.14\). Las ventas mensuales aumentan en promedio $1140 por cada mil dólares adicionales en gasto mensual en publicidad, manteniendo constante la Región (Este) y el tipo de tienda (Mall) y el índice relativo de precios es 0. La diferencia es estadísticamente significativa \((p=0)#\), lo que indica que la publicidad tiene un impacto importante en las ventas.

Índice relativo de precios: \(β_2=-12.34, p=0.09\). El índice relativo de precios no genera una diferencia estadísticamente significativa en las ventas mensuales, manteniendo constante la región Este, las tiendas tipo Mall y el gasto mensual en publicidad en 0.

Región Norte: \(β_3 = 8.87\). Las ventas mensuales en las tiendas tipo mall en la región norte aumentan en promedio $8870 con respecto a las ventas mensuales en la región este en las tiendas tipo mall, cuando el Gasto mensual en publicidad y el índice relativo de precios es 0. (\(µ_{RN/mall} = 106.66 + 8.87 = 115.53\)). La diferencia es estadísticamente significativa \((p<0.01)#\), lo que indica que la región norte tiene un impacto importante en las ventas mensuales.

Región Sur: \(β_4 = -4.52, p=0.08\). Las ventas mensuales en las tiendas tipo mall en la región sur no presentan diferencia estadísticamente significativa con las ventas mensuales en las tiendas tipo mall en la región este, cuando el Gasto mensual en publicidad y el índice relativo de precios es 0.

Región Oeste: \(β_5 = -1.52, p=0.59\). Las ventas mensuales en las tiendas tipo mall en la región oeste no presentan diferencia estadísticamente significativa con las ventas mensuales en las tiendas tipo mall en la región este, cuando el Gasto mensual en publicidad y el índice relativo de precios es 0.

Tienda tipo online: \(β_6 = -2.9, p=0.24\). Las ventas mensuales en las tiendas online no presentan diferencia estadísticamente significativa con las ventas mensuales en las tiendas tipo mall en la región este, cuando el Gasto mensual en publicidad y el índice relativo de precios es 0.

Tienda tipo calle: \(\beta_7 = -10.33, p=0\). Las ventas mensuales en las tiendas tipo calle disminuyen en promedio $10 330 con respecto a las ventas mensuales en las tiendas tipo mall en la región este, cuando el Gasto mensual en publicidad y el índice relativo de precios es 0. La diferencia es estadísticamente significativa \((p=0)\), lo que indica que las tiendas tipo calle tienen un impacto negativo importante en las ventas mensuales.

Ajuste del modelo. \(R^2=0.74\) el modelo explica aproximadamente el 74% de la variabilidad de las ventas mensuales, lo que indica un ajuste sustancial en un contexto de corte transversal.

PARTE 3: Supuestos del Modelo

Normalidad.

QQ-plot de los residuos

res <- residuals(mod)
qqnorm(res,main = "QQ-plot de los residuos",col="blue",pch=16)
qqline(res, col = "red")

La gráfica no nos dice con certeza si se cumple la normalidad. Por lo que, usaremos un test de normalidad.

Como tenemos más de 30 datos usamos la prueba Jarque - Bera.

\(H_0\): Los residuos siguen una distribución aproximadamente normal.

\(H_1\): Los residuos no siguen una distribución normal.

library(tseries)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
jarque.bera.test(res)
## 
##  Jarque Bera Test
## 
## data:  res
## X-squared = 2.3003, df = 2, p-value = 0.3166

Como p-value es mayor que 0.05 no tengo evidencia para rechazar \(H_0\). Por lo tanto, los residuos siguen una distribución aproximadamente normal.

Homocedasticidad.

fit <- fitted(mod)

plot(fit, res,pch=19,col="blue",
     xlab = "Valores ajustados (ŷ)",
     ylab = "Residuos (e)",
     main = "Residuos vs valores ajustados")
abline(h = 0, lty = 2)

No podemos observar un comportamiento que siempre se mantenga.

Prueba de Breusch–Pagan

Hipótesis:

\(H_0\): Los residuales tienen varianza constante

\(H_1\): los residuales no tienen varianza constante.

library(lmtest)
bptest(mod)
## 
##  studentized Breusch-Pagan test
## 
## data:  mod
## BP = 7.8093, df = 7, p-value = 0.3497

Como p-value es 0.34 y es mayor que 0.05, no tengo evidencia para rechazar \(H_0\). Por tanto, la prueba de Breusch–Pagan proporciona evidencia de homocedasticidad, indicando que los residuales tienen varianza constante.

Independencia.

orden   <- seq(1,dim(data)[1])
plot(orden, res, pch=16,col="blue",
     xlab = "Orden de observaciones",
     ylab = "Residuos (e)",
     main = "Residuos en el tiempo (independencia)")
abline(h = 0, lty = 2)

Hipótesis:

\(H_0\): Los errores son independientes.

\(H_1\): Los errores no son independientes.

library(lmtest)
dwtest(mod)
## 
##  Durbin-Watson test
## 
## data:  mod
## DW = 1.9028, p-value = 0.3059
## alternative hypothesis: true autocorrelation is greater than 0

El p-value es 0.3059 es mayor que 0.05. Esto indica que no hay evidencia suficiente para rechazar la hipótesis nula, sugirendo que los errores son independientes entre sí.

Multicolinealidad.

library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
vif(mod)
##                   GVIF Df GVIF^(1/(2*Df))
## Ad_Spend_kUSD 1.075445  1        1.037037
## Price_Index   1.022412  1        1.011144
## Region        1.154541  3        1.024240
## Store_Type    1.094995  2        1.022947

El análisis de multicolinealidad mediante VIF mostró que ninguna de las variables presenta problemas de colinealidad pues todos los VIF son menores a 5. Para las los factores se utilizó el GVIF ajustado por el número de niveles, que permite compararlos con las variables numéricas. Por tanto, las variables incluidas en el modelo son independientes entre sí.

PARTE 4: Conclusiones

Hallazgos

Los hallazgos del modelo muestran que las ventas mensuales dependen significativamente del gasto en publicidad, la región y el tipo de tienda. Las tiendas que invierten más en publicidad tienden a generar mayores ventas, las ubicadas en la región Norte presentan un desempeño superior, y las tiendas de tipo Street venden menos que los Mall. Las demás variables analizadas no mostraron efectos estadísticamente confiables, por lo que no se observa que influyan en las diferencias de ventas entre las tiendas.

Limitaciones

Una de las principales limitaciones de este análisis es que solo se consideraron algunas variables (gasto en publicidad, precio, región y tipo de tienda), por lo que otros factores que podrían influir en las ventas, como promociones, perfil de clientes, zona más específica, no fueron incluidos.

Además, algunas categorías de las variables categóricas tienen pocos casos, lo que puede afectar la precisión de los coeficientes estimados.