df <- read.csv("C:/Users/HP/Documents/data_kuartal (1).csv")
head(df)
## Year Quarter t Sales Kuartal.1 Kuartal.2 Kuartal.3 Kuartal.4 RESI1 FITS1
## 1 2001 1 1 550 1 0 0 0 -12.9375 562.938
## 2 2001 2 2 350 0 1 0 0 5.8125 344.188
## 3 2001 3 3 250 0 0 1 0 5.8125 244.188
## 4 2001 4 4 540 0 0 0 1 48.3125 491.688
## 5 2002 1 5 575 1 0 0 0 -66.8125 641.813
## 6 2002 2 6 400 0 1 0 0 -23.0625 423.063
summary(df)
## Year Quarter t Sales Kuartal.1
## Min. :2001 Min. :1.00 Min. : 1.00 Min. :250.0 Min. :0.00
## 1st Qu.:2002 1st Qu.:1.75 1st Qu.: 4.75 1st Qu.:400.0 1st Qu.:0.00
## Median :2002 Median :2.50 Median : 8.50 Median :545.0 Median :0.00
## Mean :2002 Mean :2.50 Mean : 8.50 Mean :529.1 Mean :0.25
## 3rd Qu.:2003 3rd Qu.:3.25 3rd Qu.:12.25 3rd Qu.:612.5 3rd Qu.:0.25
## Max. :2004 Max. :4.00 Max. :16.00 Max. :850.0 Max. :1.00
## Kuartal.2 Kuartal.3 Kuartal.4 RESI1
## Min. :0.00 Min. :0.00 Min. :0.00 Min. :-66.8125
## 1st Qu.:0.00 1st Qu.:0.00 1st Qu.:0.00 1st Qu.:-21.1875
## Median :0.00 Median :0.00 Median :0.00 Median : -0.6875
## Mean :0.25 Mean :0.25 Mean :0.25 Mean : 0.0000
## 3rd Qu.:0.25 3rd Qu.:0.25 3rd Qu.:0.25 3rd Qu.: 21.1250
## Max. :1.00 Max. :1.00 Max. :1.00 Max. : 50.4375
## FITS1
## Min. :244.2
## 1st Qu.:417.8
## Median :532.4
## Mean :529.1
## 3rd Qu.:643.7
## Max. :799.6
model <- lm(Sales ~ t + Kuartal.1 + Kuartal.2 + Kuartal.3, data=df)
df$Predicted_Sales <- predict(model, newdata=df)
# Summary
print(model)
##
## Call:
## lm(formula = Sales ~ t + Kuartal.1 + Kuartal.2 + Kuartal.3, data = df)
##
## Coefficients:
## (Intercept) t Kuartal.1 Kuartal.2 Kuartal.3
## 412.81 19.72 130.41 -108.06 -227.78
summary(model)
##
## Call:
## lm(formula = Sales ~ t + Kuartal.1 + Kuartal.2 + Kuartal.3, data = df)
##
## Residuals:
## Min 1Q Median 3Q Max
## -66.813 -21.187 -0.687 21.125 50.438
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 412.812 26.988 15.296 9.28e-09 ***
## t 19.719 2.012 9.803 9.02e-07 ***
## Kuartal.1 130.406 26.150 4.987 0.000411 ***
## Kuartal.2 -108.062 25.761 -4.195 0.001499 **
## Kuartal.3 -227.781 25.524 -8.924 2.28e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 35.98 on 11 degrees of freedom
## Multiple R-squared: 0.9631, Adjusted R-squared: 0.9497
## F-statistic: 71.82 on 4 and 11 DF, p-value: 8.251e-08
anova(model)
## Analysis of Variance Table
##
## Response: Sales
## Df Sum Sq Mean Sq F value Pr(>F)
## t 1 94973 94973 73.3462 3.397e-06 ***
## Kuartal.1 1 173705 173705 134.1498 1.673e-07 ***
## Kuartal.2 1 165 165 0.1278 0.7275
## Kuartal.3 1 103124 103124 79.6412 2.277e-06 ***
## Residuals 11 14243 1295
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
ggplot(df, aes(x = t)) +
geom_line(aes(y = Sales, color = "Actual"), size = 1.2) +
geom_point(aes(y = Sales, color = "Actual"), size = 2) +
geom_line(aes(y = Predicted_Sales, color = "Predicted"), size = 1.2, linetype = "dashed") +
geom_point(aes(y = Predicted_Sales, color = "Predicted"), size = 2, shape = 17) +
labs(title = "Time Series Plot",
x = "t (Waktu)",
y = "Sales",
color = "Keterangan") +
scale_color_manual(values = c("Actual" = "blue", "Predicted" = "red")) +
theme_minimal() +
theme(plot.title = element_text(size = 14, face = "bold"))
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

library(ggplot2)
df <- read.csv("C:/Users/HP/Documents/data_kuartal (1).csv")
model <- lm(Sales ~ t + Kuartal.2 + Kuartal.3 + Kuartal.4, data = df)
df$Predicted_Sales <- predict(model, newdata = df)
future <- data.frame(
t = max(df$t) + 1:4,
Kuartal.1 = c(1, 0, 0, 0),
Kuartal.2 = c(0, 1, 0, 0),
Kuartal.3 = c(0, 0, 1, 0),
Kuartal.4 = c(0, 0, 0, 1),
Sales = NA
)
future$Predicted_Sales <- predict(model, newdata = future)
future$Predicted_Sales <- predict(model, newdata = future)
missing_cols <- setdiff(names(df), names(future))
for (col in missing_cols) future[[col]] <- NA
future <- future[names(df)]
df_forecast <- rbind(df, future)
ggplot() +
geom_line(data = df_forecast, aes(x = t, y = Sales, color = "Actual Sales"), size = 1) +
geom_point(data = df_forecast, aes(x = t, y = Sales, color = "Actual Sales"), size = 2) +
geom_line(data = df_forecast, aes(x = t, y = Predicted_Sales, color = "Predicted Sales"),
size = 1, linetype = "dashed") +
geom_point(data = df_forecast, aes(x = t, y = Predicted_Sales, color = "Predicted Sales"),
size = 2) +
scale_color_manual(values = c("Actual Sales" = "blue", "Predicted Sales" = "orange")) +
labs(title = "Forecasting Sales",
x = "Time (t)",
y = "Sales",
color = "Legend") +
theme_minimal() +
theme(legend.title = element_blank())
## Warning: Removed 4 rows containing missing values or values outside the scale range
## (`geom_line()`).
## Warning: Removed 4 rows containing missing values or values outside the scale range
## (`geom_point()`).
