Macro variable analysis - part 1
02 June 2025 - Written by ML
This research is in two parts. In this first part we set out and examine the change in quarter on quarter German gross domestic product (GDP) since 1991. In the follow up report we generate a short term five quarter forecast using various models.
The data is GDP adjusted for price changes and so reflects changes in the volume of goods and services produced independent of price fluctuations. That measure of quantity changes provides a picture of real economic activity and output distinguished from changes in prices. It provides a gauge of whether the economy is expanding or contracting. And provides a consistent basis for comparing economic performance over time. From a corporate perspective volume data aligns with investment decision making over capacity (expansion or contraction). And it provides a basis for comparing performance between nations (that we are not considering in these reports).
Here the raw data (in Euro Billions) and quarter on quarter log changes are plotted and tabulated. Growth measures are computed along with basic statistics and measures of skew and kurtosis. Quarter on quarter changes have been binned into categories to provide a sense of how the performance has changed since 1991. And we have examined the series for autocorrelation.
These findings provide the background necessary for the follow on forecast report.
The data is comprised of 140 observations.
Observation: The plot shows percent change in quarter on quarter real GDP (in logged form) for Germany between 1991 and 2025. For most of the 1990s, 2000s (outside the 2008–09 shock), and the 2010s, growth oscillates at ±0.289% quarter-to-quarter. There are two isolated spikes (“bursts”) where a contraction that approached 9% (2008-2009) and 10% are visible (2020-2021). After each burst volatility subsides and the series settles back into its low-amplitude band. This pattern suggests volatility clustering which is typified by the long stretch of low noise (relatively narrow range) that is interrupted by two sudden clustered large moves.
| Quarterly GDP Data with Log Transformations | ||||||
| Latest 8 Quarters (2023-04-01 to 2025-04-01) | ||||||
| Date | Real GDP | Log GDP | QoQ Log Diff | QoQ % Change | YoY Log Diff | YoY % Change |
|---|---|---|---|---|---|---|
| 2023-04-01 | 903.800 | 6.807 | −0.00153 | −0.153% | 0.00069 | 0.069% |
| 2023-07-01 | 905.525 | 6.809 | 0.00191 | 0.191% | −0.00330 | −0.330% |
| 2023-10-01 | 902.162 | 6.805 | −0.00372 | −0.372% | −0.00189 | −0.189% |
| 2024-01-01 | 904.296 | 6.807 | 0.00236 | 0.236% | −0.00098 | −0.098% |
| 2024-04-01 | 901.623 | 6.804 | −0.00296 | −0.296% | −0.00241 | −0.241% |
| 2024-07-01 | 902.571 | 6.805 | 0.00105 | 0.105% | −0.00327 | −0.327% |
| 2024-10-01 | 900.761 | 6.803 | −0.00201 | −0.201% | −0.00155 | −0.155% |
| 2025-01-01 | 904.469 | 6.807 | 0.00411 | 0.411% | 0.00019 | 0.019% |
| QoQ = Quarter-over-Quarter, YoY = Year-over-Year | ||||||
| Dataset Overview | |
| Column | Description |
|---|---|
| date | Dates for each quarter, starting from January 1, 1992, up to the first quarter of 2025. |
| realgdp | Real GDP values in billions of Euros, adjusted for inflation, ranging from €611 billion to €908 billion. |
| log gdp | The natural logarithm of real_gdp, used to stabilize variance and make growth rates easier to analyze. It starts at 6.41 in Q1 1991 (€610.4 billion) and rises to 6.807 by Q1 2025 (€904 billion). |
| QoQ log diff | The quarterly change in log_gdp, calculated as the difference between the current and previous quarter’s log GDP. |
| QoQ % change | The quarterly percentage change in GDP, calculated as log_diff_qoq * 100, showing the growth rate between consecutive quarters. |
| YoY log diff | The yearly change in log_gdp, comparing the same quarter in consecutive years, calculated as the difference between the current and the same quarter a year ago. For Q1 1992, this value is 0.02176, indicating growth from Q1 1991. |
| YoY % change | The yearly percentage change in GDP, calculated as log_diff_yoy * 100. For example, Q1 1992 saw a 2.176% growth compared to Q1 1991, and Q1 2025 saw a 0.019% growth compared to Q1 2024. |
Recent Trend: reccent quarters show small fluctuations in GDP with slight decline in Q4 2024 and modest pickup in Q1 2025.
Overall Trend (1991–2025): over the 34-year period real_gdp has grown from €610 billion to €904 billion for an absolute change of 48%, or a compound annual rate of 1.16%.
| Descriptive Statistics of GDP Growth Rates | |||||||
|
Quarter-over-Quarter
|
Year-over-Year
|
||||||
|---|---|---|---|---|---|---|---|
| Mean QoQ | SD QoQ | Skew QoQ | Kurtosis QoQ | Mean YoY | SD YoY | Skew YoY | Kurtosis YoY |
| 0.2891 | 1.3652 | −1.4299 | 29.1272 | 1.1777 | 2.4045 | −1.2688 | 10.6999 |
The table above provides basic descriptive statistics for the quarter on quarter and year on year percentage changes in GDP (pct_qoq and pct_yoy).
Quarter on quarter (QoQ) statistics show:
Mean_QoQ: 0.289%. On average real GDP grows by 0.289% per quarter indicating modest growth over period.
SD_QoQ: 1.365% suggests moderate variability in quarterly growth rates.
Skew_QoQ: -1.4299. Indicates the distribution of QoQ rates is left-skewed. That means there are more extreme negative growth rates than extreme positive ones.
Charts are shown in the panel below. They are generated based on the quarter on quarter percent change in real gdp.
Left skew in the histogram is shown by the longer left tail in the chart. In addition the mass of the distribution of qoq growth rates is concentrated on the right. Left skew in the box plot is shown by the median line which is shown closer to the top of the box with a value of 0.3463 above the mean (0.2898). Left skew is shown in the Q-Q plot in the plots below the line on the left side. Negative (left) skew is shown in the density plot where the blue line (mean) is positioned to the left of the green line (median).
Interpretation: most quarters for the series show positive or small negative changes. There are a few extreme negative quarters that pull the average down and so the typical change (the median) is higher than the average change (mean). That suggests the economy displays mostly stable or positive growth quarters with occasional severe contractions that skew the overall picture.
Kurtosis_QoQ: 29.1272. The high kurtosis value (well above 3) indicates heavy tails. This suggests that extreme QoQ changes (both positive and negative) are more common than in a normal distribution and likely due to economic shocks or crises.
Kurtosis visualization charts are shown in the panel below. They are generated based on the quarter on quarter percent change in real gdp.
Chart review: High Kurtosis in the histogram is shown by the peaked center and longer tails than the red normal curve. In the box plot high kurtosis is shown by the presence of outliers (red dots). Kurtosis is shown in the Q-Q plot by the deviations at both ends from the red line that indicates heavy tails. The time series plots shows when the extreme growth rates took place historically.
Heavy tails suggests rare but dramatic economic shifts such as the 2008 financial crisis and COVID-19 events. With a normal distribution there would be fewer outliers. The red normal curve will significantly underestimate the frequency of extreme values.
Interpretation: Given the pattern of quarter on quarter GDP changes and high kurtosis (presence of extreme events) predictions based on averages (such as those that assume a normal distribution) are likely to miss extreme risks. Because of high Kurtosis in the series forecasting GDP may be improved with the help of fat tailed distributions (which have thicker tails such as Student’s t distribution). Such distributions expect more frequent extreme events and so assign higher likelihood to extreme readings.
Bin Chart interpretation: the distribution of real GDP growth for Germany shows that most quarter on quarter growth falls within the mild negative and mild positive bins. While there is one more extreme negative than extreme positive reading.
Extreme negative periods: The two extreme negative quarters are identified in the table below as showing quarter on quarter contraction greater than two standard deviations from the mean. And in this case -4.8% and -9.3% in 2009 and 2020 respectively.
| Extreme Negative GDP Growth Periods | |||||
| Threshold: Mean - 2SD ( -2.46 % quarterly decline)1 | |||||
| Episode | Start Quarter | End Quarter | Duration (Months) | Average Decline (%) | Worst Quarter (%) |
|---|---|---|---|---|---|
| 1 | Jan 2009 | Jan 2009 | 3.00 | −4.82 | −4.82 |
| 2 | Apr 2020 | Apr 2020 | 3.00 | −9.32 | −9.32 |
| 1 Identified 2 extreme events since 1992 | |||||
Autocorrelation refers to the correlation of a time series with its own past and future values. It helps identify repeating patterns in the data. And it is an important step for model selection to be examined in the next report. The steps we take to examine for autocorrelation are by visual inspection with plots and by statistical tests.
The test for autoregression, asks: “Is today’s value significantly related to its own past values? If so, which lags matter, and with what sign and magnitude?” This answers questions like, “If GDP spikes this quarter, how much of that shock carries into the next quarter?”
Autocorrelation function (ACF) plot shows the correlation of the time series with its own lags. Each bar represents the correlation coefficient at different lags. The ACF plot helps identify the number of moving average (MA) terms needed in an autoregressive integrated moving average or ARIMA1 model. If the plot shows a significant spike at lag q it suggests an MA(q) term.
Partial autocorrelation functions (PACF) plots shows the correlation of the time series with its own lags after removing the effects of intermediate lags. It helps identify the direct influence of a lag that helps determine the order of autoregressive (AR) terms in an ARIMA model. If the PACF shows a significant spike at lag p it suggests an AR(p) term.
In both plots spikes are significant if they extend beyond the confidence interval at specific lags. These spikes indicate the presence of autocorrelation at those lags. Should there be evidence then autoregressive or moving average terms could be added to the forecast equation model.
Observations:
Because lag-1 bars in both ACF and PACF do not cross the confidence interval (shown as blue dotted line or the “±1.96/√T” bounds) the null hypothesis of zero correlation cannot be rejected. That suggests no significant autocorrelation. Moreover all higher lags stay within the bands.
With no significant ACF or PACF spikes there is no detectable autoregression or moving average structure in the quarterly GDP growth series. That suggests past quarter’s deviations do not reliably predict future deviations.
Result: Plot ACF/PACF → no significant spikes and suggests the series is white noise.
The Ljung–Box test searches for correlation in data up to a set of lags. It asks “are there hidden patterns in the data sequence that make it non-random?”
##
## Box-Ljung test
##
## data: log_df_clean$pct_qoq
## X-squared = 9.6502, df = 10, p-value = 0.4717
Test Result Interpretation: The null hypothesis is that there is no auto correlation in the residuals (the alternate hypothesis is that there is). If the p-value is below 0.05 the null hypothesis would be rejected and implies there is serial correlation.
However, that is not what we observe here. For the quarter on quarter change in real GDP, the test statistic (X-squared) is 9.6502. This value is compared against a chi-squared distribution with degrees of freedom equal to the number of lags being tested. The degrees of freedom (df) is 10, corresponding to the number of lags specified in the test. This means the test is checking for autocorrelation up to the 10th lag. The p-value is 0.4717, which is the probability of observing the test results under the null hypothesis (that there is no autocorrelation in the residuals and the residuals are independently distributed). With a p-value of 0.4717, well above the common significance level of 0.05, we fail to reject the null hypothesis. This suggests that there is no significant autocorrelation in the residuals up to the 10th lag.
A value above 0.05 indicates the null cannot be rejected and that the residuals are not significantly different to white noise - a good sign for model adequacy. It indicates that the model has captured the time-dependent structure in the data well, and the residuals behave like random noise without any leftover patterns.
Result: The absence of detectable autocorrelation suggests that the model’s mean equation may adequately represent the data, potentially allowing for a simpler model form. However, further diagnostic checks are recommended to fully confirm the model’s adequacy.
The lack of significant auto correlation suggests that complex time series models for forecasting such as ARIMA may not be suitable.
Instead simpler models or approaches may be more appropriate. It may also mean that exploring external factors may shed more light and insight for forecast purpose.
Simpler methods for forecast purpose include mean or naive methods such as the mean of past data or using the last observed value as the forecast for future periods.
ARIMA or Autoregressive integrated moving average) that is a model used for time series forecasting. This model method uses past values in the series to forecast future values. The “AR” part involved regressing the variable against its own lagged values. the “I” invlves differencing the data to make it stationary. The “MA” uses past forecast errors in a regression like model to improve future forecasts (Mistral.AI, accessed: 2025-06-02)↩︎