Biblioteki

library(readxl)
library(forecast)
library(ggplot2)
library(lubridate)
# Wczytanie danych z pliku Excel
PROGNOZA_wynagrodzenia_scenariusze <- read_excel("C:/Users/HP/Desktop/scenariusze projekt/Scenariusze - dane .xlsx", 
    sheet = "Arkusz1")
data <- PROGNOZA_wynagrodzenia_scenariusze

# dane mają kolumny: 'DATE' (data) i 'Wynagrodzenia'
data$DATE <- as.Date(data$DATE)  # Konwersja kolumny DATE do formatu daty
data_ts <- ts(data$Wynagrodzenia, start = c(year(min(data$DATE)), quarter(min(data$DATE))), frequency = 4)

# Wyświetlenie szeregu czasowego
plot(data_ts, main = "Szereg czasowy: Wynagrodzenia", ylab = "Wynagrodzenia", xlab = "Czas")

# Dopasowanie modelu ARIMA
arima_model <- auto.arima(data_ts, seasonal = TRUE, stepwise = FALSE, approximation = FALSE, max.p=12, max.q = 12, stationary = FALSE)

#arima1<-arima(data_ts,order = c(0,1,0))

# Wyświetlenie podsumowania modelu
summary(arima_model)
## Series: data_ts 
## ARIMA(1,1,2)(0,1,1)[4] 
## 
## Coefficients:
##          ar1      ma1     ma2     sma1
##       0.8462  -0.9879  0.3732  -0.5232
## s.e.  0.0945   0.1395  0.1310   0.1166
## 
## sigma^2 = 2345:  log likelihood = -480.67
## AIC=971.35   AICc=972.05   BIC=983.9
## 
## Training set error measures:
##                    ME     RMSE      MAE       MPE      MAPE     MASE       ACF1
## Training set 4.865256 46.10132 30.43447 0.0728032 0.7983485 0.132265 0.01486183
#summary(arima1)

# Prognoza na 12 okresów (3 lata kwartalne)
forecast_steps <- 12
forecast_result <- forecast(arima_model, h = forecast_steps,level = c(80,95))

# Wyświetlenie prognozy
print(forecast_result)
##         Point Forecast    Lo 80     Hi 80    Lo 95     Hi 95
## 2024 Q1       7850.405 7788.343  7912.467 7755.489  7945.320
## 2024 Q2       7736.186 7654.403  7817.970 7611.109  7861.264
## 2024 Q3       7954.982 7847.995  8061.969 7791.359  8118.604
## 2024 Q4       8276.511 8141.548  8411.473 8070.103  8482.918
## 2025 Q1       8586.194 8403.515  8768.874 8306.811  8865.578
## 2025 Q2       8471.817 8248.506  8695.128 8130.293  8813.341
## 2025 Q3       8690.478 8424.773  8956.183 8284.117  9096.838
## 2025 Q4       9011.893 8703.199  9320.587 8539.787  9483.999
## 2026 Q1       9321.480 8954.819  9688.142 8760.720  9882.241
## 2026 Q2       9207.022 8787.875  9626.168 8565.992  9848.051
## 2026 Q3       9425.613 8952.912  9898.315 8702.679 10148.548
## 2026 Q4       9746.970 9220.569 10273.372 8941.908 10552.032
autoplot(forecast_result, size=1.1) +
  ggtitle("Prognoza przeciętnych miesięcznych wynagrodzeń nominalnych brutto 
                       w gospodarce narodowej w zł") +
  xlab("Czas") +
  ylab("Przeciętne wynagrodzenia") +
  theme_minimal() +
  geom_line(aes(y = forecast_result$lower[, 1], x = time(forecast_result$mean)), color = "blue", size = 1.1) + # linia lo80
  geom_line(aes(y = forecast_result$upper[, 1], x = time(forecast_result$mean)), color = "red", size = 1.1) +   # linia hi80
scale_x_continuous(limits = c(2010, max(time(forecast_result$mean))), breaks = seq(2010, max(time(forecast_result$mean)), by = 1)) # Zakres osi X
## 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.
## Scale for x is already present.
## Adding another scale for x, which will replace the existing scale.
## Warning: Removed 40 rows containing missing values or values outside the scale range
## (`geom_line()`).

# Zapisywanie wyników prognozy do pliku CSV
#writexl::write_xlsx(as.data.frame(forecast_result), "forecast_results2.xlsx")