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()`).