The primary objective of this research is to systematically investigate the dynamic lead-lag relationship between global gold prices and ANTM’s market-based brand equity through a robust econometric framework. This study seeks to identify the specific temporal lags at which global commodity movements influence local equity returns while simultaneously evaluating the stability of these correlations across different market regimes, particularly surrounding high-volatility events such as MSCI index rebalancing.
We utilize daily adjusted closing prices for Gold Futures (GC=F) as the leading indicator and PT Aneka Tambang Tbk (ANTM.JK) as the target variable.
symbols <- c("GC=F", "ANTM.JK")
getSymbols(symbols, src = "yahoo", from = "2024-01-01", to = Sys.Date())## [1] "GC=F" "ANTM.JK"
gold_price <- Ad(`GC=F`)
antm_price <- Ad(ANTM.JK)
df_merged <- na.omit(merge(gold_price, antm_price, all = FALSE))
colnames(df_merged) <- c("Gold", "ANTM")
print(df_merged)## Gold ANTM
## 2024-01-02 2064.4 1524.817
## 2024-01-03 2034.2 1494.057
## 2024-01-04 2042.3 1480.874
## 2024-01-05 2042.4 1472.085
## 2024-01-08 2026.6 1450.114
## 2024-01-09 2026.4 1445.720
## 2024-01-10 2021.7 1454.508
## 2024-01-11 2014.3 1436.931
## 2024-01-12 2046.7 1428.142
## 2024-01-16 2026.0 1410.565
## ...
## 2026-02-05 4861.4 3810.000
## 2026-02-06 4951.2 3710.000
## 2026-02-09 5050.9 3890.000
## 2026-02-10 5003.8 3890.000
## 2026-02-11 5071.6 3990.000
## 2026-02-12 4923.7 4120.000
## 2026-02-13 5022.0 4050.000
## 2026-02-18 4986.5 4050.000
## 2026-02-19 4975.9 4230.000
## 2026-02-20 5059.3 4220.000
To avoid spurious correlation, we transform the price series into log returns.
## Gold ANTM
## 2024-01-03 -1.473698e-02 -0.020379094
## 2024-01-04 3.974050e-03 -0.008862692
## 2024-01-05 4.895125e-05 -0.005952402
## 2024-01-08 -7.766099e-03 -0.015037970
## 2024-01-09 -9.866823e-05 -0.003034821
## 2024-01-10 -2.322114e-03 0.006060628
## 2024-01-11 -3.666953e-03 -0.012158297
## 2024-01-12 1.595695e-02 -0.006134907
## 2024-01-16 -1.016531e-02 -0.012384067
## 2024-01-17 -1.161708e-02 0.000000000
## ...
## 2026-02-05 -1.206337e-02 -0.046162042
## 2026-02-06 1.830357e-02 -0.026597313
## 2026-02-09 1.993642e-02 0.047377281
## 2026-02-10 -9.368841e-03 0.000000000
## 2026-02-11 1.345878e-02 0.025382073
## 2026-02-12 -2.959605e-02 0.032061932
## 2026-02-13 1.976794e-02 -0.017136282
## 2026-02-18 -7.094000e-03 0.000000000
## 2026-02-19 -2.128022e-03 0.043485112
## 2026-02-20 1.662186e-02 -0.002366865
# Augmented Dickey-Fuller Test
adf_gold <- adf.test(df_ret$Gold)
adf_antm <- adf.test(df_ret$ANTM)
print(paste("ADF Gold p-value:", round(adf_gold$p.value, 4)))## [1] "ADF Gold p-value: 0.01"
## [1] "ADF ANTM p-value: 0.01"
We fit an ARIMA model to the Gold returns and apply the filter to both series to extract pure innovations (residuals).
## Series: df_ret$Gold
## ARIMA(0,0,2) with non-zero mean
##
## Coefficients:
## ma1 ma2 mean
## -0.0753 -0.1356 0.0018
## s.e. 0.0449 0.0449 0.0005
##
## sigma^2 = 0.0001763: log likelihood = 1426.74
## AIC=-2845.48 AICc=-2845.4 BIC=-2828.7
Now we compute the CCF on the prewhitened residuals to identify the true lead-lag signals.
# Compute CCF
ccf_obj <- ccf(as.numeric(res_gold), as.numeric(res_antm),
lag.max = 20, plot = FALSE)
# Visualize CCF
plot(ccf_obj, main = "CCF: Prewhitened Gold vs ANTM",
ylab = "Cross-Correlation Coefficient",
xlab = "Lag (Days)", col = "darkblue", lwd = 2)
abline(v = 0, col = "red", lty = 2)As discussed, we analyze the structural break (e.g., MSCI Shock / MSCI Warning ). We split the data to pre event and post event.
crash_date <- as.Date("2026-01-28")
# Splitting the data
df_pre <- df_ret[index(df_ret) < crash_date]
df_post <- df_ret[index(df_ret) >= crash_date]
# Plotting CCF for both periods
par(mfrow = c(1, 2))
# Period 1: Stability (Pre-Ultimatum)
ccf(as.numeric(df_pre$Gold), as.numeric(df_pre$ANTM),
lag.max = 15, main = "Pre-MSCI (Stability)",
col = "darkgreen", lwd = 2)
# Period 2: Panic & Recovery (Post-Ultimatum)
ccf(as.numeric(df_post$Gold), as.numeric(df_post$ANTM),
lag.max = 15, main = "Post-MSCI (Market Shock)",
col = "darkred", lwd = 2)