#install.packages("WDI")
library(WDI)
library(tidyverse)
# Hent data fra Verdensbanken
fx <- WDI(indicator='PA.NUS.FCRF', country=c('AU','NZ'), start=2000, end=2025)
cpi <- WDI(indicator='FP.CPI.TOTL', country=c('AU','NZ'), start=2000, end=2025)I denne øvelse skal vi undersøge købekraftsparitetsteorien (PPP: purchasing power parity) ved hjælp af rigtige data fra Verdensbanken. Her ser vi på både absolut og relativ PPP.
Jeg har valgt Australien og New Zealand som cases, da de er to økonomier, der er tæt forbundne med hinanden: blandt andet med forholdsvis høj samhandel og lignende forbrugerpræferencer. Derudover er begge lande relativt stabile økonomier.
Data og udfordringer
Man kan nemt downloade data ‘manuelt’ fra Verdensbankens hjemmeside. Men for at gøre det nemmere at arbejde med dataene i R, findes der forskellige pakker, der kan hente data direkte fra Verdensbanken. Her bruger jeg WDI-pakken, som gør det nemt at hente både prisindeks (CPI) og valutakurser (FX).
En central udfordring ved at teste PPP empirisk er, at der ikke findes direkte tilgængelige, internationalt sammenlignelige prisniveaudata. Forbrugerprisindekset (CPI) måler prisudviklingen inden for hvert land over tid. Men det fortæller os ikke, hvor højt eller lavt prisniveauet er i et land sammenlignet med et andet land.
For at overkomme dette problem ‘snyder’ vi lidt: Vi bruger Verdensbankens PPP-omregningsfaktor (PPP conversion factor), som angiver, hvor mange lokale valutaenheder der svarer til én international dollar (en hypotetisk valuta med samme købekraft som den amerikanske dollar). Ved at gange CPI-værdien med PPP-faktoren får vi et mål for det samlede prisniveau, der er sammenligneligt på tværs af lande.
Selvom det ikke er perfekt, giver det et i hvert fald et approksimativt mål for prisniveauer, som vi kan bruge til at undersøge absolut PPP.
Nej, det er det ikke. Det er en meget forenklet test, der bygger på flere antagelser og datakonstruktioner. For det første bruger vi CPI gange PPP-faktor som en proxy for det samlede prisniveau, hvilket ikke fanger alle aspekter af prisniveauet i et land. For det andet ser vi kun på to lande, hvilket begrænser generaliserbarheden af resultaterne. (Man får helt sikkert andre resultater med andre lande!) For det tredje ignorerer vi mange andre faktorer, der kan påvirke valutakurser og prisniveauer, såsom handelsbarrierer og transportomkostninger.
adjust_factor <- WDI(indicator='PA.NUS.PRVT.PP', country=c('AU','NZ'), start=2000, end=2025)
# Konstruer sammenlignelige prisniveauer
prices <- cpi %>%
left_join(adjust_factor %>% select("iso2c", "year", "PA.NUS.PRVT.PP"), by=c("iso2c", "year")) %>%
mutate(
price_level = FP.CPI.TOTL * PA.NUS.PRVT.PP
) %>%
filter(!is.na(price_level))Absolut PPP
Absolut PPP bygger på idéen om loven om én pris. Identiske varer bør koste det samme i forskellige lande, når priserne omregnes til samme valuta. Hvis dette gælder for hver vare, må det også gælde for alle varer, og dermed det samlede prisniveau.
Formelt kan absolut PPP udtrykkes som:
\[E_\frac{i}{j} = \frac{P_i}{P_j}\]
Hvor:
- \(E_\frac{i}{j}\) er den nominelle valutakurs (lokale valutaenheder per fremmed valuta)
- \(P_i\) er prisniveauet i land \(i\)
- \(P_j\) er prisniveauet i land \(j\)
Hvis absolut PPP holder, skal valutakursen mellem to lande afspejle forholdet mellem deres prisniveauer.
Datakonstruktion
Vi konstruerer et mål for prisniveauet ved at gange CPI med PPP-omregningsfaktoren. Dette giver os et estimat for, hvad det samlede prisniveau ville være.
Derefter beregnes forholdet mellem Australiens og New Zealands prisniveau (ratio_AU_NZ), som så kan sammenlignes med den faktiske valutakurs (fx_AU_NZ).
# Beregn valutakursforholdet
compare_fx <- fx %>%
filter(!is.na(PA.NUS.FCRF)) %>%
select(iso2c, year, PA.NUS.FCRF) %>%
pivot_wider(names_from = iso2c, values_from = PA.NUS.FCRF) %>%
mutate(
fx_AU_NZ = `AU` / `NZ`
) %>%
select(year, fx_AU_NZ)
# Sammenlign prisniveauer og valutakurs
compare <- prices %>%
filter(!is.na(price_level)) %>%
select(iso2c, year, price_level) %>%
pivot_wider(names_from = iso2c, values_from = price_level) %>%
mutate(
ratio_AU_NZ = `AU` / `NZ`
) %>%
select(year, ratio_AU_NZ) %>%
left_join(compare_fx, by="year")# Plot både ratio_AU_NZ og fx_AU_NZ
p1 <- compare %>%
pivot_longer(cols = c(ratio_AU_NZ, fx_AU_NZ), names_to = "variable", values_to = "value") %>%
ggplot(aes(x = year, y = value, color = variable)) +
geom_line(linewidth = 1) +
labs(
x = "År",
y = "Ratio (AU/NZ)",
color = "Variabel"
) +
theme_minimal() +
scale_color_manual(
values = c(ratio_AU_NZ = blue, fx_AU_NZ = red),
labels = c(ratio_AU_NZ = "Relativt prisniveau", fx_AU_NZ = "Valutakurs")
)Fortolkning
Figur 1 viser udviklingen i det relative prisniveau (blå) og den faktiske valutakurs (rød) over tid. Hvis absolut PPP holder perfekt, bør de to linjer falde sammen.
Vi kan også se nærmere på afvigelsen fra PPP:
# Beregn og vis afvigelsen fra absolut PPP
p2 <- compare %>%
mutate(
ppp_deviation = (fx_AU_NZ - ratio_AU_NZ) / ratio_AU_NZ * 100
) %>%
ggplot(aes(x = year, y = ppp_deviation)) +
geom_line(linewidth = 1, color = violet) +
geom_hline(yintercept = 0, linetype = "dashed", color = grey) +
labs(
x = "År",
y = "Afvigelse (%)"
) +
theme_minimal()- En positiv afvigelse betyder, at den australske dollar er stærkere (dyrere) end PPP foreskriver.
- En negativ afvigelse betyder, at den australske dollar er svagere (billigere) end PPP foreskriver.
Relativ PPP
Relativ købekraftsparitet er en svagere version af PPP-teorien, der fokuserer på ændringer snarere end niveauer. Ifølge relativ PPP kan forskellen i inflationsrater mellem to lande forklarer ændringer i valutakursen på lang sigt.
Formelt kan relativ PPP udtrykkes som:
\[\%\Delta E_\frac{i}{j} \approx \pi_i - \pi_j\]
Hvor:
- \(\%\Delta E_\frac{i}{j} = \frac{E_t - E_{t-1}}{E_{t-1}}\) er den procentvise ændring i valutakursen
- \(\pi_i\) er inflationsraten i hjemlandet
- \(\pi_j\) er inflationsraten i udlandet
Hvis Australien har højere inflation end New Zealand, bør den australske dollar depreciere i forhold til den newzealandske dollar med cirka samme procent.
# Beregn inflationsrater og valutakursændringer (relativ PPP)
inflation_fx_compare <- cpi %>%
filter(!is.na(FP.CPI.TOTL)) %>%
select(iso2c, year, FP.CPI.TOTL) %>%
pivot_wider(names_from = iso2c, values_from = FP.CPI.TOTL, names_prefix = "price_") %>%
mutate(
inflation_AU = (price_AU - lead(price_AU)) / lead(price_AU) * 100,
inflation_NZ = (price_NZ - lead(price_NZ)) / lead(price_NZ) * 100,
inflation_diff = inflation_AU - inflation_NZ
) %>%
left_join(
compare_fx %>%
mutate(
fx_change = (fx_AU_NZ - lead(fx_AU_NZ)) / lead(fx_AU_NZ) * 100
) %>%
select(year, fx_change),
by = "year"
) %>%
select(year, inflation_diff, fx_change)# Vis sammenhæng mellem inflationsdifferential og valutakursændring (relativ PPP)
p3 <- inflation_fx_compare %>%
ggplot(aes(x = inflation_diff, y = fx_change)) +
geom_point(size = 3, color = darkblue, alpha = 0.6) +
geom_abline(slope = 1, intercept = 0, linetype = "dashed", color = grey) +
labs(
x = "Inflationsdifferential (AU − NZ, %)",
y = "Valutakursændring (AU/NZ, %)"
) +
theme_minimal() +
geom_smooth(method = "lm", se = FALSE, color = red, linewidth = 1)
# Estimer sammenhængen mellem inflationsdifferential og valutakursændring (OLS)
rel_ppp_model <- lm(fx_change ~ inflation_diff, data = inflation_fx_compare)| Koefficient (standardfejl) | |
|---|---|
| (Intercept) | 0.04 (0.695) |
| Inflationsdifferential | 2.8** (0.920) |
| No. Obs. | 24 |
| R² | 0.291 |
* \(p<0.05\); ** \(p<0.01\); *** \(p<0.001\).
Fortolkning
Figur 3 viser sammenhængen mellem inflationsdifferentiallet (x-aksen) og ændringen i valutakursen (y-aksen).
- Den stiplede 45-graders linje viser den teoretiske sammenhæng ifølge relativ PPP: Hvis Australien har 2% højere inflation end New Zealand, bør den australske dollar depreciere med cirka 2% i forhold til den newzealandske dollar.
- Regressionslinjen viser den faktiske sammenhæng i dataene. Hvis relativ PPP holder godt, bør regressionslinjen ligge tæt på 45-graders linjen.
Ifølge tabel 3 er hældningskoefficienten for inflationsdifferentialet 2.77. Dette indikerer en positiv sammenhæng, der egentlig er større end hvad relativ PPP forudsiger. R² er 0.291, hvilket betyder, at 29.1% af variationen i valutakursændringer kan forklares af forskelle i inflationsrater mellem de to lande.
Diskussion
Holder PPP-teorien? Ikke særlig meget, baseret på de data vist her. Der er tydelige afvigelser fra både absolut og relativ PPP.
En af forklaringer for den store afvigelse fra absolut PPP kan være, at der er mange andre faktorer end prisniveauer, der påvirker valutakurserne. I Australiens tilfælde var perioden mellem ca. 2005 og 2015 præget af en kraftig udvikling i minedrift, hvilket styrkede den australske dollar betydeligt, selvom prisniveauet i Australien ikke nødvendigvis steg tilsvarende i forhold til New Zealand.
Derudover ser vi på forbrugerpriserne, som inkluderer både handelbare og ikke-handelbare varer. Handelbare varer bør i teorien følge loven om én pris tættere, mens ikke-handelbare varer kan have meget forskellige priser på tværs af lande uden at skabe arbitragemuligheder.
Når man fx skriver sin bacheloropgave, er én af udfordringerne ofte at finde data, der passer til den teori, man gerne vil teste. I det her eksempel er det svært at finde direkte mål for prisniveauer, så vi må bruge en ‘proxy’ (CPI gange PPP-faktor) for at få et sammenligneligt mål. Man skal altid være opmærksom på, hvilke antagelser og begrænsninger der ligger i den slags datakonstruktioner.