# Why are my GARCH forecasts biased?

I've run an ARMA(1, 1)-GARCH(1, 1) model with normal density on log returns for twelve stocks. I computed the one-step-ahead out of sample forecast for daily volatility on a rolling windows for 500 iterations ($h^2_{t|t-1}$) and compared them against Parkinson's observed daily volatility ($\hat{\sigma}^2_{park, \ t |t -1}$). The latter was computed on a window comprising the last ten days.

# Estimating volatility with parkinson's formula:
# where daily is a xts object with the prices
library(TTR)
volatility(daily, n = 10, calc = "parkinson", N = 1, mean0 = FALSE)

I'd like to compare the one-step ahead forecast made at moment t-1, ($h^2_{t|t-1}$), and the volatility observed on time t, ($\hat{\sigma}^2_t$). A regression forecast ~ observed is unbiased if both the intercept is zero and the slope equals one. I don't want to run a formal test to avoid dealing with heteroskedasticity, correlation and other obstacles, but the plots talk by themselves:

Similarly, you can overlay both observed versus forecasts and see the bias.

I'm comparing $h^2_{t|t-1}$ versus $\hat{\sigma}^2_t$ because their square roots would be biased due to Jensen's inequality. I know Parkinson's is a noisy estimator for volatility, but I'm impressed the out of sample forecasts of a basic GARCH(1, 1) are flagged as biased in many stocks. It's simply too suspicious!

Does anyone here have an idea what's going on? Does GARCH(1, 1) produce biased forecasts for every stocks or are the observed volatility estimators biased? How could I check and eventually fix the latter without high intraday data?

A sidenote on Parkinson's volatility Unfortunately, I've got no access to high frequency data and I can't use the all superior Anderson's RV (the sum of squared intraday returns). I'm therefore forced to rely on low frequency estimators for the observed volatility such as close to close (sample standard deviation on returns), Parkinson's low-high, Garman-Klass, Rogers-Satchell, Yang-Zhang and Yang-Zhang corrected by Garman-Klass. Their definitions can be found in enter link description here. Comparing the forecasts from my GARCH model to any of these estimates for observed volatility still shows bias. Taking for example the following stock, the bias practically doesn't change for different estimates of observed volatility.

• Did you check if returns are somewhat autocorrelated, if yes did you add a conditional mean process (ex a MA(1) ) to remove it ? – Malick Oct 25 '16 at 11:08
• @Malick I totally forgot to mention that I'm using an ARMA(1, 1) to model the mean. Edited the question, thank you for your input. – mugen Oct 25 '16 at 12:34
• Why do you say GARCH rather than Parkinson gives biased forecasts? Could it be the reverse? Could you elaborate on how exactly you calculate Parkinson's volatility? Are you comparing GARCH forecasts for $t+1$ to observed Parkinson's volatility at $t+1$ or some forecast derived using Parkinson's method? (It could be that you are comparing apples to oranges; I am curious to find out.) – Richard Hardy Oct 26 '16 at 6:46
• @RichardHardy Edited the question to answer your questions. The bias is totally smelly, but I can't decide which are biased: forecasts or observed volatility estimates (parkinson or other)? Any input is appreciated. – mugen Oct 27 '16 at 1:16
• As RH said, you can't really claim that it's GARCH that's biased here. Try changing your realized volatility estimate - An issue with the measure you're using (Parkinson) is that it is also an estimate of volatility, and one from an arbitrary window. If you have intraday data, compare your GARCH variance results to realized variance (RV). If not, then you can try comparing with the squared residuals from the conditional mean equation as they are a proxy for the realized variance (albeit an imprecise one). – RA334 Oct 27 '16 at 3:12