Podczas modelowania Indeksu Rozwoju Ludzkiego (HDI) zastosowano zestaw zmiennych obejmujących szeroki zakres czynników ekonomicznych, ekologicznych i społecznych.
Poland <- read_excel("Poland.xlsx", sheet = "nowe")
Poland_Dane<-Poland
print(names(Poland_Dane))
## [1] "Year"
## [2] "Inflation, consumer prices (annual %)"
## [3] "GNI growth (annual %)"
## [4] "GNI (current US$)"
## [5] "GDP per capita growth (annual %)"
## [6] "GDP per capita (current US$)"
## [7] "Unemployment, total (% of total labor force) (modeled ILO estimate)"
## [8] "Human Development Index"
## [9] "Gross National Income Per Capita"
## [10] "Carbon dioxide emissions per capita"
## [11] "Mean Years of Schooling"
## [12] "Life Expectancy at Birth"
## [13] "Gender Inequality Index"
## [14] "Material footprint per capita"
## [15] "export"
## [16] "Gross savings (% of GDP)"
## [17] "health expanditure"
## [18] "Control of Corruption: Estimate"
## [19] "Age dependency ratio (% of working-age population)"
print(Poland_Dane)
## # A tibble: 19 × 19
## Year Inflation, consumer prices…¹ GNI growth (annual %…² `GNI (current US$)`
## <dbl> <dbl> <dbl> <dbl>
## 1 2004 3.38 2.70 247073387718.
## 2 2005 2.18 4.72 300097697933.
## 3 2006 1.28 5.49 335710266767.
## 4 2007 2.46 6.15 414328293502.
## 5 2008 4.16 5.62 522449799564.
## 6 2009 3.80 1.75 426112978191.
## 7 2010 2.58 2.73 459919411004.
## 8 2011 4.24 4.83 505767086263.
## 9 2012 3.56 1.31 476416087985.
## 10 2013 0.992 1.01 497028586507.
## 11 2014 0.0538 3.61 518519328638.
## 12 2015 -0.874 4.41 459254808330.
## 13 2016 -0.665 2.80 451792769071.
## 14 2017 2.08 4.74 502404215916.
## 15 2018 1.81 5.99 563961181889.
## 16 2019 2.23 4.46 571159107928.
## 17 2020 3.37 -1.68 576674352356.
## 18 2021 5.06 6.15 650472606429.
## 19 2022 14.4 6.00 660975714630.
## # ℹ abbreviated names: ¹`Inflation, consumer prices (annual %)`,
## # ²`GNI growth (annual %)`
## # ℹ 15 more variables: `GDP per capita growth (annual %)` <dbl>,
## # `GDP per capita (current US$)` <dbl>,
## # `Unemployment, total (% of total labor force) (modeled ILO estimate)` <dbl>,
## # `Human Development Index` <dbl>, `Gross National Income Per Capita` <dbl>,
## # `Carbon dioxide emissions per capita` <dbl>, …
Ekonomiczne:
Inflation, consumer prices (annual %): Inflacja mierzy wzrost poziomu cen w gospodarce i może wpływać na siłę nabywczą ludności, co bezpośrednio wpływa na standard życia. Wysoka inflacja może zniweczyć zdolność ludzi do utrzymania stabilnego poziomu życia, a także wpłynąć na inwestycje.
GNI growth (annual %): Wzrost Dochodu Narodowego Brutto (GNI) rocznie może wskazywać na tempo, w jakim gospodarka kraju zwiększa swoją całkowitą wartość wytworzoną. Gdy GNI rośnie, sugeruje to zwiększenie ogólnego dobrobytu narodu, co może prowadzić do lepszej jakości usług publicznych, takich jak edukacja i zdrowie, co z kolei przekłada się na wyższy Indeks Rozwoju Ludzkiego.
GNI (current US$): Dochód Narodowy Brutto mierzony w dolarach amerykańskich jest kluczowym wskaźnikiem ekonomicznym, który pokazuje ogólny dochód uzyskiwany przez obywateli kraju. Wyższe GNI per capita jest często kojarzone z lepszym dostępem do zaawansowanych usług medycznych, edukacji oraz wyższą ogólną jakością życia, co bezpośrednio przekłada się na wyższe wartości HDI.
GDP per capita growth (annual %): Wzrost PKB na mieszkańca pokazuje roczne tempo, w jakim poprawia się ekonomiczne zdrowie na jednego obywatela. Szybszy wzrost tego wskaźnika zazwyczaj sygnalizuje lepszą wydajność ekonomiczną, co może skutkować lepszymi warunkami życia i zwiększonymi inwestycjami w infrastrukturę i usługi społeczne, co bezpośrednio wpływa na wskaźniki HDI.
GDP per capita (current US$): Produkt Krajowy Brutto na mieszkańca, wyrażony w dolarach amerykańskich, odzwierciedla bogactwo wytworzone przez gospodarkę w przeliczeniu na jednego mieszkańca. Wyższe wartości PKB na mieszkańca zazwyczaj wskazują na większą dostępność dobrej jakości życia, w tym dostęp do lepszego mieszkania, edukacji, zdrowia, co jest bezpośrednio związane z wyższymi wartościami HDI.
Unemployment, total (% of total labor force) (modeled ILO estimate): Wysokie wskaźniki bezrobocia mogą prowadzić do większego ubóstwa i ograniczonego dostępu do podstawowych usług, co negatywnie wpływa na jakość życia i poziom rozwoju ludzkiego. Niskie bezrobocie zazwyczaj wskazuje na zdrową gospodarkę, która efektywnie wykorzystuje swoją siłę roboczą, co przekłada się na lepsze warunki życia i wyższy HDI.
Gross National Income Per Capita: To wskaźnik wskazujący dochody narodowe przypadające na jednego mieszkańca. Wyższe wartości tego wskaźnika są zwykle powiązane z lepszym dostępem do zasobów finansowych, co umożliwia lepsze warunki życia, dostęp do edukacji i usług zdrowotnych, wpływając pozytywnie na wartość HDI.
Gross savings (% of GDP): Wskaźnik oszczędności brutto jako procent PKB może wskazywać na zdolność kraju do reinwestowania w swoją gospodarkę i zabezpieczenia przyszłego wzrostu. Wyższe oszczędności mogą finansować inwestycje publiczne i prywatne, które z kolei mogą poprawić infrastrukturę, edukację i zdrow.
Ekologiczne:
Carbon dioxide emissions per capita: Emisje dwutlenku węgla na mieszkańca dostarczają informacji o wpływie ekologicznym poszczególnych krajów, uwzględniając zarówno działalność gospodarczą, jak i efektywność energetyczną. Wysokie wartości tego wskaźnika mogą wskazywać na dużą zależność od paliw kopalnych, co często jest powiązane ze złymi warunkami środowiskowymi i zdrowotnymi. Zmniejszenie emisji CO2 jest kluczowe dla poprawy jakości powietrza i zdrowia publicznego, co ma bezpośredni wpływ na lepsze warunki życia i poziom rozwoju ludzkiego, co jest odzwierciedlone w wyższych wartościach HDI.
Material footprint per capita: Ślad materiałowy na mieszkańca jest miarą ilości surowców (zarówno odnawialnych, jak i nieodnawialnych) wykorzystywanych przez osobę, co odzwierciedla wpływ danego kraju na globalne zasoby. Wysoki ślad materiałowy może sygnalizować nadmierną eksploatację zasobów, co może prowadzić do ich wyczerpania i negatywnie wpłynąć na środowisko. Zarządzanie tym wskaźnikiem poprzez zwiększenie efektywności i promowanie zrównoważonego użytkowania zasobów jest kluczowe dla ochrony środowiska naturalnego i zapewnienia zrównoważonego rozwoju, co również wpływa pozytywnie na wartość HDI poprzez poprawę warunków życia w bardziej zrównoważonym środowisku.
Społeczne:
Health expenditure: Wydatki na zdrowie odzwierciedlają poziom inwestycji kraju w usługi medyczne i opiekuńcze. Wysokie wydatki na zdrowie zazwyczaj przekładają się na lepszą dostępność i jakość usług zdrowotnych, co bezpośrednio wpływa na zdrowie populacji. Inwestycje te mogą poprawić wskaźniki długości życia, obniżyć wskaźniki śmiertelności i zwiększyć ogólną sprawność ludności, co ma kluczowe znaczenie dla podnoszenia wartości HDI.
Control of Corruption: Estimate: Kontrola korupcji ocenia poziom praworządności i przejrzystości w zarządzaniu publicznym. Skuteczna walka z korupcją zwiększa zaufanie do instytucji publicznych, poprawia efektywność gospodarczą i społeczną oraz wspiera sprawiedliwe rozdzielanie zasobów. Kraje z niskim poziomem korupcji zwykle charakteryzują się wyższymi standardami życia i lepszymi wskaźnikami rozwoju, co przekłada się na wyższe wartości HDI.
Age dependency ratio (% of working-age population): Wskaźnik zależności od wieku ilustruje proporcję osób w wieku nieprodukcyjnym (dzieci i seniorzy) do populacji w wieku produkcyjnym. Wyższy wskaźnik zależności może sygnalizować większe obciążenie dla aktywnej części społeczeństwa w zakresie utrzymania systemów opiekuńczych i emerytalnych, co może wpływać na stabilność ekonomiczną i społeczną kraju. Niski wskaźnik może sugerować większe możliwości rozwoju gospodarczego i lepsze zarządzanie zasobami.
Mean Years of Schooling: Średnia liczba lat nauki jest kluczowym wskaźnikiem poziomu edukacji w danym kraju. Wyższe wartości tego wskaźnika wskazują na lepszy dostęp do edukacji i wyższe zaangażowanie w rozwój umiejętności i kwalifikacji. Dłuższe kształcenie jest związane z wyższym dochodem, lepszą zdolnością do zrozumienia informacji zdrowotnych i większą świadomością społeczną, co bezpośrednio wpływa na poprawę wartości HDI.
Life Expectancy at Birth: Oczekiwana długość życia przy urodzeniu to podstawowy wskaźnik zdrowia i dobrobytu narodu. Dłuższe życie odzwierciedla lepszą opiekę zdrowotną, lepsze warunki życiowe oraz wyższe standardy żywieniowe, co są kluczowymi elementami wysokiego HDI. Wzrost tego wskaźnika wskazuje na poprawę jakości życia i zdrowia populacji.
Gender Inequality Index: Indeks nierówności płci mierzy dysproporcje między mężczyznami a kobietami w takich obszarach jak zdrowie, edukacja, uczestnictwo w rynku pracy i reprezentacja polityczna. Wysokie wartości tego indeksu wskazują na istnienie istotnych barier dla kobiet, co ogranicza ich możliwości rozwoju i przyczynia się do niższego ogólnego rozwoju ludzkiego. Redukcja nierówności płciowych jest zatem istotna dla poprawy ogólnego HDI.
Inflation, consumer prices
“Inflacja w dużym stopniu wpływa na rozwój ekonomiczny i społeczny państwa. Zwiększa ona przede wszystkim koszty obsługi działalności gospodarczej, a także potrafi zakłócić sygnały rynkowe, przez co przedsiębiorstwa są bardziej skłonne do popełniania błędów w ocenie sytuacji rynkowej”
„Analiza porównawcza poziomu rozwoju społeczno-gospodarczego państw azjatyckich” - Joanna Chojnacka
GNI growth, GNI, GNI per capita
“Opierając się na Raporcie Komisji Europejskiej (tzw. Raport Stiglitza), który rekomenduje, aby wykorzystywać jako mierniki rozwoju gospodarki raczej dochód i konsumpcję, a nie produkcję, ONZ proponuje użycie Dochodu Narodowego Brutto (Gross National Income – GNI) jako miernika standardu życia, co jest oczywiście tylko pewnym przybliżeniem dochodu i konsumpcji.”
„Studia i prace kolegium zarządzania i finansów” - prof. dr hab. Janusz Ostaszewski
GDP per capita growth, GDP per capita, Gross savings (% of GDP)
“Od początku istnienia HDI poziom życia był mierzony za pomocą produktu krajowego brutto na osobę, wyrażonego według parytetu siły nabywczej w USD. Ten miernik był wielokrotnie krytykowany, między innymi z uwagi na swoją konstrukcję czy też ze względu na sposób przeliczania dochodów na parytet siły nabywczej. Poza tym, PKB nie uwzględnia ani pracy gospodarstw domowych na własne potrzeby (np. opieka nad dziećmi), produkcji żywności na własne potrzeby, ani – co szczególnie istotne w krajach rozwijających się – nieformalnej wymiany i szarej strefy gospodarki”
„Studia i prace kolegium zarządzania i finansów” - prof. dr hab. Janusz Ostaszewski
Unemployment
“Mówiąc o rozwoju gospodarczym, nie można zapominać o takim zjawisku, jak bezrobocie, które charakteryzuje się tym, że w gospodarce są ludzie niemający pracy, mimo że jej szukają. Miarą mierzącą to zjawisko jest stopa bezrobocia, którą oblicza się jako stosunek liczby ludzi bezrobotnych do liczby osób, które mogą pracować. Bezrobocie jest problemem natury zarówno ekonomicznej, jak i społecznej, ponieważ prowadzi do spadku PKB, wzrostu kosztów świadczeń socjalnych oraz rozwoju szarej strefy”
„Analiza porównawcza poziomu rozwoju społeczno-gospodarczego państw azjatyckich” - Joanna Chojnacka
Carbon dioxide emissions per capita
„Wobec postępującego ocieplenia, wynikającego z nadmiernej emisji CO₂, konieczność jej redukcji stanowi imperatyw w stosunku do sektora produkcji energii. Szybkość wzrostu produkcji energii musi być dostosowana do szybkości wzrostu udziału energii, produkowanej bez emisji CO₂. Dla wielu krajów oznacza to konieczność ostrego zahamowania wzrostu produkcji energii. Dane zawarte w raporcie Programu ONZ ds. Rozwoju wskazują, że w krajach rozwiniętych uzyskiwano różne wartości PKB z takiej samej ilości energii, co dowodzi, że rozwój gospodarczy może być w pewnym stopniu realizowany bez wzrostu produkcji/konsumpcji energii.”
„Zagadnienia surowców energetycznych i energii w gospodarce krajowej” - Anna Marzec
Material footprint per capita
„Bubble size represents the overall material footprint driven by an economy (country/region/province). The trendline represents the logarithmic relationship between the HDI and the per-capita material footprint among countries.”
„Different Material Footprint Trends between China and the World in 2007-2012 Explained by Construction- and Manufacturing-associated Investment” - Meng Jiang, Paul Behrens, Yongheng Yang, Wenji Zhou, Bing Zhu, Arnold Tukker
Health expenditure
„Kalkulacja indeksu HDI jest wypadkową tych trzech cząstkowych wskaźników, tj.: zdrowie (długowieczność), dostęp do wiedzy oraz standard życia (aspekt materialny) mierzony jako dochód narodowy brutto na mieszkańca”
„Jak mierzyć zrównoważóny rozwój – alternatywy dla PKB” – Anna Bluszcz
Control of Corruption: Estimate
„W interesie demokracji jest wyeliminowanie korupcji. Zjawiska korupcji są bezpośrednim przejawem mankamentów proceduralnej demokracji i obejmują wiele aspektów, począwszy od nieprzestrzegania przez urzędników prawa przy załatwianiu spraw, przez dawanie łapówek i nepotyzm przy obsadzaniu stanowisk. Można powiedzieć, że korupcja zaczyna się w momencie nietrzymania się reguł formalnych. W najgroźniejszej postaci daje o sobie znać w niewydolności administracji i sądów oraz braku legitymizacji dla władzy”
„Racja stanu a interesy narodu” - Henryk Domański
Age dependency ratio (% of working-age population)
“The results showed that in the fixed-effect model, in parts of Indonesia with an HDI below the national average, the dependency ratio does not have a significant effect on HDI. On the other hand, in regions with an HDI above the national average, the dependency ratio has a positive impact on HDI”
„Determinant Variable Analys”is of Human Development Index in Indonesia” - Eleonora Sofilda , Putri Hermiyanti , Muhammad Zilal Hamzah
Mean Years of Schooling
“Pierwszy to średni czas kształcenia (minimum = 0, możliwe w kraju, w którym nie ma systemu edukacji, maksimum = 13,2, zaobserwowane w 2000 roku w USA). Ten miernik był już częścią wskaźnika HDI w latach 1991–1994 i również był krytykowany głównie za to, że nie uwzględnia tego, iż w różnych systemach edukacji ukończenie tego samego stopnia wymaga różnego czasu kształcenia”
„Studia i prace kolegium zarządzania i finansów” - prof. dr hab. Janusz Ost
Life Expectancy at Birth
“Najstarszą i najczęściej używaną miarą biologiczną jest oczekiwana długość życia w chwili urodzenia. Miara ta wyraża średnią liczbę lat, jaką ma do przeżycia osoba w chwili narodzin. Jest ona odzwierciedleniem całokształtu warunków życia społeczeństwa, w tym warunków: pracy, społecznych i środowiskowych, mieszkaniowych, edukacyjnych i innych warunków osobistych, w tym sposobu odżywiania się”
„Tradycyjne i alternatywne mierniki poziomu życia ludności w ujęciu teoretycznym” – Urszula Grzega
Gender Inequality Index
“The Gender Inequality Index is designed to capture women’s disadvantage in three dimensions - empowerment, economic activity and reproductive health - for as many countries as data of reasonable quality allow. The GII shows the loss in human development due to inequality between female and male achievements in these dimensions. It was designed taking as basis the association-sensitive welfare indices studied in Seth (2009)”
„Measuring Key Disparities in Human Development: The Gender Inequality Index” - Amie Gaye, Jeni Klugman, Milorad Kovacevic, Sarah Twigg, Eduardo Zambrano
Poland_Dane_selected <- Poland_Dane[, !(names(Poland_Dane) %in% c("Year", "Human Development Index"))]
# Przypisz nowe nazwy kolumn: x1, x2, x3, ...
colnames(Poland_Dane_selected) <- paste0("x", 1:ncol(Poland_Dane_selected))
# Oblicz macierz korelacji dla pozostałych zmiennych
correlation_matrix <- cor(na.omit(Poland_Dane_selected))
# Wyświetl macierz korelacji
print(correlation_matrix)
## x1 x2 x3 x4 x5 x6
## x1 1.00000000 0.21697106 0.431262355 0.35571514 0.45352384 -0.25799017
## x2 0.21697106 1.00000000 0.104379884 0.92562174 0.11148483 -0.07199581
## x3 0.43126235 0.10437988 1.000000000 0.07547083 0.99896307 -0.91159316
## x4 0.35571514 0.92562174 0.075470831 1.00000000 0.09473979 -0.04204136
## x5 0.45352384 0.11148483 0.998963067 0.09473979 1.00000000 -0.90894099
## x6 -0.25799017 -0.07199581 -0.911593163 -0.04204136 -0.90894099 1.00000000
## x7 0.38044157 0.06082002 0.901526960 0.09502344 0.91393442 -0.89625909
## x8 0.28894528 0.67960126 0.005986319 0.68728028 0.01310358 0.02420388
## x9 0.13228324 -0.10739910 0.852506028 -0.10541794 0.85828601 -0.87182765
## x10 -0.14186768 -0.10417170 0.647027728 -0.14457203 0.64923425 -0.71668685
## x11 -0.28091580 -0.05202996 -0.690293052 -0.10809372 -0.71017123 0.69287761
## x12 0.35401712 0.17610480 0.773708885 0.11525478 0.76203027 -0.72607597
## x13 0.37701087 0.09294726 0.857385527 0.14584833 0.87464198 -0.83615395
## x14 0.09138639 0.12886747 0.771551340 0.04643708 0.77132286 -0.86213375
## x15 0.28442713 -0.17400069 0.795691770 -0.14542841 0.79607658 -0.82493919
## x16 -0.19633489 -0.23076914 0.659887875 -0.32151720 0.65158490 -0.70597779
## x17 0.35754603 0.07987698 0.679077672 0.14600342 0.69779591 -0.69100339
## x7 x8 x9 x10 x11 x12
## x1 0.38044157 0.288945284 0.1322832 -0.1418677 -0.28091580 0.3540171
## x2 0.06082002 0.679601257 -0.1073991 -0.1041717 -0.05202996 0.1761048
## x3 0.90152696 0.005986319 0.8525060 0.6470277 -0.69029305 0.7737089
## x4 0.09502344 0.687280283 -0.1054179 -0.1445720 -0.10809372 0.1152548
## x5 0.91393442 0.013103579 0.8582860 0.6492343 -0.71017123 0.7620303
## x6 -0.89625909 0.024203879 -0.8718277 -0.7166869 0.69287761 -0.7260760
## x7 1.00000000 -0.067317657 0.9367212 0.7552785 -0.91369613 0.5625421
## x8 -0.06731766 1.000000000 -0.1965818 -0.2224010 0.12962978 0.2513740
## x9 0.93672117 -0.196581792 1.0000000 0.8998456 -0.83668831 0.5608707
## x10 0.75527855 -0.222401010 0.8998456 1.0000000 -0.68381576 0.4234534
## x11 -0.91369613 0.129629780 -0.8366883 -0.6838158 1.00000000 -0.2654529
## x12 0.56254206 0.251373979 0.5608707 0.4234534 -0.26545290 1.0000000
## x13 0.98180237 -0.012866765 0.9273808 0.7608213 -0.93042127 0.4909106
## x14 0.83820966 -0.159825895 0.8072346 0.6416486 -0.79037846 0.4743367
## x15 0.77808532 -0.193671390 0.8087693 0.6938403 -0.53768220 0.6479873
## x16 0.65837658 -0.254295198 0.8648003 0.9185968 -0.50243839 0.5545594
## x17 0.88587734 -0.096431984 0.7408398 0.5196030 -0.95778534 0.2331699
## x13 x14 x15 x16 x17
## x1 0.37701087 0.09138639 0.2844271 -0.1963349 0.35754603
## x2 0.09294726 0.12886747 -0.1740007 -0.2307691 0.07987698
## x3 0.85738553 0.77155134 0.7956918 0.6598879 0.67907767
## x4 0.14584833 0.04643708 -0.1454284 -0.3215172 0.14600342
## x5 0.87464198 0.77132286 0.7960766 0.6515849 0.69779591
## x6 -0.83615395 -0.86213375 -0.8249392 -0.7059778 -0.69100339
## x7 0.98180237 0.83820966 0.7780853 0.6583766 0.88587734
## x8 -0.01286677 -0.15982590 -0.1936714 -0.2542952 -0.09643198
## x9 0.92738077 0.80723464 0.8087693 0.8648003 0.74083980
## x10 0.76082131 0.64164858 0.6938403 0.9185968 0.51960303
## x11 -0.93042127 -0.79037846 -0.5376822 -0.5024384 -0.95778534
## x12 0.49091057 0.47433665 0.6479873 0.5545594 0.23316994
## x13 1.00000000 0.80889580 0.7256222 0.6507552 0.87996353
## x14 0.80889580 1.00000000 0.5556809 0.5983456 0.77535198
## x15 0.72562215 0.55568091 1.0000000 0.7462408 0.51981480
## x16 0.65075518 0.59834561 0.7462408 1.0000000 0.34245167
## x17 0.87996353 0.77535198 0.5198148 0.3424517 1.00000000
# Jeśli chcesz, możesz również użyć pakietu ggplot2 do stworzenia wizualizacji macierzy korelacji
library(ggplot2)
library(reshape2)
##
## Dołączanie pakietu: 'reshape2'
## Następujący obiekt został zakryty z 'package:tidyr':
##
## smiths
# Przekształć macierz korelacji w długi format
correlation_matrix_melt <- melt(correlation_matrix)
# Tworzenie wykresu
ggplot(data = correlation_matrix_melt, aes(x = Var1, y = Var2, fill = value)) +
geom_tile() +
scale_fill_gradient2(midpoint = 0, low = "blue", high = "red", mid = "white",
limits = c(-1, 1)) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
axis.title = element_blank())
Poland <- read_excel("Poland.xlsx")
print(Poland)
## # A tibble: 19 × 5
## Year `GNI (current US$)` `Human Development Index` Material footprint per …¹
## <dbl> <dbl> <dbl> <dbl>
## 1 2004 247073387718. 0.812 12.2
## 2 2005 300097697933. 0.819 12.8
## 3 2006 335710266767. 0.824 13.3
## 4 2007 414328293502. 0.828 15.0
## 5 2008 522449799564. 0.834 16.6
## 6 2009 426112978191. 0.838 15.6
## 7 2010 459919411004. 0.845 16.1
## 8 2011 505767086263. 0.851 17.9
## 9 2012 476416087985. 0.855 15.7
## 10 2013 497028586507. 0.865 14.5
## 11 2014 518519328638. 0.867 14.8
## 12 2015 459254808330. 0.869 15.0
## 13 2016 451792769071. 0.872 15.5
## 14 2017 502404215916. 0.874 15.4
## 15 2018 563961181889. 0.876 16.4
## 16 2019 571159107928. 0.88 15.0
## 17 2020 576674352356. 0.874 15.5
## 18 2021 650472606429. 0.876 16.8
## 19 2022 660975714630. 0.881 16.5
## # ℹ abbreviated name: ¹`Material footprint per capita`
## # ℹ 1 more variable: `Life Expectancy at Birth` <dbl>
print(names(Poland))
## [1] "Year" "GNI (current US$)"
## [3] "Human Development Index" "Material footprint per capita"
## [5] "Life Expectancy at Birth"
# Usuń kolumny z Year i Human Development Index
Poland_selected2 <- Poland[, !(names(Poland) %in% c("Year", "Human Development Index"))]
# Oblicz macierz korelacji dla pozostałych zmiennych
correlation_matrix2 <- cor(na.omit(Poland_selected2))
# Wyświetl macierz korelacji
print(correlation_matrix2)
## GNI (current US$) Material footprint per capita
## GNI (current US$) 1.0000000 0.7737089
## Material footprint per capita 0.7737089 1.0000000
## Life Expectancy at Birth 0.6470277 0.4234534
## Life Expectancy at Birth
## GNI (current US$) 0.6470277
## Material footprint per capita 0.4234534
## Life Expectancy at Birth 1.0000000
# Przekształć macierz korelacji w długi format
correlation_matrix_melt2 <- melt(correlation_matrix2)
# Tworzenie wykresu
ggplot(data = correlation_matrix_melt2, aes(x = Var1, y = Var2, fill = value)) +
geom_tile() +
scale_fill_gradient2(midpoint = 0, low = "blue", high = "red", mid = "white",
limits = c(-1, 1)) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
axis.title = element_blank())
Na podstawie eliminacji a posteriori wybraliśmy zmienne objaśniające GNI (current US$), Material footprint per capita oraz Life Expectancy at Birth do naszego modelu ekonometrycznego, w którym zmienną objaśnianą jest wskaźnik HDI. Te zmienne zostały wyselekcjonowane z uwagi na ich istotny wpływ na zmienną objaśnianą, co pozwoli na dokładniejsze modelowanie i analizę czynników determinujących poziom rozwoju ludzkości.
q2 <- ggplot(Poland, aes(x = Year, y = `GNI (current US$)`)) +
geom_line() + # Dodaje linię
geom_point() + # Dodaje punkty na każde obserwacje
labs(title = "Rozkład GNI (current US$) w czasie",
x = "Rok",
y = "current US$") +
theme_minimal() # Styl wykresu
q3 <- ggplot(Poland, aes(x = Year, y = `Material footprint per capita`)) +
geom_line() + # Dodaje linię
geom_point() + # Dodaje punkty na każde obserwacje
labs(title = "Rozkład Material footprint per capita w czasie",
x = "Rok",
y = "CO2") +
theme_minimal() # Styl wykresu
q4 <- ggplot(Poland, aes(x = Year, y = `Life Expectancy at Birth`)) +
geom_line() + # Dodaje linię
geom_point() + # Dodaje punkty na każde obserwacje
labs(title = "Rozkład Life Expectancy at Birth w czasie",
x = "Rok",
y = "Lata") +
theme_minimal() # Styl wykresu
library(gridExtra)
##
## Dołączanie pakietu: 'gridExtra'
## Następujący obiekt został zakryty z 'package:dplyr':
##
## combine
## Następujący obiekt został zakryty z 'package:randomForest':
##
## combine
grid.arrange(q2,q3,q4, nrow = 3)
q2
q3
q4
Pierwszy wykres przedstawia rozkład dochodu narodowego brutto (GNI) w bieżących dolarach amerykańskich (US$) w latach 2004-2022. Na osi poziomej (x) oznaczono kolejne lata, a na osi pionowej (y) wartość GNI wyrażone w dolarach. Na wykresie możemy zauważyć ogólny trend wzrostowy dochodu narodowego brutto w badanym okresie. W latach 2004-2008 dochód narodowy brutto wzrastał, osiągając szczyt w 2008 roku. Następnie widoczny jest spadek w 2009 roku, po którym dochód narodowy brutto ponownie wzrastał w kolejnych latach, mimo pewnych wahań. Szczególnie widoczny jest znaczący wzrost po 2020 roku, który może być związany z ożywieniem gospodarczym po pandemii COVID-19.
Drugi wykres pokazuje rozkład śladu materiałowego per capita (na mieszkańca) w latach 2004-2022. Na osi poziomej (x) oznaczono kolejne lata, a na osi pionowej (y) wartość śladu materiałowego wyrażoną w jednostkach CO2. Analizując wykres, można zauważyć pewne zmiany w wartości śladu materiałowego w badanym okresie. Początkowo, od 2004 roku, wartość ta rośnie, osiągając szczyt w 2011 roku. Późniejsze lata charakteryzują się zmiennością bez wyraźnego, jednolitego kierunku. Widoczny jest znaczący spadek do około 2013 roku, po którym ślad materiałowy na mieszkańca ponownie zaczyna wzrastać, mimo pewnych wahań. Wyraźnie widać wzrosty w latach 2018 i 2021, jednak w 2022 roku wartość ta nieco spada. Zmienne trendy w śladzie materiałowym mogą być wynikiem zmian w konsumpcji materiałów, politykach środowiskowych oraz innowacjach technologicznych wpływających na efektywność wykorzystania zasobów.
Ostatni wykres prezentuje rozkład oczekiwanej długości życia przy urodzeniu w latach 2004-2022. Na osi poziomej (x) oznaczono kolejne lata, a na osi pionowej (y) oczekiwaną długość życia przy urodzeniu, wyrażoną w latach. Na podstawie wykresu możemy wskazać ogólny trend wzrostowy oczekiwanej długości życia od 2004 do około 2014 roku, gdzie długość życia wzrosła z 75 do 77,5 lat. Po 2014 roku, wzrost staje się mniej wyraźny, a wartości wykazują pewne wahania. W szczególności po roku 2020 widoczny jest wyraźny spadek, który może być związany z pandemią COVID-19. Po tym spadku w 2021 roku, w 2022 roku ponownie obserwujemy wzrost. Podsumowując, wykres pokazuje długoterminowy trend wzrostowy oczekiwanej długości życia przy urodzeniu, mimo kilku okresów wahań, w tym znaczącego spadku w latach 2020-2021.
Analiza podsumowania modelu regresji liniowej (MNK - metoda najmniejszych kwadratów) dla indeksu rozwoju ludzkiego (Human Development Index - HDI) pokazuje, jak różne zmienne niezależne wpływają na HDI. Modelem objęto takie zmienne jak: oczekiwana długość życia przy urodzeniu, ślad materiałowy na mieszkańca i GNI (Gross National Income - dochód narodowy brutto) w dolarach amerykańskich.
Współczynnik inflacji wariancji jest miarą, która pozwala ocenić, czy w modelu regresji występuje problem wielokoliniowości między zmiennymi niezależnymi. Wielokoliniowość występuje, gdy jedna zmienna niezależna w modelu jest silnie skorelowana z innymi zmiennymi niezależnymi, co może prowadzić do problemów z oszacowaniem dokładnych wartości współczynników regresji i ich standardowych błędów .Rezultaty i ich interpretacja
VIF = 1: Nie ma korelacji między daną zmienną a innymi zmiennymi.
1 < VIF < 5: Wskazuje na umiarkowaną wielokoliniowość, która jest zazwyczaj akceptowalna.
VIF >= 5: Sugeruje silną wielokoliniowość, która może wymagać uwagi.
VIF(model)
## `Life Expectancy at Birth` `Material footprint per capita`
## 1.765154 2.556667
## `GNI (current US$)`
## 3.609195
Life Expectancy at Birth: 1.765
Material footprint per capita: 2.557
GNI (current US$): 3.609
summary(model)
##
## Call:
## lm(formula = `Human Development Index` ~ `Life Expectancy at Birth` +
## `Material footprint per capita` + `GNI (current US$)`)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.0078713 -0.0009466 0.0005655 0.0020022 0.0066070
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.592e-01 9.887e-02 -2.622 0.0192 *
## `Life Expectancy at Birth` 1.432e-02 1.306e-03 10.968 1.46e-08 ***
## `Material footprint per capita` -2.700e-03 1.111e-03 -2.430 0.0281 *
## `GNI (current US$)` 1.217e-13 1.719e-14 7.082 3.74e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.004122 on 15 degrees of freedom
## Multiple R-squared: 0.9726, Adjusted R-squared: 0.9672
## F-statistic: 177.8 on 3 and 15 DF, p-value: 6.076e-12
Life Expectancy at Birth (1.765) i Material footprint per capita (2.557) mają wartości VIF poniżej 5, co wskazuje na obecność umiarkowanej wielokoliniowości. Wartości te są akceptowalne, ale sugerują, że mogą istnieć pewne korelacje między tymi zmiennymi a innymi zmiennymi niezależnymi w modelu, jednak nie na tyle silne, aby poważnie wpłynąć na wyniki regresji.
GNI (current US$) (3.609) ma wartość VIF bliską 5, co również wskazuje na umiarkowaną wielokoliniowość. Jest to najwyższa wartość VIF w modelu, co sugeruje, że GNI może być bardziej skorelowany z innymi zmiennymi niż pozostałe zmienne niezależne. Mimo że wartość ta jest poniżej tradycyjnego progu problematycznego (5), warto zachować ostrożność przy interpretacji wpływu GNI na HDI, ponieważ pewien poziom współliniowości może wpływać na stabilność i interpretację współczynników.
Wszystkie zmienne modelu mają wartości VIF poniżej 5, co wskazuje na brak poważnej wielokoliniowości, która mogłaby wpłynąć na wiarygodność modelu. Wartości te są akceptowalne, ale zwracają uwagę na potrzebę świadomości możliwych relacji między zmiennymi, zwłaszcza dla GNI. Model, mimo umiarkowanej wielokoliniowości, zdaje się być solidny i jego wyniki mogą być interpretowane z umiarkowanym zaufaniem.
Zakres: Rezydua zmieniają się od -0.00787 do 0.00661, co wskazuje na stosunkowo niewielkie odchylenia wartości przewidywanych od rzeczywistych.
Rozkład: Mediana rezyduów wynosi 0.0005655, co sugeruje, że model ma tendencję do lekkiego niedoszacowania.
(Intercept): Wartość stałej wynosi -0.2592 z błędem standardowym 0.09887. Jest statystycznie znacząca (p = 0.0192), co wskazuje, że model uwzględniając tylko zmienne niezależne nie przewiduje dokładnie wartości HDI.
Life Expectancy at Birth: Każdy dodatkowy rok oczekiwanej długości życia przy urodzeniu zwiększa HDI o 0.01432. Jest to statystycznie bardzo znaczące (p < 0.00001).
Material footprint per capita: Każda jednostka śladu materiałowego na mieszkańca zmniejsza HDI o 0.0027, co również jest statystycznie znaczące (p = 0.0281).
GNI (current US$): Wzrost GNI o 1 USD zwiększa HDI o 1.217e-13, co jest statystycznie znaczące (p < 0.00001). Mimo, że efekt jest bardzo mały, jego statystyczna znacząść wskazuje na istotny wpływ GNI na HDI w tym modelu.
Błąd standardowy reszt: 0.004122, wskazuje na niską średnią kwadratową błędu reszt, co jest pożądane.
R-kwadrat: 0.9726 oznacza, że model wyjaśnia około 97.26% zmienności zmiennej zależnej (HDI) za pomocą wybranych zmiennych niezależnych.
R-kwadrat skorygowany: 0.9672, biorący pod uwagę liczbę zmiennych i próbek, również wskazuje na bardzo dobre dopasowanie modelu.
F-statystyka: Wartość 177.8 z p-value około 6.076e-12 pokazuje, że model jako całość jest dobrze dopasowany do danych i zmienne objaśniające mają istotny wpływ na zmienną objaśnianą.
Model regresji jest bardzo dobrze dopasowany do danych, z istotnymi statystycznie współczynnikami dla wszystkich zmiennych. Wyniki sugerują, że zarówno oczekiwana długość życia, jak i GNI mają pozytywny wpływ na HDI, podczas gdy ślad materiałowy wpływa negatywnie. Mimo niewielkich wartości bezwzględnych efektów, istotność statystyczna tych zmiennych wskazuje na ich znaczenie w modelowaniu HDI.
Cel: Test Durbin-Watsona jest używany do wykrycia autokorelacji pierwszego rzędu w resztach modelu regresji.
dwtest(model)
##
## Durbin-Watson test
##
## data: model
## DW = 2.0407, p-value = 0.2736
## alternative hypothesis: true autocorrelation is greater than 0
Wyniki: Statystyka DW = 2.0407, p-wartość = 0.2736.
Interpretacja: Wartość statystyki DW bliska 2 sugeruje, że nie ma znaczącej autokorelacji w resztach modelu.. Ponieważ p-wartość jest większa niż 0.05, nie odrzucamy hipotezy zerowej, czyli nie ma dowodów na istnienie autokorelacji pierwszego rzędu w resztach. Reszty modelu są niezależne, co jest pozytywnym sygnałem dotyczącym jakości modelu.
Cel: Test Breusch-Godfrey’a służy do wykrywania autokorelacji do określonego rzędu (tutaj do 12) w resztach modelu.
bgtest(model, order=12)
##
## Breusch-Godfrey test for serial correlation of order up to 12
##
## data: model
## LM test = 16.335, df = 12, p-value = 0.1764
Wyniki: LM test = 16.335, stopnie swobody (df) = 12, p-wartość = 0.1764.
Interpretacja: P-wartość jest większa niż 0.05, co oznacza, że nie ma wystarczających dowodów, aby odrzucić hipotezę zerową o braku autokorelacji reszt do 12-tego rzędu. Model nie wykazuje znaczących problemów z autokorelacją na tych poziomach.
Cel: Test Breusch-Pagan’a jest używany do wykrywania heteroskedastyczności w resztach modelu regresji.
bptest(model)
##
## studentized Breusch-Pagan test
##
## data: model
## BP = 3.1712, df = 3, p-value = 0.366
Wyniki: BP = 3.1712, df = 3, p-wartość = 0.366.
Interpretacja: P-wartość większa niż 0.05 wskazuje na brak wystarczających dowodów do odrzucenia hipotezy zerowej o homoskedastyczności reszt. To sugeruje, że wariancja reszt jest stała, co jest pożądaną właściwością w modelu regresyjnym.
Cel: Test RESET jest używany do sprawdzania, czy model regresji jest dobrze dopasowany, testując na obecność nieliniowych zależności i pominiętych zmiennych.
resettest(model)
##
## RESET test
##
## data: model
## RESET = 2.157, df1 = 2, df2 = 13, p-value = 0.1553
Wyniki: RESET = 2.157, df1 = 2, df2 = 13, p-wartość = 0.1553.
Interpretacja: P-wartość wynosząca 0.1553 jest większa niż 0.05, co oznacza, że nie ma wystarczających dowodów statystycznych do odrzucenia hipotezy zerowej. W związku z tym, na podstawie tego testu, możemy uznać, że model nie wykazuje istotnych problemów z pominiętymi zmiennymi lub nieliniowościami. Model wydaje się być odpowiednio dopasowany do dostępnych danych z tego punktu widzenia.
Wszystkie przeprowadzone testy (Durbin-Watson, Breusch-Godfrey, Breusch-Pagan, i RESET) nie wykazały znaczących problemów z modelowaniem. Dane wydają się być modelowane w sposób adekwatny, co oznacza, że model regresji MNK jest dobrze dopasowany i nie wykazuje poważnych niedociągnięć w zakresie autokorelacji, heteroskedastyczności czy specyfikacji modelu.
dane <- Poland
dane <- dane %>%
select(Year, GNI = `GNI (current US$)`) %>%
filter(!is.na(GNI)) # Usunięcie ewentualnych NA
wazona_srednia_ruchoma <- function(dane, okno, wagi) {
if (length(wagi) != okno) {
stop("Długość wektora wag musi być równa rozmiarowi okna")
}
wagi <- wagi / sum(wagi) # Normalizacja wag
result <- stats::filter(dane, wagi, sides = 1)
c(rep(NA, okno - 1), na.omit(result)) # Dodanie NA na początku i usunięcie NA z wyniku
}
okno <- 3 # Rozmiar okna
wagi <- c(0.5, 0.3, 0.2) # Wagi dla okna
# Obliczenie średniej ważonej ruchomej
dane$Prognoza_GNI <- wazona_srednia_ruchoma(dane$GNI, okno, wagi)
# Wizualizacja danych
ggplot(dane, aes(x = Year)) +
geom_line(aes(y = GNI), color = "blue") +
geom_line(aes(y = Prognoza_GNI), color = "red", linetype = "dashed") +
labs(title = "Prognoza GNI (current US$) metodą średniej ruchomej ważonej", y = "GNI (current US$)", x = "Rok")
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_line()`).
dane$Prognoza_GNI
## [1] NA NA 307299120307 367896766368 452665441186
## [6] 452657087665 462283558872 476081962071 481922052072 492592536902
## [11] 503651457868 484588920058 467376692762 478590900345 523060409533
## [16] 555248751714 572477144934 612470430507 640964509715
# Przygotowanie danych (upewnij się, że dane są bez NA)
dane_filtered <- dane %>%
filter(!is.na(Prognoza_GNI))
# Obliczanie błędów
n <- nrow(dane_filtered)
errors <- dane_filtered$GNI - dane_filtered$Prognoza_GNI
absolute_errors <- abs(errors)
relative_errors <- errors / dane_filtered$GNI
absolute_relative_errors <- abs(relative_errors)
# ME
me <- mean(errors)
# RMSE
rmse <- sqrt(mean(errors^2))
# MAE
mae <- mean(absolute_errors)
# MPE
mpe <- mean(relative_errors) * 100
# MAPE
mape <- mean(absolute_relative_errors) * 100
# MASE (assuming Y_i are ordered by time)
mase <- mae / mean(abs(diff(dane_filtered$GNI)))
# RMSPE
rmspe <- sqrt(mean(relative_errors^2)) *100
# Wydrukowanie wyników
cat("ME:", me, "\n")
## ME: 15359932476
cat("RMSE:", rmse, "\n")
## RMSE: 29640356713
cat("MAE:", mae, "\n")
## MAE: 24222550929
cat("MPE:", mpe, "%\n")
## MPE: 2.950971 %
cat("MAPE:", mape, "%\n")
## MAPE: 4.935065 %
cat("MASE:", mase, "\n")
## MASE: 0.5457879
cat("RMSPE:", rmspe, "%\n")
## RMSPE: 6.080207 %
results11 <- c(ME = me, RMSE = rmse, MAE = mae, MPE = mpe, MAPE = mape, MASE = mase, RMSPE = rmspe)
print(results11)
## ME RMSE MAE MPE MAPE MASE
## 1.535993e+10 2.964036e+10 2.422255e+10 2.950971e+00 4.935065e+00 5.457879e-01
## RMSPE
## 6.080207e+00
Wskaźniki błędów prognozy dla tej metody są następujące:
ME (Mean Error): 15 359 932 476 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami DNB. Dodatnia wartość ME sugeruje, że metoda średniej ruchomej ma tendencję do przeszacowywania rzeczywistych wartości DNB o około 15,4 miliarda jednostek.
RMSE (Root Mean Square Error): 29 640 356 713 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. Wyższa wartość RMSE oznacza większe błędy prognozy. W tym przypadku średni błąd kwadratowy wynosi około 29,6 miliarda jednostek, co wskazuje na dość duże odchylenia prognozy od rzeczywistości.
MAE (Mean Absolute Error): 24 222 550 929 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE w wysokości około 24,2 miliarda jednostek oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o tę kwotę.
MPE (Mean Percentage Error): 2.950971% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Tutaj wynosi on około 2,95%, co oznacza, że prognozy są przeciętnie o 2,95% wyższe lub niższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 4.935065% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszący 4,94% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 4,94%.
MASE (Mean Absolute Scaled Error): 0.5457879 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE poniżej 1 oznacza, że metoda średniej ruchomej jest lepsza od modelu naiwnego. W tym przypadku MASE wynoszący około 0,55 wskazuje, że prognozy są znacznie lepsze niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 6.080207% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszący 6,08% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 6,08%.
Wskaźniki błędów prognozy sugerują, że metoda średniej ruchomej użyta do prognozowania Dochodu Narodowego Brutto jest dość dokładna, choć ma tendencję do umiarkowanego przeszacowywania rzeczywistych wartości. Relatywnie niskie wartości MAPE i RMSPE wskazują, że błędy prognozy są stosunkowo małe w kontekście rzeczywistych wartości DNB. Wartość MASE poniżej 1 dodatkowo potwierdza, że metoda średniej ruchomej jest bardziej precyzyjna niż model naiwny.
odchylenie_standardowe_GNI<-sd(Poland$`GNI (current US$)`)
wsp_zmiennosci_GNI<-odchylenie_standardowe_GNI/mean(Poland$`GNI (current US$)`)*100
wsp_zmiennosci_GNI
## [1] 22.32096
Odchylenie standardowe stanowi 22.32% średniego poziomu dochodu narodowego brutto - wartość wskaźnika jest wyższa od 10%, nie można zatem przyjąć, że jest to zjawisko o niskiej zmienności, rezygnujemy z metody prognozowania średniej ruchomej ważonej
dane <- Poland
# Sprawdź poprawność nazw kolumn, usuwając ewentualne białe znaki
names(dane) <- trimws(names(dane))
# Model liniowy dla GNI (current US$)
linear_model <- lm(`GNI (current US$)` ~ Year, data = dane)
# Przygotowanie danych dla kolejnych 5 lat
max_year <- max(dane$Year)
future_years <- data.frame(Year = seq(max_year + 1, max_year + 2, by = 0.25))
# Prognoza dla modelu liniowego
future_predictions_linear <- predict(linear_model, newdata = future_years)
# Dodanie prognoz do przyszłych danych
future_years$`Predicted GNI (Linear Model)` <- future_predictions_linear
# Wyświetlenie prognoz
print(future_years)
## Year Predicted GNI (Linear Model)
## 1 2023.00 649361883495
## 2 2023.25 653569459950
## 3 2023.50 657777036405
## 4 2023.75 661984612860
## 5 2024.00 666192189315
# Wizualizacja trendów z użyciem ggplot2
ggplot(dane, aes(x = Year, y = `GNI (current US$)`)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue", formula = y ~ x) +
geom_line(data = future_years, aes(y = `Predicted GNI (Linear Model)`, x = Year), color = "blue", linetype = "dashed") +
labs(title = "Prognozy trendów GNI (current US$)", x = "Rok", y = "GNI (current US$)") +
theme_minimal()
# Błędy prognoz
# Sprawdź poprawność nazw kolumn, usuwając ewentualne białe znaki
names(dane) <- trimws(names(dane))
# Obliczanie błędów prognoz
# Prognozy na danych historycznych
historical_predictions <- predict(linear_model, newdata = dane)
# Obliczanie błędów
me <- mean(dane$`GNI (current US$)` - historical_predictions)
rmse <- rmse(dane$`GNI (current US$)`, historical_predictions)
mae <- mae(dane$`GNI (current US$)`, historical_predictions)
mpe <- mean((dane$`GNI (current US$)` - historical_predictions) / dane$`GNI (current US$)`) * 100
mape <- mape(dane$`GNI (current US$)`, historical_predictions)*100
mase <- mae / mean(abs(diff(dane$`GNI (current US$)`)))
rmspe <- sqrt(mean(((dane$`GNI (current US$)` - historical_predictions) / dane$`GNI (current US$)`)^2)) * 100
# Wyświetlenie wyników
cat("ME:", me, "\n")
## ME: 0.0008866148
cat("RMSE:", rmse, "\n")
## RMSE: 49246373480
cat("MAE:", mae, "\n")
## MAE: 39146584970
cat("MPE:", mpe, "\n")
## MPE: -1.545713
cat("MAPE:", mape, "\n")
## MAPE: 9.179596
cat("MASE:", mase, "\n")
## MASE: 0.8821975
cat("RMSPE:", rmspe, "%\n")
## RMSPE: 12.32976 %
results12 <- c(ME = me, RMSE = rmse, MAE = mae, MPE = mpe, MAPE = mape, MASE = mase, RMSPE = rmspe)
print(results12)
## ME RMSE MAE MPE MAPE
## 8.866148e-04 4.924637e+10 3.914658e+10 -1.545713e+00 9.179596e+00
## MASE RMSPE
## 8.821975e-01 1.232976e+01
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): -0.0008866148 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami DNB. Negatywna wartość ME bliska zeru sugeruje, że model liniowy ma tendencję do minimalnego niedoszacowywania rzeczywistych wartości DNB, jednak różnica ta jest praktycznie znikoma.
RMSE (Root Mean Square Error): 49 246 373 480 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. Wysoka wartość RMSE oznacza większe błędy prognozy. W tym przypadku średni błąd kwadratowy wynosi około 49,2 miliarda jednostek, co wskazuje na znaczące odchylenia prognozy od rzeczywistości.
MAE (Mean Absolute Error): 39 146 584 970 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE w wysokości około 39,1 miliarda jednostek oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o tę kwotę.
MPE (Mean Percentage Error): 1.545713 Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Tutaj wynosi on około 1,55%, co oznacza, że prognozy są przeciętnie o 1,55% niższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 0.09179596 Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszący 0,092% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 0,092%.
MASE (Mean Absolute Scaled Error): 0.8821975 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE poniżej 1 oznacza, że metoda modelu liniowego jest lepsza od modelu naiwnego. W tym przypadku MASE wynoszący około 0,88 wskazuje, że prognozy są bardziej precyzyjne niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 12.32976% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszący 12,33% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 12,33%.
Wskaźniki błędów prognozy sugerują, że model liniowy użyty do prognozowania Dochodu Narodowego Brutto ma umiarkowaną dokładność. Mimo że średni błąd (ME) jest bardzo mały, inne wskaźniki, takie jak RMSE i MAE, wskazują na znaczące odchylenia prognozy od rzeczywistości. Relatywnie niski MAPE sugeruje, że procentowe różnice między prognozowanymi a rzeczywistymi wartościami są małe, co wskazuje na dobrą relatywną dokładność modelu. Wartość MASE poniżej 1 potwierdza, że model liniowy jest bardziej precyzyjny niż model naiwny, jednak wartość RMSPE sugeruje, że błędy względne są zauważalne.
# Sprawdź poprawność nazw kolumn
names(Poland) <- trimws(names(Poland))
# Model nieliniowy (wielomianowy stopnia 3) dla GNI (current US$)
polynomial_model <- lm(`GNI (current US$)` ~ poly(Year, 3), data = Poland)
# Przygotowanie danych dla kolejnych 2 lat
max_year <- max(Poland$Year)
future_years <- data.frame(Year = seq(max_year + 1, max_year + 2, by = 0.5))
# Prognoza dla modelu nieliniowego
future_predictions_poly <- predict(polynomial_model, newdata = future_years)
# Dodanie prognoz do przyszłych danych
future_years$`Predicted GNI (Polynomial Model)` <- future_predictions_poly
# Wyświetlenie prognoz
print(future_years)
## Year Predicted GNI (Polynomial Model)
## 1 2023.0 762904592179
## 2 2023.5 806655093249
## 3 2024.0 854909561294
# Wizualizacja trendów z użyciem ggplot2
library(ggplot2)
ggplot(Poland, aes(x = Year, y = `GNI (current US$)`)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue", formula = y ~ poly(x, 3)) +
geom_smooth(data = future_years, aes(y = `Predicted GNI (Polynomial Model)`), color = "red", se = FALSE) +
labs(title = "Prognozy trendów dochodu narodowego brutto (Model nieliniowy)", x = "Rok", y = "Dochód Narodowy Brutto (GNI, bieżące USD)")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : span too small. fewer data values than degrees of freedom.
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : pseudoinverse used at 2023
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : neighborhood radius 0.505
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : There are other near singularities as well. 0.25503
# Prognozy na danych historycznych
historical_predictions_poly <- predict(polynomial_model, newdata = Poland)
# Obliczanie błędów
me <- mean(dane$`GNI (current US$)`- historical_predictions_poly)
rmse <- rmse(dane$`GNI (current US$)`, historical_predictions_poly)
mae <- mae(dane$`GNI (current US$)`, historical_predictions_poly)
mpe <- mean((dane$`GNI (current US$)`- historical_predictions_poly) / dane$`GNI (current US$)`) * 100
mape <- mape(dane$`GNI (current US$)`, historical_predictions_poly)*100
mase <- mean(abs(historical_predictions_poly - dane$`GNI (current US$)`)) / mean(abs(diff(dane$`GNI (current US$)`)))
rmspe <- sqrt(mean(((historical_predictions_poly - dane$`GNI (current US$)`) / dane$`GNI (current US$)`)^2)) * 100
# Wyświetlenie wyników
cat("ME:", me, "\n")
## ME: 0.0001092209
cat("RMSE:", rmse, "\n")
## RMSE: 30384270830
cat("MAE:", mae, "\n")
## MAE: 24219866844
cat("MPE:", mpe, "\n")
## MPE: -0.4253595
cat("MAPE:", mape, "\n")
## MAPE: 5.085554
cat("MASE:", mase, "\n")
## MASE: 0.5458127
cat("RMSPE:", rmspe, "%\n")
## RMSPE: 6.293851 %
results13 <- c(ME = me, RMSE = rmse, MAE = mae, MPE = mpe, MAPE = mape, MASE = mase, RMSPE = rmspe)
print(results13)
## ME RMSE MAE MPE MAPE
## 1.092209e-04 3.038427e+10 2.421987e+10 -4.253595e-01 5.085554e+00
## MASE RMSPE
## 5.458127e-01 6.293851e+00
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): -0.0001092209 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami DNB. Negatywna wartość ME bliska zeru sugeruje, że model wielomianowy ma tendencję do minimalnego niedoszacowywania rzeczywistych wartości DNB, jednak różnica ta jest praktycznie znikoma.
RMSE (Root Mean Square Error): 30 384 270 830 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. Wysoka wartość RMSE oznacza większe błędy prognozy. W tym przypadku średni błąd kwadratowy wynosi około 30,4 miliarda jednostek, co wskazuje na znaczące odchylenia prognozy od rzeczywistości.
MAE (Mean Absolute Error): 24 219 866 844 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE w wysokości około 24,2 miliarda jednostek oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o tę kwotę. MPE (Mean Percentage Error): 0.4253595%
Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Tutaj wynosi on około 0,43%, co oznacza, że prognozy są przeciętnie o 0,43% niższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 0.05085554% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszący 0,051% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 0,051%.
MASE (Mean Absolute Scaled Error): 0.5458127 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE poniżej 1 oznacza, że metoda modelu wielomianowego jest lepsza od modelu naiwnego. W tym przypadku MASE wynoszący około 0,55 wskazuje, że prognozy są bardziej precyzyjne niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 6.293851% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszący 6,29% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 6,29%.
Wskaźniki błędów prognozy sugerują, że model wielomianowy użyty do prognozowania Dochodu Narodowego Brutto ma wysoką dokładność. Średni błąd (ME) jest bardzo mały, co sugeruje minimalne niedoszacowanie rzeczywistych wartości. Wskaźniki MAPE i MPE są niskie, co wskazuje na małe procentowe różnice między prognozowanymi a rzeczywistymi wartościami, co oznacza dobrą relatywną dokładność modelu. Wartość MASE poniżej 1 potwierdza, że model wielomianowy jest bardziej precyzyjny niż model naiwny. Jednak wartość RMSE wskazuje na znaczące absolutne odchylenia prognozy od rzeczywistości. Wartość RMSPE sugeruje, że błędy względne są stosunkowo niskie, co wskazuje na dobrą ogólną jakość prognozy w kontekście wielkości rzeczywistych wartości DNB.
### Ustalanie wartości stałych wygładzania α i β, tak aby błąd RMSPE był minimalny:
opt_holt_DNB <- ets(Poland$`GNI (current US$)`)
summary(opt_holt_DNB)
## ETS(M,A,N)
##
## Call:
## ets(y = Poland$`GNI (current US$)`)
##
## Smoothing parameters:
## alpha = 0.9419
## beta = 1e-04
##
## Initial states:
## l = 272672154607.105
## b = 26512400898.0159
##
## sigma: 0.1164
##
## AIC AICc BIC
## 1001.398 1006.013 1006.120
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -6400890017 48407447235 37490975144 -1.984063 8.475325 0.8448871
## ACF1
## Training set -0.1144052
checkresiduals(opt_holt_DNB)
##
## Ljung-Box test
##
## data: Residuals from ETS(M,A,N)
## Q* = 3.4812, df = 4, p-value = 0.4807
##
## Model df: 0. Total lags used: 4
prognoza_opt_holt_DNB <- forecast(opt_holt_DNB, h=1)
summary(prognoza_opt_holt_DNB)
##
## Forecast method: ETS(M,A,N)
##
## Model Information:
## ETS(M,A,N)
##
## Call:
## ets(y = Poland$`GNI (current US$)`)
##
## Smoothing parameters:
## alpha = 0.9419
## beta = 1e-04
##
## Initial states:
## l = 272672154607.105
## b = 26512400898.0159
##
## sigma: 0.1164
##
## AIC AICc BIC
## 1001.398 1006.013 1006.120
##
## Error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -6400890017 48407447235 37490975144 -1.984063 8.475325 0.8448871
## ACF1
## Training set -0.1144052
##
## Forecasts:
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 20 688249563662 585564463515 790934663809 531206255029 845292872296
RMSPE_1 <- 48407447235 / mean(Poland$`GNI (current US$)`) * 100
#### Wykres
wykres_DNB <- autoplot(prognoza_opt_holt_DNB, xlab = "Rok") +
scale_x_discrete(limits = as.character(2004:2023)) + # Ustawiamy limity osi X
labs(title = "Prognoza dochodu narodowego brutto na rok 2023",
x = "Rok",
y = "Dochód Narodowy Brutto ($)")
## Scale for x is already present.
## Adding another scale for x, which will replace the existing scale.
print(wykres_DNB)
# Błędy prognoz - wyświetlenie wyników
cat("ME:", -6400890017, "\n")
## ME: -6400890017
cat("RMSE:", 48407447235, "\n")
## RMSE: 48407447235
cat("MAE:", 37490975144, "\n")
## MAE: 37490975144
cat("MPE:", -1.984063, "\n")
## MPE: -1.984063
cat("MAPE:", 8.475325, "\n")
## MAPE: 8.475325
cat("MASE:", 0.844887, "\n")
## MASE: 0.844887
cat("RMSPE:", RMSPE_1, "%\n")
## RMSPE: 10.06269 %
results14 <- c(ME = -6400890017, RMSE = 48407447235, MAE = 37490975144, MPE = -1.984063, MAPE = 8.475325, MASE = 0.844887, RMSPE = RMSPE_1)
print(results14)
## ME RMSE MAE MPE MAPE
## -6.400890e+09 4.840745e+10 3.749098e+10 -1.984063e+00 8.475325e+00
## MASE RMSPE
## 8.448870e-01 1.006269e+01
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): -6 400 890 017 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami DNB. Negatywna wartość ME sugeruje, że metoda Holta ma tendencję do niedoszacowywania rzeczywistych wartości DNB o około 6,4 miliarda jednostek.
RMSE (Root Mean Square Error): 48 407 447 235 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. Wysoka wartość RMSE oznacza większe błędy prognozy. W tym przypadku średni błąd kwadratowy wynosi około 48,4 miliarda jednostek, co wskazuje na znaczące odchylenia prognozy od rzeczywistości.
MAE (Mean Absolute Error): 37 490 975 144 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE w wysokości około 37,5 miliarda jednostek oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o tę kwotę.
MPE (Mean Percentage Error): -1.984063% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Negatywna wartość MPE wynosząca około -1,98% oznacza, że prognozy są przeciętnie o 1,98% niższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 8.475325% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszący 8,48% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 8,48%.
MASE (Mean Absolute Scaled Error): 0.844887 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE poniżej 1 oznacza, że metoda Holta jest lepsza od modelu naiwnego. W tym przypadku MASE wynoszący około 0,84 wskazuje, że prognozy są bardziej precyzyjne niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 10.06269% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszący 10,06% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 10,06%.
Wskaźniki błędów prognozy sugerują, że metoda Holta użyta do prognozowania Dochodu Narodowego Brutto ma umiarkowaną dokładność. Negatywna wartość średniego błędu (ME) wskazuje na tendencję do niedoszacowywania rzeczywistych wartości DNB. Relatywnie wysokie wartości RMSE i MAE wskazują na znaczące absolutne odchylenia prognozy od rzeczywistości. Wartość MAPE wskazuje na istotne procentowe różnice między prognozowanymi a rzeczywistymi wartościami, co sugeruje, że prognozy mogą być mniej dokładne w ujęciu względnym. MASE poniżej 1 sugeruje, że metoda Holta jest bardziej precyzyjna niż model naiwny. RMSPE wskazuje na dość wysokie względne błędy prognozy w kontekście rzeczywistych wartości DNB.
# Dopasuj automatycznie model ARIMA do danych Indeksu Rozwoju Ludzkiego dla Polski
fit_GNI <- auto.arima(Poland$`GNI (current US$)`)
summary(fit_GNI)
## Series: Poland$`GNI (current US$)`
## ARIMA(0,1,0)
##
## sigma^2 = 2.877e+21: log likelihood = -470.24
## AIC=942.48 AICc=942.73 BIC=943.37
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 21797336851 52205208958 42051482032 4.503634 9.064183 0.9476615
## ACF1
## Training set -0.1432803
# Stwórz prognozy dla następnych trzech okresów
forecasts_GNI_fit <- forecast(fit_GNI, h = 2)
# Obliczenie reszt
residuals_GNI_fit <-fit_GNI$resid
plot(residuals_GNI_fit)
# Testy ACF i PACF dla reszt
acf(residuals_GNI_fit, lag.max = ,
type = c("correlation"),
plot = TRUE, na.action = na.fail)
pacf(residuals_GNI_fit, lag.max = ,
plot = TRUE, na.action = na.fail)
# Stwórz dataframe zawierający dane faktyczne, prognozowane i zakresy błędów
time_series_data_GNI_fit <- data.frame(Time = time(Poland$`GNI (current US$)`),
GNI = Poland$`GNI (current US$)`,
Fitted = fitted(fit_GNI))
forecasts_data_GNI_fit <- data.frame(Time = time(forecasts_GNI_fit$mean),
Forecast = as.numeric(forecasts_GNI_fit$mean),
Lo80 = as.numeric(forecasts_GNI_fit$lower[, "80%"]),
Hi80 = as.numeric(forecasts_GNI_fit$upper[, "80%"]),
Lo95 = as.numeric(forecasts_GNI_fit$lower[, "95%"]),
Hi95 = as.numeric(forecasts_GNI_fit$upper[, "95%"]))
# Stwórz wykres z użyciem ggplot2
ggplot() +
geom_line(data = time_series_data_GNI_fit, aes(x = Time, y = GNI), color = "red", size = 1, linetype = "solid") +
geom_line(data = time_series_data_GNI_fit, aes(x = Time, y = Fitted), color = "blue", size = 1, linetype = "dashed") +
geom_line(data = forecasts_data_GNI_fit, aes(x = Time, y = Forecast), color = "green", size = 1, linetype = "solid") +
geom_ribbon(data = forecasts_data_GNI_fit, aes(x = Time, ymin = Lo95, ymax = Hi95), fill = "blue", alpha = 0.2) +
geom_ribbon(data = forecasts_data_GNI_fit, aes(x = Time, ymin = Lo80, ymax = Hi80), fill = "blue", alpha = 0.4) +
labs(title = "Prognoza Dochodu Narodowego Brutto dla Polski (Auto ARIMA)",
x = "Czas",
y = "Dochód Narodowy Brutto") +
theme_minimal()
## 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.
RMSPE_2 <- 52205208958 / mean(Poland$`GNI (current US$)`) * 100
# Błędy prognoz - wyświetlenie wyników
cat("ME:", 21797336851, "\n")
## ME: 21797336851
cat("RMSE:", 52205208958, "\n")
## RMSE: 52205208958
cat("MAE:", 42051482032, "\n")
## MAE: 42051482032
cat("MPE:", 4.503634, "\n")
## MPE: 4.503634
cat("MAPE:", 9.064183, "\n")
## MAPE: 9.064183
cat("MASE:", 0.9476615, "\n")
## MASE: 0.9476615
cat("RMSPE:", RMSPE_2, "%\n")
## RMSPE: 10.85215 %
results15 <- c(ME = 21797336851, RMSE = 52205208958, MAE = 42051482032, MPE = 4.503634, MAPE = 9.064183, MASE = 0.9476615, RMSPE = RMSPE_2)
print(results15)
## ME RMSE MAE MPE MAPE MASE
## 2.179734e+10 5.220521e+10 4.205148e+10 4.503634e+00 9.064183e+00 9.476615e-01
## RMSPE
## 1.085215e+01
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): 21 797 336 851 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami DNB. Dodatnia wartość ME sugeruje, że metoda ARIMA ma tendencję do przeszacowywania rzeczywistych wartości DNB o około 21,8 miliarda jednostek.
RMSE (Root Mean Square Error): 52 205 208 958 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. Wysoka wartość RMSE oznacza większe błędy prognozy. W tym przypadku średni błąd kwadratowy wynosi około 52,2 miliarda jednostek, co wskazuje na znaczące odchylenia prognozy od rzeczywistości.
MAE (Mean Absolute Error): 42 051 482 032 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE w wysokości około 42 miliarda jednostek oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o tę kwotę.
MPE (Mean Percentage Error): 4.503634% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Tutaj wynosi on około 4,50%, co oznacza, że prognozy są przeciętnie o 4,50% wyższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 9.064183% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszący 9,06% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 9,06%.
MASE (Mean Absolute Scaled Error): 0.9476615 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE poniżej 1 oznacza, że metoda ARIMA jest lepsza od modelu naiwnego. W tym przypadku MASE wynoszący około 0,95 wskazuje, że prognozy są bardziej precyzyjne niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 10.85215% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszący 10,85% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 10,85%.
Wskaźniki błędów prognozy sugerują, że metoda ARIMA użyta do prognozowania Dochodu Narodowego Brutto ma umiarkowaną dokładność. Dodatnia wartość średniego błędu (ME) wskazuje na tendencję do przeszacowywania rzeczywistych wartości DNB. Wysokie wartości RMSE i MAE wskazują na znaczące absolutne odchylenia prognozy od rzeczywistości. Relatywnie wysoki MAPE wskazuje na istotne procentowe różnice między prognozowanymi a rzeczywistymi wartościami, co sugeruje, że prognozy mogą być mniej dokładne w ujęciu względnym. Wartość MASE poniżej 1 sugeruje, że metoda ARIMA jest bardziej precyzyjna niż model naiwny. RMSPE wskazuje na dość wysokie względne błędy prognozy w kontekście rzeczywistych wartości DNB, co sugeruje umiarkowaną dokładność prognozy w odniesieniu do wielkości rzeczywistych wartości DNB.
# Funkcja do formatowania wyników
format_results <- function(results) {
c(
sprintf("%.0f", results["RMSE"]),
sprintf("%.0f", results["MAE"]),
sprintf("%.6f %%", results["MPE"]),
sprintf("%.6f %%", results["MAPE"]),
sprintf("%.7f", results["MASE"]),
sprintf("%.6f %%", results["RMSPE"])
)
}
# Stworzenie tabeli z zestawieniem wszystkich wektorów
results_table <- data.frame(
Błędy = c("RMSE", "MAE", "MPE", "MAPE", "MASE", "RMSPE"),
`Metoda średniej ruchomej` = format_results(results11),
`Model Liniowy` = format_results(results12),
`Model Wielomianowy` = format_results(results13),
`Metoda Holta` = format_results(results14),
`ARIMA` = format_results(results15)
)
# Wyświetlenie tabeli z wykorzystaniem funkcji kableExtra
kable(results_table, caption = "Porównanie metod prognozowania Dochodu Narodowego Brutto", align = 'c') %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F) %>%
column_spec(1, bold = TRUE) %>%
add_header_above(c(" " = 1, "Metody Prognozowania" = 5)) %>%
row_spec(0, bold = TRUE)
Błędy | Metoda.średniej.ruchomej | Model.Liniowy | Model.Wielomianowy | Metoda.Holta | ARIMA |
---|---|---|---|---|---|
RMSE | 29640356713 | 49246373480 | 30384270830 | 48407447235 | 52205208958 |
MAE | 24222550929 | 39146584970 | 24219866844 | 37490975144 | 42051482032 |
MPE | 2.950971 % | -1.545713 % | -0.425359 % | -1.984063 % | 4.503634 % |
MAPE | 4.935065 % | 9.179596 % | 5.085554 % | 8.475325 % | 9.064183 % |
MASE | 0.5457879 | 0.8821975 | 0.5458127 | 0.8448870 | 0.9476615 |
RMSPE | 6.080207 % | 12.329763 % | 6.293851 % | 10.062688 % | 10.852147 % |
Analiza wskaźników błędów wykazała, że model wielomianowy (trzeci stopień) osiągnął najlepsze wyniki we wszystkich kategoriach. Model ten charakteryzował się najniższymi wartościami RMSE (30,384,270,830), MAE (24,219,866,844), MPE (-0.425359%), MAPE (5.085554%), MASE (0.5458127) oraz RMSPE (6.293851%). Niskie wartości tych wskaźników sugerują, że model wielomianowy zapewnia najwyższą dokładność prognoz, minimalizując błędy zarówno bezwzględne, jak i względne.
Pomimo tego, prognoza uzyskana za pomocą średniej ruchomej osiągnęła najniższy błąd średniokwadratowy procentowy (RMSPE). Niemniej jednak, ze względu na wysoki wskaźnik zmienności, zastosowanie tej metody do prognozowania zmiennej dochodu narodowego byłoby nieodpowiednie.
Model liniowy osiągnął znacznie gorsze wyniki w porównaniu do modelu wielomianowego, szczególnie w kategoriach MAPE (9.179596%) i RMSPE (12.329763%). Metoda Holta oraz model ARIMA, choć zaawansowane, również nie dorównały dokładności modelu wielomianowego, wykazując wyższe błędy we wszystkich analizowanych wskaźnikach.
Wnioski Na podstawie przeprowadzonej analizy można stwierdzić, że model wielomianowy jest najskuteczniejszą metodą prognozowania Dochodu Narodowego Brutto spośród pięciu analizowanych metod. Model ten wykazuje najniższe wartości błędów prognozowych, co wskazuje na jego wyższą dokładność i stabilność. Wielomian drugiego stopnia lepiej uchwyca nieliniowe zależności w danych, co jest kluczowe w prognozowaniu skomplikowanych trendów ekonomicznych. Dlatego, w kontekście prognozowania GNI, model wielomianowy powinien być preferowanym wyborem.
# Przygotowanie danych
dane <- Poland
dane <- dane %>%
select(Year, MFPC = `Material footprint per capita`) %>%
filter(!is.na(MFPC)) # Usunięcie ewentualnych NA
# Definicja funkcji obliczającej średnią ważoną ruchomą
wazona_srednia_ruchoma <- function(dane, okno, wagi) {
if (length(wagi) != okno) {
stop("Długość wektora wag musi być równa rozmiarowi okna")
}
wagi <- wagi / sum(wagi) # Normalizacja wag
result <- stats::filter(dane, wagi, sides = 1)
c(rep(NA, okno - 1), na.omit(result)) # Dodanie NA na początku i usunięcie NA z wyniku
}
# Parametry średniej ruchomej ważonej
okno <- 3 # Rozmiar okna
wagi <- c(0.5, 0.3, 0.2) # Wagi dla okna
# Obliczenie średniej ważonej ruchomej
dane$Prognoza_MFPC <- wazona_srednia_ruchoma(dane$MFPC, okno, wagi)
# Obliczenie prognozy na kolejny rok
ostatnie_mfpc <- tail(dane$MFPC, okno)
prognoza_na_kolejny_rok <- sum(ostatnie_mfpc * wagi)
prognoza_na_kolejny_rok
## [1] 16.08353
# Dodanie prognozy na kolejny rok do danych
dane_prognoza <- dane %>%
add_row(Year = max(dane$Year) + 1, MFPC = NA, Prognoza_MFPC = prognoza_na_kolejny_rok)
# Wizualizacja danych
ggplot(dane_prognoza, aes(x = Year)) +
geom_line(aes(y = MFPC), color = "blue") +
geom_line(aes(y = Prognoza_MFPC), color = "red", linetype = "dashed") +
labs(title = "Prognoza śladu materiałowego (na mieszkańca) metodą średniej ruchomej ważonej", y = "Ślad materiałowy (per capita)", x = "Rok")
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_line()`).
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_line()`).
# Przygotowanie danych bez NA
dane_filtered <- dane %>%
filter(!is.na(Prognoza_MFPC))
# Obliczanie błędów
n <- nrow(dane_filtered)
errors <- dane_filtered$MFPC - dane_filtered$Prognoza_MFPC
absolute_errors <- abs(errors)
relative_errors <- errors / dane_filtered$MFPC
absolute_relative_errors <- abs(relative_errors)
# ME
me <- mean(errors)
# RMSE
rmse <- sqrt(mean(errors^2))
# MAE
mae <- mean(absolute_errors)
# MPE
mpe <- mean(relative_errors) * 100
# MAPE
mape <- mean(absolute_relative_errors) * 100
# MASE (assuming Y_i are ordered by time)
mase <- mae / mean(abs(diff(dane_filtered$MFPC)))
# RMSPE
rmspe <- sqrt(mean(relative_errors^2)) * 100
# Wydrukowanie wyników
cat("ME:", me, "\n")
## ME: 0.1621888
cat("RMSE:", rmse, "\n")
## RMSE: 0.6103102
cat("MAE:", mae, "\n")
## MAE: 0.4721712
cat("MPE:", mpe, "%\n")
## MPE: 0.9315187 %
cat("MAPE:", mape, "%\n")
## MAPE: 2.996506 %
cat("MASE:", mase, "\n")
## MASE: 0.474878
cat("RMSPE:", rmspe, "%\n")
## RMSPE: 3.851042 %
results21 <- c(ME = me, RMSE = rmse, MAE = mae, MPE = mpe, MAPE = mape, MASE = mase, RMSPE = rmspe)
print(results21)
## ME RMSE MAE MPE MAPE MASE RMSPE
## 0.1621888 0.6103102 0.4721712 0.9315187 2.9965056 0.4748780 3.8510419
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): 0.1621888 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami Śladu Materiałowego. Dodatnia wartość ME sugeruje, że metoda Średniej Ruchomej Ważonej ma tendencję do przeszacowywania rzeczywistych wartości Śladu Materiałowego o około 0.162 jednostki.
RMSE (Root Mean Square Error): 0.6103102 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. RMSE wynoszące około 0.610 oznacza, że średnie odchylenie prognozy od rzeczywistych wartości wynosi około 0.610 jednostki.
MAE (Mean Absolute Error): 0.4721712 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE wynoszące około 0.472 oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o 0.472 jednostki.
MPE (Mean Percentage Error): 0.9315187% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Tutaj wynosi on około 0.931%, co oznacza, że prognozy są przeciętnie o 0.931% wyższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 2.996506% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszące około 2.997% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 2.997%.
MASE (Mean Absolute Scaled Error): 0.474878 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE poniżej 1 oznacza, że metoda Średniej Ruchomej Ważonej jest lepsza od modelu naiwnego. W tym przypadku MASE wynoszące około 0.475 wskazuje, że prognozy są znacznie lepsze niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 3.851042% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszące 3.851% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 3.851%.
Wskaźniki błędów prognozy sugerują, że metoda Średniej Ruchomej Ważonej użyta do prognozowania Śladu Materiałowego ma umiarkowaną dokładność. Dodatnia wartość średniego błędu (ME) wskazuje na tendencję do przeszacowywania rzeczywistych wartości Śladu Materiałowego. Wartości RMSE i MAE wskazują na umiarkowane absolutne odchylenia prognozy od rzeczywistości. Relatywnie niskie wartości MPE i MAPE wskazują na małe procentowe różnice między prognozowanymi a rzeczywistymi wartościami, co oznacza dobrą relatywną dokładność modelu. Wartość MASE poniżej 1 potwierdza, że metoda Średniej Ruchomej Ważonej jest bardziej precyzyjna niż model naiwny. RMSPE wskazuje na umiarkowane względne błędy prognozy w kontekście rzeczywistych wartości Śladu Materiałowego.
odchylenie_standardowe_material<-sd(Poland$`Material footprint per capita`)
wsp_zmiennosci_material<-odchylenie_standardowe_material/mean(Poland$`Material footprint per capita`)*100
wsp_zmiennosci_material
## [1] 9.141997
Odchylenie standardowe stanowi około 9.14% średniego poziomu śladu materiałowego na mieszkańca - wartość wskaźnika jest niższa od 10% można więc przyjąć, że jest to zjawisko o niskiej zmienności, możemy zatem korzystać z metody średniej ruchomej ważonej.
# Wczytanie potrzebnych bibliotek
library(dplyr)
library(ggplot2)
# Zakładamy, że 'Poland' to twoja tabela danych
dane <- Poland
# Sprawdź poprawność nazw kolumn, usuwając ewentualne białe znaki
names(dane) <- trimws(names(dane))
# Model liniowy dla Material footprint per capita
linear_model <- lm(`Material footprint per capita` ~ Year, data = dane)
# Przygotowanie danych dla kolejnych 5 lat
max_year <- max(dane$Year)
future_years <- data.frame(Year = seq(max_year + 1, max_year + 2, by = 0.5))
# Prognoza dla modelu liniowego
future_predictions_linear <- predict(linear_model, newdata = future_years)
# Dodanie prognoz do przyszłych danych
future_years$`Predicted Material Footprint (Linear Model)` <- future_predictions_linear
# Wyświetlenie prognoz
print(future_years)
## Year Predicted Material Footprint (Linear Model)
## 1 2023.0 16.62081
## 2 2023.5 16.68721
## 3 2024.0 16.75361
# Wizualizacja trendów z użyciem ggplot2
ggplot(dane, aes(x = Year, y = `Material footprint per capita`)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue", formula = y ~ x) +
geom_line(data = future_years, aes(y = `Predicted Material Footprint (Linear Model)`, x = Year), color = "blue", linetype = "dashed") +
labs(title = "Prognoza trendu Material footprint per capita", x = "Rok", y = "Material footprint per capita") +
theme_minimal()
# Obliczanie błędów prognoz
# Prognozy na danych historycznych
historical_predictions <- predict(linear_model, newdata = dane)
# Obliczanie błędów
me <- mean(dane$`Material footprint per capita` - historical_predictions)
rmse <- rmse(dane$`Material footprint per capita`, historical_predictions)
mae <- mae(dane$`Material footprint per capita`, historical_predictions)
mpe <- mean((dane$`Material footprint per capita` - historical_predictions) / dane$`Material footprint per capita`) * 100
mape <- mape(dane$`Material footprint per capita`, historical_predictions)*100
mase <- mean(abs(historical_predictions - dane$`Material footprint per capita`)) / mean(abs(diff(dane$`Material footprint per capita`)))
rmspe <- sqrt(mean(((historical_predictions - dane$`Material footprint per capita`) / dane$`Material footprint per capita`)^2)) * 100
# Wyświetlenie wyników
cat("ME:", me, "\n")
## ME: -5.216882e-14
cat("RMSE:", rmse, "\n")
## RMSE: 1.1501
cat("MAE:", mae, "\n")
## MAE: 0.9277953
cat("MPE:", mpe, "%\n")
## MPE: -0.5877515 %
cat("MAPE:", mape, "%\n")
## MAPE: 6.153644 %
cat("MASE:", mase, "\n")
## MASE: 0.9860664
cat("RMSPE:", rmspe, "%\n")
## RMSPE: 7.548452 %
results22 <- c(ME = me, RMSE = rmse, MAE = mae, MPE = mpe, MAPE = mape, MASE = mase, RMSPE = rmspe)
print(results22)
## ME RMSE MAE MPE MAPE
## -5.216882e-14 1.150100e+00 9.277953e-01 -5.877515e-01 6.153644e+00
## MASE RMSPE
## 9.860664e-01 7.548452e+00
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): -5.216882e-14 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami Śladu Materiałowego. Wartość ME jest bardzo bliska zeru, co sugeruje, że model liniowy nie ma znaczącej tendencji do przeszacowywania ani niedoszacowywania rzeczywistych wartości Śladu Materiałowego.
RMSE (Root Mean Square Error): 1.1501 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. RMSE wynoszące około 1.150 oznacza, że średnie odchylenie prognozy od rzeczywistych wartości wynosi około 1.150 jednostki.
MAE (Mean Absolute Error): 0.9277953 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE wynoszące około 0.928 oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o 0.928 jednostki.
MPE (Mean Percentage Error): -0.5877515% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Negatywna wartość MPE wynosząca około -0.588% oznacza, że prognozy są przeciętnie o 0.588% niższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 6.153644% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszące około 6.154% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 6.154%.
MASE (Mean Absolute Scaled Error): 0.9860664 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE bliska 1 oznacza, że metoda modelu liniowego jest podobnie dokładna jak model naiwny, choć nieco lepsza.
RMSPE (Root Mean Square Percentage Error): 7.548452% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszące 7.548% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 7.548%.
Wskaźniki błędów prognozy sugerują, że metoda modelu liniowego użyta do prognozowania Śladu Materiałowego ma umiarkowaną dokładność. Wartość średniego błędu (ME) jest praktycznie zerowa, co oznacza brak systematycznego przeszacowywania lub niedoszacowywania rzeczywistych wartości. Wartości RMSE i MAE wskazują na umiarkowane absolutne odchylenia prognozy od rzeczywistości. Relatywnie niskie wartości MPE i MAPE wskazują na umiarkowane procentowe różnice między prognozowanymi a rzeczywistymi wartościami. Wartość MASE bliska 1 sugeruje, że metoda modelu liniowego jest podobna do modelu naiwnego pod względem dokładności, choć nieco lepsza. RMSPE wskazuje na umiarkowane względne błędy prognozy w kontekście rzeczywistych wartości Śladu Materiałowego.
# Sprawdź poprawność nazw kolumn
names(Poland) <- trimws(names(Poland))
# Model nieliniowy (wielomianowy stopnia 3) dla Material footprint per capita
polynomial_model <- lm(`Material footprint per capita` ~ poly(Year, 3), data = Poland)
# Przygotowanie danych dla kolejnych 2 lat
max_year <- max(Poland$Year)
future_years <- data.frame(Year = seq(max_year + 1, max_year + 2, by = 0.5))
# Prognoza dla modelu nieliniowego
future_predictions_poly <- predict(polynomial_model, newdata = future_years)
# Dodanie prognoz do przyszłych danych
future_years$`Predicted Material Footprint (Polynomial Model)` <- future_predictions_poly
# Wyświetlenie prognoz
print(future_years)
## Year Predicted Material Footprint (Polynomial Model)
## 1 2023.0 18.06753
## 2 2023.5 18.70756
## 3 2024.0 19.42933
# Wizualizacja trendów z użyciem ggplot2
library(ggplot2)
ggplot(Poland, aes(x = Year, y = `Material footprint per capita`)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue", formula = y ~ poly(x, 3)) +
geom_smooth(data = future_years, aes(y = `Predicted Material Footprint (Polynomial Model)`), color = "red", se = FALSE) +
labs(title = "Prognozy trendów śladu materiałowego na mieszkańca (Model nieliniowy)", x = "Rok", y = "Ślad materiałowy na mieszkańca (t)")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : span too small. fewer data values than degrees of freedom.
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : pseudoinverse used at 2023
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : neighborhood radius 0.505
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : There are other near singularities as well. 0.25503
# Obliczanie błędów prognoz
# Prognozy na danych historycznych
historical_predictions_poly <- predict(polynomial_model, newdata = Poland)
# Obliczanie błędów
me <- mean(Poland$`Material footprint per capita` - historical_predictions_poly)
rmse <- rmse(Poland$`Material footprint per capita`, historical_predictions_poly)
mae <- mae(Poland$`Material footprint per capita`, historical_predictions_poly)
mpe <- mean((Poland$`Material footprint per capita` - historical_predictions_poly) / Poland$`Material footprint per capita`) * 100
mape <- mape(Poland$`Material footprint per capita`, historical_predictions_poly)*100
mase <- mean(abs(historical_predictions_poly - Poland$`Material footprint per capita`)) / mean(abs(diff(Poland$`Material footprint per capita`)))
rmspe <- sqrt(mean(((historical_predictions_poly - Poland$`Material footprint per capita`) / Poland$`Material footprint per capita`)^2)) * 100
# Wyświetlenie wyników
cat("ME:", me, "\n")
## ME: 4.768127e-15
cat("RMSE:", rmse, "\n")
## RMSE: 0.7616989
cat("MAE:", mae, "\n")
## MAE: 0.5864416
cat("MPE:", mpe, "%\n")
## MPE: -0.2314095 %
cat("MAPE:", mape, "%\n")
## MAPE: 3.79708 %
cat("MASE:", mase, "\n")
## MASE: 0.6232736
cat("RMSPE:", rmspe, "%\n")
## RMSPE: 4.821606 %
results23 <- c(ME = me, RMSE = rmse, MAE = mae, MPE = mpe, MAPE = mape, MASE = mase, RMSPE = rmspe)
print(results23)
## ME RMSE MAE MPE MAPE
## 4.768127e-15 7.616989e-01 5.864416e-01 -2.314095e-01 3.797080e+00
## MASE RMSPE
## 6.232736e-01 4.821606e+00
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): 4.768127e-15 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami Śladu Materiałowego. Wartość ME jest praktycznie zerowa, co sugeruje, że model wielomianowy nie ma znaczącej tendencji do przeszacowywania ani niedoszacowywania rzeczywistych wartości Śladu Materiałowego.
RMSE (Root Mean Square Error): 0.7616989 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. RMSE wynoszące około 0.762 oznacza, że średnie odchylenie prognozy od rzeczywistych wartości wynosi około 0.762 jednostki.
MAE (Mean Absolute Error): 0.5864416 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE wynoszące około 0.586 oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o 0.586 jednostki.
MPE (Mean Percentage Error): -0.2314095% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Negatywna wartość MPE wynosząca około -0.231% oznacza, że prognozy są przeciętnie o 0.231% niższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 3.79708% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszące około 3.797% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 3.797%.
MASE (Mean Absolute Scaled Error): 0.6232736 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE poniżej 1 oznacza, że metoda modelu wielomianowego jest lepsza od modelu naiwnego. W tym przypadku MASE wynoszące około 0.623 wskazuje, że prognozy są bardziej precyzyjne niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 4.821606% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszące 4.822% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 4.822%.
Wskaźniki błędów prognozy sugerują, że metoda modelu wielomianowego użyta do prognozowania Śladu Materiałowego ma dobrą dokładność. Wartość średniego błędu (ME) jest praktycznie zerowa, co oznacza brak systematycznego przeszacowywania lub niedoszacowywania rzeczywistych wartości. Wartości RMSE i MAE wskazują na umiarkowane absolutne odchylenia prognozy od rzeczywistości. Relatywnie niskie wartości MPE i MAPE wskazują na umiarkowane procentowe różnice między prognozowanymi a rzeczywistymi wartościami, co oznacza dobrą relatywną dokładność modelu. Wartość MASE poniżej 1 potwierdza, że metoda modelu wielomianowego jest bardziej precyzyjna niż model naiwny. RMSPE wskazuje na umiarkowane względne błędy prognozy w kontekście rzeczywistych wartości Śladu Materiałowego.
### Ustalanie wartości stałych wygładzania α i β, tak aby błąd RMSPE był minimalny:
opt_holt_MF <- ets(Poland$`Material footprint per capita`)
summary(opt_holt_MF)
## ETS(M,N,N)
##
## Call:
## ets(y = Poland$`Material footprint per capita`)
##
## Smoothing parameters:
## alpha = 0.9999
##
## Initial states:
## l = 12.133
##
## sigma: 0.0745
##
## AIC AICc BIC
## 64.03028 65.63028 66.86360
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.2304291 1.099124 0.8975229 1.379402 5.740285 0.9538926
## ACF1
## Training set -0.1008772
checkresiduals(opt_holt_MF)
##
## Ljung-Box test
##
## data: Residuals from ETS(M,N,N)
## Q* = 4.2764, df = 4, p-value = 0.3699
##
## Model df: 0. Total lags used: 4
prognoza_opt_holt_MF <- forecast(opt_holt_MF, h=1)
summary(prognoza_opt_holt_MF)
##
## Forecast method: ETS(M,N,N)
##
## Model Information:
## ETS(M,N,N)
##
## Call:
## ets(y = Poland$`Material footprint per capita`)
##
## Smoothing parameters:
## alpha = 0.9999
##
## Initial states:
## l = 12.133
##
## sigma: 0.0745
##
## AIC AICc BIC
## 64.03028 65.63028 66.86360
##
## Error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.2304291 1.099124 0.8975229 1.379402 5.740285 0.9538926
## ACF1
## Training set -0.1008772
##
## Forecasts:
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 20 16.51073 14.93369 18.08777 14.09886 18.9226
RMSPE_1_MF <- 1.099124 / mean(Poland$`Material footprint per capita`)*100
#### Wykres
wykres_MF <- autoplot(prognoza_opt_holt_MF, xlab = "Rok") +
scale_x_discrete(limits = as.character(2004:2023)) + # Ustawiamy limity osi X
labs(title = "Prognoza śladu materiałowego na rok 2023",
x = "Rok",
y = "Ślad materiałowy (na mieszkańca)")
## Scale for x is already present.
## Adding another scale for x, which will replace the existing scale.
print(wykres_MF)
# Błędy prognoz - wyświetlenie wyników
cat("ME:", 0.2304291, "\n")
## ME: 0.2304291
cat("RMSE:", 1.099124, "\n")
## RMSE: 1.099124
cat("MAE:", 0.8975229, "\n")
## MAE: 0.8975229
cat("MPE:", 1.379402, "%\n")
## MPE: 1.379402 %
cat("MAPE:", 5.740285, "%\n")
## MAPE: 5.740285 %
cat("MASE:", 0.9538926, "\n")
## MASE: 0.9538926
cat("RMSPE:", RMSPE_1_MF, "%\n")
## RMSPE: 7.187155 %
results24 <- c(ME = 0.2304291, RMSE = 1.099124, MAE = 0.8975229, MPE = 1.379402, MAPE = 5.740285, MASE = 0.9538926, RMSPE = RMSPE_1_MF)
print(results24)
## ME RMSE MAE MPE MAPE MASE RMSPE
## 0.2304291 1.0991240 0.8975229 1.3794020 5.7402850 0.9538926 7.1871547
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): 0.2304291 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami Śladu Materiałowego. Dodatnia wartość ME sugeruje, że metoda Holta ma tendencję do przeszacowywania rzeczywistych wartości Śladu Materiałowego o około 0.230 jednostki.
RMSE (Root Mean Square Error): 1.099124 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. RMSE wynoszące około 1.099 oznacza, że średnie odchylenie prognozy od rzeczywistych wartości wynosi około 1.099 jednostki.
MAE (Mean Absolute Error): 0.8975229 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE wynoszące około 0.898 oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o 0.898 jednostki.
MPE (Mean Percentage Error): 1.379402% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Tutaj wynosi on około 1.379%, co oznacza, że prognozy są przeciętnie o 1.379% wyższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 5.740285% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszące około 5.740% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 5.740%.
MASE (Mean Absolute Scaled Error): 0.9538926 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE bliska 1 oznacza, że metoda Holta jest podobnie dokładna jak model naiwny, choć nieco lepsza. W tym przypadku MASE wynoszące około 0.954 wskazuje, że prognozy są nieco bardziej precyzyjne niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 7.187155% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszące 7.187% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 7.187%.
Wskaźniki błędów prognozy sugerują, że metoda Holta użyta do prognozowania Śladu Materiałowego ma umiarkowaną dokładność. Dodatnia wartość średniego błędu (ME) wskazuje na tendencję do przeszacowywania rzeczywistych wartości Śladu Materiałowego. Wartości RMSE i MAE wskazują na umiarkowane absolutne odchylenia prognozy od rzeczywistości. Relatywnie niskie wartości MPE i MAPE wskazują na umiarkowane procentowe różnice między prognozowanymi a rzeczywistymi wartościami. Wartość MASE bliska 1 sugeruje, że metoda Holta jest podobna do modelu naiwnego pod względem dokładności, choć nieco lepsza. RMSPE wskazuje na umiarkowane względne błędy prognozy w kontekście rzeczywistych wartości Śladu Materiałowego.
# Dopasuj automatycznie model ARIMA do danych o śladzie materiałowym na osobę
fit_MaterialFootprint <- auto.arima(Poland$`Material footprint per capita`)
summary(fit_MaterialFootprint)
## Series: Poland$`Material footprint per capita`
## ARIMA(1,0,0) with non-zero mean
##
## Coefficients:
## ar1 mean
## 0.692 15.1184
## s.e. 0.192 0.7227
##
## sigma^2 = 1.261: log likelihood = -28.43
## AIC=62.86 AICc=64.46 BIC=65.69
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.1464419 1.062119 0.8478233 0.5023871 5.533222 0.9010717
## ACF1
## Training set -0.02719356
# Stwórz prognozy dla następnych trzech okresów
forecasts_MaterialFootprint <- forecast(fit_MaterialFootprint, h = 3)
# Obliczenie reszt
residuals_MaterialFootprint_fit <-fit_MaterialFootprint$resid
plot(residuals_MaterialFootprint_fit)
# Testy ACF i PACF dla reszt
acf(residuals_MaterialFootprint_fit, lag.max = ,
type = c("correlation"),
plot = TRUE, na.action = na.fail)
pacf(residuals_MaterialFootprint_fit, lag.max = ,
plot = TRUE, na.action = na.fail)
# Stwórz dataframe zawierający dane faktyczne, prognozowane i zakresy błędów
time_series_data_MaterialFootprint <- data.frame(Time = time(Poland$`Material footprint per capita`),
MaterialFootprint = Poland$`Material footprint per capita`,
Fitted = fitted(fit_MaterialFootprint))
forecasts_data_MaterialFootprint <- data.frame(Time = time(forecasts_MaterialFootprint$mean),
Forecast = as.numeric(forecasts_MaterialFootprint$mean),
Lo80 = as.numeric(forecasts_MaterialFootprint$lower[, "80%"]),
Hi80 = as.numeric(forecasts_MaterialFootprint$upper[, "80%"]),
Lo95 = as.numeric(forecasts_MaterialFootprint$lower[, "95%"]),
Hi95 = as.numeric(forecasts_MaterialFootprint$upper[, "95%"]))
# Stwórz wykres dla śladu materiałowego na osobę
wykres_MaterialFootprint <- ggplot() +
geom_line(data = time_series_data_MaterialFootprint, aes(x = Time, y = MaterialFootprint), color = "red", size = 1, linetype = "solid") +
geom_line(data = time_series_data_MaterialFootprint, aes(x = Time, y = Fitted), color = "blue", size = 1, linetype = "dashed") +
geom_line(data = forecasts_data_MaterialFootprint, aes(x = Time, y = Forecast), color = "green", size = 1, linetype = "solid") +
geom_ribbon(data = forecasts_data_MaterialFootprint, aes(x = Time, ymin = Lo95, ymax = Hi95), fill = "blue", alpha = 0.2) +
geom_ribbon(data = forecasts_data_MaterialFootprint, aes(x = Time, ymin = Lo80, ymax = Hi80), fill = "blue", alpha = 0.4) +
labs(title = "Prognoza śladu materiałowego na osobę dla Polski (Auto ARIMA)",
x = "Czas",
y = "Ślad Materiałowy na osobę") +
theme_minimal()
print(wykres_MaterialFootprint)
# Błędy prognozy
RMSPE_2_MF <- 1.062119 / mean(Poland$`Material footprint per capita`)*100
# Błędy prognoz - wyświetlenie wyników
cat("ME:", 0.1464419, "\n")
## ME: 0.1464419
cat("RMSE:", 1.062119, "\n")
## RMSE: 1.062119
cat("MAE:", 0.8478233, "\n")
## MAE: 0.8478233
cat("MPE:", 0.5023871, "%\n")
## MPE: 0.5023871 %
cat("MAPE:", 5.533222, "%\n")
## MAPE: 5.533222 %
cat("MASE:", 0.9010717, "\n")
## MASE: 0.9010717
cat("RMSPE:", RMSPE_2_MF, "%\n")
## RMSPE: 6.94518 %
results25 <- c(ME = 0.1464419, RMSE = 1.062119, MAE = 0.8478233, MPE = 0.5023871, MAPE = 5.533222, MASE = 0.9010717, RMSPE = RMSPE_2_MF)
print(results25)
## ME RMSE MAE MPE MAPE MASE RMSPE
## 0.1464419 1.0621190 0.8478233 0.5023871 5.5332220 0.9010717 6.9451796
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): 0.1464419 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami Śladu Materiałowego. Dodatnia wartość ME sugeruje, że metoda ARIMA ma tendencję do przeszacowywania rzeczywistych wartości Śladu Materiałowego o około 0.146 jednostki.
RMSE (Root Mean Square Error): 1.062119 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. RMSE wynoszące około 1.062 oznacza, że średnie odchylenie prognozy od rzeczywistych wartości wynosi około 1.062 jednostki.
MAE (Mean Absolute Error): 0.8478233 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE wynoszące około 0.848 oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o 0.848 jednostki.
MPE (Mean Percentage Error): 0.5023871% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Tutaj wynosi on około 0.502%, co oznacza, że prognozy są przeciętnie o 0.502% wyższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 5.533222% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszące około 5.533% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 5.533%.
MASE (Mean Absolute Scaled Error): 0.9010717 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE poniżej 1 oznacza, że metoda ARIMA jest lepsza od modelu naiwnego. W tym przypadku MASE wynoszące około 0.901 wskazuje, że prognozy są bardziej precyzyjne niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 6.94518% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszące 6.945% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 6.945%.
Wskaźniki błędów prognozy sugerują, że metoda ARIMA użyta do prognozowania Śladu Materiałowego ma umiarkowaną do dobrą dokładność. Dodatnia wartość średniego błędu (ME) wskazuje na tendencję do przeszacowywania rzeczywistych wartości Śladu Materiałowego. Wartości RMSE i MAE wskazują na umiarkowane absolutne odchylenia prognozy od rzeczywistości. Relatywnie niskie wartości MPE i MAPE wskazują na umiarkowane procentowe różnice między prognozowanymi a rzeczywistymi wartościami. Wartość MASE poniżej 1 sugeruje, że metoda ARIMA jest bardziej precyzyjna niż model naiwny. RMSPE wskazuje na umiarkowane względne błędy prognozy w kontekście rzeczywistych wartości Śladu Materiałowego.
##Podsumowanie
# Funkcja do formatowania wyników
format_results2 <- function(results) {
c(
sprintf("%.6f", results["RMSE"]),
sprintf("%.6f", results["MAE"]),
sprintf("%.6f %%", results["MPE"]),
sprintf("%.6f %%", results["MAPE"]),
sprintf("%.7f", results["MASE"]),
sprintf("%.6f %%", results["RMSPE"])
)
}
# Stworzenie tabeli z zestawieniem wszystkich wektorów
results_table2 <- data.frame(
Wskaźnik = c("RMSE", "MAE", "MPE", "MAPE", "MASE", "RMSPE"),
`Metoda średniej ruchomej` = format_results2(results21),
`Model Liniowy` = format_results2(results22),
`Model Wielomianowy` = format_results2(results23),
`Metoda Holta` = format_results2(results24),
`ARIMA` = format_results2(results25)
)
# Wyświetlenie tabeli z wykorzystaniem funkcji kableExtra
kable(results_table2, caption = "Porównanie metod prognozowania Śladu Materiałowego", align = 'c') %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F) %>%
column_spec(1, bold = TRUE) %>%
add_header_above(c(" " = 1, "Metody Prognozowania" = 5)) %>%
row_spec(0, bold = TRUE)
Wskaźnik | Metoda.średniej.ruchomej | Model.Liniowy | Model.Wielomianowy | Metoda.Holta | ARIMA |
---|---|---|---|---|---|
RMSE | 0.610310 | 1.150100 | 0.761699 | 1.099124 | 1.062119 |
MAE | 0.472171 | 0.927795 | 0.586442 | 0.897523 | 0.847823 |
MPE | 0.931519 % | -0.587752 % | -0.231410 % | 1.379402 % | 0.502387 % |
MAPE | 2.996506 % | 6.153644 % | 3.797080 % | 5.740285 % | 5.533222 % |
MASE | 0.4748780 | 0.9860664 | 0.6232736 | 0.9538926 | 0.9010717 |
RMSPE | 3.851042 % | 7.548452 % | 4.821606 % | 7.187155 % | 6.945180 % |
Metoda średniej ruchomej osiągnęła najlepsze wyniki w większości wskaźników błędu, wykazując najniższe wartości RMSE (0.610310), MAE (0.472171), MAPE (2.996506%), MASE (0.4748780) oraz RMSPE (3.851042%). Ponadto, MPE (0.931519%) dla tej metody jest relatywnie małe, co oznacza, że prognozy są bliskie rzeczywistym wartościom.
Model liniowy wykazał najgorsze wyniki, z najwyższymi wartościami RMSE (1.150100) i MAE (0.927795), a także największym błędem procentowym (MAPE 6.153644%) i RMSPE (7.548452%).
Model wielomianowy osiągnął drugie najlepsze wyniki, z wartościami RMSE (0.761699) i MAE (0.586442), które są lepsze niż w metodzie Holta i ARIMA, ale gorsze niż w metodzie średniej ruchomej. MAPE (3.797080%) i RMSPE (4.821606%) są również wyższe niż w metodzie średniej ruchomej, ale nadal lepsze niż w pozostałych metodach.
Metoda Holta oraz ARIMA osiągnęły umiarkowane wyniki, jednak ich wskaźniki błędu były wyższe niż w metodzie średniej ruchomej i modelu wielomianowym.
Na podstawie przeprowadzonej analizy, najlepszą metodą do prognozowania zmiennej śladu materiałowego jest metoda średniej ruchomej. Wykazała ona najniższe wartości błędów we wszystkich analizowanych wskaźnikach, co wskazuje na najwyższą dokładność prognoz. Inne metody, takie jak model wielomianowy, również dały przyzwoite wyniki, ale nie były tak dokładne jak metoda średniej ruchomej. Modele liniowy, Holta i ARIMA wykazały większe błędy i są mniej odpowiednie do prognozowania tej zmiennej.
# Wybór kolumny z roku i wskaźnika Life Expectancy at Birth
dane <- dane %>%
mutate(`Life Expectancy at Birth` = as.numeric(`Life Expectancy at Birth`)) %>% # Konwersja na liczby zmiennoprzecinkowe
select(Year, Life_Expectancy = `Life Expectancy at Birth`) %>%
filter(!is.na(Life_Expectancy)) # Usunięcie brakujących wartości
# Definicja funkcji obliczającej ważoną średnią ruchomą
wazona_srednia_ruchoma <- function(dane, okno, wagi) {
if (length(wagi) != okno) {
stop("Długość wektora wag musi być równa rozmiarowi okna")
}
wagi <- wagi / sum(wagi) # Normalizacja wag
result <- stats::filter(dane, wagi, sides = 1)
c(rep(NA, okno - 1), na.omit(result)) # Dodanie NA na początku i usunięcie NA z wyniku
}
# Parametry okna i wag
okno <- 3 # Rozmiar okna
wagi <- c(0.5, 0.3, 0.2) # Wagi dla okna
# Obliczenie średniej ważonej ruchomej
dane$Prognoza_Life_Expectancy <- wazona_srednia_ruchoma(dane$Life_Expectancy, okno, wagi)
# Wizualizacja danych
ggplot(dane, aes(x = Year)) +
geom_line(aes(y = Life_Expectancy), color = "blue") +
geom_line(aes(y = Prognoza_Life_Expectancy), color = "red", linetype = "dashed") +
labs(title = "Prognoza Life Expectancy at Birth metodą średniej ruchomej ważonej", y = "Life Expectancy at Birth", x = "Rok")
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_line()`).
# Przygotowanie danych (bez NA)
dane_filtered <- dane %>%
filter(!is.na(Prognoza_Life_Expectancy))
# Obliczanie błędów
n <- nrow(dane_filtered)
errors <- dane_filtered$Life_Expectancy - dane_filtered$Prognoza_Life_Expectancy
absolute_errors <- abs(errors)
relative_errors <- errors / dane_filtered$Life_Expectancy
absolute_relative_errors <- abs(relative_errors)
# ME
me <- mean(errors)
# RMSE
rmse <- sqrt(mean(errors^2))
# MAE
mae <- mean(absolute_errors)
# MPE
mpe <- mean(relative_errors) * 100
# MAPE
mape <- mean(absolute_relative_errors) * 100
# MASE (zakładając uporządkowane dane według czasu)
mase <- mae / mean(abs(diff(dane_filtered$Life_Expectancy)))
# RMSPE
rmspe <- sqrt(mean(relative_errors^2)) * 100
# Wydrukowanie wyników
cat("ME:", me, "\n")
## ME: 0.07341176
cat("RMSE:", rmse, "\n")
## RMSE: 0.2224221
cat("MAE:", mae, "\n")
## MAE: 0.1834
cat("MPE:", mpe, "%\n")
## MPE: 0.09565713 %
cat("MAPE:", mape, "%\n")
## MAPE: 0.2389482 %
cat("MASE:", mase, "\n")
## MASE: 0.5528259
cat("RMSPE:", rmspe, "%\n")
## RMSPE: 0.2896982 %
results31 <- c(ME = me, RMSE = rmse, MAE = mae, MPE = mpe, MAPE = mape, MASE = mase, RMSPE = rmspe)
print(results31)
## ME RMSE MAE MPE MAPE MASE RMSPE
## 0.07341176 0.22242214 0.18340000 0.09565713 0.23894824 0.55282592 0.28969824
###Interpretacja Wyników
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): 0.07341176 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami oczekiwanej długości życia. Dodatnia wartość ME sugeruje, że metoda Średniej Ruchomej Ważonej ma tendencję do przeszacowywania rzeczywistych wartości oczekiwanej długości życia o około 0.073 jednostki.
RMSE (Root Mean Square Error): 0.2224221 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. RMSE wynoszące około 0.222 oznacza, że średnie odchylenie prognozy od rzeczywistych wartości wynosi około 0.222 jednostki.
MAE (Mean Absolute Error): 0.1834 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE wynoszące około 0.183 oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o 0.183 jednostki.
MPE (Mean Percentage Error): 0.09565713% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Tutaj wynosi on około 0.096%, co oznacza, że prognozy są przeciętnie o 0.096% wyższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 0.2389482% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszące około 0.239% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 0.239%.
MASE (Mean Absolute Scaled Error): 0.5528259 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE poniżej 1 oznacza, że metoda Średniej Ruchomej Ważonej jest lepsza od modelu naiwnego. W tym przypadku MASE wynoszące około 0.553 wskazuje, że prognozy są znacznie bardziej precyzyjne niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 0.2896982% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszące około 0.290% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 0.290%.
Wskaźniki błędów prognozy sugerują, że metoda Średniej Ruchomej Ważonej użyta do prognozowania oczekiwanej długości życia ma wysoką dokładność. Dodatnia wartość średniego błędu (ME) wskazuje na niewielką tendencję do przeszacowywania rzeczywistych wartości oczekiwanej długości życia. Wartości RMSE i MAE wskazują na bardzo małe absolutne odchylenia prognozy od rzeczywistości. Relatywnie niskie wartości MPE i MAPE wskazują na minimalne procentowe różnice między prognozowanymi a rzeczywistymi wartościami, co oznacza wysoką relatywną dokładność modelu. Wartość MASE poniżej 1 potwierdza, że metoda Średniej Ruchomej Ważonej jest znacznie bardziej precyzyjna niż model naiwny. RMSPE wskazuje na bardzo małe względne błędy prognozy w kontekście rzeczywistych wartości oczekiwanej długości życia.
odchylenie_standardowe_life<-sd(Poland$`Life Expectancy at Birth`)
wsp_zmiennosci_life<-odchylenie_standardowe_life/mean(Poland$`Life Expectancy at Birth`)*100
wsp_zmiennosci_life
## [1] 1.290753
Odchylenie standardowe stanowi około 1.29% średniego poziomu śladu materiałowego na mieszkańca - wartość wskaźnika jest niższa od 10% można więc przyjąć, że jest to zjawisko o niskiej zmienności, możemy zatem korzystać z metody średniej ruchomej ważonej.
# Sprawdź poprawność nazw kolumn
names(Poland) <- trimws(names(Poland))
# Model liniowy dla Life Expectancy at Birth
linear_model <- lm(`Life Expectancy at Birth` ~ Year, data = Poland)
# Przygotowanie danych dla kolejnych 5 lat
max_year <- max(Poland$Year)
future_years <- data.frame(Year = seq(max_year + 1, max_year + 5, by = 1))
# Prognoza dla modelu liniowego
future_predictions_linear <- predict(linear_model, newdata = future_years)
# Dodanie prognoz do przyszłych danych
future_years$`Predicted Life Expectancy (Linear Model)` <- future_predictions_linear
# Wyświetlenie prognoz
print(future_years)
## Year Predicted Life Expectancy (Linear Model)
## 1 2023 78.00989
## 2 2024 78.15213
## 3 2025 78.29436
## 4 2026 78.43659
## 5 2027 78.57882
# Wizualizacja trendów z użyciem ggplot2
library(ggplot2)
ggplot(Poland, aes(x = Year, y = `Life Expectancy at Birth`)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue", formula = y ~ x) +
geom_smooth(data = future_years, aes(y = `Predicted Life Expectancy (Linear Model)`), color = "blue", se = FALSE) +
labs(title = "Prognozy trendów oczekiwanej długości życia", x = "Rok", y = "Oczekiwana długość życia (w latach)")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : span too small. fewer data values than degrees of freedom.
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : pseudoinverse used at 2023
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : neighborhood radius 2.02
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : There are other near singularities as well. 4.0804
# Obliczenie prognozowanych wartości dla danych historycznych
historical_predictions <- predict(linear_model, newdata = Poland)
# Dodanie prognozowanych wartości do oryginalnego zbioru danych
Poland$`Predicted Life Expectancy (Linear Model)` <- historical_predictions
# Funkcja do obliczenia MASE
calculate_MASE <- function(errors, series) {
naive_forecast_errors <- diff(series)
mean_absolute_naive_error <- mean(abs(naive_forecast_errors))
mean_absolute_scaled_error <- mean(abs(errors)) / mean_absolute_naive_error
return(mean_absolute_scaled_error)
}
# Obliczanie błędów
ME <- mean(dane$Life_Expectancy - historical_predictions)
RMSE <- rmse(dane$Life_Expectancy, historical_predictions)
MAE <- mae(dane$Life_Expectancy, historical_predictions)
MPE <- mean((dane$Life_Expectancy - historical_predictions) / dane$Life_Expectancy) * 100
MAPE <- mape(dane$Life_Expectancy, historical_predictions)*100
MASE <- mean(abs(historical_predictions - dane$Life_Expectancy)) / mean(abs(diff(dane$Life_Expectancy)))
RMSPE <- sqrt(mean(((historical_predictions - dane$Life_Expectancy) / dane$Life_Expectancy)^2)) * 100
# Wyświetlenie wyników
cat("ME", ME, "\n")
## ME -7.70378e-14
cat("RMSE", RMSE, "\n")
## RMSE 0.5647256
cat("MAE", MAE, "\n")
## MAE 0.4953407
cat("MPE", MPE, "%\n")
## MPE -0.00542829 %
cat("MAPE", MAPE, "%\n")
## MAPE 0.6450722 %
cat("MASE", MASE, "\n")
## MASE 1.586501
cat("RMSPE", RMSPE, "%\n")
## RMSPE 0.734348 %
results32 <- c(ME = ME, RMSE = RMSE, MAE = MAE, MPE = MPE, MAPE = MAPE, MASE = MASE, RMSPE = RMSPE)
print(results32)
## ME RMSE MAE MPE MAPE
## -7.703780e-14 5.647256e-01 4.953407e-01 -5.428290e-03 6.450722e-01
## MASE RMSPE
## 1.586501e+00 7.343480e-01
###Interpretacja Wyników
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): -7.70378e-14 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami oczekiwanej długości życia. Wartość ME jest praktycznie zerowa, co sugeruje, że model liniowy nie ma znaczącej tendencji do przeszacowywania ani niedoszacowywania rzeczywistych wartości oczekiwanej długości życia.
RMSE (Root Mean Square Error): 0.5647256 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. RMSE wynoszące około 0.565 oznacza, że średnie odchylenie prognozy od rzeczywistych wartości wynosi około 0.565 jednostki.
MAE (Mean Absolute Error): 0.4953407 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE wynoszące około 0.495 oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o 0.495 jednostki.
MPE (Mean Percentage Error): -0.00542829% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Negatywna wartość MPE wynosząca około -0.0054% oznacza, że prognozy są przeciętnie o 0.0054% niższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 0.6450722% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszące około 0.645% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 0.645%.
MASE (Mean Absolute Scaled Error): 1.586501 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE powyżej 1 oznacza, że metoda modelu liniowego jest mniej dokładna od modelu naiwnego. W tym przypadku MASE wynoszące około 1.587 wskazuje, że prognozy są mniej precyzyjne niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 0.734348% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszące około 0.734% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 0.734%.
Wskaźniki błędów prognozy sugerują, że metoda modelu liniowego użyta do prognozowania oczekiwanej długości życia ma umiarkowaną dokładność. Wartość średniego błędu (ME) jest praktycznie zerowa, co oznacza brak systematycznego przeszacowywania lub niedoszacowywania rzeczywistych wartości. Wartości RMSE i MAE wskazują na umiarkowane absolutne odchylenia prognozy od rzeczywistości. Relatywnie niskie wartości MPE i MAPE wskazują na małe procentowe różnice między prognozowanymi a rzeczywistymi wartościami, co oznacza dobrą relatywną dokładność modelu. Jednak wartość MASE powyżej 1 sugeruje, że metoda modelu liniowego jest mniej precyzyjna niż model naiwny. RMSPE wskazuje na umiarkowane względne błędy prognozy w kontekście rzeczywistych wartości oczekiwanej długości życia.
# Sprawdź poprawność nazw kolumn
names(Poland) <- trimws(names(Poland))
# Model nieliniowy (wielomianowy stopnia 4) dla Life Expectancy at Birth
polynomial_model <- lm(`Life Expectancy at Birth` ~ poly(Year, 4), data = Poland)
# Przygotowanie danych dla kolejnych 2 lat
max_year <- max(Poland$Year)
future_years <- data.frame(Year = seq(max_year + 1, max_year + 2, by = 0.25))
# Prognoza dla modelu nieliniowego
future_predictions_poly <- predict(polynomial_model, newdata = future_years)
# Dodanie prognoz do przyszłych danych
future_years$`Predicted Life Expectancy (Polynomial Model)` <- future_predictions_poly
# Wyświetlenie prognoz
print(future_years)
## Year Predicted Life Expectancy (Polynomial Model)
## 1 2023.00 76.21236
## 2 2023.25 76.10153
## 3 2023.50 75.98799
## 4 2023.75 75.87197
## 5 2024.00 75.75370
# Wizualizacja trendów z użyciem ggplot2
library(ggplot2)
ggplot(Poland, aes(x = Year, y = `Life Expectancy at Birth`)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue", formula = y ~ poly(x, 4)) +
geom_smooth(data = future_years, aes(y = `Predicted Life Expectancy (Polynomial Model)`), color = "red", se = FALSE) +
labs(title = "Prognozy trendów oczekiwanej długości życia (Model nieliniowy)", x = "Rok", y = "Oczekiwana długość życia (w latach)")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : span too small. fewer data values than degrees of freedom.
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : pseudoinverse used at 2023
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : neighborhood radius 0.505
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : reciprocal condition number 0
## Warning in simpleLoess(y, x, w, span, degree = degree, parametric = parametric,
## : There are other near singularities as well. 0.25503
# Obliczenie prognozowanych wartości dla danych historycznych
historical_predictions_poly <- predict(polynomial_model, newdata = Poland)
# Dodanie prognozowanych wartości do oryginalnego zbioru danych
Poland$`Predicted Life Expectancy (Polynomial Model)` <- historical_predictions_poly
# Funkcja do obliczenia MASE
calculate_MASE <- function(errors, series) {
naive_forecast_errors <- diff(series)
mean_absolute_naive_error <- mean(abs(naive_forecast_errors))
mean_absolute_scaled_error <- mean(abs(errors)) / mean_absolute_naive_error
return(mean_absolute_scaled_error)
}
ME <- mean(dane$Life_Expectancy - historical_predictions_poly)
RMSE <- rmse(dane$Life_Expectancy, historical_predictions_poly)
MAE <- mae(dane$Life_Expectancy, historical_predictions_poly)
MPE <- mean((dane$Life_Expectancy - historical_predictions_poly) / dane$Life_Expectancy) * 100
MAPE <- mape(dane$Life_Expectancy, historical_predictions_poly)*100
MASE <- mean(abs(historical_predictions_poly - dane$Life_Expectancy)) / mean(abs(diff(dane$Life_Expectancy)))
RMSPE <- sqrt(mean(((historical_predictions_poly - dane$Life_Expectancy) / dane$Life_Expectancy)^2)) * 100
# Wyświetlenie wyników
cat("ME", ME, "\n")
## ME 8.975274e-15
cat("RMSE", RMSE, "\n")
## RMSE 0.2202928
cat("MAE", MAE, "\n")
## MAE 0.1667301
cat("MPE", MPE, "%\n")
## MPE -0.000813596 %
cat("MAPE", MAPE, "%\n")
## MAPE 0.2169551 %
cat("MASE", MASE, "\n")
## MASE 0.534011
cat("RMSPE", RMSPE, "%\n")
## RMSPE 0.2862165 %
results33 <- c(ME = ME, RMSE = RMSE, MAE = MAE, MPE = MPE, MAPE = MAPE, MASE = MASE, RMSPE = RMSPE)
print(results33)
## ME RMSE MAE MPE MAPE
## 8.975274e-15 2.202928e-01 1.667301e-01 -8.135960e-04 2.169551e-01
## MASE RMSPE
## 5.340110e-01 2.862165e-01
###Interpretacja Wyników
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): -7.70378e-14 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami oczekiwanej długości życia. Wartość ME jest praktycznie zerowa, co sugeruje, że model wielomianowy nie ma znaczącej tendencji do przeszacowywania ani niedoszacowywania rzeczywistych wartości oczekiwanej długości życia.
RMSE (Root Mean Square Error): 0.5647256 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. RMSE wynoszące około 0.565 oznacza, że średnie odchylenie prognozy od rzeczywistych wartości wynosi około 0.565 jednostki.
MAE (Mean Absolute Error): 0.4953407 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE wynoszące około 0.495 oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o 0.495 jednostki.
MPE (Mean Percentage Error): -0.00542829% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Negatywna wartość MPE wynosząca około -0.0054% oznacza, że prognozy są przeciętnie o 0.0054% niższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 0.6450722% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszące około 0.645% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 0.645%.
MASE (Mean Absolute Scaled Error): 1.586501 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE powyżej 1 oznacza, że metoda modelu wielomianowego jest mniej dokładna od modelu naiwnego. W tym przypadku MASE wynoszące około 1.587 wskazuje, że prognozy są mniej precyzyjne niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 0.734348% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszące około 0.734% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 0.734%.
Wskaźniki błędów prognozy sugerują, że metoda modelu wielomianowego użyta do prognozowania oczekiwanej długości życia ma umiarkowaną dokładność. Wartość średniego błędu (ME) jest praktycznie zerowa, co oznacza brak systematycznego przeszacowywania lub niedoszacowywania rzeczywistych wartości. Wartości RMSE i MAE wskazują na umiarkowane absolutne odchylenia prognozy od rzeczywistości. Relatywnie niskie wartości MPE i MAPE wskazują na małe procentowe różnice między prognozowanymi a rzeczywistymi wartościami, co oznacza dobrą relatywną dokładność modelu. Jednak wartość MASE powyżej 1 sugeruje, że metoda modelu wielomianowego jest mniej precyzyjna niż model naiwny. RMSPE wskazuje na umiarkowane względne błędy prognozy w kontekście rzeczywistych wartości oczekiwanej długości życia.
### Ustalanie wartości stałych wygładzania α i β, tak aby błąd RMSPE był minimalny:
opt_holt_LE <- ets(Poland$`Life Expectancy at Birth`)
summary(opt_holt_LE)
## ETS(M,N,N)
##
## Call:
## ets(y = Poland$`Life Expectancy at Birth`)
##
## Smoothing parameters:
## alpha = 0.9999
##
## Initial states:
## l = 74.9718
##
## sigma: 0.0052
##
## AIC AICc BIC
## 24.96274 26.56274 27.79606
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.106546 0.380681 0.2958069 0.1390066 0.385054 0.9474241
## ACF1
## Training set 0.04731231
checkresiduals(opt_holt_LE)
##
## Ljung-Box test
##
## data: Residuals from ETS(M,N,N)
## Q* = 2.3583, df = 4, p-value = 0.6702
##
## Model df: 0. Total lags used: 4
prognoza_opt_holt_LE <- forecast(opt_holt_LE, h=1)
summary(prognoza_opt_holt_LE)
##
## Forecast method: ETS(M,N,N)
##
## Model Information:
## ETS(M,N,N)
##
## Call:
## ets(y = Poland$`Life Expectancy at Birth`)
##
## Smoothing parameters:
## alpha = 0.9999
##
## Initial states:
## l = 74.9718
##
## sigma: 0.0052
##
## AIC AICc BIC
## 24.96274 26.56274 27.79606
##
## Error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.106546 0.380681 0.2958069 0.1390066 0.385054 0.9474241
## ACF1
## Training set 0.04731231
##
## Forecasts:
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 20 76.99595 76.4805 77.5114 76.20763 77.78426
RMSPE_1_LE <- 0.380681 / mean(Poland$`Life Expectancy at Birth`) * 100
#### Wykres
wykres_LE <- autoplot(prognoza_opt_holt_LE, xlab = "Rok") +
scale_x_discrete(limits = as.character(2004:2023)) + # Ustawiamy limity osi X
labs(title = "Prognoza oczekiwanej długości życia na rok 2023",
x = "Rok",
y = "Oczekiwana długość życia przy urodzeniu")
## Scale for x is already present.
## Adding another scale for x, which will replace the existing scale.
print(wykres_LE)
# Błędy prognoz - wyświetlenie wyników
cat("ME:", 0.106546, "\n")
## ME: 0.106546
cat("RMSE:", 0.380681, "\n")
## RMSE: 0.380681
cat("MAE:", 0.2958069, "\n")
## MAE: 0.2958069
cat("MPE:", 0.1390066, "%\n")
## MPE: 0.1390066 %
cat("MAPE:", 0.385054, "%\n")
## MAPE: 0.385054 %
cat("MASE:", 0.9474241, "\n")
## MASE: 0.9474241
cat("RMSPE:", RMSPE_1_LE, "%\n")
## RMSPE: 0.4970532 %
results34 <- c(ME = 0.106546, RMSE = 0.380681, MAE = 0.2958069, MPE = 0.1390066, MAPE = 0.385054, MASE = 0.9474241, RMSPE = RMSPE_1_LE)
print(results34)
## ME RMSE MAE MPE MAPE MASE RMSPE
## 0.1065460 0.3806810 0.2958069 0.1390066 0.3850540 0.9474241 0.4970532
###Interpretacja Wyników
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): 0.106546 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami oczekiwanej długości życia. Dodatnia wartość ME sugeruje, że metoda Holta ma tendencję do przeszacowywania rzeczywistych wartości oczekiwanej długości życia o około 0.107 jednostki.
RMSE (Root Mean Square Error): 0.380681 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. RMSE wynoszące około 0.381 oznacza, że średnie odchylenie prognozy od rzeczywistych wartości wynosi około 0.381 jednostki.
MAE (Mean Absolute Error): 0.2958069 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE wynoszące około 0.296 oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o 0.296 jednostki.
MPE (Mean Percentage Error): 0.1390066% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Tutaj wynosi on około 0.139%, co oznacza, że prognozy są przeciętnie o 0.139% wyższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 0.385054% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszące około 0.385% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 0.385%.
MASE (Mean Absolute Scaled Error): 0.9474241 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE poniżej 1 oznacza, że metoda Holta jest lepsza od modelu naiwnego. W tym przypadku MASE wynoszące około 0.947 wskazuje, że prognozy są bardziej precyzyjne niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 0.4970532% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszące około 0.497% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 0.497%.
Wskaźniki błędów prognozy sugerują, że metoda Holta użyta do prognozowania oczekiwanej długości życia ma dobrą dokładność. Dodatnia wartość średniego błędu (ME) wskazuje na tendencję do niewielkiego przeszacowywania rzeczywistych wartości oczekiwanej długości życia. Wartości RMSE i MAE wskazują na małe absolutne odchylenia prognozy od rzeczywistości. Relatywnie niskie wartości MPE i MAPE wskazują na bardzo małe procentowe różnice między prognozowanymi a rzeczywistymi wartościami, co oznacza wysoką relatywną dokładność modelu. Wartość MASE poniżej 1 potwierdza, że metoda Holta jest bardziej precyzyjna niż model naiwny. RMSPE wskazuje na bardzo małe względne błędy prognozy w kontekście rzeczywistych wartości oczekiwanej długości życia.
# Dopasuj automatycznie model ARIMA do danych o śladzie materiałowym na osobę
fit_LifeExpectancy <- auto.arima(Poland$`Life Expectancy at Birth`)
summary(fit_LifeExpectancy)
## Series: Poland$`Life Expectancy at Birth`
## ARIMA(0,1,0)
##
## sigma^2 = 0.1533: log likelihood = -8.64
## AIC=19.29 AICc=19.54 BIC=20.18
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.1104722 0.3810653 0.2997354 0.1442437 0.390294 0.9600065
## ACF1
## Training set 0.04838706
# Stwórz prognozy dla następnych trzech okresów
forecasts_LifeExpectancy <- forecast(fit_LifeExpectancy, h = 3)
# Obliczenie reszt
residuals_LifeExpectancy_fit <-fit_LifeExpectancy$resid
plot(residuals_LifeExpectancy_fit)
# Testy ACF i PACF dla reszt
acf(residuals_LifeExpectancy_fit, lag.max = ,
type = c("correlation"),
plot = TRUE, na.action = na.fail)
pacf(residuals_MaterialFootprint_fit, lag.max = ,
plot = TRUE, na.action = na.fail)
# Stwórz dataframe zawierający dane faktyczne, prognozowane i zakresy błędów
time_series_data_LifeExpectancy <- data.frame(Time = time(Poland$`Life Expectancy at Birth`),
LifeExpectancy = Poland$`Life Expectancy at Birth`,
Fitted = fitted(fit_LifeExpectancy))
forecasts_data_LifeExpectancy <- data.frame(Time = time(forecasts_LifeExpectancy$mean),
Forecast = as.numeric(forecasts_LifeExpectancy$mean),
Lo80 = as.numeric(forecasts_LifeExpectancy$lower[, "80%"]),
Hi80 = as.numeric(forecasts_LifeExpectancy$upper[, "80%"]),
Lo95 = as.numeric(forecasts_LifeExpectancy$lower[, "95%"]),
Hi95 = as.numeric(forecasts_LifeExpectancy$upper[, "95%"]))
# Stwórz wykres dla oczekiwanej długości życia przy narodzinach
wykres_LifeExpectancy <- ggplot() +
geom_line(data = time_series_data_LifeExpectancy, aes(x = Time, y = LifeExpectancy), color = "red", size = 1, linetype = "solid") +
geom_line(data = time_series_data_LifeExpectancy, aes(x = Time, y = Fitted), color = "blue", size = 1, linetype = "dashed") +
geom_line(data = forecasts_data_LifeExpectancy, aes(x = Time, y = Forecast), color = "green", size = 1, linetype = "solid") +
geom_ribbon(data = forecasts_data_LifeExpectancy, aes(x = Time, ymin = Lo95, ymax = Hi95), fill = "blue", alpha = 0.2) +
geom_ribbon(data = forecasts_data_LifeExpectancy, aes(x = Time, ymin = Lo80, ymax = Hi80), fill = "blue", alpha = 0.4) +
labs(title = "Prognoza oczekiwanej długości życia przy narodzinach dla Polski (Auto ARIMA)",
x = "Czas",
y = "Oczekiwana długość życia przy narodzinach") +
theme_minimal()
print(wykres_LifeExpectancy)
RMSPE_2_LE <- 1.062119 / mean(Poland$`Life Expectancy at Birth`)*100
# Błędy prognoz - wyświetlenie wyników
cat("ME:", 0.1104722, "\n")
## ME: 0.1104722
cat("RMSE:", 0.3810653, "\n")
## RMSE: 0.3810653
cat("MAE:", 0.2997354, "\n")
## MAE: 0.2997354
cat("MPE:", 0.1442437, "%\n")
## MPE: 0.1442437 %
cat("MAPE:", 0.390294, "%\n")
## MAPE: 0.390294 %
cat("MASE:", 0.9600065, "\n")
## MASE: 0.9600065
cat("RMSPE:", RMSPE_2_LE, "%\n")
## RMSPE: 1.386803 %
results35 <- c(ME = 0.1104722, RMSE = 0.3810653, MAE = 0.2997354, MPE = 0.1442437, MAPE = 0.390294, MASE = 0.9600065, RMSPE =RMSPE_2_LE)
print(results35)
## ME RMSE MAE MPE MAPE MASE RMSPE
## 0.1104722 0.3810653 0.2997354 0.1442437 0.3902940 0.9600065 1.3868032
###Interpretacja Wyników
Poniżej znajduje się interpretacja wskaźników błędów prognozy dla tej metody:
ME (Mean Error): 0.1104722 Średni błąd wskazuje na przeciętną różnicę między prognozowanymi a rzeczywistymi wartościami oczekiwanej długości życia. Dodatnia wartość ME sugeruje, że metoda ARIMA ma tendencję do przeszacowywania rzeczywistych wartości oczekiwanej długości życia o około 0.110 jednostki.
RMSE (Root Mean Square Error): 0.3810653 Pierwiastek średniego kwadratu błędu jest miarą średniej wielkości błędów prognozy. RMSE wynoszące około 0.381 oznacza, że średnie odchylenie prognozy od rzeczywistych wartości wynosi około 0.381 jednostki.
MAE (Mean Absolute Error): 0.2997354 Średni bezwzględny błąd mierzy przeciętną wielkość błędów bez względu na ich kierunek. MAE wynoszące około 0.300 oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o 0.300 jednostki.
MPE (Mean Percentage Error): 0.1442437% Średni procentowy błąd pokazuje przeciętną względną różnicę między prognozowanymi a rzeczywistymi wartościami, wyrażoną w procentach. Tutaj wynosi on około 0.144%, co oznacza, że prognozy są przeciętnie o 0.144% wyższe od rzeczywistych wartości.
MAPE (Mean Absolute Percentage Error): 0.390294% Średni bezwzględny procentowy błąd mierzy przeciętną wielkość błędów prognozy jako procent rzeczywistych wartości. MAPE wynoszące około 0.390% oznacza, że prognozy przeciętnie różnią się od rzeczywistych wartości o około 0.390%.
MASE (Mean Absolute Scaled Error): 0.9600065 Średni bezwzględny skalowany błąd porównuje MAE z błędem prognozy naiwnej. Wartość MASE poniżej 1 oznacza, że metoda ARIMA jest lepsza od modelu naiwnego. W tym przypadku MASE wynoszące około 0.960 wskazuje, że prognozy są bardziej precyzyjne niż prognozy naiwne.
RMSPE (Root Mean Square Percentage Error): 1.386803% Pierwiastek średniego kwadratu procentowego błędu to miara wielkości błędów prognozy wyrażona w procentach. RMSPE wynoszące około 1.387% wskazuje na średnią wielkość błędów prognozy w stosunku do rzeczywistych wartości jako 1.387%.
Wskaźniki błędów prognozy sugerują, że metoda ARIMA użyta do prognozowania oczekiwanej długości życia ma dobrą dokładność. Dodatnia wartość średniego błędu (ME) wskazuje na tendencję do niewielkiego przeszacowywania rzeczywistych wartości oczekiwanej długości życia. Wartości RMSE i MAE wskazują na małe absolutne odchylenia prognozy od rzeczywistości. Relatywnie niskie wartości MPE i MAPE wskazują na bardzo małe procentowe różnice między prognozowanymi a rzeczywistymi wartościami, co oznacza wysoką relatywną dokładność modelu. Wartość MASE poniżej 1 potwierdza, że metoda ARIMA jest bardziej precyzyjna niż model naiwny. RMSPE wskazuje na umiarkowane względne błędy prognozy w kontekście rzeczywistych wartości oczekiwanej długości życia.
# Funkcja do formatowania wyników
format_results2 <- function(results) {
c(
sprintf("%.6f", results["RMSE"]),
sprintf("%.6f", results["MAE"]),
sprintf("%.6f %%", results["MPE"]),
sprintf("%.6f %%", results["MAPE"]),
sprintf("%.7f", results["MASE"]),
sprintf("%.6f %%", results["RMSPE"])
)
}
# Stworzenie tabeli z zestawieniem wszystkich wektorów
results_table3 <- data.frame(
Błędy = c("RMSE", "MAE", "MPE", "MAPE", "MASE", "RMSPE"),
`Metoda średniej ruchomej` = format_results2(results31),
`Model Liniowy` = format_results2(results32),
`Model Wielomianowy` = format_results2(results33),
`Metoda Holta` = format_results2(results34),
`ARIMA` = format_results2(results35)
)
# Wyświetlenie tabeli z wykorzystaniem funkcji kableExtra
kable(results_table3, caption = "Porównanie metod prognozowania oczekiwanej długości życia", align = 'c') %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), full_width = F) %>%
column_spec(1, bold = TRUE) %>%
add_header_above(c(" " = 1, "Metody Prognozowania" = 5)) %>%
row_spec(0, bold = TRUE)
Błędy | Metoda.średniej.ruchomej | Model.Liniowy | Model.Wielomianowy | Metoda.Holta | ARIMA |
---|---|---|---|---|---|
RMSE | 0.222422 | 0.564726 | 0.220293 | 0.380681 | 0.381065 |
MAE | 0.183400 | 0.495341 | 0.166730 | 0.295807 | 0.299735 |
MPE | 0.095657 % | -0.005428 % | -0.000814 % | 0.139007 % | 0.144244 % |
MAPE | 0.238948 % | 0.645072 % | 0.216955 % | 0.385054 % | 0.390294 % |
MASE | 0.5528259 | 1.5865005 | 0.5340110 | 0.9474241 | 0.9600065 |
RMSPE | 0.289698 % | 0.734348 % | 0.286217 % | 0.497053 % | 1.386803 % |
Metoda średniej ruchomej wykazuje drugie najniższe wartości w większości wskaźników (RMSE, MAE, MAPE, MASE, RMSPE), jednak osiąga najwyższy wynik MPE. Model liniowy cechuje się najwyższymi wartościami RMSE, MAE, MAPE, MASE oraz RMSPE, co wskazuje na jego niższą efektywność w porównaniu z innymi metodami. Model wielomianowy osiąga najniższe wartości we wszystkich wskaźnikach (RMSE, MAE, MPE, MAPE, MASE, RMSPE), co sugeruje, że jest najbardziej precyzyjną i dokładną metodą prognozowania. Metoda Holta zajmuje trzecie miejsce w większości wskaźników, co oznacza, że jest mniej dokładna niż metoda średniej ruchomej i model wielomianowy. ARIMA osiąga wyniki podobne do Metody Holta, jednak w kilku wskaźnikach (MPE, RMSPE) uzyskuje najwyższe wartości, co wskazuje na jej niższą efektywność.
Spośród pięciu analizowanych metod prognozowania, Model wielomianowy wykazuje najlepsze wyniki w większości wskaźników oceny jakości prognoz. Najniższe wartości RMSE, MAE, MPE, MAPE, MASE i RMSPE wskazują, że model ten jest najbardziej precyzyjny i dokładny. W związku z tym, Model wielomianowy jest najlepszym wyborem do prognozowania zmiennej objaśniającej śladu materiałowego, gdyż minimalizuje błędy prognoz we wszystkich ocenianych kategoriach.
ggplot(Poland, aes(x = Year, y = `Human Development Index`)) + geom_line() +
geom_point() + labs(title = "Rozkład Human Development Index w czasie", x = "Rok", y = "Human Development Index") + theme_minimal() # Styl wykresu
W kontekście prezentowanego wykresu, HDI wykazuje trend wzrostowy, co może wskazywać na brak stacjonarności, ponieważ średnia wartość wskaźnika zmienia się w czasie. Ponadto, wykres nie pokazuje żadnych oznak sezonowości ani stałej wariancji
F1 <- acf(Poland$`Human Development Index`, lag.max = , type = c("correlation"), plot = TRUE, na.action = na.fail)
F2 <- pacf(Poland$`Human Development Index`, lag.max = , plot = TRUE, na.action = na.fail)
Interpretacja:
Częściowa funkcja autokorelacji (PACF): PACF pokazuje korelacje pomiędzy serią a jej opóźnieniami po usunięciu wpływów pomiędzy opóźnieniami. Tutaj widzimy, że dla większości opóźnień słupki znajdują się wewnątrz granic istotności (niebieskie linie), co wskazuje na brak dodatkowych autokorelacji, gdy uwzględnimy wpływ opóźnień. Występuje jednak autokorelacja 1 rzędu.
Funkcja autokorelacji (ACF): Wysokie słupki na początku wykresu ACF, które stopniowo maleją, ale pozostają poza granicami niebieskich linii (które są przybliżonymi granicami istotności), wskazują na obecność długotrwałej korelacji w szeregu czasowym. To sugeruje, że HDI posiada pewien trend lub niestacjonarność, ponieważ wartości są skorelowane przez dłuższy czas.
df.d.ppi = ur.df(Poland$`Human Development Index`, type = c("none"), lags = , selectlags ="AIC" )
summary(df.d.ppi)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression none
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.009737 -0.001367 0.000101 0.001601 0.006351
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 0.003510 0.001449 2.423 0.0285 *
## z.diff.lag 0.161874 0.248311 0.652 0.5243
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.003404 on 15 degrees of freedom
## Multiple R-squared: 0.5656, Adjusted R-squared: 0.5076
## F-statistic: 9.764 on 2 and 15 DF, p-value: 0.001925
##
##
## Value of test-statistic is: 2.423
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.66 -1.95 -1.6
Wartość statystyki testowej: Wartość test-statistic wynosi 2.423, która jest porównywana z wartościami krytycznymi. W tradycyjnym podejściu, jeśli wartość statystyki testowej jest mniejsza (więcej ujemna) niż wartość krytyczna (np. -2.66 dla 1% poziomu istotności), odrzucamy hipotezę zerową o istnieniu jednostkowego korzenia (niestacjonarności). Tutaj wartość statystyki testowej jest dodatnia, co zdecydowanie nie pozwala odrzucić hipotezy zerowej i wskazuje na niestacjonarność szeregu.
Analiza funkcji autokorelacji (ACF) oraz częściowej funkcji autokorelacji (PACF) dostarcza istotnych informacji o właściwościach szeregu czasowego dotyczącego wskaźnika rozwoju ludzkiego Polski. Wykres ACF prezentuje stopniowe malejące słupki, które utrzymują się powyżej progów istotności dla kilku początkowych opóźnień, co może wskazywać na autokorelację w szeregu czasowym. Takie zachowanie jest często obserwowane w przypadku szeregów niestacjonarnych, gdzie obserwacje są zależne od swoich poprzednich wartości.
Z kolei wykres PACF wykazuje znaczący spadek po pierwszym opóźnieniu, co sugeruje, że jedno opóźnienie jest wystarczające do uwzględnienia w autoregresyjnej części modelu ARIMA.
Wykonany test ADF ma na celu ocenę stacjonarności szeregu poprzez sprawdzenie hipotezy o obecności pierwiastka jednostkowego. Obliczona wartość statystyki testowej wynosi 2.423 i jest ona wyższa od wartości krytycznych na poziomach istotności 1%, 5% i 10%, co prowadzi do nieodrzucenia hipotezy zerowej o niestacjonarności szeregu. Statystyka testowa pozostając na poziomie dodatnim wskazuje na to, że szereg czasowy może posiadać trend stochastyczny, co jest charakterystyczne dla niestacjonarnych szeregów czasowych.
Zarówno analiza ACF i PACF, jak i wyniki testu ADF, wskazują na możliwość niestacjonarności szeregu HDI dla Polski. W związku z tym, aby dostosować szereg czasowy do wymogów modelowania ARIMA, konieczne jest zastosowanie różnicowania, które ma na celu usunięcie trendu i ewentualnej sezonowości, prowadząc do stacjonarności szeregu.
hdi <- Poland$`Human Development Index`
# Różnicowanie szeregu czasowego - pierwsza różnica
diff_hdi <- diff(hdi, differences = 1)
# Możesz sprawdzić rezultaty różnicowania
plot(diff_hdi, type="l", col = "red")
Analizując wykres różnic pierwszego rzędu dla wskaźnika rozwoju ludzkiego (HDI) w Polsce, możemy zaobserwować, że seria różnic wykazuje mniejszą systematyczną strukturę w porównaniu z oryginalnym szeregiem czasowym, co sugeruje usunięcie trendu. Brak widocznego wzoru czy trendu na wykresie różnicowanym może wskazywać, że seria osiągnęła stacjonarność, co jest podstawowym założeniem modelu ARIMA. Wartości różnic oscylują wokół zera i nie wydają się mieć długotrwałych wzorców lub trendów.
Ponadto, obserwujemy, że zakres różnic jest stosunkowo niewielki, co dodatkowo może świadczyć o redukcji i stabilizacji wariancji szeregu. Ostateczną ocenę stacjonarności powinno się przeprowadzić za pomocą testów ACF, PACF i ADF. Jeżeli wyniki testu wskażą na brak pierwiastka jednostkowego, można uznać różnicowaną serię za stacjonarną i kontynuować z modelowaniem ARIMA lub innymi odpowiednimi metodami analizy szeregów czasowych.
F3 <- acf(diff_hdi, lag.max = , type = c("correlation"), plot = TRUE, na.action = na.fail)
F4 <- pacf(diff_hdi, lag.max = , plot = TRUE, na.action = na.fail)
df.d.ppi = ur.df(Poland$`Human Development Index`, type = c("none"), lags = , selectlags ="AIC" )
summary(df.d.ppi)
##
## ###############################################
## # Augmented Dickey-Fuller Test Unit Root Test #
## ###############################################
##
## Test regression none
##
##
## Call:
## lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.009737 -0.001367 0.000101 0.001601 0.006351
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## z.lag.1 0.003510 0.001449 2.423 0.0285 *
## z.diff.lag 0.161874 0.248311 0.652 0.5243
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.003404 on 15 degrees of freedom
## Multiple R-squared: 0.5656, Adjusted R-squared: 0.5076
## F-statistic: 9.764 on 2 and 15 DF, p-value: 0.001925
##
##
## Value of test-statistic is: 2.423
##
## Critical values for test statistics:
## 1pct 5pct 10pct
## tau1 -2.66 -1.95 -1.6
Na podstawie analizy autokorelacji (ACF) i częściowej autokorelacji
(PACF) dla zróżnicowanej serii diff_hdi
,
nie zaobserwowano istotnych statystycznie korelacji, co wskazuje na brak
silnych dowodów na dalsze zależności w danych. Test jednostkowy
Augmented Dickey-Fuller, zastosowany bez uwzględnienia stałej w modelu
regresji, wykazał dodatnią i istotną statystycznie wartość dla
pierwszego opóźnienia. Jednakże, ze względu na dodatni znak tej wartości
oraz brak istotności dla opóźnionej zmiennej różnicowej, nie można
jednoznacznie potwierdzić stacjonarności serii na żadnym z tradycyjnych
poziomów istotności. Zatem, wniosek o braku jednostkowego korzenia i tym
samym o stacjonarności serii diff_hdi
pozostaje dyskusyjny.
Na podstawie przedstawionych wykresów i wyników testu ADF, możemy postawić hipotezę dotyczącą parametrów modelu ARIMA:
p (AR): Brak wyraźnych istotnych pików na wykresie PACF sugeruje, że ‘p’ może być równy zero lub jeden
d (I): Ponieważ seria została już zróżnicowana (co wskazuje na to prefix ‘diff_’ w nazwie serii), i w oparciu o test ADF, który nie dostarcza mocnych dowodów przeciwko hipotezie o istnieniu jednostkowego korzenia, ‘d’ może być równe 1, ale z uwagi na niejednoznaczność wyników, dalsze badania mogą być konieczne.
q (MA): Niskie słupki wewnątrz granic na wykresie ACF mogą wskazywać na to, że ‘q’ powinno być równe zero.
Stąd, wstępny model ARIMA może przyjąć formę ARIMA(0,1,0) lub być bliski tej specyfikacji. Zanim jednak dokonamy ostatecznego wyboru modelu, powinniśmy przeprowadzić dodatkowe testy na najlepszy dopasowany model ARIMA z różnymi kombinacjami parametrów (p,d,q) oraz ewentualnie z uwzględnieniem sezonowości, jeśli to jest istotne dla danych.
auto.arima(diff_hdi)
## Series: diff_hdi
## ARIMA(0,1,0)
##
## sigma^2 = 1.8e-05: log likelihood = 68.74
## AIC=-135.48 AICc=-135.22 BIC=-134.65
Wyniki uzyskane z funkcji auto.arima
na
zróżnicowanej serii czasowej diff_hdi
potwierdzają początkową hipotezę modelu ARIMA(0,1,0), sugerowaną przez
analizę wykresów PACF i ACF oraz test ADF. Model ARIMA(0,1,0)
charakteryzuje się brakiem składników autoregresyjnych (AR) i ruchomych
średnich (MA), co wskazuje, że seria czasowa może być opisana głównie
przez swoje różnice pierwszego rzędu, bez dodatkowej potrzeby
modelowania trendów czy wzorców autokorelacji w dalszych
opóźnieniach.
Wartość informacyjna Akaika (AIC) wynosi -135.48, a skorygowana wartość AIC (AICc) wynosi -135.22, z najniższym BIC równym -134.65, co wskazuje na dobre dopasowanie modelu przy jednoczesnym zachowaniu zasad parsymonii. Mimo że model ARIMA(0,1,0) jest prosty, jego stosowanie w przypadku analizowanej serii czasowej może być wystarczające dla celów prognozowania.
# Dopasuj model ARIMA(0,1,0) do danych Indeksu Rozwoju Ludzkiego dla Polski
arima_HDI <- arima(Poland$`Human Development Index`, order=c(0,1,0))
summary(arima_HDI)
##
## Call:
## arima(x = Poland$`Human Development Index`, order = c(0, 1, 0))
##
##
## sigma^2 estimated as 2.494e-05: log likelihood = 69.85, aic = -137.7
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.003674316 0.0048648 0.004305895 0.432874 0.505137 0.9568655
## ACF1
## Training set 0.08297881
# Stwórz prognozy dla następnych trzech okresów
forecasts_HDI <- forecast(arima_HDI, h = 3)
# Obliczenie reszt
residuals_HDI<-arima_HDI$resid
plot(residuals_HDI)
# Testy ACF i PACF dla reszt
acf(residuals_HDI, lag.max = ,
type = c("correlation"),
plot = TRUE, na.action = na.fail)
pacf(residuals_HDI, lag.max = ,
plot = TRUE, na.action = na.fail)
# Króki ADF test
adf.test(residuals_HDI, k=)
##
## Augmented Dickey-Fuller Test
##
## data: residuals_HDI
## Dickey-Fuller = -2.0372, Lag order = 2, p-value = 0.5582
## alternative hypothesis: stationary
#Test Ljunga-Boxa na nizalezność reszt modelu
Box.test (residuals_HDI, lag = , type = "Ljung")
##
## Box-Ljung test
##
## data: residuals_HDI
## X-squared = 0.15263, df = 1, p-value = 0.696
# Stwórz dataframe zawierający dane faktyczne, prognozowane i zakresy błędów
time_series_data_HDI <- data.frame(Time = time(Poland$`Human Development Index`),
HDI = Poland$`Human Development Index`,
Fitted = fitted(arima_HDI))
forecasts_data_HDI <- data.frame(Time = time(forecasts_HDI$mean),
Forecast = as.numeric(forecasts_HDI$mean),
Lo80 = as.numeric(forecasts_HDI$lower[, "80%"]),
Hi80 = as.numeric(forecasts_HDI$upper[, "80%"]),
Lo95 = as.numeric(forecasts_HDI$lower[, "95%"]),
Hi95 = as.numeric(forecasts_HDI$upper[, "95%"]))
# Stwórz wykres z użyciem ggplot2
ggplot() +
geom_line(data = time_series_data_HDI, aes(x = Time, y = HDI), color = “red”, size = 1, linetype = “solid”) +
geom_line(data = time_series_data_HDI, aes(x = Time, y = Fitted), color = “blue”, size = 1, linetype = “dashed”) +
geom_line(data = forecasts_data_HDI, aes(x = Time, y = Forecast), color = “green”, size = 1, linetype = “solid”) +
geom_ribbon(data = forecasts_data_HDI, aes(x = Time, ymin = Lo95, ymax = Hi95), fill = “blue”, alpha = 0.2) +
geom_ribbon(data = forecasts_data_HDI, aes(x = Time, ymin = Lo80, ymax = Hi80), fill = “blue”, alpha = 0.4) +
labs(title = “Prognoza Indeksu Rozwoju Ludzkiego dla Polski (ARIMA(0,1,0))”,
x = “Czas”,
y = “Indeks Rozwoju Ludzkiego”) +
theme_minimal()
Analiza wykresu reszt z dopasowanego modelu ARIMA(0,1,0) wykazuje pewien poziom nieregularności, co może wskazywać na niestacjonarność serii, jednakże nie obserwuje się wyraźnych wzorców czy struktury. Test ADF dla reszt nie odrzuca hipotezy o niestacjonarności, z p-wartością równą 0.5582, sugerując, że reszty mogą nie być całkowicie stacjonarne. Mimo to, test Boxa-Ljunga nie wykazuje istotnych autokorelacji z p-wartością równą 0.696, wskazując, że reszty są bliskie białego szumu.
Miary błędu na zestawie treningowym, takie jak średni błąd (ME), pierwiastek błędu średniokwadratowego (RMSE), średni bezwzględny błąd (MAE), oraz średni procentowy błąd (MPE) i średni procentowy błąd bezwzględny (MAPE), prezentują niskie wartości, co wskazuje na zadowalającą dokładność modelu w dopasowaniu do danych treningowych. Średni błąd skalowany (MASE) bliski wartości 1 oraz ACF1 wykazujący niewielką autokorelację, podkreślają przydatność modelu do prognozowania.
Na podstawie przeprowadzonej analizy, model ARIMA(0,1,0) wydaje się być adekwatnym wyborem dla serii czasowej reprezentującej Indeks Rozwoju Ludzkiego dla Polski. Niskie wartości kryteriów informacyjnych AIC i BIC potwierdzają dobór modelu. Niemniej jednak, istnieje konieczność rozważenia potencjalnych nieregularności w resztach.
W celu dokładniejszego sprawdzenia struktury modelu ARIMA została
zastosowana funkcja auto.arima. Automatyczne metody doboru modelu, takie
jak auto.arima
, korzystają z
zaawansowanych algorytmów do optymalizacji parametrów modelu, w tym
testów statystycznych oraz kryteriów informacyjnych, takich jak AIC i
BIC, które pomagają zidentyfikować model najbardziej pasujący do
złożoności danych.
# Dopasuj automatycznie model ARIMA do danych Indeksu Rozwoju Ludzkiego dla Polski
fit_HDI <- auto.arima(Poland$`Human Development Index`)
summary(fit_HDI)
## Series: Poland$`Human Development Index`
## ARIMA(0,2,1)
##
## Coefficients:
## ma1
## -0.7366
## s.e. 0.1549
##
## sigma^2 = 1.144e-05: log likelihood = 72.78
## AIC=-141.56 AICc=-140.71 BIC=-139.9
##
## Training set error measures:
## ME RMSE MAE MPE MAPE
## Training set -0.0008282385 0.003103248 0.002306635 -0.09639858 0.2673881
## MASE ACF1
## Training set 0.5125856 -0.2206146
# Stwórz prognozy dla następnych trzech okresów
forecasts_HDI_fit <- forecast(fit_HDI, h = 3)
# Obliczenie reszt
residuals_HDI_fit <-fit_HDI$resid
plot(residuals_HDI_fit)
# Testy ACF i PACF dla reszt
acf(residuals_HDI_fit, lag.max = ,
type = c("correlation"),
plot = TRUE, na.action = na.fail)
pacf(residuals_HDI_fit, lag.max = ,
plot = TRUE, na.action = na.fail)
# Stwórz dataframe zawierający dane faktyczne, prognozowane i zakresy błędów
time_series_data_HDI_fit <- data.frame(Time = time(Poland$`Human Development Index`),
HDI = Poland$`Human Development Index`,
Fitted = fitted(fit_HDI))
forecasts_data_HDI_fit <- data.frame(Time = time(forecasts_HDI_fit$mean),
Forecast = as.numeric(forecasts_HDI_fit$mean),
Lo80 = as.numeric(forecasts_HDI_fit$lower[, "80%"]),
Hi80 = as.numeric(forecasts_HDI_fit$upper[, "80%"]),
Lo95 = as.numeric(forecasts_HDI_fit$lower[, "95%"]),
Hi95 = as.numeric(forecasts_HDI_fit$upper[, "95%"]))
# Stwórz wykres z użyciem ggplot2
ggplot() +
geom_line(data = time_series_data_HDI_fit, aes(x = Time, y = HDI), color = "red", size = 1, linetype = "solid") +
geom_line(data = time_series_data_HDI_fit, aes(x = Time, y = Fitted), color = "blue", size = 1, linetype = "dashed") +
geom_line(data = forecasts_data_HDI_fit, aes(x = Time, y = Forecast), color = "green", size = 1, linetype = "solid") +
geom_ribbon(data = forecasts_data_HDI_fit, aes(x = Time, ymin = Lo95, ymax = Hi95), fill = "blue", alpha = 0.2) +
geom_ribbon(data = forecasts_data_HDI_fit, aes(x = Time, ymin = Lo80, ymax = Hi80), fill = "blue", alpha = 0.4) +
labs(title = "Prognoza Indeksu Rozwoju Ludzkiego dla Polski (Auto ARIMA)",
x = "Czas",
y = "Indeks Rozwoju Ludzkiego") +
theme_minimal()
W wyniku automatycznego doboru, funkcja
auto.arima
w języku R zaproponowała model
ARIMA(0,2,1) jako najlepiej dopasowany do danych Indeksu Rozwoju
Ludzkiego (HDI) dla Polski. Ten model różni się od początkowo
zbudowanego ARIMA(0,1,0), który został wybrany na podstawie manualnej
interpretacji wykresów funkcji autokorelacji (ACF) i częściowej
autokorelacji (PACF) oraz wstępnego modelowania ARMA dla różnych
kombinacji opóźnień.
Diagnostyka reszt
Zastosowanie modelu ARIMA(0,2,1) w celu przewidywania przyszłych wartości Indeksu Rozwoju Ludzkiego (HDI) dla Polski dostarczyło model o stosunkowo niskich wartościach kryterium informacyjnego Akaike (AIC) oraz Bayesian Information Criterion (BIC), co sugeruje dobrą jakość dopasowania modelu przy jednoczesnym zachowaniu prostoty. Współczynnik dla średniej ruchomej pierwszego rzędu (MA1) wynoszący -0.7366, przy stosunkowo małym błędzie standardowym, wskazuje na znaczący wpływ bieżących zmian w serii czasowej na jej przyszłe wartości.
Wykres reszt oraz funkcji autokorelacji (ACF) i częściowej autokorelacji (PACF) dla modelu ARIMA(0,2,1) nie ukazuje wyraźnych wzorców, co można interpretować jako brak autokorelacji w resztach. To z kolei wskazuje na to, że model dobrze wyjaśnia dynamikę serii czasowej. Niskie wartości w funkcjach ACF i PACF, mieszczące się w granicach ufności, dodatkowo potwierdzają brak autokorelacji. To świadczy o tym, że w modelu nie pominięto istotnych informacji o strukturze serii czasowej.
Analizując miary błędu na zbiorze treningowym, można zauważyć, że wartości RMSE i MAE są niskie, co świadczy o bliskiej zgodności prognoz modelu z danymi rzeczywistymi. Negatywny MPE może sugerować systematyczne niedoszacowanie, co warto wziąć pod uwagę przy interpretacji wyników. Niska wartość MASE wskazuje na dobrą dokładność prognoz w stosunku do naive model.
df_final_model <- Poland[, c('Year', 'Life Expectancy at Birth', 'Material footprint per capita', 'GNI (current US$)')]
# Dodanie wartości dla roku 2023
df_final_model <- df_final_model %>%
add_row(
Year = 2023,
`Life Expectancy at Birth` = 76.21236,
`Material footprint per capita` = 16.1,
`GNI (current US$)` = 762904592179
)
new_hdi_predictions <- predict(model, newdata = df_final_model)
# Wybierz interesujące nas kolumny
df_final_model <- Poland[, c('Year', 'Life Expectancy at Birth', 'Material footprint per capita', 'GNI (current US$)')]
# Dodanie wartości dla roku 2023
df_final_model <- df_final_model %>%
add_row(
Year = 2023,
`Life Expectancy at Birth` = 76.21236,
`Material footprint per capita` = 16.1,
`GNI (current US$)` = 762904592179
)
new_hdi_predictions <- predict(model, newdata = df_final_model)
summary(model)
##
## Call:
## lm(formula = `Human Development Index` ~ `Life Expectancy at Birth` +
## `Material footprint per capita` + `GNI (current US$)`)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.0078713 -0.0009466 0.0005655 0.0020022 0.0066070
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.592e-01 9.887e-02 -2.622 0.0192 *
## `Life Expectancy at Birth` 1.432e-02 1.306e-03 10.968 1.46e-08 ***
## `Material footprint per capita` -2.700e-03 1.111e-03 -2.430 0.0281 *
## `GNI (current US$)` 1.217e-13 1.719e-14 7.082 3.74e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.004122 on 15 degrees of freedom
## Multiple R-squared: 0.9726, Adjusted R-squared: 0.9672
## F-statistic: 177.8 on 3 and 15 DF, p-value: 6.076e-12
years <- 2004:2023
hdi_values <- as.numeric(new_hdi_predictions)
df <- data.frame(Year = years, HDI = hdi_values)
library(ggplot2)
ggplot(df, aes(x = Year, y = HDI)) +
geom_line(aes(x = Year, y = HDI), color = "blue", size = 1.2) +
geom_segment(aes(x = 2022, y = df$HDI[df$Year == 2022], xend = 2023, yend = df$HDI[df$Year == 2023]), color = "red", size = 1.2) +
ggtitle('Wskaźnik Rozwoju Społecznego (HDI) na lata 2004 - 2023') +
xlab('Rok') +
ylab('HDI') +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
axis.title.x = element_text(face = "bold", size = 12),
axis.title.y = element_text(face = "bold", size = 12),
axis.text = element_text(size = 10),
panel.grid.major = element_line(color = "grey80"),
panel.grid.minor = element_line(color = "grey90")
)
## Warning: Use of `df$HDI` is discouraged.
## ℹ Use `HDI` instead.
## Warning: Use of `df$Year` is discouraged.
## ℹ Use `Year` instead.
## Warning: Use of `df$HDI` is discouraged.
## ℹ Use `HDI` instead.
## Warning: Use of `df$Year` is discouraged.
## ℹ Use `Year` instead.
## Warning in geom_segment(aes(x = 2022, y = df$HDI[df$Year == 2022], xend = 2023, : All aesthetics have length 1, but the data has 20 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.
Na wykresie przedstawiono zmiany HDI w latach 2004-2023, gdzie:
Niebieska linia przedstawia rzeczywiste wartości HDI od 2004 do 2022.
Czerwona linia przedstawia prognozowaną wartość HDI na rok 2023.
Wskaźnik Rozwoju Społecznego (HDI) dla Polski został przeanalizowany na przestrzeni lat od 2004 do 2023, przy czym rok 2023 jest prognozowany i wyniósł on wartość 0.8814896. W analizie wykorzystano zmienne takie jak oczekiwana długość życia, ślad materialny na osobę oraz dochód narodowy brutto na osobę (GNI). Model regresji liniowej został użyty do przewidzenia wartości HDI dla roku 2023.
Interpretacja współczynników:
Podsumowując, analiza wykazuje że HDI dla Polski wzrosło od 2004 roku, z pewnymi fluktuacjami w ciągu ostatnich lat. Prognoza na rok 2023 wskazuje na dalszy wzrost HDI. Oczekiwana długość życia przy urodzeniu oraz dochód narodowy brutto na osobę mają pozytywny wpływ na HDI, podczas gdy ślad materialny na osobę wpływa negatywnie.
Do przeprowadzenia prognozy i symulacji wskaźnika rozwoju społeczego (HDI), zebraliśmy w pierwszym kroku dane dla lat 2004 - 2022, które posłużyły jako zmienne objaśniające. Były to dane:
Ekonomiczne:
Inflacja
Wzrost dochodu narodowego brutto
Dochód narodowy brutto
Wzrost PKB na mieszkańca
PKB na mieszkańca
Bezrobocie, ogółem
Dochód narodowy brutto na mieszkańca
Oszczędności brutto
Ekologiczne:
Emisja dwutlenku węgla na mieszkańca
Ślad materiałowy na mieszkańca
Społeczne:
Wydatki na zdrowie
Kontrola korupcji: oszacowanie
Współczynnik obciążenia demograficznego
Średnia liczba lat nauki
Oczekiwana długość życia przy urodzeniu
Wskaźnik nierówności płci
Na podstawie tych danych stworzyliśmy macierz korelacji.
# Tworzenie wykresu
ggplot(data = correlation_matrix_melt, aes(x = Var1, y = Var2, fill = value)) +
geom_tile() +
scale_fill_gradient2(midpoint = 0, low = "blue", high = "red", mid = "white",
limits = c(-1, 1)) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
axis.title = element_blank())
Na podstawie eliminacji a posteriori wybraliśmy zmienne objaśniające GNI (current US$), Material footprint per capita oraz Life Expectancy at Birth do naszego modelu ekonometrycznego. Te zmienne zostały wyselekcjonowane z uwagi na ich istotny wpływ na zmienną objaśnianą, co pozwoli na dokładniejsze modelowanie i analizę czynników determinujących poziom rozwoju ludzkości.
# Tworzenie wykresu
ggplot(data = correlation_matrix_melt2, aes(x = Var1, y = Var2, fill = value)) +
geom_tile() +
scale_fill_gradient2(midpoint = 0, low = "blue", high = "red", mid = "white",
limits = c(-1, 1)) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1),
axis.title = element_blank())
Następnie przeprowadziliśmy analizę modelu regresji liniowej MNK - metoda najmniejszych kwadratów dla HDI, aby zobaczyć jak różne zmienne niezależne wpływają na zminną objąsnianą. Następnie za pomocą metody VIF - Variance Inflation Factor oceniliśmy czy w modelu regresji występuje problem współliniowości między zmiennymi niezależnymi.
Life Expectancy at Birth (1.765) i Material footprint per capita (2.557) mają wartości VIF poniżej 5, co wskazuje na obecność umiarkowanej współliniowości.
GNI (current US$) (3.609) ma wartość VIF bliską 5, co również wskazuje na umiarkowaną współliniowość. Jest to najwyższa wartość VIF w modelu, co sugeruje, że GNI może być bardziej skorelowany z innymi zmiennymi niż pozostałe zmienne niezależne.
Wszystkie zmienne modelu mają wartości VIF poniżej 5, co wskazuje na brak poważnej współliniowości, która mogłaby wpłynąć na wiarygodność modelu. Wartości te są akceptowalne, ale zwracają uwagę na potrzebę świadomości możliwych relacji między zmiennymi, zwłaszcza dla GNI. Model, mimo umiarkowanej współliniowości, zdaje się być solidny i jego wyniki mogą być interpretowane z umiarkowanym zaufaniem.
summary(model)
##
## Call:
## lm(formula = `Human Development Index` ~ `Life Expectancy at Birth` +
## `Material footprint per capita` + `GNI (current US$)`)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.0078713 -0.0009466 0.0005655 0.0020022 0.0066070
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.592e-01 9.887e-02 -2.622 0.0192 *
## `Life Expectancy at Birth` 1.432e-02 1.306e-03 10.968 1.46e-08 ***
## `Material footprint per capita` -2.700e-03 1.111e-03 -2.430 0.0281 *
## `GNI (current US$)` 1.217e-13 1.719e-14 7.082 3.74e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.004122 on 15 degrees of freedom
## Multiple R-squared: 0.9726, Adjusted R-squared: 0.9672
## F-statistic: 177.8 on 3 and 15 DF, p-value: 6.076e-12
Na podstawie rezultatów i ich interpretacji, model regresji jest bardzo dobrze dopasowany do danych, z istotnymi statystycznie współczynnikami dla wszystkich zmiennych. Wyniki sugerują, że zarówno oczekiwana długość życia, jak i GNI mają pozytywny wpływ na HDI, podczas gdy ślad materiałowy wpływa negatywnie. Mimo niewielkich wartości bezwzględnych efektów, istotność statystyczna tych zmiennych wskazuje na ich znaczenie w modelowaniu HDI.
Następnie wykonaliśmy kilka testów:
Wartość statystyki DW bliska 2 sugeruje, że nie ma znaczącej autokorelacji w resztach modelu.. Ponieważ p-wartość jest większa niż 0.05, nie odrzucamy hipotezy zerowej, czyli nie ma dowodów na istnienie autokorelacji pierwszego rzędu w resztach.
P-wartość jest większa niż 0.05, co oznacza, że nie ma wystarczających dowodów, aby odrzucić hipotezę zerową o braku autokorelacji reszt do 12-tego rzędu. Model nie wykazuje znaczących problemów z autokorelacją na tych poziomach.
P-wartość większa niż 0.05 wskazuje na brak wystarczających dowodów do odrzucenia hipotezy zerowej o homoskedastyczności reszt. To sugeruje, że wariancja reszt jest stała, co jest pożądaną właściwością w modelu regresyjnym.
P-wartość wynosząca 0.1553 jest większa niż 0.05, co oznacza, że nie ma wystarczających dowodów statystycznych do odrzucenia hipotezy zerowej. W związku z tym, na podstawie tego testu, możemy uznać, że model nie wykazuje istotnych problemów z pominiętymi zmiennymi lub nieliniowościami.
PODSUMOWANIE
Podsumowując wszystkie przeprowadzone testy nie wykazały znaczących problemów z modelowaniem. Dane wydają się być modelowane w sposób adekwatny, co oznacza, że model regresji MNK jest dobrze dopasowany i nie wykazuje poważnych niedociągnięć w zakresie autokorelacji, heteroskedastyczności czy specyfikacji modelu.
Do przeprowadzenia prognoz zmiennych objaśniających, zastosowaliśmy 5 metod prognozowania:
Metoda średniej ruchomej ważonej,
Model liniowy,
Model wielomianowy,
Metoda Holta
ARIMA
# Wyświetlenie tabeli z wykorzystaniem funkcji kable
kable(results_table, caption = "Porównanie metod prognozowania Dochodu Narodowego Brutto")
Błędy | Metoda.średniej.ruchomej | Model.Liniowy | Model.Wielomianowy | Metoda.Holta | ARIMA |
---|---|---|---|---|---|
RMSE | 29640356713 | 49246373480 | 30384270830 | 48407447235 | 52205208958 |
MAE | 24222550929 | 39146584970 | 24219866844 | 37490975144 | 42051482032 |
MPE | 2.950971 % | -1.545713 % | -0.425359 % | -1.984063 % | 4.503634 % |
MAPE | 4.935065 % | 9.179596 % | 5.085554 % | 8.475325 % | 9.064183 % |
MASE | 0.5457879 | 0.8821975 | 0.5458127 | 0.8448870 | 0.9476615 |
RMSPE | 6.080207 % | 12.329763 % | 6.293851 % | 10.062688 % | 10.852147 % |
Na podstawie przeprowadzonej analizy można stwierdzić, że model wielomianowy trzeciego stopnia jest najskuteczniejszą metodą prognozowania Dochodu Narodowego Brutto spośród pięciu analizowanych metod. Pomimo tego, prognoza uzyskana za pomocą średniej ruchomej osiągnęła najniższy błąd średniokwadratowy procentowy (RMSPE). Niemniej jednak, ze względu na wysoki wskaźnik zmienności, zastosowanie tej metody do prognozowania zmiennej dochodu narodowego byłoby nieodpowiednie. Model ten wykazuje najniższe wartości błędów prognozowych, co wskazuje na jego wyższą dokładność i stabilność. Jego zdolność do uchwycenia nieliniowych zależności w danych jest kluczowa w prognozowaniu skomplikowanych trendów ekonomicznych. Dlatego, w kontekście prognozowania GNI, model wielomianowy powinien być preferowanym wyborem.
# Tworzenie tabeli
kable(results_table2, caption = "Porównanie metod prognozowania Śladu Materiałowego")
Wskaźnik | Metoda.średniej.ruchomej | Model.Liniowy | Model.Wielomianowy | Metoda.Holta | ARIMA |
---|---|---|---|---|---|
RMSE | 0.610310 | 1.150100 | 0.761699 | 1.099124 | 1.062119 |
MAE | 0.472171 | 0.927795 | 0.586442 | 0.897523 | 0.847823 |
MPE | 0.931519 % | -0.587752 % | -0.231410 % | 1.379402 % | 0.502387 % |
MAPE | 2.996506 % | 6.153644 % | 3.797080 % | 5.740285 % | 5.533222 % |
MASE | 0.4748780 | 0.9860664 | 0.6232736 | 0.9538926 | 0.9010717 |
RMSPE | 3.851042 % | 7.548452 % | 4.821606 % | 7.187155 % | 6.945180 % |
Po przeprowadzeniu prognoz śladu materiałowego za pomocą pięciu różnych metod (metoda średniej ruchomej ważonej, model liniowy, model nieliniowy 3. stopnia, model Holta oraz model ARIMA), wyniki pokazały, że metoda średniej ruchomej ważonej osiągnęła najniższy RMSPE. Oznacza to, że spośród wszystkich zastosowanych metod, prognozy wykonane metodą średniej ruchomej ważonej charakteryzowały się najwyższą dokładnością, co czyni tę metodę najbardziej efektywną w przewidywaniu śladu materiałowego.
# Wyświetlenie tabeli z wykorzystaniem funkcji kable
kable(results_table3, caption = "Porównanie metod prognozowania oczekiwanej długości życia")
Błędy | Metoda.średniej.ruchomej | Model.Liniowy | Model.Wielomianowy | Metoda.Holta | ARIMA |
---|---|---|---|---|---|
RMSE | 0.222422 | 0.564726 | 0.220293 | 0.380681 | 0.381065 |
MAE | 0.183400 | 0.495341 | 0.166730 | 0.295807 | 0.299735 |
MPE | 0.095657 % | -0.005428 % | -0.000814 % | 0.139007 % | 0.144244 % |
MAPE | 0.238948 % | 0.645072 % | 0.216955 % | 0.385054 % | 0.390294 % |
MASE | 0.5528259 | 1.5865005 | 0.5340110 | 0.9474241 | 0.9600065 |
RMSPE | 0.289698 % | 0.734348 % | 0.286217 % | 0.497053 % | 1.386803 % |
Spośród pięciu analizowanych metod prognozowania, Model wielomianowy wykazuje najlepsze wyniki w większości wskaźników oceny jakości prognoz. Najniższe wartości RMSE, MAE, MPE, MAPE, MASE i RMSPE wskazują, że model ten jest najbardziej precyzyjny i dokładny. W związku z tym, Model wielomianowy jest najlepszym wyborem do prognozowania zmiennej objaśniającej śladu materiałowego, gdyż minimalizuje błędy prognoz we wszystkich ocenianych kategoriach.
ggplot(Poland, aes(x = Year, y = `Human Development Index`)) + geom_line() +
geom_point() + labs(title = "Rozkład Human Development Index w czasie", x = "Rok", y = "Human Development Index") + theme_minimal() # Styl wykresu
F1 <- acf(Poland$`Human Development Index`, lag.max = , type = c("correlation"), plot = TRUE, na.action = na.fail)
Funkcja autokorelacji (ACF): Wysokie słupki na początku wykresu ACF, które stopniowo maleją, ale pozostają poza granicami niebieskich linii (które są przybliżonymi granicami istotności), wskazują na obecność długotrwałej korelacji w szeregu czasowym. To sugeruje, że HDI posiada pewien trend lub niestacjonarność, ponieważ wartości są skorelowane przez dłuższy czas.
F2 <- pacf(Poland$`Human Development Index`, lag.max = , plot = TRUE, na.action = na.fail)
Częściowa funkcja autokorelacji (PACF): PACF pokazuje korelacje pomiędzy serią a jej opóźnieniami po usunięciu wpływów pomiędzy opóźnieniami. Tutaj widzimy, że dla większości opóźnień słupki znajdują się wewnątrz granic istotności (niebieskie linie), co wskazuje na brak dodatkowych autokorelacji, gdy uwzględnimy wpływ opóźnień. Występuje jednak autokorelacja 1 rzędu.
Zarówno analiza ACF i PACF, jak i wyniki testu ADF, wskazują na możliwość niestacjonarności szeregu HDI dla Polski. W związku z tym, aby dostosować szereg czasowy do wymogów modelowania ARIMA, konieczne jest zastosowanie różnicowania, które ma na celu usunięcie trendu i ewentualnej sezonowości, prowadząc do stacjonarności szeregu.
plot(diff_hdi, type="l", col = "red")
Analiza wykresu różnic pierwszego rzędu dla wskaźnika rozwoju ludzkiego (HDI) w Polsce sugeruje, że seria osiągnęła stacjonarność, co jest kluczowe dla modelu ARIMA. Różnice oscylują wokół zera, nie wykazując długotrwałych wzorców ani trendów, a zakres wartości jest niewielki, co wskazuje na stabilizację wariancji. Aby potwierdzić stacjonarność, należy przeprowadzić testy ACF, PACF i ADF. Jeśli wyniki testu ADF wykażą brak pierwiastka jednostkowego, można kontynuować modelowanie ARIMA.
F3 <- acf(diff_hdi, lag.max = , type = c("correlation"), plot = TRUE, na.action = na.fail)
F4 <- pacf(diff_hdi, lag.max = , plot = TRUE, na.action = na.fail)
Analiza autokorelacji (ACF) i częściowej autokorelacji (PACF) dla
zróżnicowanej serii diff_hdi
nie wykazała istotnych
korelacji, sugerując brak silnych zależności w danych. Test Augmented
Dickey-Fuller (ADF) bez stałej w modelu regresji wskazał na dodatnią i
istotną wartość dla pierwszego opóźnienia, jednak ze względu na dodatni
znak tej wartości oraz brak istotności dla opóźnionej zmiennej
różnicowej, nie można jednoznacznie potwierdzić stacjonarności
serii.
Wstępny model ARIMA może mieć postać ARIMA(0,1,0). Przed ostatecznym wyborem modelu, warto przeprowadzić dodatkowe testy różnych kombinacji parametrów (p, d, q) oraz uwzględnić sezonowość, jeśli jest istotna dla danych.
Wyniki funkcji auto.arima
dla zróżnicowanej serii
czasowej diff_hdi
potwierdzają początkową hipotezę modelu
ARIMA(0,1,0). Analiza wykresów PACF, ACF oraz test ADF wskazują, że
seria może być opisana głównie przez swoje różnice pierwszego rzędu, bez
potrzeby modelowania trendów czy wzorców autokorelacji.
Model ARIMA(0,1,0) uzyskał następujące wartości:
AIC: -135.48
AICc: -135.22
BIC: -134.65
Te wartości wskazują na dobre dopasowanie modelu przy zachowaniu zasad parsymonii. Mimo swojej prostoty, model ARIMA(0,1,0) może być wystarczający dla celów prognozowania analizowanej serii czasowej.
ggplot() +
geom_line(data = time_series_data_HDI, aes(x = Time, y = HDI), color = "red", size = 1, linetype = "solid") +
geom_line(data = time_series_data_HDI, aes(x = Time, y = Fitted), color = "blue", size = 1, linetype = "dashed") +
geom_line(data = forecasts_data_HDI, aes(x = Time, y = Forecast), color = "green", size = 1, linetype = "solid") +
geom_ribbon(data = forecasts_data_HDI, aes(x = Time, ymin = Lo95, ymax = Hi95), fill = "blue", alpha = 0.2) +
geom_ribbon(data = forecasts_data_HDI, aes(x = Time, ymin = Lo80, ymax = Hi80), fill = "blue", alpha = 0.4) +
labs(title = "Prognoza Indeksu Rozwoju Ludzkiego dla Polski (ARIMA(0,1,0))",
x = "Czas",
y = "Indeks Rozwoju Ludzkiego") +
theme_minimal()
Reszty modelu ARIMA(0,1,0) są nieregularne, co może sugerować niestacjonarność. Test ADF (p=0.5582) nie odrzuca hipotezy niestacjonarności, ale test Boxa-Ljunga (p=0.696) wskazuje na brak istotnych autokorelacji, sugerując reszty bliskie białemu szumowi.
Model ARIMA(0,1,0) charakteryzuje się niskimi wartościami błędów (ME, RMSE, MAE, MPE, MAPE) oraz MASE bliskim 1, co wskazuje na dobrą dokładność i przydatność do prognozowania.
Model ARIMA(0,1,0) jest odpowiedni dla serii czasowej Indeksu Rozwoju Ludzkiego dla Polski, co potwierdzają niskie wartości AIC i BIC. Jednak należy uwzględnić potencjalne nieregularności w resztach.
ggplot() +
geom_line(data = time_series_data_HDI_fit, aes(x = Time, y = HDI), color = "red", size = 1, linetype = "solid") +
geom_line(data = time_series_data_HDI_fit, aes(x = Time, y = Fitted), color = "blue", size = 1, linetype = "dashed") +
geom_line(data = forecasts_data_HDI_fit, aes(x = Time, y = Forecast), color = "green", size = 1, linetype = "solid") +
geom_ribbon(data = forecasts_data_HDI_fit, aes(x = Time, ymin = Lo95, ymax = Hi95), fill = "blue", alpha = 0.2) +
geom_ribbon(data = forecasts_data_HDI_fit, aes(x = Time, ymin = Lo80, ymax = Hi80), fill = "blue", alpha = 0.4) +
labs(title = "Prognoza Indeksu Rozwoju Ludzkiego dla Polski (Auto ARIMA)",
x = "Czas",
y = "Indeks Rozwoju Ludzkiego") +
theme_minimal()
Model ARIMA(0,2,1) dla prognozowania Indeksu Rozwoju Ludzkiego (HDI) dla Polski ma niskie wartości AIC i BIC, sugerując dobrą jakość dopasowania przy zachowaniu prostoty. Współczynnik MA1 wynoszący -0.7366 wskazuje na istotny wpływ bieżących zmian w serii na przyszłe wartości.
Wykres reszt oraz funkcje ACF i PACF dla modelu ARIMA(0,2,1) nie wykazują wyraźnych wzorców ani autokorelacji, co wskazuje na dobre wyjaśnienie dynamiki serii czasowej przez model. Niskie wartości ACF i PACF mieszczące się w granicach ufności potwierdzają brak autokorelacji.
Niskie wartości RMSE i MAE wskazują na wysoką zgodność prognoz modelu z danymi rzeczywistymi. Negatywny MPE sugeruje systematyczne niedoszacowanie, co warto uwzględnić przy interpretacji wyników. Niska wartość MASE potwierdza dobrą dokładność prognoz w porównaniu do modelu naiwnego.
new_hdi_predictions
## 1 2 3 4 5 6 7 8
## 0.8113380 0.8179999 0.8238201 0.8294582 0.8418713 0.8357997 0.8462107 0.8515453
## 9 10 11 12 13 14 15 16
## 0.8549461 0.8644345 0.8747301 0.8646513 0.8680143 0.8734101 0.8766824 0.8855466
## 17 18 19 20
## 0.8709524 0.8693930 0.8791960 0.8814896
# Wybierz interesujące nas kolumny
df_final_model <- Poland[, c('Year', 'Life Expectancy at Birth', 'Material footprint per capita', 'GNI (current US$)')]
# Dodanie wartości dla roku 2023
df_final_model <- df_final_model %>%
add_row(
Year = 2023,
`Life Expectancy at Birth` = 76.21236,
`Material footprint per capita` = 16.1,
`GNI (current US$)` = 762904592179
)
new_hdi_predictions <- predict(model, newdata = df_final_model)
summary(model)
##
## Call:
## lm(formula = `Human Development Index` ~ `Life Expectancy at Birth` +
## `Material footprint per capita` + `GNI (current US$)`)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.0078713 -0.0009466 0.0005655 0.0020022 0.0066070
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2.592e-01 9.887e-02 -2.622 0.0192 *
## `Life Expectancy at Birth` 1.432e-02 1.306e-03 10.968 1.46e-08 ***
## `Material footprint per capita` -2.700e-03 1.111e-03 -2.430 0.0281 *
## `GNI (current US$)` 1.217e-13 1.719e-14 7.082 3.74e-06 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.004122 on 15 degrees of freedom
## Multiple R-squared: 0.9726, Adjusted R-squared: 0.9672
## F-statistic: 177.8 on 3 and 15 DF, p-value: 6.076e-12
ggplot(df, aes(x = Year, y = HDI)) +
geom_line(aes(x = Year, y = HDI), color = "blue", size = 1.2) +
geom_segment(aes(x = 2022, y = df$HDI[df$Year == 2022], xend = 2023, yend = df$HDI[df$Year == 2023]), color = "red", size = 1.2) +
ggtitle('Wskaźnik Rozwoju Społecznego (HDI) na lata 2004 - 2023') +
xlab('Rok') +
ylab('HDI') +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
axis.title.x = element_text(face = "bold", size = 12),
axis.title.y = element_text(face = "bold", size = 12),
axis.text = element_text(size = 10),
panel.grid.major = element_line(color = "grey80"),
panel.grid.minor = element_line(color = "grey90")
)
## Warning: Use of `df$HDI` is discouraged.
## ℹ Use `HDI` instead.
## Warning: Use of `df$Year` is discouraged.
## ℹ Use `Year` instead.
## Warning: Use of `df$HDI` is discouraged.
## ℹ Use `HDI` instead.
## Warning: Use of `df$Year` is discouraged.
## ℹ Use `Year` instead.
## Warning in geom_segment(aes(x = 2022, y = df$HDI[df$Year == 2022], xend = 2023, : All aesthetics have length 1, but the data has 20 rows.
## ℹ Please consider using `annotate()` or provide this layer with data containing
## a single row.
Wskaźnik Rozwoju Społecznego (HDI) dla Polski został przeanalizowany na przestrzeni lat od 2004 do 2023, przy czym rok 2023 jest prognozowany i wyniósł on wartość 0.8814896. W analizie wykorzystano zmienne takie jak oczekiwana długość życia, ślad materialny na osobę oraz dochód narodowy brutto na osobę (GNI). Model regresji liniowej został użyty do przewidzenia wartości HDI dla roku 2023.
Interpretacja współczynników:
Podsumowując, analiza wykazuje że HDI dla Polski wzrosło od 2004 roku, z pewnymi fluktuacjami w ciągu ostatnich lat. Prognoza na rok 2023 wskazuje na dalszy wzrost HDI. Oczekiwana długość życia przy urodzeniu oraz dochód narodowy brutto na osobę mają pozytywny wpływ na HDI, podczas gdy ślad materialny na osobę wpływa negatywnie.