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")