Granger Causality and Gold Prices
Statistical predictability is not the same as causation, and it did not produce a useful trading model here.
Does Granger significance make a good feature-selection rule?
A Granger causality test asks whether the history of one series improves forecasts of another. It measures incremental predictive information, not a causal mechanism. I used the test to select macroeconomic inputs for a gold-price model, then checked whether that selection improved an out-of-sample forecast. It did not.
Source Code
The source code is on GitHub.
Preliminaries
The candidate series are gold prices, oil prices, unemployment, interest rates, and market capitalization. I first test their stationarity and cointegration, then run Granger tests against gold-price changes. Finally, I compare a VAR fitted only on selected variables with one fitted on the full stationary feature set. I kept the COVID period in the data so the validation includes abrupt macroeconomic changes.
Exploratory Analysis
I join the series by date and inspect the missing values created by different publication schedules.

I forward-fill each series from its previous observation.

The aligned series can then be plotted on a common timeline.

Only unemployment appears plausibly stationary in levels. A VAR and Granger test require stationary inputs, so I use the augmented Dickey-Fuller test. Its null hypothesis is that a series has a unit root, while the alternative is stationarity.

At , only unemployment rejects the unit-root null in levels. For each remaining series, I find the minimum order of differencing needed to reach covariance stationarity, testing both first and second differences.

After first differencing, the other series reject the unit-root null at . Unemployment remains in levels as an series.
The next step tests cointegration among the variables. Cointegrated series can share a stable long-run relationship even when each series is nonstationary on its own.
I use the Johansen test because it can estimate the cointegration rank across several time series. The test runs on the level data with one lag. Its null hypotheses concern the number of cointegrating relationships in the system.

The result suggests at least one long-run relationship among the level series. The Johansen test applies to the system as a whole, so it can't single out oil as the variable responsible, and it doesn't establish a causal link between any pair of series.
Before the Granger tests, I inspect the distribution of each stationary series with the Anderson-Darling normality test.

Each test statistic exceeds its critical value, so the series reject the normality null at the reported levels. The plots below show the departures more directly.


The histograms are roughly bell-shaped, but skew and kurtosis differ from a normal distribution. I test both moments separately below.

High kurtosis means more probability mass in the center and tails relative to a normal distribution. In financial changes, it often reflects many small moves interrupted by rare large ones. That matters because a VAR that assumes Gaussian errors will understate the tails.
Granger Tests and Forecasting
I now test whether each stationary candidate series adds predictive information for first-differenced gold. The null hypothesis is that past values of do not improve predictions of , where is the change in gold price.

Unemployment rejects the null at for lags 1 and 2. First-differenced oil is borderline at the same lags. Interest-rate and market-capitalization changes fail to reject the null. In plain language, past unemployment adds predictive information for the next gold-price change in this sample. It doesn't show that unemployment causes gold prices to move.
I fit a VAR and evaluate whether it predicts the direction of the next gold-price change. A rolling window produces 100 one-step-ahead forecasts, scored as correct or incorrect by sign.

The selected-variable model predicts the correct direction only 41% of the time, below a coin-flip baseline. So the Granger-selected inputs don't give a useful directional model in this validation window.
Next I refit the VAR on the full stationary feature set instead of only the Granger-selected variables.

The full feature set performs better, even though it includes variables that failed their own Granger tests. In this experiment, Granger significance alone is a poor feature-selection rule for out-of-sample directional forecasting.
References
- http://www.scholarpedia.org/article/Granger_causality
- https://en.wikipedia.org/wiki/Granger_causality
- https://en.wikipedia.org/wiki/Johansen_test
- https://en.wikipedia.org/wiki/Humean_definition_of_causality