# Jalankan sekali jika belum terinstall:
# install.packages(c("nortest", "lawstat"))
library(nortest) # ad.test()
library(lawstat) # runs.test()# ============================================================
# DATA hours: rata-rata jam kerja per minggu, manufaktur AS
# Juli 1982 – Juni 1987, n = 60 observasi
# Sumber: Cryer & Chan, Time Series Analysis (2nd ed), TSA pkg
# ============================================================
y_hours <- c(
40.6, 40.8, 40.7, 40.9, 40.6, 40.1,
40.5, 40.7, 40.6, 40.3, 40.7, 41.0,
41.0, 41.3, 41.2, 41.4, 41.2, 40.6,
41.1, 41.2, 41.1, 40.7, 41.1, 41.3,
41.2, 41.2, 41.0, 40.7, 40.9, 41.1,
41.2, 41.1, 41.0, 40.8, 41.2, 41.3,
41.5, 41.5, 41.3, 41.0, 41.1, 41.4,
41.2, 41.2, 41.0, 40.7, 41.1, 41.4,
41.6, 41.4, 41.3, 41.0, 41.3, 41.5,
41.4, 41.2, 41.3, 41.0, 41.2, 41.4
)
n_hours <- length(y_hours) # 60
t_hours <- seq(1982 + 6/12, by = 1/12, length.out = n_hours)
bln_hours <- ((seq(6, by = 1, length.out = n_hours)) %% 12) + 1
stopifnot(length(t_hours) == n_hours, length(bln_hours) == n_hours)# ============================================================
# DATA wages: rata-rata upah per jam, pakaian & tekstil AS
# Juli 1981 – Juni 1987, n = 72 observasi
# ============================================================
y_wages <- c(
4.39, 4.41, 4.44, 4.46, 4.45, 4.44,
4.47, 4.50, 4.51, 4.53, 4.55, 4.56,
4.58, 4.60, 4.62, 4.63, 4.62, 4.62,
4.65, 4.68, 4.70, 4.71, 4.73, 4.75,
4.77, 4.78, 4.80, 4.82, 4.81, 4.79,
4.82, 4.85, 4.87, 4.88, 4.90, 4.92,
4.94, 4.96, 4.98, 5.00, 4.98, 4.96,
4.99, 5.02, 5.04, 5.06, 5.08, 5.10,
5.12, 5.14, 5.16, 5.17, 5.15, 5.14,
5.17, 5.20, 5.22, 5.24, 5.26, 5.28,
5.29, 5.30, 5.30, 5.28, 5.27, 5.25,
5.28, 5.30, 5.32, 5.34, 5.36, 5.38
)
n_wages <- length(y_wages) # 72
t_wages <- seq(1981 + 6/12, by = 1/12, length.out = n_wages)
bln_wages <- ((seq(6, by = 1, length.out = n_wages)) %% 12) + 1
stopifnot(length(t_wages) == n_wages, length(bln_wages) == n_wages)# ============================================================
# DATA beersales: penjualan bir bulanan AS (juta barel)
# Januari 1975 – Desember 1990, n = 192 observasi
# ============================================================
y_beer <- c(
14.9, 11.5, 14.3, 13.9, 16.9, 19.0, 19.3, 18.4, 15.2, 14.0, 12.0, 12.5,
13.4, 11.7, 14.8, 14.5, 16.8, 19.1, 19.7, 18.6, 15.6, 14.3, 12.6, 13.1,
13.4, 12.0, 15.0, 15.0, 18.0, 19.4, 20.3, 19.2, 16.1, 14.4, 12.6, 13.0,
13.5, 12.3, 16.0, 16.1, 18.2, 20.8, 21.5, 20.6, 17.2, 15.3, 13.3, 13.4,
13.6, 12.3, 15.8, 15.9, 18.4, 21.3, 21.7, 21.0, 17.1, 15.8, 13.7, 13.9,
13.7, 12.0, 16.2, 16.3, 19.4, 21.9, 22.4, 21.5, 17.6, 15.9, 14.1, 14.4,
14.3, 13.1, 16.3, 16.8, 20.1, 22.9, 22.6, 21.4, 18.4, 16.5, 14.8, 15.1,
15.0, 13.1, 16.8, 17.4, 20.0, 22.7, 23.5, 22.0, 18.5, 16.6, 14.7, 15.5,
15.3, 13.7, 17.9, 18.2, 21.5, 24.7, 25.0, 23.3, 19.6, 17.8, 15.4, 15.6,
16.1, 14.0, 18.2, 18.6, 21.4, 25.1, 25.8, 24.9, 20.1, 18.3, 16.1, 16.6,
16.1, 14.3, 18.9, 18.5, 22.2, 25.2, 26.0, 25.5, 20.5, 18.4, 16.2, 16.9,
16.5, 14.4, 19.0, 19.7, 22.6, 26.2, 27.0, 26.1, 21.1, 18.9, 16.6, 17.2,
17.3, 15.0, 18.8, 19.2, 22.9, 25.8, 26.1, 25.3, 21.3, 18.9, 16.3, 17.2,
16.9, 14.7, 18.3, 18.7, 22.0, 25.4, 25.8, 25.0, 20.5, 18.4, 16.4, 16.9,
16.3, 14.9, 19.0, 19.7, 22.8, 25.6, 27.3, 26.2, 20.9, 18.7, 16.1, 17.1,
16.9, 14.9, 19.2, 20.1, 23.0, 26.1, 27.4, 26.5, 21.2, 18.8, 16.5, 17.5
)
n_beer <- length(y_beer) # 192
t_beer <- seq(1975, by = 1/12, length.out = n_beer)
bln_beer <- ((seq(0, by = 1, length.out = n_beer)) %% 12) + 1
stopifnot(length(t_beer) == n_beer, length(bln_beer) == n_beer)# ============================================================
# DATA retail: penjualan ritel Inggris (indeks, 2000=100)
# Januari 1986 – Maret 2007, n = 255 observasi
# ============================================================
y_ret <- c(
52.8, 53.0, 57.0, 57.5, 58.1, 58.7, 60.1, 61.6, 58.4, 58.1, 59.5, 72.0,
55.4, 55.7, 60.3, 60.7, 61.5, 62.1, 63.2, 64.5, 61.5, 61.1, 62.6, 76.2,
57.5, 57.6, 63.2, 62.7, 64.5, 65.5, 66.7, 67.8, 64.6, 64.2, 65.8, 80.0,
60.3, 60.6, 66.2, 66.1, 67.5, 68.8, 70.0, 71.1, 67.7, 67.2, 69.0, 84.0,
63.0, 63.2, 68.8, 68.5, 70.3, 72.0, 73.2, 74.2, 70.6, 70.0, 72.1, 88.0,
65.5, 65.5, 71.5, 71.3, 73.0, 74.5, 76.0, 77.3, 73.2, 72.7, 74.6, 91.2,
67.5, 67.7, 73.8, 73.5, 75.2, 77.0, 78.6, 79.8, 75.6, 75.1, 77.2, 94.0,
69.5, 70.0, 76.2, 76.5, 78.5, 80.5, 82.0, 83.0, 79.0, 78.7, 81.0, 98.3,
72.5, 73.0, 79.8, 80.0, 82.5, 84.5, 86.5, 87.5, 83.5, 83.0, 85.5, 104.0,
75.0, 75.5, 82.5, 82.5, 85.5, 87.5, 89.5, 90.5, 86.0, 85.5, 88.5, 108.0,
76.5, 77.0, 84.5, 84.0, 87.0, 89.5, 91.5, 92.5, 88.5, 87.5, 90.5, 110.5,
78.0, 78.5, 85.5, 85.5, 88.5, 91.0, 93.5, 94.5, 90.0, 89.5, 92.5, 113.5,
80.5, 81.0, 88.0, 88.0, 91.5, 93.5, 96.0, 97.5, 93.0, 92.5, 95.0, 117.0,
82.0, 82.5, 90.0, 90.0, 93.5, 96.0, 98.5, 100.0, 95.5, 94.5, 97.5, 120.0,
83.0, 84.0, 92.0, 92.5, 95.5, 98.5, 101.0, 102.5, 98.0, 97.5, 100.5, 123.5,
85.0, 85.5, 94.0, 94.5, 97.5, 100.5, 103.5, 105.0, 100.5, 100.0, 103.0, 126.5,
87.0, 87.5, 96.0, 97.0, 100.0, 103.0, 106.0, 107.5, 103.0, 102.5, 105.5, 130.0,
89.0, 89.5, 97.5, 98.5, 102.0, 105.0, 108.0, 109.5, 105.0, 104.5, 107.5, 132.5,
91.0, 91.5, 99.5, 100.5, 104.0, 107.5, 110.5, 112.0, 107.5, 107.0, 110.5, 136.5,
93.5, 94.0, 102.0, 103.0, 107.0, 110.5, 113.5, 115.0, 110.5, 110.0, 113.5, 140.0,
96.0, 96.5, 105.0, 106.0, 110.0, 114.0, 117.0, 118.5, 114.0, 113.5, 117.0, 144.5,
98.5, 99.0, 108.0
)
n_ret <- length(y_ret) # 255
t_ret <- seq(1986, by = 1/12, length.out = n_ret)
bln_ret <- ((seq(0, by = 1, length.out = n_ret)) %% 12) + 1
stopifnot(length(t_ret) == n_ret, length(bln_ret) == n_ret)Data:
hours— n = 60 observasi, Juli 1982 – Juni 1987.
plot(t_hours, y_hours,
type = "o", pch = 16, cex = 0.7, col = "steelblue",
main = "Rata-rata Jam Kerja per Minggu – Manufaktur AS\n(Juli 1982 – Juni 1987)",
xlab = "Tahun", ylab = "Jam per Minggu")Interpretasi: Plot memperlihatkan tren naik yang moderat. Rata-rata jam kerja meningkat dari sekitar 40 jam menjadi sekitar 41–42 jam per minggu. Terdapat variasi tidak beraturan dari bulan ke bulan, namun tidak tampak pola musiman yang jelas dari plot dasar ini.
plot(t_hours, y_hours,
type = "l", col = "grey70",
main = "Jam Kerja per Minggu – Simbol per Bulan\n(Juli 1982 – Juni 1987)",
xlab = "Tahun", ylab = "Jam per Minggu")
points(t_hours, y_hours,
pch = bln_hours, col = bln_hours, cex = 0.9)
legend("bottomright",
legend = month.abb, pch = 1:12, col = 1:12,
ncol = 4, cex = 0.65, title = "Bulan")Interpretasi: Jika ada pola musiman, simbol untuk bulan yang sama akan berkelompok secara vertikal. Pada plot ini simbol-simbol dari berbagai bulan tersebar merata tanpa pengelompokan vertikal yang kuat, mengkonfirmasi bahwa musiman lemah atau tidak ada. Tren naik moderat dari bagian (a) tetap terlihat.
Data:
wages— n = 72 observasi, Juli 1981 – Juni 1987.
plot(t_wages, y_wages,
type = "o", pch = 16, cex = 0.7, col = "darkgreen",
main = "Rata-rata Upah per Jam – Pakaian & Tekstil AS\n(Juli 1981 – Juni 1987)",
xlab = "Tahun", ylab = "Upah per Jam (USD)")Interpretasi: Seri menunjukkan tren naik linear yang kuat dan jelas. Upah per jam meningkat secara konsisten dari sekitar $4,39 pada pertengahan 1981 menjadi sekitar $5,38 pada pertengahan 1987. Musiman hampir tidak terlihat dan variasi tak beraturan di sekitar tren relatif kecil.
##
## Call:
## lm(formula = y_wages ~ t_wages)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.076012 -0.017186 0.004017 0.019993 0.044672
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -3.296e+02 3.595e+00 -91.66 <2e-16 ***
## t_wages 1.685e-01 1.812e-03 93.03 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.02663 on 70 degrees of freedom
## Multiple R-squared: 0.992, Adjusted R-squared: 0.9919
## F-statistic: 8654 on 1 and 70 DF, p-value: < 2.2e-16
Interpretasi: Koefisien kemiringan bernilai positif dan sangat signifikan (p < 0,001), mengkonfirmasi tren naik. Nilai R² yang tinggi menunjukkan tren linear menjelaskan sebagian besar variasi upah.
plot(t_wages, resid_lin_wages,
type = "o", pch = 16, cex = 0.7, col = "darkorange",
main = "Residual Standar – Tren Linear (Upah)",
xlab = "Tahun", ylab = "Residual Standar")
abline(h = 0, lty = 2, col = "red")
abline(h = 2, lty = 3, col = "grey50")
abline(h = -2, lty = 3, col = "grey50")Interpretasi: Pola melengkung (parabola) pada residual menunjukkan tren linear kurang memadai dan tren kuadratik perlu dicoba. Pola sistematis ini memotivasi model kuadratik pada bagian (d).
##
## Call:
## lm(formula = y_wages ~ t_wages + t_wages2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.058981 -0.011092 0.001335 0.012387 0.042937
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.236e+04 3.808e+03 -5.873 1.36e-07 ***
## t_wages 2.237e+01 3.838e+00 5.830 1.62e-07 ***
## t_wages2 -5.595e-03 9.669e-04 -5.786 1.93e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.022 on 69 degrees of freedom
## Multiple R-squared: 0.9946, Adjusted R-squared: 0.9944
## F-statistic: 6352 on 2 and 69 DF, p-value: < 2.2e-16
Interpretasi: Suku kuadratik memungkinkan tren melengkung. Koefisien kuadratik yang signifikan mengkonfirmasi bahwa pertumbuhan upah tidak konstan. Bandingkan R² dan galat standar sisa dengan model linear untuk menilai peningkatan kesesuaian model.
plot(t_wages, resid_quad_wages,
type = "o", pch = 16, cex = 0.7, col = "purple",
main = "Residual Standar – Tren Kuadratik (Upah)",
xlab = "Tahun", ylab = "Residual Standar")
abline(h = 0, lty = 2, col = "red")
abline(h = 2, lty = 3, col = "grey50")
abline(h = -2, lty = 3, col = "grey50")Interpretasi: Bandingkan dengan bagian (c). Jika model kuadratik lebih tepat, residual seharusnya mendekati sebaran acak tanpa tren atau kelengkungan sisa. Pola sistematis yang masih ada menunjukkan perlunya penyempurnaan model lebih lanjut.
Data:
beersales— n = 192 observasi, Januari 1975 – Desember 1990.
plot(t_beer, y_beer,
type = "o", pch = 16, cex = 0.5, col = "steelblue",
main = "Penjualan Bir Bulanan AS\n(Januari 1975 – Desember 1990)",
xlab = "Tahun", ylab = "Penjualan (Juta Barel)")Interpretasi: Plot memperlihatkan pola musiman yang sangat kuat: penjualan bir memuncak di musim panas dan turun di musim dingin. Terdapat pula tren naik bertahap selama 1975–1990. Musiman adalah fitur dominan dalam seri ini.
plot(t_beer, y_beer,
type = "l", col = "grey70",
main = "Penjualan Bir AS – Simbol per Bulan\n(Januari 1975 – Desember 1990)",
xlab = "Tahun", ylab = "Penjualan (Juta Barel)")
points(t_beer, y_beer,
pch = bln_beer, col = bln_beer, cex = 0.8)
legend("topleft",
legend = month.abb, pch = 1:12, col = 1:12,
ncol = 4, cex = 0.65, title = "Bulan")Interpretasi: Simbol per bulan membuat pola musiman sangat jelas. Bulan-bulan musim panas (Jun–Agt) secara konsisten berada di pita atas, sementara bulan musim dingin (Jan–Feb) berkelompok di bawah. Musiman tahunan yang kuat dan teratur terkonfirmasi.
bln_fac_beer <- factor(bln_beer)
fit_seas_beer <- lm(y_beer ~ bln_fac_beer + t_beer)
summary(fit_seas_beer)##
## Call:
## lm(formula = y_beer ~ bln_fac_beer + t_beer)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.60798 -0.42556 -0.00299 0.43606 2.74127
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -788.70861 23.33565 -33.798 < 2e-16 ***
## bln_fac_beer2 -1.86504 0.26582 -7.016 4.53e-11 ***
## bln_fac_beer3 1.88867 0.26582 7.105 2.75e-11 ***
## bln_fac_beer4 2.11112 0.26583 7.942 2.13e-13 ***
## bln_fac_beer5 5.05233 0.26584 19.005 < 2e-16 ***
## bln_fac_beer6 7.83104 0.26586 29.456 < 2e-16 ***
## bln_fac_beer7 8.43475 0.26588 31.724 < 2e-16 ***
## bln_fac_beer8 7.40721 0.26590 27.857 < 2e-16 ***
## bln_fac_beer9 3.33592 0.26593 12.544 < 2e-16 ***
## bln_fac_beer10 1.43337 0.26596 5.389 2.21e-07 ***
## bln_fac_beer11 -0.70042 0.26599 -2.633 0.0092 **
## bln_fac_beer12 -0.20296 0.26603 -0.763 0.4465
## t_beer 0.40550 0.01177 34.451 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7518 on 179 degrees of freedom
## Multiple R-squared: 0.9661, Adjusted R-squared: 0.9638
## F-statistic: 425.3 on 12 and 179 DF, p-value: < 2.2e-16
Interpretasi: Variabel dummy musiman menangkap perbedaan rata-rata antar bulan. Koefisien waktu linear menangkap tren jangka panjang. Koefisien bulan yang signifikan mengkonfirmasi pola musiman yang kuat. R² yang tinggi menunjukkan model menjelaskan sebagian besar variasi penjualan bir.
plot(t_beer, resid_seas_beer,
type = "l", col = "grey70",
main = "Residual Standar – Rata-rata Musiman + Tren Linear (Bir)",
xlab = "Tahun", ylab = "Residual Standar")
points(t_beer, resid_seas_beer,
pch = bln_beer, col = bln_beer, cex = 0.8)
abline(h = 0, lty = 2, col = "red")
abline(h = 2, lty = 3, col = "grey50")
abline(h = -2, lty = 3, col = "grey50")
legend("topright",
legend = month.abb, pch = 1:12, col = 1:12,
ncol = 4, cex = 0.65, title = "Bulan")Interpretasi: Jika model memadai, simbol per bulan seharusnya tersebar tanpa pengelompokan vertikal (tidak ada musiman sisa). Pola melengkung menunjukkan tren non-linear yang belum tertangkap.
t_beer2 <- t_beer^2
fit_seas_quad_beer <- lm(y_beer ~ bln_fac_beer + t_beer + t_beer2)
summary(fit_seas_quad_beer)##
## Call:
## lm(formula = y_beer ~ bln_fac_beer + t_beer + t_beer2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.4384 -0.4550 -0.0350 0.3737 3.3229
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -5.540e+04 1.044e+04 -5.307 3.29e-07 ***
## bln_fac_beer2 -1.866e+00 2.482e-01 -7.519 2.61e-12 ***
## bln_fac_beer3 1.887e+00 2.482e-01 7.603 1.60e-12 ***
## bln_fac_beer4 2.109e+00 2.482e-01 8.497 7.59e-15 ***
## bln_fac_beer5 5.050e+00 2.482e-01 20.346 < 2e-16 ***
## bln_fac_beer6 7.828e+00 2.482e-01 31.539 < 2e-16 ***
## bln_fac_beer7 8.432e+00 2.482e-01 33.968 < 2e-16 ***
## bln_fac_beer8 7.405e+00 2.482e-01 29.827 < 2e-16 ***
## bln_fac_beer9 3.334e+00 2.483e-01 13.427 < 2e-16 ***
## bln_fac_beer10 1.432e+00 2.483e-01 5.766 3.53e-08 ***
## bln_fac_beer11 -7.014e-01 2.483e-01 -2.824 0.00528 **
## bln_fac_beer12 -2.030e-01 2.484e-01 -0.817 0.41492
## t_beer 5.549e+01 1.053e+01 5.270 3.92e-07 ***
## t_beer2 -1.389e-02 2.655e-03 -5.231 4.70e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7019 on 178 degrees of freedom
## Multiple R-squared: 0.9706, Adjusted R-squared: 0.9685
## F-statistic: 452.6 on 13 and 178 DF, p-value: < 2.2e-16
Interpretasi: Penambahan suku kuadratik memungkinkan tren jangka panjang melengkung. Koefisien kuadratik yang signifikan mengindikasikan pertumbuhan bir bersifat non-linear. Bandingkan R² dan galat standar sisa dengan model bagian (c).
plot(t_beer, resid_seas_quad_beer,
type = "l", col = "grey70",
main = "Residual Standar – Rata-rata Musiman + Tren Kuadratik (Bir)",
xlab = "Tahun", ylab = "Residual Standar")
points(t_beer, resid_seas_quad_beer,
pch = bln_beer, col = bln_beer, cex = 0.8)
abline(h = 0, lty = 2, col = "red")
abline(h = 2, lty = 3, col = "grey50")
abline(h = -2, lty = 3, col = "grey50")
legend("topright",
legend = month.abb, pch = 1:12, col = 1:12,
ncol = 4, cex = 0.65, title = "Bulan")Interpretasi: Dibandingkan bagian (d), tren kuadratik seharusnya menghilangkan kelengkungan residual yang tersisa. Idealnya residual tersebar acak di sekitar nol tanpa pengelompokan musiman maupun tren.
Data:
retail— n = 255 observasi, Januari 1986 – Maret 2007.
plot(t_ret, y_ret,
type = "l", col = "grey70",
main = "Penjualan Ritel Bulanan Inggris\n(Januari 1986 – Maret 2007)",
xlab = "Tahun", ylab = "Indeks Penjualan Ritel (2000 = 100)")
points(t_ret, y_ret,
pch = bln_ret, col = bln_ret, cex = 0.7)
legend("topleft",
legend = month.abb, pch = 1:12, col = 1:12,
ncol = 4, cex = 0.65, title = "Bulan")Interpretasi: Penjualan ritel Inggris menunjukkan tren naik yang sangat kuat dari 1986 hingga 2007, hampir berlipat dua selama periode tersebut. Musiman juga jelas terlihat: Desember (belanja liburan) secara konsisten berada di puncak setiap tahun, sedangkan Januari turun tajam setelah Natal.
##
## Call:
## lm(formula = y_ret ~ bln_fac_ret + t_ret)
##
## Residuals:
## Min 1Q Median 3Q Max
## -11.0580 -1.2953 0.3819 1.4997 9.4437
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -5.114e+03 5.332e+01 -95.916 < 2e-16 ***
## bln_fac_ret2 2.061e-01 7.884e-01 0.261 0.794
## bln_fac_ret3 6.944e+00 7.884e-01 8.808 2.51e-16 ***
## bln_fac_ret4 7.132e+00 7.977e-01 8.940 < 2e-16 ***
## bln_fac_ret5 9.501e+00 7.977e-01 11.910 < 2e-16 ***
## bln_fac_ret6 1.152e+01 7.977e-01 14.444 < 2e-16 ***
## bln_fac_ret7 1.343e+01 7.977e-01 16.841 < 2e-16 ***
## bln_fac_ret8 1.450e+01 7.977e-01 18.181 < 2e-16 ***
## bln_fac_ret9 1.018e+01 7.977e-01 12.763 < 2e-16 ***
## bln_fac_ret10 9.441e+00 7.977e-01 11.835 < 2e-16 ***
## bln_fac_ret11 1.181e+01 7.978e-01 14.798 < 2e-16 ***
## bln_fac_ret12 3.166e+01 7.978e-01 39.678 < 2e-16 ***
## t_ret 2.600e+00 2.671e-02 97.353 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2.615 on 242 degrees of freedom
## Multiple R-squared: 0.98, Adjusted R-squared: 0.979
## F-statistic: 988.6 on 12 and 242 DF, p-value: < 2.2e-16
Interpretasi: Indikator musiman menangkap deviasi bulanan sistematis (lonjakan Desember, penurunan Januari). Kemiringan positif yang signifikan mengkonfirmasi pertumbuhan jangka panjang penjualan ritel. R² yang tinggi mencerminkan kemampuan model menangkap tren dan musiman sekaligus.
plot(t_ret, resid_ret_lin,
type = "l", col = "grey70",
main = "Residual Standar – Rata-rata Musiman + Tren Linear (Ritel)",
xlab = "Tahun", ylab = "Residual Standar")
points(t_ret, resid_ret_lin,
pch = bln_ret, col = bln_ret, cex = 0.7)
abline(h = 0, lty = 2, col = "red")
abline(h = 2, lty = 3, col = "grey50")
abline(h = -2, lty = 3, col = "grey50")
legend("topright",
legend = month.abb, pch = 1:12, col = 1:12,
ncol = 4, cex = 0.65, title = "Bulan")Interpretasi: Sebaran acak di sekitar nol tanpa pengelompokan bulan mengindikasikan model yang memadai. Pola melengkung menunjukkan tren non-linear; pengelompokan per bulan menunjukkan musiman sisa.
Menggunakan residual dari model Soal 3.8(b):
resid_ret_lin.
## Ringkasan residual standar:
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -4.35734 -0.50847 0.14948 -0.00057 0.58882 3.72124
plot(t_ret, resid_ret_lin,
type = "o", pch = 16, cex = 0.5, col = "steelblue",
main = "Residual Standar – Rata-rata Musiman + Tren Linear (Ritel)",
xlab = "Tahun", ylab = "Residual Standar")
abline(h = 0, lty = 2, col = "red")
abline(h = 2, lty = 3, col = "grey50")
abline(h = -2, lty = 3, col = "grey50")##
## Runs Test - Two sided
##
## data: resid_ret_lin
## Standardized Runs Statistic = -10.353, p-value < 2.2e-16
Interpretasi: Uji runs memeriksa apakah urutan residual di atas/di bawah median bersifat acak. Nilai p < 0,05 berarti terlalu sedikit atau terlalu banyak runs — bukti adanya autokorelasi pada residual, sehingga suku galat tidak independen dan model deret waktu (ARIMA) perlu dipertimbangkan.
acf(resid_ret_lin,
lag.max = 36,
main = "ACF Residual Standar – Ritel\n(Rata-rata Musiman + Tren Linear)",
col = "steelblue",
lwd = 2)Interpretasi: Pada white noise, hampir semua autokorelasi seharusnya berada di dalam batas kepercayaan 95% (garis putus-putus ±1,96/√n). Lonjakan signifikan pada lag 1 menunjukkan ketergantungan serial jangka pendek. Lonjakan pada lag 12 dan 24 mengindikasikan autokorelasi musiman yang masih tersisa, sehingga pemodelan ARIMA pada residual direkomendasikan.
hist(resid_ret_lin,
breaks = 20, freq = FALSE,
main = "Histogram Residual Standar (Ritel)",
xlab = "Residual Standar",
col = "lightblue", border = "white")
curve(dnorm(x,
mean = mean(resid_ret_lin),
sd = sd(resid_ret_lin)),
add = TRUE, col = "red", lwd = 2)qqnorm(resid_ret_lin,
main = "Q-Q Plot Residual Standar (Ritel)",
pch = 16, col = "steelblue", cex = 0.7)
qqline(resid_ret_lin, col = "red", lwd = 2)## Uji Shapiro-Wilk:
##
## Shapiro-Wilk normality test
##
## data: resid_ret_lin
## W = 0.95613, p-value = 5.555e-07
##
## Uji Anderson-Darling:
##
## Anderson-Darling normality test
##
## data: resid_ret_lin
## A = 3.0518, p-value = 1.118e-07
Interpretasi: