sobota, 26 sierpnia 2023

Ryzyko polityczne wg branż

Ryzyko polityczne dotyczy każdej firmy, choćby z powodu obciążeń podatkowych, które zależą od decyzji politycznych. Zagrożenie nowymi podatkami jest bardzo trudne oszacowania, bo jako nowe wydarzenie jest w zasadzie jednorazowe, a także może różnie wpływać na dochody przedsiębiorstwa. Weźmy choćby osławiony podatek od niektórych kopalin (tzw. podatek miedziowy) wprowadzony w 2012 r. przez rząd PO. Został wprowadzony specjalnie dla KGHM i uderzył w niego z tak dużą siłą, że do dziś nie do końca się po nim pozbierał. PIS obiecał w 2015 r., że zniesie ten podatek, ale tego nie zrobił. Niemal identyczna sytuacja dotyczyła dużych banków - PIS wprowadził podatek bankowy w 2016 r. Innym, ale podobnym przykładem ryzyka politycznego są regulacje cenowe albo różnego rodzaju obciążenia. Jeszcze inne zagrożenie to różnego rodzaju zakazy (np. handlu w niedziele). W Polsce w ostatnich latach wzrosła też niepewność zmian legislacyjnych. Jeżeli władza jest nieprzewidywalna, to zagrożeniem dla prywatnych przedsiębiorstw stanowią wydatki budżetowe poprzez tzw. efekt wypierania - państwo zaciągając nowe kredyty i pożyczki podnosi rynkową stopę procentową, utrudniając przedsiębiorcom inwestycje. W końcu populistyczne i mało rozważne decyzje rządowe prowadzą do wzrostu inflacji, a to oczywiście dotyka wielu firm. 

Powyższe przykłady ryzyka politycznego dotyczą zewnętrznych wpływów na finanse firmy. Mogą jednak być także wpływy wewnętrzne, gdy w spółce zasiadają ludzie z nadania politycznego, tak że rodzi to ryzyko marnotrawstwa środków i złego zarządzania.

Ryzyko polityczne jest na tyle szerokim pojęciem, że oczywistym jest różnorodność podejść. Ja się odwołam się do pracy [1], która z kolei posługuje się metodologią z [2]. W przeciwieństwie do standardowych metod szacowania ryzyka na podstawie przeszłości, metoda szacuje ryzyko na podstawie bieżących danych. Co więcej, uzyskujemy dzięki niej prawdopodobieństwo zdarzeń, które mogą wystąpić w przyszłości, a nie ryzyko zdarzeń z przeszłości, jak to się standardowo robi. Jak to w ogóle możliwe, żeby uzyskać bieżące ryzyko na temat przyszłości? Można to nieco porównać do wywiadów lub ankiet z zarządzającymi, których się pyta o zagrożenia. Jednak takie ankiety są bardzo kosztowne, tymczasem metoda, o której mowa, jest zautomatyzowana i opiera się na tzw. lingwistyce komputerowej.

Aby mieć pogląd o co w niej chodzi, zajrzałem do [2]. Autorzy opisują to tak (str. 1 - przetłumaczone za pomocą deepL):

W niniejszym artykule wykorzystujemy analizę tekstową transkryptów kwartalnych telekonferencji dotyczących wyników finansowych w celu skonstruowania miar zakresu i rodzaju ryzyka politycznego, na jakie narażone są spółki notowane na giełdzie w Stanach Zjednoczonych, oraz tego, jak zmienia się ono w czasie. Zdecydowana większość amerykańskich spółek giełdowych regularnie organizuje telekonferencje z analitykami i innymi zainteresowanymi stronami, podczas których zarząd przedstawia swoje poglądy na temat przeszłych i przyszłych wyników firmy oraz odpowiada na pytania uczestników telekonferencji. Określamy ilościowo ryzyko polityczne, na jakie narażona jest dana firma w danym momencie, w oparciu o udział rozmów podczas telekonferencji, które koncentrują się na ryzyku związanym z polityką w ogóle i z konkretnymi tematami politycznymi. 
W tym celu adaptujemy prostą, opartą na wzorcach metodę klasyfikacji sekwencji opracowaną w lingwistyce komputerowej (Song i Wu, 2008; Manning i in., 2008), aby rozróżnić język związany z kwestiami politycznymi i niepolitycznymi. W przypadku naszej podstawowej miary ogólnej ekspozycji na ryzyko polityczne korzystamy z biblioteki szkoleniowej tekstów politycznych (tj. podręcznika licencjackiego na temat polityki amerykańskiej i artykułów z sekcji politycznej amerykańskich gazet) oraz biblioteki szkoleniowej tekstów niepolitycznych (tj. podręcznika rachunkowości, artykułów z niepolitycznych sekcji amerykańskich gazet i transkrypcji rozmów na tematy niepolityczne) w celu zidentyfikowania kombinacji dwóch słów ("bigramów"), które są często używane w tekstach politycznych. Następnie zliczamy liczbę przypadków, w których te bigramy są używane w rozmowie konferencyjnej w połączeniu z synonimami "ryzyka" lub "niepewności" i dzielimy przez całkowitą długość rozmowy, aby uzyskać miarę udziału rozmowy, która dotyczy ryzyka politycznego.  

Zastosowana metoda jest zatem jednocześnie innowacyjna, jak i wysoko ekspercka. Nie mając pełnej wiedzy na temat tej techniki trudno powiedzieć na ile jest rzetelna, a na ile dostarcza przypadkowych wyników.

Wróćmy do [1]. Spółki zgrupowano w branże wg metodologii MSCI. Są to:

Sektor energetyczny (Energy Sector): obejmuje firmy zajmujące się poszukiwaniem i produkcją, rafinacją i marketingiem oraz magazynowaniem i transportem ropy naftowej i gazu oraz węgla i paliw konsumpcyjnych. Obejmuje również firmy oferujące sprzęt i usługi związane z ropą naftową i gazem.

Sektor materiałów (Materials Sector): obejmuje firmy produkujące chemikalia, materiały budowlane, produkty leśne, szkło, papier i powiązane produkty opakowaniowe, a także metale, minerały i firmy wydobywcze, w tym producentów stali.

Sektor przemysłowy (Industrials Sector): obejmuje producentów i dystrybutorów dóbr kapitałowych, takich jak przemysł lotniczy i obronny, produkty budowlane, sprzęt elektryczny i maszyny oraz firmy oferujące usługi budowlane i inżynieryjne. Obejmuje on również dostawców usług komercyjnych i profesjonalnych, w tym usług drukarskich, środowiskowych i obiektowych, usług i materiałów biurowych, usług ochrony i alarmów, usług w zakresie zasobów ludzkich i zatrudnienia, usług badawczych i konsultingowych. Obejmuje również firmy świadczące usługi transportowe.

Sektor podstawowych dóbr konsumpcyjnych (Consumer Staples Sector): obejmuje spółki, których działalność jest mniej wrażliwa na cykle gospodarcze. Obejmuje on producentów i dystrybutorów żywności, napojów i wyrobów tytoniowych oraz producentów nietrwałych artykułów gospodarstwa domowego i produktów osobistych. Obejmuje on również dystrybutorów i sprzedawców detalicznych podstawowych produktów konsumenckich, w tym firmy zajmujące się sprzedażą detaliczną żywności i leków. 

Sektor niepodstawowych dóbr konsumpcyjnych (Consumer Discretionary Sector): obejmuje firmy, które są najbardziej wrażliwe na cykle gospodarcze. Jego segment produkcyjny obejmuje samochody i komponenty, trwałe artykuły gospodarstwa domowego, produkty rekreacyjne oraz tekstylia i odzież.

Sektor opieki zdrowotnej (Health Care Sector): obejmuje dostawców i usługi opieki zdrowotnej, firmy produkujące i dystrybuujące sprzęt i materiały medyczne oraz firmy technologiczne zajmujące się opieką zdrowotną. Obejmuje on również firmy zajmujące się badaniami, rozwojem, produkcją i marketingiem produktów farmaceutycznych i biotechnologicznych.

Sektor finansowy (Financials Sector): obejmuje spółki zajmujące się bankowością, usługami finansowymi, finansami konsumenckimi, rynkami kapitałowymi i działalnością ubezpieczeniową. Obejmuje on również giełdy finansowe i dane oraz hipoteczne REIT-y.

Sektor technologii informacyjnych (Information Technology Sector): obejmuje spółki oferujące oprogramowanie i usługi informatyczne, producentów i dystrybutorów sprzętu i wyposażenia technologicznego, takiego jak sprzęt komunikacyjny, telefony komórkowe, komputery i urządzenia peryferyjne, sprzęt elektroniczny i powiązane instrumenty oraz półprzewodniki i powiązany sprzęt i materiały. 

Sektor usług (tele)komunikacyjnych (Communication Services Sector): obejmuje firmy, które ułatwiają komunikację i oferują powiązane treści i informacje za pośrednictwem różnych mediów. Obejmuje on firmy telekomunikacyjne i medialno-rozrywkowe, w tym producentów interaktywnych gier oraz firmy zajmujące się tworzeniem lub dystrybucją treści i informacji za pośrednictwem zastrzeżonych platform. 

Sektor użyteczności publicznej (Utilities Sector): obejmuje spółki użyteczności publicznej, takie jak usługi dostarczania elektryczności, gazowe i wodociągowe. Obejmuje również niezależnych producentów energii i sprzedawców energii oraz firmy zajmujące się wytwarzaniem i dystrybucją energii elektrycznej ze źródeł odnawialnych. 

Sektor nieruchomości (Real Estate Sector): obejmuje spółki zaangażowane w rozwój i obsługę nieruchomości. Obejmuje on również firmy oferujące usługi związane z nieruchomościami oraz fundusze kapitałowe Real Estate Investment Trusts (REITs).

Ryzyko polityczne w kolejności rosnącej wg branż przedstawiono w tabeli poniżej:



Pierwsze pozycje nie budzą kontrowersji. Najmniejsze ryzyko niesie produkcja dóbr podstawowych (np. żywność) i niepodstawowych (np. samochody). Zaskakujące natomiast jest środkowe położenie sektora energii, które wydaje się być bardzo narażone na decyzje polityczne. Z drugiej strony to usługi użyteczności publicznej dostarczają energię i znajdują się na ostatnim miejscu, czyli niosą najwyższe ryzyko. Wydaje mi się, że Energy Sector to błędna i myląca nazwa, którą powinno się zastąpić przez Mining sector, czyli sektor wydobywczy. Niemniej wydawałoby się, że sektor wydobywczy powinien znajdować się bliżej końca. Odpowiedź zapewne leży w tym, iż są to duże i niezależne od rządu podmioty, które mają po pierwsze strategiczne znaczenie dla gospodarki, a po drugie wpływają na ceny i na stabilność sektora finansowego. Z jednej strony rząd USA nie może ich za mocno atakować, z drugiej mają one silne lobby, które uzyskują dla siebie korzyści. W warunkach polskich sytuacja wygląda inaczej - państwo kontroluje ten sektor, a przez to ryzyko polityczne może być w rzeczywistości większe.

Spróbujmy przyporządkować sektory do różnych subindeksów WIGu. Poniżej moja propozycja wraz ze wskaźnikiem ryzyka politycznego:





Tak jak pisałem sektor energii, który tutaj został przyporządkowany do WIG-paliwa, może być w warunkach polskich za nisko na tej liście. Jest dość oczywiste, że im bardziej upolityczniona dana branża czy spółka, tym zarządzający będą silniej unikać tematu polityki, co więcej, będą wypowiadać się także bardziej jak politycy - w sposób odpowiednio "bezpieczny". Metoda zaproponowana przez [2] powinna zostać skorygowana o poziom polityczności danej branży i spółki. Wtedy byłaby bardziej wiarygodna. Dla przykładu Orlen jest tak upolityczniony, że bywa błędnie nazywany przedsiębiorstwem państwowym. To też powoduje, że politycy opozycji uprawiają często populistyczną propagandę, że powinien wychodzić na zero, a nie zarabiać. Wystarczy taka jedna wypowiedź, aby zatopić kurs na wiele tygodni.

Przedstawiony rozkład ryzyka politycznego wg branż może przydać się w procesie dywersyfikacji portfela długoterminowego.


Literatura:
[1] Chuliá, H., Estévez, M., Uribe, J.M.  Systemic political risk. Economic Modelling. Volume 125, August 2023, 106375;
[2] Hassan, T.A., Hollander, S., Van Lent, L., Tahoun, A. Firm-level political risk: measurement and effects. The Quarterly Journal of Economics, Volume 134, Issue 4, November 2019, Pages 2135–2202.

poniedziałek, 7 sierpnia 2023

Pozorne odwrócenie przyczyny i skutku w relacji giełdy z gospodarką

Omówiłem przyczynowość w sensie Grangera w świecie gospodarki, a teraz krótko przyjrzę się jej w świecie finansów. Zgodnie z teorią efektywnego rynku informacje o zmianach w produkcji powinny natychmiast zostać uwzględnione w cenach: dobre wieści powinny natychmiast podnosić ceny, złe - obniżać. Czy wynika z tego, że zmiany w produkcji powinny korelować na bieżąco z indeksami giełdowymi? Nie. Zobaczmy o co chodzi.

Dane o miesięcznych zmianach produkcji są te same co w poprzednim artykule. Jedynie dokładam stopę zwrotu WIG (źródło: stooq.pl). Okres 2001-06.2023, miesięcznie. Jedna uwaga: OECD podaje wskaźniki w ujęciu realnym. Nawet żeby się upewnić, porównałem dane dla Polski z GUSem - wskaźnikami przemysłu w cenach stałych r/r. Po przeróbce miesięcznych danych OECD do rocznych, dostałem współczynnik korelacji 0,95 i sumarycznie oba źródła niemal się pokrywają. Tak więc musimy mieć na uwadze, że mamy wielkości realne, które porównujemy z nominalnym WIG. Analiza w R.

1. Produkcja w Polsce.

Zacznijmy od korelacji krzyżowej WIG kontra produkcja w Polsce:

ccf(stopa_wig, stopa_pl, lag.max=6)



Nie ma tu pomyłki - ujemny krok oznacza, że produkcja w Polsce jest opóźniona o 1 miesiąc w stosunku do WIGu. WIG wyprzedza produkcję w Polsce i to o 2 miesiące.

Ale znowu jak poprzednim razem dobrze jest sprawdzić PACF stóp WIGu:


Okazuje się, że autokorelacje nie mogą być, nomen omen, przyczyną odwrócenia przyczyny i skutku.  

Żeby uzyskać pewność co do tego "odwrócenia", zastosujemy test Grangera(wystarczy order = 1) z pakietu lmtest:

H0: WIG nie wpływa na produkcję z miesięcznym opóźnieniem

H1: WIG wpływa na produkcję z miesięcznym opóźnieniem.

grangertest(x=stopa_wig, y=stopa_pl, order=1)

Granger causality test

Model 1: stopa_pl ~ Lags(stopa_pl, 1:1) + Lags(stopa_wig, 1:1)
Model 2: stopa_pl ~ Lags(stopa_pl, 1:1)
  Res.Df Df    F    Pr(>F)    
1    265                      
2    266 -1 13.2 0.0003361 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


WIG powoduje zmiany w gospodarce? Zanim przeanalizujemy wynik, wykonajmy test odwrotny:

 H0: Produkcja nie wpływa na WIG z miesięcznym opóźnieniem

H1: Produkcja wpływa na WIG z miesięcznym opóźnieniem.

grangertest(y=stopa_wig, x=stopa_pl, order=1)

Okazuje się, że produkcja nie wpływa na WIG po miesiącu. To się zgadza z teorią efektywnego rynku, jednak co oznacza, że WIG wyprzedza gospodarkę co najmniej o 1 miesiąc (bo widzieliśmy 2 miesiące wyprzedzające)? Odpowiedź wydaje się oczywista: inwestorzy przewidują poprawnie zmiany w produkcji. Pytanie, w jaki sposób przewidują? Pierwsza hipoteza jaka przychodzi to występujące autokorelacje w produkcji. Te już sprawdzałem wcześniej, ale powtórzmy rysunek:


Istnieje zatem lekka ujemna korelacja drugiego rzędu, ale nie pierwszego. Korelacja WIGu z produkcją była jednak silniejsza (0,22 vs 0,16) i to dla 1 rzędu. Wynika z tego, że inwestorzy raczej wykorzystują dodatkowe informacje.

2. Produkcja UE

Jedną z możliwości jest... przyczynowość w sensie Grangera UE -> Polska, którą odkryłem wcześniej. Dla przypomnienia UE koreluje zarówno w bieżącym miesiącu z Polską, jak i wpływa po miesiącu na Polskę. Stąd być może wcześniejsza reakcja WIGu na zmiany gospodarcze w Polsce. Gdyby to jednak była prawda, to produkcja w UE korelowałaby z giełdą w bieżącym miesiącu. Usuwam ostatni miesiąc WIG, bo danych dla UE nie było dla czerwca. Sprawdźmy korelację:

stopa_wig = stopa_wig[-length(stopa_wig)]

ccf(stopa_wig, stopa_eu, lag.max=6)

  


Wbrew linii rozumowania WIG nie koreluje z UE w bieżącym miesiącu, a zamiast tego zachowuje się tak samo jak w stosunku do Polski. Jest to dowód, że tzw. chłopski rozum nie zawsze musi obowiązywać. Wprawdzie przeprowadzone rozumowanie wydaje się logiczne, ale gdyby było spełnione, to musiałoby obalać teorię efektywnego rynku. To właśnie brak tej korelacji działa na jej korzyść. 

3. Produkcja USA

Kolejna możliwość obalająca teorię efektywnego rynku byłaby związana ze sprzężeniem zwrotnym między USA a UE, tak że UE wpływa na USA, ale USA lekko wpływa na UE po miesiącu. Inwestorzy mogą więc dyskontować informacje na miesiąc wcześniej już dzięki USA. USA wpływałby na UE, a UE na Polskę. I otrzymalibyśmy rozwiązanie zagadki w jaki sposób inwestorzy przewidują gospodarkę. 

Ale znowu - gdyby to była prawda, to musiałaby istnieć bieżąca korelacja WIG-USA. Sprawdzamy:

ccf(stopa_wig, stopa_us, lag.max=6)


 A jednak nie. Stopa zwrotu WIG nie koreluje na bieżąco z produkcją USA, ale znów z wyprzedzeniem dwumiesięcznym.

Na ostatnim wykresie jest jeszcze jedna ciekawa sprawa. Wygląda na to, że WIG jest lekko opóźniony o 5 miesięcy w stosunku do zmian PKB w USA. To wszystko zaprzecza obiegowej opinii, że giełda wyprzedza gospodarkę o ok. 6 miesięcy. Korelacja jednak jest mała - 15-16%. Teoria efektywnego rynku jest w tym kontekście nadłamana.

4. Produkcja OECD

Została jeszcze jedna możliwość. Istnieje bowiem sprzężenie zwrotne między a USA a OECD, tzn. USA wpływa na OECD, ale OECD wpływa na kolejny miesiąc w USA. Sprawdzamy, więc analogicznie czy WIG na bieżąco koreluje z OECD:

ccf(x=stopa_wig, y=stopa_oecd, lag.max=6)


Okazuje się, że WIG zachowuje się niemal identycznie jak z poprzednikami. Tak więc nie da się wyjaśnić tego typu korelacjami faktu, że inwestorzy przewidują kolejne 1-2 miesiące. Muszą oni z czegoś innego korzystać. Mogą to być zarówno informacje publicznie dostępne, których tutaj nie uwzględniłem (np. nowe zamówienia, stopa bezrobocia/zatrudnienia albo sondaże o nastroju przedsiębiorców lub konsumentów), jak i niedostępne dla ogółu.   

Patrząc tak zupełnie czysto i naiwnie, można by wysnuć śmiałą hipotezę, że to indeksy giełdowe powodują zmiany w produkcji w następnym miesiącu. Nawet można by to zjawisko wyjaśnić  przeświadczeniem spółek, że skoro inwestorzy wierzą (nie wierzą) w ich perspektywy, to powinny zwiększyć (zmniejszyć) produkcję. Pomijając fakt, że spółki planują na wiele miesięcy albo lat działalność operacyjną, to za odrzuceniem takiej hipotezy stoi również spostrzeżenie, że przecież to nie jest produkcja rozumiana w potocznym znaczeniu, ale produkcja sprzedana. Dalej, wzrosty albo spadki cen akcji mogą być także spowodowane czynnikami psychologicznymi, jak spadek lub wzrost niepewności czy awersji do ryzyka. Spółka działa zgodnie ze swoimi standardami i szacunkami i nie obchodzi jej, że gdzieś za granicą upadł jakiś bank, z którym nie ma nic wspólnego. Natomiast jej akcjonariusz, nawet gdyby miał pełną wiedzę o spółce, może dostrzec przynajmniej krótkoterminowe niebezpieczeństwo, że upadły bank wywoła spadek popytu inwestorów instytucjonalnych na akcje spółki. W dodatku inwestor stający się graczem będzie przewidywał ruchy innych graczy na to zdarzenie, co wywoła samospełniającą się lawinę. W ten sposób giełda odrywa się od sfery realnej. Dlatego hipoteza odwrotna nie ma sensu.

sobota, 5 sierpnia 2023

Przyczynowość w sensie Grangera. Test Grangera w języku R

Normalnie gdy chcemy sprawdzić czy jedna zmienna wpływa na drugą, budujemy model regresji, w którym zmienna objaśniona jest opóźniona o jakiś okres, i testujemy go. Co jednak zrobić, gdy występuje autokorelacja, jak to ma miejsce często w danych ekonomicznych? Dodawanie do takiego  modelu autoregresji jest teoretycznie błędne, bo wiadomo, że w normalnej regresji zmienne objaśniające powinny być niezależne od siebie. 

Z pomocą przychodzi nam test Grangera. Test sprawdza przyczynowość w sensie Grangera. C. Granger zdefiniował przyczynowość w następujący sposób [1]:

Mówimy, że Xt powoduje Yt, jeśli jesteśmy w stanie lepiej przewidzieć Yt przy użyciu wszystkich dostępnych informacji, niż gdyby wykorzystano wszystkie informacje oprócz Xt.

Jest to definicja bardzo ogólna i abstrakcyjna. Zauważmy, że w tej definicji nie ma opóźnienia Y względem X. Dlaczego? Łatwiejsze zrozumienie przyczynowości Grangera w kontekście procesu ARMA podają autorzy w [2]:

X wywołuje Y, jeśli wcześniejsze informacje o X przewidują zachowanie Y lepiej niż same wcześniejsze informacje o Y.

Innymi słowy Xt i Yt są zmiennymi, które wpływają na siebie w teraźniejszości - natychmiast, ale Granger oddziela zbiór informacji o tych zmiennych, który może mieć przesunięcie w czasie lub ściślej mówiąc zbiór z okresu t zawiera informacje z okresu t-1. Taki podział pozwala rozróżnić zwykłą korelację od przyczynowości. Powiedzmy, że mamy rozkład jazdy: autobus X przejeżdża część trasy od godz. 8 do 9, a autobus Y kolejną część trasy od 9 do 10. Gdy X dojeżdża do swojego końca, Y rusza. Jednak X nie jest przyczyną Y, a jedynie z nim koreluje, ponieważ Y może ruszyć niezależnie od tego czy X dojeżdża czy nie. A teraz wyobraźmy sobie, że jazda obydwu ma się odbywać w tym samym czasie. Gdyby X bardzo przyspieszył i dojeżdżał już o 8:45, to Y musiałby ruszyć o 8:45, a nie 9:00, żeby nie zostać uderzonym przez X. W ten sposób X(t) staje się przyczyną Y(t). Ale ocenić to możemy dopiero, gdy mamy informację, że X wcześniej z jakiegoś powodu przyspieszył, np. nie było nikogo na drodze.

W świecie gospodarki sytuacja wygląda podobnie, choć jest dużo bardziej złożona. Produkcja w jednym kraju będzie wpływać na produkcję w innym kraju, bo np. wzrost produkcji w kraju X to wzrost dochodów, który można przeznaczyć na nowe inwestycje w kraju Y. 

Zajmijmy się teraz stroną praktyczną, czyli zastosujmy test Grangera w języku R. Na stronie OECD możemy ściągnąć statystyki produkcji miesięcznej dla krajów OECD. Wybieramy Time -> Select Date Range -> Monthly -> np. od 2001 r. Eksportujemy text file (CSV).  Interesują mnie ogólnie 4 obszary:

1. Polska

2. UE

3. USA

4. całe OECD

Niestety wskaźniki na OECD są słabo opisane i trzeba się trochę dokopać, żeby zrozumieć, co jest czym. Przykładowo produkcji nie można oddzielać od sprzedaży, bo zgodnie z zasadami rachunkowości tylko sprzedana produkcja się liczy do rachunków. Podstawową miarą jest indeks produkcji. Żeby odkryć co wchodzi w skład produkcji, możemy poniżej kliknąć w Structural Analysis (STAN) Databases. Pojawi się tablica ze składem industry. Możemy kliknąć w Industry, żeby obejrzeć cały skład. Okazuje się, że mieści się tu cała gospodarka, w tym usługi.

Jeśli chodzi o same dane, to są tu dwie istotne cechy. Po pierwsze jest to indeks w odniesieniu do określonego roku. Nie jest ważne do jakiego, ale należy zmienną przekształcić w stopę zmian (tutaj m/m). Po drugie nie są to dane surowe, ale poddane obróbce - usunięto z nich sezonowość za pomocą X12-ARIMA i TRAMO-SEATS , stąd oznaczenie sa (ang. seasonal adjustment). To drugie może stanowić podstawę różnicy między danymi OECD a GUS.

No dobrze, na początek mamy dwie zmienne:

- stopy zmian produkcji w Polsce, m/m: stopa_pl 

- stopy zmian produkcji w USA, m/m: stopa_us

Kod:

plot(stopa_pl, lwd=2, col="blue", main = "Industry, change% m/m (OECD)")

lines(stopa_us, lwd=2, col="red")

legend("topleft", legend=c("Poland", "USA"), col=c("blue", "red"), lty = 1, lwd = 2)




Wykonajmy korelację krzyżową między nimi:

ccf(stopa_pl, stopa_us)


Występuje silna autokorelacja bieżąca (0,6), ale też dość mocna korelacja z pospieszeniem zmiennej stopa_pl o 1 okres. Czyli to produkcja USA jest opóźniona o 1 okres w stos. do polskiej. Wydawałoby się, że powinno być na odwrót - że Polska podąża za USA. Tutaj dostajemy coś mało intuicyjnego. Może problemem są autokorelacje? Sprawdźmy PACF (autokorelacje cząstkowe):

pacf(stopa_pl)

 



Okazuje się, że autokorelacji 1 rzędu brak. Interesujące, że występuje ujemna korelacja co drugi miesiąc, ale na razie zostawiamy to. 

Zastosujmy test Grangera. Użyjemy do tego funkcji grangertest w pakiecie lmtest. Pakiet ten nie jest niczym nowym, bo używamy go zawsze do testów homoskedastyczności. Trzeba nadmienić, że test Grangera dotyczy zmiennych stacjonarnych, więc warto na początku wykonać test stacjonarności, ale to pomijam. 

Przetestujmy to co jest mało intuicyjne - czy Polska (x) wpływa na USA (y).

Hipoteza zerowa: Polska nie wpływa na USA.

Hipoteza alternatywna: Polska wpływa na USA.

Jak widzieliśmy w ccf występowało tylko jedno opóźnienie w korelacji, więc przypuszczamy, że w teście wystarczy wskazać order=1: 

grangertest(x=stopa_pl, y=stopa_us, order=1)

Granger causality test

Model 1: stopa_us ~ Lags(stopa_us, 1:1) + Lags(stopa_pl, 1:1)
Model 2: stopa_us ~ Lags(stopa_us, 1:1)
  Res.Df Df    F   Pr(>F)    
1    265                     
2    266 -1 17.5 0.000038 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Hipoteza zerowa zostaje odrzucona. Nasze wątpliwości potwierdzają się - zmiany produkcji w Polsce powodują w sensie Grangera zmiany w produkcji USA. Sprawdźmy w drugą stronę - czy produkcja USA (x) wpływa na produkcję Polski (y).

Hipoteza zerowa: USA nie wpływa po miesiącu na Polskę.

Hipoteza alternatywna: USA wpływa po miesiącu na Polskę.

grangertest(x=stopa_us, y=stopa_pl, order=1)

Efekt:

Granger causality test

Model 1: stopa_pl ~ Lags(stopa_pl, 1:1) + Lags(stopa_us, 1:1)
Model 2: stopa_pl ~ Lags(stopa_pl, 1:1)
  Res.Df Df    F Pr(>F)
1    265               
2    266 -1 0.08   0.78


Nie można odrzucić hipotezy zerowej. Okazuje się, że USA nie wpływa w sensie Grangera na Polskę. To wydaje się pozbawione sensu, ale pamiętajmy o silnej bieżącej korelacji między krajami. Możliwe, że opóźnienia występują wewnątrz miesiąca. 

Pozostaje zagadka, dlaczego Polska wyprzedza produkcję USA. Zwróćmy uwagę, że Polska jest częścią Unii Europejskiej, która z kolei może wpływać na gospodarkę USA. Tak więc Polska może mieć pośredni wpływ na USA. Sprawdźmy tę hipotezę.

Porównajmy ze sobą:

- stopy zmian produkcji w UE, m/m: stopa_eu

- stopy zmian produkcji w USA, m/m: stopa_us

Nie pokazuję już efektu krzyżowej korelacji, bo jest bardzo podobny do tej pierwszej - występuje głównie korelacja 1 rzędu.

Hipoteza zerowa: UE nie wpływa po miesiącu na USA.

Hipoteza alternatywna: UE wpływa po miesiącu na USA.

Wykonujemy test Grangera. Ponieważ obecnie nie ma jeszcze danych dla UE za czerwiec, odejmuję ostatnią wartość dla USA.  

grangertest(stopa_eu, stopa_us[-length(stopa_us)], order=1)

Granger causality test

Model 1: stopa_us[-length(stopa_us)] ~ Lags(stopa_us[-length(stopa_us)], 1:1) + Lags(stopa_eu, 1:1)
Model 2: stopa_us[-length(stopa_us)] ~ Lags(stopa_us[-length(stopa_us)], 1:1)
  Res.Df Df    F        Pr(>F)    
1    264                          
2    265 -1 43.5 0.00000000023 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Hipoteza zerowa zostaje odrzucona, zatem UE istotnie wpływa na USA. Sprawdźmy to samo na odwrót:

Hipoteza zerowa: USA nie wpływa po miesiącu na UE.

Hipoteza alternatywna: USA wpływa po miesiącu na UE.

grangertest(stopa_us[-length(stopa_us)], stopa_eu, order=1)

Granger causality test

Model 1: stopa_eu ~ Lags(stopa_eu, 1:1) + Lags(stopa_us[-length(stopa_us)], 1:1)
Model 2: stopa_eu ~ Lags(stopa_eu, 1:1)
  Res.Df Df    F Pr(>F)  
1    264                 
2    265 -1 3.48  0.063 .
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Hipoteza o tym, że USA wpływa na UE musi zostać odrzucona na poziomie 5% istotności, ale już na poziomie 10% nie. Można przypuszczać, że jakiś niewielki feedback, tzn. sprzężenie zwrotne między USA a UE także występuje. 

Zaproponowana hipoteza, że Polska wpływa pośrednio na USA poprzez UE jest już częściowo potwierdzona. Żeby w pełni to potwierdzić przetestujmy związek między UE a Polską.

Hipoteza zerowa: UE nie wpływa po miesiącu na Polskę.

Hipoteza alternatywna: UE wpływa po miesiącu na Polskę.

Podobnie jak z USA, odejmuję ostatnią wartość dla Polski i robię test:

grangertest(stopa_eu, stopa_pl[-length(stopa_pl)], order=1)

Granger causality test

Model 1: stopa_pl[-length(stopa_pl)] ~ Lags(stopa_pl[-length(stopa_pl)], 1:1) + Lags(stopa_eu, 1:1)
Model 2: stopa_pl[-length(stopa_pl)] ~ Lags(stopa_pl[-length(stopa_pl)], 1:1)
  Res.Df Df    F   Pr(>F)    
1    264                     
2    265 -1 16.5 0.000065 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Hipoteza zerowa - odrzucona. Produkcja UE wpływa na produkcję Polski. Odwrotnie:

Hipoteza zerowa: Polska nie wpływa po miesiącu na UE.

Hipoteza alternatywna: Polska wpływa po miesiącu na UE.

grangertest(stopa_pl[-length(stopa_pl)], stopa_eu, order=1)

Granger causality test

Model 1: stopa_eu ~ Lags(stopa_eu, 1:1) + Lags(stopa_pl[-length(stopa_pl)], 1:1)
Model 2: stopa_eu ~ Lags(stopa_eu, 1:1)
  Res.Df Df    F Pr(>F)
1    264               
2    265 -1 1.09    0.3


Hipoteza zerowa - zostaje. Produkcja Polski nie wpływa na produkcję UE z opóźnieniem miesięcznym. 

W sumie potwierdziliśmy hipotezę, że Polska wpływa na USA pośrednio przez UE. 

Zagadka rozwiązana, chociaż pozostaje jeszcze jedna ciekawa zależność, mianowicie między całym OECD a USA, UE i Polską. Podobnie jak w przypadku UE, dane dla całego OECD pojawiają się z opóźnieniem, stąd podobnie trzeba odjąć ostatnie dane USA i Polski. Ponieważ pojawi się tu sporo kombinacji, nie będę już opisywał każdej hipotezy, a podam sam kod, efekt wraz z wnioskami:

OECD -> USA:

grangertest(stopa_oecd, stopa_us[-length(stopa_us)], order=1)

OECD powoduje zmiany w gospodarce USA po miesiącu (duża istotność, p = 0).


USA -> OECD:

grangertest(stopa_us[-length(stopa_us)], stopa_oecd, order=1)

USA powoduje zmiany w gospodarce OECD po miesiącu na poziomie 5% istotności (p = 0.022).


OECD -> UE:

grangertest(x=stopa_oecd, y=stopa_eu, order=1)

OECD nie powoduje zmiany w gospodarce UE po miesiącu (p = 0.36).


UE -> OECD:

grangertest(x=stopa_eu, y=stopa_oecd, order=1)

UE powoduje zmiany w gospodarce OECD po miesiącu (p = 0.0027).


OECD -> Polska:

grangertest(stopa_oecd, stopa_pl[-length(stopa_pl)], order=1)

OECD nie powoduje zmiany w gospodarce Polski po miesiącu na poziomie istotności 5% (p = 0.1).


Polska -> OECD:

grangertest(stopa_pl[-length(stopa_pl)], stopa_oecd, order=1)

Polska nie powoduje zmiany w gospodarce OECD po miesiącu (p = 0.86).


Dostajemy interesujący wniosek. Zmiany w UE wpływają po miesiącu na OECD, w tym na Polskę. Polska nie wpływa na OECD, mimo że wpływa pośrednio na USA, a USA stanowi dużą część OECD. Jednocześnie istnieje sprzężenie zwrotne między USA a OECD. W końcu, UE indukuje zmiany w OECD, ale nie na odwrót. 

Wszystkie odkryte zależności w tym artykule ilustruje poniższy schemat:



Strzałka od USA do UE jest przerywana, bo jest to słaba zależność (sprzężenie zwrotne) oraz ma inny kształt, bo omija Polskę, a wskazuje na Unię jako całość.
 

Literatura:

[1] Granger C.W.J. Investigating causal relations by econometric models and cross spectral methods. Econometrica. 1969;37:424–438.

[2] Amornbunchornvej C., Zheleva E., Berger-Wolf T.Y. Variable-lag Granger Causality for Time Series Analysis. Machine Learning (cs.LG); Econometrics (econ.EM); Quantitative Methods, 2019.

---------------------------

Cały kod:

if (require(lmtest)==FALSE) {

  install.packages("lmtest")

  library("lmtest")

}

if (require("zoo")==FALSE) {

  install.packages("zoo")

  library("zoo")

}

if (require("tidyverse")==FALSE) {

  install.packages("tidyverse")

  library(tidyverse)

}


#zamieniam "\" na "/"

sciezka = r"(C:\Users\Documents\R\testy)"

sciezka = gsub("\\", "/", sciezka, fixed=T)

# albo

# sciezka = gsub("\\\\", "/", sciezka)

# ustawiamy folder roboczy

setwd(sciezka)

fr = 12

nazwaPliku = "MEI_REAL.csv"

if (grepl(";", readLines(nazwaPliku, n=1))) {

  plik = read.csv(nazwaPliku, sep=";", dec=",")

} else if (grepl(",", readLines(nazwaPliku, n=1))) {

  plik = read.csv(nazwaPliku, sep=",", dec=".")

}


produkcja = "Production of total industry sa, Index"

kraj1 = "Poland"

kraj2 = "United States"

kraj3 = "European Union – 27 countries (from 01/02/2020)"

kraj4 = "OECD - Total"

kraje = c(kraj1, kraj2, kraj3, kraj4)

moje_formaty = c("%d.%m.%Y", "%Y.%m.%d", "%d-%m-%Y", "%Y-%m-%d", "%d/%m/%Y", "%Y/%m/%d", "%b-%Y", "%B-%Y")

for (kraj in kraje) {

  filtered <- subset(plik, plik$Subject == produkcja & plik$Country == kraj)

  daty <- filtered[["Time"]]

  daty = parse_date_time(daty, orders=moje_formaty)

  rok = as.numeric(format(daty, "%Y"))

  mc = as.numeric(format(daty, "%m"))

  wartosci <- filtered[["Value"]]

  stopy1m <- diff(wartosci)/wartosci[-length(wartosci)]


  if (kraj==kraje[1]) {

    stopa1 <- stats::lag(ts(stopy1m, start = c(rok[1], mc[1]), frequency= fr), -1)

  } else if (kraj==kraje[2]) {

    stopa2 <- stats::lag(ts(stopy1m, start = c(rok[1], mc[1]), frequency= fr), -1)

  } else if (kraj==kraje[3]) {

    stopa3 <- stats::lag(ts(stopy1m, start = c(rok[1], mc[1]), frequency= fr), -1)

  } else if (kraj==kraje[4]) {

    stopa4 <- stats::lag(ts(stopy1m, start = c(rok[1], mc[1]), frequency= fr), -1)

  }

}


stopa_pl = as.numeric(stopa1)

stopa_us = as.numeric(stopa2)

stopa_eu = as.numeric(stopa3)

stopa_oecd = as.numeric(stopa4)


# test grangera

grangertest(x=stopa_pl, y=stopa_us, order=1)

grangertest(x=stopa_us, y=stopa_pl, order=1)

grangertest(x=stopa_us[-length(stopa_us)], y=stopa_eu, order=1)

grangertest(x=stopa_eu, y=stopa_us[-length(stopa_us)], order=1)

grangertest(x=stopa_eu, y=stopa_pl[-length(stopa_pl)], order=1)

grangertest(x=stopa_pl[-length(stopa_pl)], y=stopa_eu, order=1)

grangertest(x=stopa_oecd, y=stopa_us[-length(stopa_us)], order=1)

grangertest(x=stopa_us[-length(stopa_us)], y=stopa_oecd, order=1)

grangertest(x=stopa_oecd, y=stopa_eu, order=1)

grangertest(x=stopa_eu, y=stopa_oecd, order=1)

grangertest(x=stopa_oecd, y=stopa_pl[-length(stopa_pl)], order=1)

grangertest(x=stopa_pl[-length(stopa_pl)], y=stopa_oecd, order=1)