Ejercicio 1. Ventas Semanales

pendiente

Ejercicio 2. Hershey’s - Lechitas

pendiente

Ejercicio 3. Vintage Restaurant

3.1 Grafica de la serie de tiempo

ventas <- c(242, 235, 232, 178, 184, 140, 145, 152, 110, 130, 152, 206,
            263, 238, 247, 193, 193, 149, 157, 161, 122, 130, 167, 230,
            282, 255, 265, 205, 210, 160, 166, 174, 126, 148, 173, 235)

mes <- rep(1:12, 3)
t <- 1:36

plot(ventas, type = "l")

3.2 Indices estacionales

n <- length(ventas)
cma <- rep(NA, n)

for (i in 7:(n - 6)) {
  cma[i] <- (0.5 * ventas[i - 6] + sum(ventas[(i - 5):(i + 5)]) + 0.5 * ventas[i + 6]) / 12
}

razon <- ventas / cma
indice <- rep(0, 12)

for (m in 1:12) {
  indice[m] <- mean(razon[mes == m], na.rm = TRUE)
}

indice <- indice * 12 / sum(indice)

tabla_indices <- data.frame(mes = 1:12, indice = round(indice, 4))

tabla_indices
##    mes indice
## 1    1 1.4436
## 2    2 1.2997
## 3    3 1.3441
## 4    4 1.0412
## 5    5 1.0494
## 6    6 0.8004
## 7    7 0.8283
## 8    8 0.8530
## 9    9 0.6280
## 10  10 0.7003
## 11  11 0.8528
## 12  12 1.1593
plot(indice, type = "b")
abline(h = 1)

3.3 Serie desestacionalizada

desestacionalizada <- ventas / indice[mes]

plot(desestacionalizada, type = "l")

modelo_tendencia <- lm(desestacionalizada ~ t)

summary(modelo_tendencia)
## 
## Call:
## lm(formula = desestacionalizada ~ t)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6.1892 -2.2527 -0.4848  0.8131  9.4189 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 169.3494     1.0926  155.00   <2e-16 ***
## t             1.0213     0.0515   19.83   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.21 on 34 degrees of freedom
## Multiple R-squared:  0.9204, Adjusted R-squared:  0.9181 
## F-statistic: 393.3 on 1 and 34 DF,  p-value: < 2.2e-16

3.4 Pronostico por descomposicion

t_futuro <- 37:48
mes_futuro <- 1:12

tendencia_futura <- predict(modelo_tendencia, data.frame(t = t_futuro))

pronostico_desc <- tendencia_futura * indice[mes_futuro]

data.frame(mes = mes_futuro, pronostico = round(pronostico_desc, 1))
##    mes pronostico
## 1    1      299.0
## 2    2      270.5
## 3    3      281.2
## 4    4      218.9
## 5    5      221.7
## 6    6      169.9
## 7    7      176.6
## 8    8      182.8
## 9    9      135.2
## 10  10      151.5
## 11  11      185.3
## 12  12      253.2

3.5 Pronostico por regresion con variables ficticias

modelo_dummies <- lm(ventas ~ t + factor(mes))

summary(modelo_dummies)
## 
## Call:
## lm(formula = ventas ~ t + factor(mes))
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -8.1250 -1.9583  0.1667  2.2292  7.4583 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    249.10764    2.74567  90.727  < 2e-16 ***
## t                1.01736    0.07554  13.467 2.14e-12 ***
## factor(mes)2   -20.68403    3.62688  -5.703 8.30e-06 ***
## factor(mes)3   -16.36806    3.62924  -4.510 0.000158 ***
## factor(mes)4   -73.38542    3.63317 -20.199 3.90e-16 ***
## factor(mes)5   -70.73611    3.63866 -19.440 8.97e-16 ***
## factor(mes)6  -117.75347    3.64571 -32.299  < 2e-16 ***
## factor(mes)7  -112.43750    3.65431 -30.768  < 2e-16 ***
## factor(mes)8  -107.12153    3.66445 -29.233  < 2e-16 ***
## factor(mes)9  -151.13889    3.67611 -41.114  < 2e-16 ***
## factor(mes)10 -135.48958    3.68928 -36.725  < 2e-16 ***
## factor(mes)11 -108.50694    3.70395 -29.295  < 2e-16 ***
## factor(mes)12  -49.85764    3.72009 -13.402 2.36e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.441 on 23 degrees of freedom
## Multiple R-squared:  0.9942, Adjusted R-squared:  0.9911 
## F-statistic:   327 on 12 and 23 DF,  p-value: < 2.2e-16
nuevos <- data.frame(t = t_futuro, mes = mes_futuro)

pronostico_dummies <- predict(modelo_dummies, nuevos)

data.frame(mes = mes_futuro, pronostico = round(pronostico_dummies, 1))
##    mes pronostico
## 1    1      286.8
## 2    2      267.1
## 3    3      272.4
## 4    4      216.4
## 5    5      220.1
## 6    6      174.1
## 7    7      180.4
## 8    8      186.8
## 9    9      143.8
## 10  10      160.4
## 11  11      188.4
## 12  12      248.1

3.6 Tabla resumen

resumen <- data.frame(mes = 1:12,
                      indice = round(indice, 3),
                      descomposicion = round(pronostico_desc, 1),
                      dummies = round(pronostico_dummies, 1))

resumen
##    mes indice descomposicion dummies
## 1    1  1.444          299.0   286.8
## 2    2  1.300          270.5   267.1
## 3    3  1.344          281.2   272.4
## 4    4  1.041          218.9   216.4
## 5    5  1.049          221.7   220.1
## 6    6  0.800          169.9   174.1
## 7    7  0.828          176.6   180.4
## 8    8  0.853          182.8   186.8
## 9    9  0.628          135.2   143.8
## 10  10  0.700          151.5   160.4
## 11  11  0.853          185.3   188.4
## 12  12  1.159          253.2   248.1
plot(pronostico_desc, type = "l")
lines(pronostico_dummies, lty = 2)

print(sum(pronostico_desc))
## [1] 2545.76
print(sum(pronostico_dummies))
## [1] 2544.667

3.7 Error de pronostico de enero

real_enero <- 295

error_desc <- real_enero - pronostico_desc[1]
error_dummies <- real_enero - pronostico_dummies[1]

print(error_desc)
##         1 
## -4.020918
print(error_dummies)
##    1 
## 8.25
print(error_desc / real_enero * 100)
##         1 
## -1.363023
print(error_dummies / real_enero * 100)
##       1 
## 2.79661

3.8 Conclusiones

Afirmacion: el Vintage Restaurant tiene una estacionalidad muy marcada con una tendencia de crecimiento leve, y cualquiera de los dos modelos sirve para pronosticar el cuarto año. Razon: los indices estacionales van de 0.63 en septiembre a 1.44 en enero, o sea que un mes bueno vende mas del doble que uno malo, mientras que la tendencia solo aporta como 12 mil dolares de crecimiento al año. Evidencia: los dos modelos pronostican un total anual casi igual (2,546 contra 2,545 mil dolares) y el error en enero fue de apenas 1.4% y 2.8% contra la venta real de 295 mil.

Ejercicio 4. Carlson Department Store

4.1 Los datos

carlson <- c(1.71, 1.90, 2.74, 4.20,
             1.45, 1.80, 2.03, 1.99, 2.32, 2.20, 2.13, 2.43, 1.90, 2.13, 2.56, 4.16,
             2.31, 1.89, 2.02, 2.23, 2.39, 2.14, 2.27, 2.21, 1.89, 2.29, 2.83, 4.04,
             2.31, 1.99, 2.42, 2.45, 2.57, 2.42, 2.40, 2.50, 2.09, 2.54, 2.97, 4.35,
             2.56, 2.28, 2.69, 2.48, 2.73, 2.37, 2.31, 2.23)

condado <- c(55.80, 56.40, 71.40, 117.60,
             46.80, 48.00, 60.00, 57.60, 61.80, 58.20, 56.40, 63.00, 57.60, 53.40, 71.40, 114.00,
             46.80, 48.60, 59.40, 58.20, 60.60, 55.20, 51.00, 58.80, 49.80, 54.60, 65.40, 102.00,
             43.80, 45.60, 57.60, 53.40, 56.40, 52.80, 54.00, 60.60, 47.40, 54.60, 67.80, 100.20,
             48.00, 51.60, 57.60, 58.20, 60.00, 57.00, 57.60, 61.80)

mes2 <- c(9, 10, 11, 12, rep(1:12, 3), 1:8)
t2 <- 1:48

plot(carlson, type = "l")

plot(condado, type = "l")

4.2 Funcion para el analisis

analizar <- function(y) {
  n <- length(y)
  cma <- rep(NA, n)

  for (i in 7:(n - 6)) {
    cma[i] <- (0.5 * y[i - 6] + sum(y[(i - 5):(i + 5)]) + 0.5 * y[i + 6]) / 12
  }

  razon <- y / cma

  indice <- rep(0, 12)
  for (m in 1:12) {
    indice[m] <- mean(razon[mes2 == m], na.rm = TRUE)
  }
  indice <- indice * 12 / sum(indice)

  desest <- y / indice[mes2]
  modelo <- lm(desest ~ t2)

  tendencia <- predict(modelo, data.frame(t2 = 49:52))
  pronostico <- tendencia * indice[9:12]

  list(indice = indice, modelo = modelo, pronostico = pronostico)
}

4.3 Ventas que Carlson habria tenido sin el huracan

res_carlson <- analizar(carlson)

data.frame(mes = c("Septiembre", "Octubre", "Noviembre", "Diciembre"),
           pronostico = round(res_carlson$pronostico, 2))
##          mes pronostico
## 1 Septiembre       2.16
## 2    Octubre       2.54
## 3  Noviembre       3.06
## 4  Diciembre       4.60
print(sum(res_carlson$pronostico))
## [1] 12.3579

4.4 Ventas que el condado habria tenido sin el huracan

res_condado <- analizar(condado)

data.frame(mes = c("Septiembre", "Octubre", "Noviembre", "Diciembre"),
           pronostico = round(res_condado$pronostico, 2))
##          mes pronostico
## 1 Septiembre      50.55
## 2    Octubre      53.20
## 3  Noviembre      66.78
## 4  Diciembre     103.11
print(sum(res_condado$pronostico))
## [1] 273.6424

4.5 Comparacion con lo que realmente vendio el condado

real_condado <- c(69.00, 75.00, 85.20, 121.80)

comparacion <- data.frame(mes = c("Septiembre", "Octubre", "Noviembre", "Diciembre"),
                          pronosticado = round(res_condado$pronostico, 2),
                          real = real_condado,
                          razon = round(real_condado / res_condado$pronostico, 4))

comparacion
##          mes pronosticado  real  razon
## 1 Septiembre        50.55  69.0 1.3650
## 2    Octubre        53.20  75.0 1.4099
## 3  Noviembre        66.78  85.2 1.2758
## 4  Diciembre       103.11 121.8 1.1812
print(sum(real_condado))
## [1] 351
print(sum(res_condado$pronostico))
## [1] 273.6424
print(sum(real_condado) / sum(res_condado$pronostico))
## [1] 1.282696

4.6 Perdida de Carlson

ajustado <- res_carlson$pronostico * (real_condado / res_condado$pronostico)

perdida <- data.frame(mes = c("Septiembre", "Octubre", "Noviembre", "Diciembre"),
                      sin_huracan = round(res_carlson$pronostico, 2),
                      con_efecto = round(ajustado, 2))

perdida$exceso <- round(perdida$con_efecto - perdida$sin_huracan, 2)

perdida
##          mes sin_huracan con_efecto exceso
## 1 Septiembre        2.16       2.95   0.79
## 2    Octubre        2.54       3.59   1.05
## 3  Noviembre        3.06       3.90   0.84
## 4  Diciembre        4.60       5.43   0.83
print(sum(perdida$sin_huracan))
## [1] 12.36
print(sum(perdida$con_efecto))
## [1] 15.87
print(sum(perdida$exceso))
## [1] 3.51

4.7 Conclusiones

Afirmacion: Carlson perdio alrededor de 12.36 millones de dolares en ventas normales durante los cuatro meses que estuvo cerrada, y ademas tiene argumentos para reclamar unos 3.51 millones adicionales por el exceso de ventas relacionado con el huracan, para un total cercano a 15.87 millones. Razon: el pronostico de 12.36 millones sale de la tendencia y la estacionalidad propias de la tienda, sin considerar el huracan, pero los datos del condado muestran que despues del desastre la actividad comercial subio bastante, y Carlson habria participado de ese aumento igual que las demas tiendas. Evidencia: el condado vendio 351 millones de septiembre a diciembre contra los 273.6 que se esperaban, o sea 28% por encima de lo normal, y aplicando ese mismo factor mes con mes a Carlson su venta estimada sube de 12.36 a 15.87 millones.