Punto1: Librerías
#Carga de librerías
library(forecast)
library(tseries)
library(ggplot2)
library(knitr)
Punto 2: Carga, renombre y caracterización
# Carga del archivo wine.dat
wine <- read.table("C:/Users/AxRen/Downloads/wine.dat", header = TRUE)
class(wine)
## [1] "data.frame"
colnames(wine)
## [1] "winet" "fortw" "dryw" "sweetw" "red" "rose" "spark"
wine_dry <- wine$dryw
wine_ts <- ts(wine_dry,
start = c(1980, 1),
frequency = 12)
dryw <- wine_ts
class(dryw)
## [1] "ts"
Verificar si es serie temporal
class(dryw)
## [1] "ts"
# Resultado: "ts" → ya es serie temporal tras la conversión
Verificar calidad de los datos
any(is.na(dryw))
## [1] FALSE
sum(is.na(dryw))
## [1] 0
which(is.na(dryw))
## integer(0)
Interpretación: La serie no presenta valores
faltantes. Se observa una tendencia creciente moderada en los primeros
años, con un patrón estacional anual claro (picos en ciertos meses del
año). No se requiere limpieza adicional.
Características y resumen
tabla_caracteristicas <- data.frame(
Caracteristica = c("Inicio", "Fin", "Frecuencia",
"Mínimo", "Q1", "Mediana",
"Media", "Q3", "Máximo"),
Valor = c(
paste(start(dryw), collapse = "-"),
paste(end(dryw), collapse = "-"),
frequency(dryw),
min(dryw),
quantile(dryw, 0.25),
median(dryw),
round(mean(dryw), 2),
quantile(dryw, 0.75),
max(dryw)
)
)
kable(tabla_caracteristicas,
caption = "Características de la serie de vino seco",
align = c("l", "r"))
Características de la serie de vino seco
| Inicio |
1980-1 |
| Fin |
1995-7 |
| Frecuencia |
12 |
| Mínimo |
1954 |
| Q1 |
2748 |
| Mediana |
3134 |
| Media |
3262.61 |
| Q3 |
3741 |
| Máximo |
5725 |
Interpretación: La serie abarca desde enero de 1980
con frecuencia mensual (12 obs/año). El resumen estadístico muestra la
distribución de las ventas de vino seco a lo largo del periodo
analizado.
Visualización
plot(dryw,
main = "Ventas de vino seco – Australia",
ylab = "Ventas (miles de litros)", xlab = "Año",
col = "darkred", lwd = 1.5)

Punto 3: Descomposición
# Asegurar serie temporal correctamente definida
dryw <- ts(wine$dryw, start = c(1980, 1), frequency = 12)
# =========================
# Descomposición ADITIVA
# =========================
dryw_aditiva <- decompose(dryw, type = "additive")
plot(dryw_aditiva)

# =========================
# Descomposición MULTIPLICATIVA
# =========================
dryw_mult <- decompose(dryw, type = "multiplicative")
plot(dryw_mult)

Interpretación: La descomposición de
dryw revela: - Tendencia: ligeramente
creciente en los primeros años, luego más estable. -
Estacionalidad: patrón anual marcado. Las ventas
muestran picos en ciertos meses (posiblemente verano austral o
festividades) y valles en otros. - Residuos:
relativamente pequeños, sin estructura sistemática notable. La amplitud
estacional parece crecer con el nivel, lo que sugiere
que el modelo multiplicativo puede ser más apropiado
que el aditivo.
Punto 4: Correlogramas
acf(dryw, lag.max = 48,
main = "Correlograma ACF – wine$dryw")

pacf(dryw, lag.max = 48,
main = "Correlograma PACF – wine$dryw")

Interpretación: - El ACF muestra
picos significativos en los rezagos múltiplos de 12 (12, 24, 36, 48),
confirmando estacionalidad anual. - El decaimiento
lento del ACF en los primeros rezagos puede indicar presencia de
tendencia, lo que se alinea con la descomposición. - El
PACF muestra un corte más rápido, con picos
estacionales en lag 12, consistente con un proceso AR estacional. -
Conclusión: la serie presenta tendencia moderada y
estacionalidad fuerte, condiciones ideales para
Holt-Winters con los tres componentes activos (α, β, γ).
Punto 5: Modelo Holt-Winters Multiplicativo
# Modelo
dryw.hw.mult <- HoltWinters(dryw, seasonal = "mult")
# 1. Parámetros de suavización
tabla_parametros <- data.frame(
Parametro = c("Alpha (nivel)", "Beta (tendencia)", "Gamma (estacional)"),
Valor = c(
dryw.hw.mult$alpha,
dryw.hw.mult$beta,
dryw.hw.mult$gamma
)
)
# 2. Coeficientes (nivel, tendencia y estacionales)
coeficientes <- as.data.frame(dryw.hw.mult$coef)
tabla_coef <- data.frame(
Coeficiente = rownames(coeficientes),
Valor = coeficientes[,1]
)
# 3. Métrica del modelo
tabla_metricas <- data.frame(
Metrica = "SSE (Error cuadrático)",
Valor = dryw.hw.mult$SSE
)
# Mostrar tablas
kable(tabla_parametros, caption = "Parámetros de suavización")
Parámetros de suavización
| alpha |
Alpha (nivel) |
0.1241558 |
| beta |
Beta (tendencia) |
0.0536098 |
| gamma |
Gamma (estacional) |
0.3564653 |
kable(tabla_coef, caption = "Coeficientes del modelo")
Coeficientes del modelo
| a |
4398.8726404 |
| b |
28.2042587 |
| s1 |
1.0123630 |
| s2 |
0.9694326 |
| s3 |
1.0370257 |
| s4 |
1.2187255 |
| s5 |
1.4228719 |
| s6 |
0.6159277 |
| s7 |
0.9207737 |
| s8 |
0.9666764 |
| s9 |
0.9290839 |
| s10 |
0.8759792 |
| s11 |
0.8969546 |
| s12 |
0.9980559 |
kable(tabla_metricas, caption = "Métrica del modelo")
Métrica del modelo
| SSE (Error cuadrático) |
21947638 |
Interpretación: - Alpha indica qué
tan rápido reacciona el nivel a nuevas observaciones. -
Beta captura el ajuste de la tendencia; si es bajo, la
tendencia cambia lentamente. - Gamma refleja la
velocidad de actualización del patrón estacional. - Los coeficientes
s1–s12 indican los factores multiplicativos por mes: meses
con valores > 1 tienen ventas por encima del nivel promedio.
Punto 6: Gráfica del ajuste
plot(dryw.hw.mult,
main = "Ajuste Holt-Winters Multiplicativo – wine$dryw",
ylab = "Ventas (miles de litros)",
col = c("black", "red"))
legend("topleft", legend = c("Observado", "Ajustado HW Mult"),
col = c("black", "red"), lty = 1)

Punto 7: Pronósticos (5 años = 60 meses)
# Pronóstico
dryw.pred.mult <- predict(
dryw.hw.mult,
n.ahead = 5 * 12,
prediction.interval = TRUE
)
# Convertir a data frame
tabla_pred <- data.frame(
Tiempo = time(dryw.pred.mult),
Pronostico = dryw.pred.mult[,1],
Limite_Inferior = dryw.pred.mult[,2],
Limite_Superior = dryw.pred.mult[,3]
)
# Mostrar tabla
kable(tabla_pred, caption = "Pronóstico wine$dryw(Modelo multiplicativo)")
Pronóstico wine$dryw(Modelo multiplicativo)
| 1995.583 |
4481.809 |
4785.542 |
4178.076 |
| 1995.667 |
4319.095 |
4635.095 |
4003.094 |
| 1995.750 |
4649.490 |
4983.178 |
4315.801 |
| 1995.833 |
5498.511 |
5862.872 |
5134.151 |
| 1995.917 |
6459.688 |
6864.939 |
6054.436 |
| 1996.000 |
2813.618 |
3143.144 |
2484.092 |
| 1996.083 |
4232.155 |
4620.316 |
3843.993 |
| 1996.167 |
4470.402 |
4884.894 |
4055.909 |
| 1996.250 |
4322.759 |
4747.135 |
3898.383 |
| 1996.333 |
4100.384 |
4530.080 |
3670.689 |
| 1996.417 |
4223.867 |
4677.948 |
3769.786 |
| 1996.500 |
4728.114 |
5132.323 |
4323.906 |
| 1996.583 |
4824.444 |
5443.383 |
4205.506 |
| 1996.667 |
4647.200 |
5270.769 |
4023.631 |
| 1996.750 |
5000.472 |
5665.348 |
4335.596 |
| 1996.833 |
5910.990 |
6666.340 |
5155.640 |
| 1996.917 |
6941.260 |
7809.178 |
6073.342 |
| 1997.000 |
3022.079 |
3582.148 |
2462.011 |
| 1997.083 |
4543.791 |
5242.895 |
3844.688 |
| 1997.167 |
4797.574 |
5538.879 |
4056.269 |
| 1997.250 |
4637.208 |
5380.712 |
3893.705 |
| 1997.333 |
4396.860 |
5133.218 |
3660.502 |
| 1997.417 |
4527.442 |
5296.287 |
3758.596 |
| 1997.500 |
5065.907 |
5790.279 |
4341.535 |
| 1997.583 |
5167.080 |
6120.195 |
4213.964 |
| 1997.667 |
4975.306 |
5924.534 |
4026.077 |
| 1997.750 |
5351.455 |
6367.212 |
4335.698 |
| 1997.833 |
6323.469 |
7492.476 |
5154.463 |
| 1997.917 |
7422.833 |
8777.502 |
6068.164 |
| 1998.000 |
3230.541 |
4026.298 |
2434.784 |
| 1998.083 |
4855.428 |
5884.190 |
3826.666 |
| 1998.167 |
5124.747 |
6213.833 |
4035.661 |
| 1998.250 |
4951.658 |
6034.297 |
3869.018 |
| 1998.333 |
4693.336 |
5754.819 |
3631.854 |
| 1998.417 |
4831.017 |
5934.691 |
3727.343 |
| 1998.500 |
5403.700 |
6481.832 |
4325.569 |
| 1998.583 |
5509.715 |
6832.185 |
4187.245 |
| 1998.667 |
5303.411 |
6611.230 |
3995.593 |
| 1998.750 |
5702.437 |
7104.247 |
4300.627 |
| 1998.833 |
6735.948 |
8360.046 |
5111.851 |
| 1998.917 |
7904.405 |
9793.601 |
6015.209 |
| 1999.000 |
3439.002 |
4486.425 |
2391.580 |
| 1999.083 |
5167.065 |
6554.939 |
3779.191 |
| 1999.167 |
5451.920 |
6919.931 |
3983.909 |
| 1999.250 |
5266.107 |
6717.294 |
3814.920 |
| 1999.333 |
4989.812 |
6403.524 |
3576.101 |
| 1999.417 |
5134.592 |
6601.021 |
3668.164 |
| 1999.500 |
5741.493 |
7209.390 |
4273.597 |
| 1999.583 |
5852.350 |
7580.129 |
4124.572 |
| 1999.667 |
5631.517 |
7331.766 |
3931.267 |
| 1999.750 |
6053.420 |
7877.317 |
4229.522 |
| 1999.833 |
7148.427 |
9269.928 |
5026.927 |
| 1999.917 |
8385.978 |
10858.705 |
5913.250 |
| 2000.000 |
3647.464 |
4964.704 |
2330.224 |
| 2000.083 |
5478.702 |
7256.054 |
3701.350 |
| 2000.167 |
5779.092 |
7657.895 |
3900.290 |
| 2000.250 |
5580.557 |
7430.482 |
3730.631 |
| 2000.333 |
5286.289 |
7080.196 |
3492.381 |
| 2000.417 |
5438.168 |
7295.954 |
3580.382 |
| 2000.500 |
6079.287 |
7971.414 |
4187.159 |
Punto 8: Gráfica del pronóstico
ts.plot(dryw, dryw.pred.mult,
lty = c(1, 1, 2, 2),
col = c("black", "red", "pink", "pink"),
main = "Pronóstico Holt-Winters Multiplicativo – wine$dryw (5 años)",
ylab = "Ventas", xlab = "Año")
legend("topleft",
legend = c("Observado", "Pronóstico", "IC 95%"),
col = c("black", "red", "pink"),
lty = c(1, 1, 2))

Interpretación: El pronóstico extiende el patrón
estacional observado. Si la tendencia es ligeramente creciente, los
pronósticos reflejarán esa dirección. Los intervalos de confianza se
amplían con el horizonte, lo que es normal y esperado.
Punto 9: Modelo Holt-Winters Aditivo – Comparación
# Modelo
dryw.hw.add <- HoltWinters(dryw, seasonal = "mult")
# 1. Parámetros de suavización
tabla_parametros <- data.frame(
Parametro = c("Alpha (nivel)", "Beta (tendencia)", "Gamma (estacional)"),
Valor = c(
dryw.hw.add$alpha,
dryw.hw.add$beta,
dryw.hw.add$gamma
)
)
# 2. Coeficientes (nivel, tendencia y estacionales)
coeficientes <- as.data.frame(dryw.hw.add$coef)
tabla_coef <- data.frame(
Coeficiente = rownames(coeficientes),
Valor = coeficientes[,1]
)
# 3. Métrica del modelo
tabla_metricas <- data.frame(
Metrica = "SSE (Error cuadrático)",
Valor = dryw.hw.add$SSE
)
# Mostrar tablas
kable(tabla_parametros, caption = "Parámetros de suavización")
Parámetros de suavización
| alpha |
Alpha (nivel) |
0.1241558 |
| beta |
Beta (tendencia) |
0.0536098 |
| gamma |
Gamma (estacional) |
0.3564653 |
kable(tabla_coef, caption = "Coeficientes del modelo")
Coeficientes del modelo
| a |
4398.8726404 |
| b |
28.2042587 |
| s1 |
1.0123630 |
| s2 |
0.9694326 |
| s3 |
1.0370257 |
| s4 |
1.2187255 |
| s5 |
1.4228719 |
| s6 |
0.6159277 |
| s7 |
0.9207737 |
| s8 |
0.9666764 |
| s9 |
0.9290839 |
| s10 |
0.8759792 |
| s11 |
0.8969546 |
| s12 |
0.9980559 |
kable(tabla_metricas, caption = "Métrica del modelo")
Métrica del modelo
| SSE (Error cuadrático) |
21947638 |
Gráfica del ajuste
plot(dryw.hw.add,
main = "Ajuste Holt-Winters Aditivo – wine$dryw",
ylab = "Ventas", col = c("black", "darkgreen"))
legend("topleft", legend = c("Observado", "Ajustado HW Aditivo"),
col = c("black", "darkgreen"), lty = 1)

Pronósticos (5 años = 60 meses)
dryw.pred.add <- predict(dryw.hw.add, n.ahead = 5 * 12,
prediction.interval = TRUE)
# Pronóstico
dryw.pred.add <- predict(
dryw.hw.add,
n.ahead = 5 * 12,
prediction.interval = TRUE
)
# Convertir a data frame
tabla_predi <- data.frame(
Tiempo = time(dryw.pred.add),
Pronostico = dryw.pred.add[,1],
Limite_Inferior = dryw.pred.add[,2],
Limite_Superior = dryw.pred.add[,3]
)
# Mostrar tabla
kable(tabla_predi, caption = "Pronóstico wine$dryw(Modelo aditivo)")
Pronóstico wine$dryw(Modelo aditivo)
| 1995.583 |
4481.809 |
4785.542 |
4178.076 |
| 1995.667 |
4319.095 |
4635.095 |
4003.094 |
| 1995.750 |
4649.490 |
4983.178 |
4315.801 |
| 1995.833 |
5498.511 |
5862.872 |
5134.151 |
| 1995.917 |
6459.688 |
6864.939 |
6054.436 |
| 1996.000 |
2813.618 |
3143.144 |
2484.092 |
| 1996.083 |
4232.155 |
4620.316 |
3843.993 |
| 1996.167 |
4470.402 |
4884.894 |
4055.909 |
| 1996.250 |
4322.759 |
4747.135 |
3898.383 |
| 1996.333 |
4100.384 |
4530.080 |
3670.689 |
| 1996.417 |
4223.867 |
4677.948 |
3769.786 |
| 1996.500 |
4728.114 |
5132.323 |
4323.906 |
| 1996.583 |
4824.444 |
5443.383 |
4205.506 |
| 1996.667 |
4647.200 |
5270.769 |
4023.631 |
| 1996.750 |
5000.472 |
5665.348 |
4335.596 |
| 1996.833 |
5910.990 |
6666.340 |
5155.640 |
| 1996.917 |
6941.260 |
7809.178 |
6073.342 |
| 1997.000 |
3022.079 |
3582.148 |
2462.011 |
| 1997.083 |
4543.791 |
5242.895 |
3844.688 |
| 1997.167 |
4797.574 |
5538.879 |
4056.269 |
| 1997.250 |
4637.208 |
5380.712 |
3893.705 |
| 1997.333 |
4396.860 |
5133.218 |
3660.502 |
| 1997.417 |
4527.442 |
5296.287 |
3758.596 |
| 1997.500 |
5065.907 |
5790.279 |
4341.535 |
| 1997.583 |
5167.080 |
6120.195 |
4213.964 |
| 1997.667 |
4975.306 |
5924.534 |
4026.077 |
| 1997.750 |
5351.455 |
6367.212 |
4335.698 |
| 1997.833 |
6323.469 |
7492.476 |
5154.463 |
| 1997.917 |
7422.833 |
8777.502 |
6068.164 |
| 1998.000 |
3230.541 |
4026.298 |
2434.784 |
| 1998.083 |
4855.428 |
5884.190 |
3826.666 |
| 1998.167 |
5124.747 |
6213.833 |
4035.661 |
| 1998.250 |
4951.658 |
6034.297 |
3869.018 |
| 1998.333 |
4693.336 |
5754.819 |
3631.854 |
| 1998.417 |
4831.017 |
5934.691 |
3727.343 |
| 1998.500 |
5403.700 |
6481.832 |
4325.569 |
| 1998.583 |
5509.715 |
6832.185 |
4187.245 |
| 1998.667 |
5303.411 |
6611.230 |
3995.593 |
| 1998.750 |
5702.437 |
7104.247 |
4300.627 |
| 1998.833 |
6735.948 |
8360.046 |
5111.851 |
| 1998.917 |
7904.405 |
9793.601 |
6015.209 |
| 1999.000 |
3439.002 |
4486.425 |
2391.580 |
| 1999.083 |
5167.065 |
6554.939 |
3779.191 |
| 1999.167 |
5451.920 |
6919.931 |
3983.909 |
| 1999.250 |
5266.107 |
6717.294 |
3814.920 |
| 1999.333 |
4989.812 |
6403.524 |
3576.101 |
| 1999.417 |
5134.592 |
6601.021 |
3668.164 |
| 1999.500 |
5741.493 |
7209.390 |
4273.597 |
| 1999.583 |
5852.350 |
7580.129 |
4124.572 |
| 1999.667 |
5631.517 |
7331.766 |
3931.267 |
| 1999.750 |
6053.420 |
7877.317 |
4229.522 |
| 1999.833 |
7148.427 |
9269.928 |
5026.927 |
| 1999.917 |
8385.978 |
10858.705 |
5913.250 |
| 2000.000 |
3647.464 |
4964.704 |
2330.224 |
| 2000.083 |
5478.702 |
7256.054 |
3701.350 |
| 2000.167 |
5779.092 |
7657.895 |
3900.290 |
| 2000.250 |
5580.557 |
7430.482 |
3730.631 |
| 2000.333 |
5286.289 |
7080.196 |
3492.381 |
| 2000.417 |
5438.168 |
7295.954 |
3580.382 |
| 2000.500 |
6079.287 |
7971.414 |
4187.159 |
Gráfica del pronóstico
ts.plot(dryw, dryw.pred.add,
lty = c(1, 1, 2, 2),
col = c("black", "darkgreen", "lightgreen", "lightgreen"),
main = "Pronóstico Holt-Winters Aditivo – wine$dryw (5 años)",
ylab = "Ventas", xlab = "Año")
legend("topleft",
legend = c("Observado", "Pronóstico", "IC 95%"),
col = c("black", "darkgreen", "lightgreen"),
lty = c(1, 1, 2))

Comparación Multiplicativo vs Aditivo
cat("SSE Multiplicativo:", dryw.hw.mult$SSE, "\n")
## SSE Multiplicativo: 21947638
cat("SSE Aditivo: ", dryw.hw.add$SSE, "\n")
## SSE Aditivo: 21947638
cat("Diferencia (Mult - Add):", dryw.hw.mult$SSE - dryw.hw.add$SSE, "\n")
## Diferencia (Mult - Add): 0
Interpretación comparativa: Los resultados obtenidos
muestran que el error cuadrático (SSE) es exactamente igual para ambos
modelos: SSE modelo multiplicativo: 21,947,638 SSE modelo aditivo:
21,947,638 Diferencia: 0. Esto indica que ambos modelos presentan el
mismo nivel de ajuste sobre la serie temporal, sin que uno supere al
otro en términos de precisión.Desde el punto de vista analítico, esta
igualdad sugiere que la estructura de la serie no presenta cambios
significativos en la amplitud de la estacionalidad. Es decir, la
variación estacional se mantiene relativamente constante a lo largo del
tiempo, lo que hace que tanto el enfoque aditivo como el multiplicativo
capturen el patrón de manera equivalente.En consecuencia, aunque
teóricamente el modelo multiplicativo es más adecuado cuando la
estacionalidad depende del nivel de la serie, en este caso particular no
existe evidencia empírica que justifique preferir uno sobre el otro.
Punto 10: ¿Es wine$dryw adecuada para el Modelo de Bass?
Comentario: La columna wine$dryw
(ventas mensuales de vino seco) presenta un perfil de serie
cíclica y estacional más que un proceso de difusión de
innovación. El Modelo de Bass está diseñado para capturar la
adopción acumulada de un producto nuevo en una
población, con una curva en forma de campana que eventualmente se
satura. Las ventas de vino seco son un producto maduro y
establecido, cuya dinámica responde a estacionalidad, tendencia
económica y hábitos de consumo, no a un proceso de innovación-imitación.
Por lo tanto, no sería adecuado aplicar el Modelo de
Bass a esta serie, pues no cumple los supuestos fundamentales
del modelo (mercado potencial fijo, proceso de difusión en una sola ola
de adopción). Un análisis de Bass requeriría datos de adopción acumulada
desde el lanzamiento del producto, idealmente en una etapa de
crecimiento inicial.