The code has been developed in Julia 0.6.4. version, as a code accompanying the Anatolyev and Barunik (2019) paper, and provides an estimation and inference for a model forecasting conditional probability distributions of asset returns (henceforth AB model). For further details, see
Anatolyev, S. and Baruník, J., (2019): Forecasting dynamic return distributions based on ordered binary choice, International Journal of Forecasting, 35(3), pp.823-835. DOI, manuscript available here for download (Jan 2019)
Julia together with few packages needs to be installed
Pkg.add("DataFrames")
Pkg.add("CSV")
Pkg.add("GLM")
Pkg.add("Optim")
Note the full example is available as an interactive IJulia notebook here
Load required packages
using DataFrames, CSV, GLM, Optim
# load main functions
include("DistributionalForecasts.jl");
Load example data (returns of XOM)
data = CSV.read("data_30stocks_returns.txt");
tdim, rdim = size(data)
Choose number of cutoff levels and order of polynomials
# no. of quantiles
js = 37;
# choice of polynomial order
p1=2;
p2=3;
Obtain fast parameter estimates of AB without inference. A vector of
par=OrderedLogitparameters(data[:,30].*1.0,js,p1,p2)
par'
1×44 RowVector{Float64,Array{Float64,1}}:
-2.87124 -2.48832 -2.2352 -2.0323 … -17.5198 -16.8475 25.976
Estimate the AB model and obtain full inference and evaluation of fit
est=OrderedLogit(data[:,30].*1.0, js,p1,p2);
Estimates of intercepts
est[1][1:js]'
1×37 RowVector{Float64,Array{Float64,1}}:
-2.87124 -2.48832 -2.2352 -2.0323 … 2.10511 2.47381 2.57944 3.04193
Estimates of
est[1][(js+1):(js+p1+p2+2)]'
1×7 RowVector{Float64,Array{Float64,1}}:
-0.0528382 -0.116755 0.0523652 0.108634 -17.5198 -16.8475 25.976
standard errors for all coefficients
est[2]'
1×44 RowVector{Float64,Array{Float64,1}}:
0.117504 0.101611 0.0915005 … 8.10445 5.70739 7.8312 9.23371
T-stats
est[3]'
1×44 RowVector{Float64,Array{Float64,1}}:
-24.4352 -24.4886 -24.4283 -23.1584 … -3.06967 -2.15133 2.81317
Log Likelihood
est[4]
10285.797921780777
Information criteria (AIC/BIC)
est[5:6]
2-element Array{Any,1}:
-20482.2
-20222.0
Obtain forecast of return distribution for time
window=500
INS=data[1:window,30].*1
OOS=data[window:(window+1),30].*1
probs=forecastProbs(INS,OOS,js,p1,p2)
1×37 Array{Float64,2}:
0.0670917 0.0868857 0.108024 0.124577 … 0.928052 0.928632 0.951298
A number of statistical tests from Gneiting and Raftery (2007), and Gonzalez-Rivera and Sun (2015) are implemented in the DistributionalForecasts.jl file.
TBD
Gonzalez-Rivera, G. and Y. Sun (2015). Generalized autocontours: Evaluation of multivari- ate density models. International Journal of Forecasting 31(3), 799–814.
Gneiting, T. and A. Raftery (2007). Strictly proper scoring rules, prediction, and estimation. Journal of American Statistical Association 102 (477), 359–378.