Repack of Mi(xed) Da(ta) S(ampling) regressions (MIDAS) written by Eric Ghysels and collaborators
The mixed frequency regression studies the explanatory power of high frequency variables on the low frequency outcome. The weights associated with high frequency regressors are usually assumed some functional form. This toolbox is a repack of the Mi(xed) Da(ta) S(ampling) regressions (MIDAS) programs written by Eric Ghysels. It supports ADLMIDAS type regressions. The package also includes two functions for GARCHMIDAS and DCCMIDAS estimation. See the enclosed user guide for details.
Syntax:
[...] = MIDAS_ADL(DataY,DataYdate,DataX,DataXdate)
[...] = MIDAS_ADL(DataY,DataYdate,DataX,DataXdate,name,value,...)
[...] = GarchMidas(y, name,value,...)
[...] = DccMidas(Data, name,value,...)
2.2  Fix a bug in DccMIDAS FMINSEARCH when MATLAB Optimization Toolbox is not available. 

2.2  Update user guide 

2.1  version2.1 Add MIDAS quantile regression 

2.0  Package written by Eric Ghysels and collaborators 

2.0  Update the toolbox title from "MIDAS Regression" to "MIDAS Matlab Toolbox" 

2.0  Add GARCHMIDAS and DCCMIDAS functions 

1.5  Support Ylag as a cell array such as Ylag = {3,6,9} for flexible low frequency lagged regressors


1.2  Update the user guide (version Dec 21, 2014) 

1.2  Support the special case DL_MIDAS by setting Ylag = 0 

1.1  Allow leads and lags specification 'horizon' be negative. Add true outofsample forecast; results are restored in the last output argument 'Extended Forecast' struct. 
Hang Qian (view profile)
Hi Amar,
That sounds interesting, but the model you described is not MIDAS. It is a new model that requires
your own estimation method.
amar soebhag (view profile)
Hello Hang Qian,
Thank you for uploading this. Can I use MIDAS is the dependent variable has a higher frequency (daily in my case) than the independent variable (quarterly/yearly?)
Thank you again.
mantu (view profile)
ooo ok, thank you Qian you re very helpfull
Hang Qian (view profile)
Hi mantu,
Our GarchMidas MATLAB program supports oneparameter and twoparameter Beta polynomial, using the namevalue pair 'Beta2Para', which is a logical value that indicates twoparameter Beta MIDAS polynomial. Section 3 of the User Guide for MIDAS Matlab Toolbox describes the model. Refer to Equation (3.24) and (3.25) in the user guide. Thank you.
mantu (view profile)
Hi Qian and my economist fellas, I ve solve the matlab but I couldnt figure out how beta lags work in GARCHMIDAS model. I ve tried to use ϕk(ω) beta lag formulate to figure out how does beta lags solve in engleghyselssohn 2013 article but I coudnt find same result on that article. Do you have any idea where did I do wrong on that ϕk(ω) beta lags formulate. Many thanks.
ϕk(ω)=((k/K)^(w11) *(1k/K)^(w21))/(∑(j=1 to K)(j/K)^((w11)) * (1k/K)^(w21) ) → beta lags
Hang Qian (view profile)
Hi Ting XIA,
“parameters sensitive problem and convergence problem” you mentioned exists for many numerical maximum likelihood problems. The numerical optimization routine may fail to converge, as the objective function has saddle points that a optimization routine gets stuck. If you have a license of Global Optimization Toolbox of MATLAB, you may replace FMINCON/FMINUNC/FMINSEARCH (currently used in GARCHMIDAS program) by more advanced global optimization tools.
Ting XIA (view profile)
Hi, Hang.
Thanks for your suggestion.
Resetting the AdjustLag and finetuning the optimization option, such as change solver or MaxIter or TolCon, do not help to fix the parameters sensitive problem and convergence problem.
My sample size is around 4800 (daily data). In case of lossing too much observations, I tried NumLagsCorr value between 5 and 30. However, the ”a b w” still vary according to the NumLagsCorr value. I have several pairs of stock index returns and tried different pairs many times. They simply encounter the same problem.
It confused me whether the exogenous variable matters or computation matters.
While it runs well in Garchmidas with exogenous variable. How it comes wrong in the step2 computation? Step 2 estimation is merely based on the standardized residuals from garch model.
Hang Qian (view profile)
Dear Ting XIA,
Thank you for your interest in our DCCMIDAS functionalities.
“NumLagsCorr” specifies the number of lags in filtering the secular component by MIDAS weights, in the second step estimation of correlation matrix. Though more lags do not increase the number of unknown parameters, more initial observations will be lost by excess lags. In a daymonth aggregation, lags of 30 months lose 660 observations. In that case, estimation might not work as expected when your sample size is moderate. I am not sure if resetting 'AdjustLag' will help in that case.
When some parameters get stuck at the initial value in model setting, and it takes long to compute the results, the most likely cause is convergence problems. There is no guarantee that numerical algorithm will find the maximum likelihood estimator. It could fail sometimes. One may finetune the optimization options by the namevalue pair 'Options', which specifies the solvers and stopping criteria. Also try other initial values. The chance of convergence is larger if the initial values are close to the true values, though we do not know the latter.
Ting XIA (view profile)
Dear Hang,
Thank you for your excellent toolbox.
I come across a problem which troubles me a lot when running the Dccmidas model.
My Dcc estimations (a,b,w) are sensitive to “NumLagsCorr” value. When I use the default number (10), w is larger than 1, while its p value is as large as 0.8. When I find an appropriate one, say 11, making the p value of w zero, but the w equals 1.001 (the initial value in model setting). Does it mean the exogenous variable do not significantly affect the long run component?
However, other NumLagsCorr values which I have tried, say lager than 30, usually fail to be computed out or take a long long long time to compute.
And I have tried other pairs of data, it result most of the same.
How could I fix my problem? Thanks so so much.
Hang Qian (view profile)
Dear Pingjun,
I think multipleperiod forecast can be achieved by setting the namevalue pair 'Horizon'. For example, when it is equal to 2 and we have X data up to 11/01/84, then we could forecast Y value at 01/01/85. If we set 'Horizon' to a larger number, we could forecast Y value at a longer time interval. There is an output argument of the function MIDAS_ADL called OutputForecast, in which the results of forecasts such as Yf and RMSE are stored.
dengpingjun (view profile)
Dear Hang,
Thanks for your reply that gives me a better understanding of the usage of MIDAS_ADL. However, I‘m still a little confused about this function that I don't know how can I use the function 'MIDAS_ADL' for 'hstepahead' forecasting. I read the manual in this toolbox, but I cannot find the corresponding augment associated with 'hstepahead' forecasting. How can I adjust the input augments’ settings of 'MIDAS_ADL' for this purpose.
Hang Qian (view profile)
Dear Pingjun,
'Horizon' refers to the number of (high frequency) lags from which lagged high frequency regressors start. When we put MIDAS_ADL(…,'Horizon',2), the timing convention is that
Reg Y(01/01/85) on X(11/01/84),X(10/01/84),…
That is, there are two month lags of X variable when 'Horizon' = 2.
Of course, there are a variety of data format – some are recorded at the beginning of the month; some are denoted at the end of the month. The best way to see the effects of 'Horizon' is to watch the time frame shown on the screen.
dengpingjun (view profile)
Dear Hang,
Thanks for uploading this excellent toolbox. However, some issues may be in it. In function MIDAS_ADL, the optional arguments, such as 'Horizon', 'XLag' and 'YLag', are not exactly matched with the model. For example,
[DataY,DataYdate] = xlsread('mydata.xlsx','sheet1');
DataYdate = DataYdate(2:end,1);
[DataX,DataXdate] = xlsread('mydata.xlsx','sheet2');
DataXdate = DataXdate(2:end,1);
DataXgrowth = log(DataX(2:end)./DataX(1:end1))*100;
DataYgrowth = log(DataY(2:end)./DataY(1:end1))*100;
DataX=DataXgrowth;
DataY=DataYgrowth;
DataYdate = DataYdate(2:end);
DataXdate = DataXdate(2:end);
MIDAS_ADL(DataY,DataYdate,DataX,DataXdate,'Xlag',4,'Ylag',2,'Horizon',2,'EstStart',EstStart,'EstEnd',EstEnd,'Polynomial','Almon','Method','fixedWindow','Display','full')
the partial results as following:
Mixed frequency regression time frame:
Reg Y(01/01/85) on Y(10/01/84),Y(07/01/84),X(11/01/84),X(10/01/84),...,X(08/01/84)
Reg Y(04/01/85) on Y(01/01/85),Y(10/01/84),X(02/01/85),X(01/01/85),...,X(11/01/84)
...
Reg Y(01/01/09) on Y(10/01/08),Y(07/01/08),X(11/01/08),X(10/01/08),...,X(08/01/08)
in fact, the correct result should be:
Mixed frequency regression time frame:
Reg Y(01/01/85) on Y(07/01/84),Y(04/01/84),...
Reg Y(04/01/85) on Y(10/01/84),Y(07/01/84),...
...
Reg Y(01/01/09) on Y(07/01/08),Y(04/01/08),...
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if not so, what is true meaning of 'Horizon' and what is difference between 'Horizon' and h that in 'hstepahead'? Can you give me a reply?
Best regards
Pingjun Deng
Hang Qian (view profile)
Hi tr206,
'thetaM' is an optional input argument, as a namevalue pair, of the GarchMidas function.
The syntax is like GarchMidas(y,'thetaM',1);
It is a logical value that indicates not taking squares for the parameter theta and m in the longrun volatility component. The default is false (they are squared). So if those two parameters are allowed to be negative, reset the namevalue pair 'thetaM' to true.
tr206 (view profile)
Hi Hang,
I am running the GarchMidas for a macroeconomic variable and I sometimes get the warning
Warning: Reset the Namevalue pair 'thetaM' to true, so that theta and M could
be negative.
Must I set 'thetaM' to 1 or is this done by Matlab? What does that mean and what must I do?
Hang Qian (view profile)
Hi Alberto,
The GarchMidas programs uses numerical methods for maximum likelihood estimation. When the optimization program failed to find the maximum point, you are likely to get tau equal to a fixed number. You may want to try to adjust the optimization options. There is a namevalue pair 'Options', where you can change the solver and tune the solver. Also, the initial values sent to the optimization program may have an impact on the results. The software has namevalue pairs 'Mu0', 'Alpha0', 'Beta0', etc. for resetting the initial values. As for the lag order selection, you may profile the results under different lagorder scenarios. If you have a large sample size, you may try more lags. It does not increase the number of parameters, but more initial observations will be consumed.
Alberto Grassi (view profile)
Dear Hang,
I am coming across some troubles while I'm comparing the Garchmidas model with different data. When i use yours (NASDAQCOM from 1971 to today) everything goes well, when I use mines (DOWJONES from 1950 to today) too, but when I try to use my data from the same day of yours I obtain good results only using K=36, otherwise I always get tau equal to a fixed number for all the days of the sample. Can you give me some instruction on how to select K according to the data? Is there something I can study to understand? (by now I have only written Ghysels' paper and the pdf that explain how to use the codes, but their don't explain what I am looking for).
Thank you in advance,
Best regards
Alberto Grassi
Hang Qian (view profile)
tr206  In the toolbox, there is a utility function ForecastCombine.m, which handles forecast combination of ADLMIDAS regressions. It takes the forecast results from multiple models, and assigns them weights by MSE, AIC or BIC, and then does the averaging. I think you have to write some of your own programs for other MIDAS models – there are so many varieties and generalpurpose software cannot cover them.
tr206 (view profile)
Dear Eric,
Thanks a lot for your reply. This makes sense and I like the line of argumentation. However, I am not very familiar with writing such functions myself in Matlab. Are there any functions which I can use to implement Andreou et al. (2013) or similar functions to do that?
Eric (view profile)
Dear tr206:
The MIDAS Matlab Toolbox only handles one HF series and recommends forecast combinations as explained in the User's Guide. Having multiple HF series in a single MIDAS regression often runs into nearcolinearity issues which may impair the nonlinear estimation procedure. For that reason Andreou et al. (2013) suggest using one HF series for potentially a large panel of HF data and perform forecast combinations.
Some other software packages  such as EViews  allow for MIDAS regressions with multiple HF series.
Andreou, Elena, Eric Ghysels, and Andros Kourtellos. "Should macroeconomic forecasters use daily financial data and how?." Journal of Business & Economic Statistics 31.2 (2013): 240251.
Hang Qian (view profile)
Hi tr206,
Yes, you can combine the forecast obtained from different models by the MSE. You may write some small program to get the MSE from your estimate GARCHMIDAS model and then combine them manually.
tr206 (view profile)
Hi Hang,
Thanks for your reply. Yes, there are many predictors such as GDP growth, inflation CCI etc. and I would like to incorporate all of them in one GarchMidas model. Nevertheless, you are saying that forecast combination of different models could be a reasonable workaround? Are you refering to FORCASCOMB in Matlab?
Ruiting Chen (view profile)
Hi Sir, I have sent you a email, did you receive it? Because it's my first time use this website, I really hope I didn't have misoperation.
Hang Qian (view profile)
Hi tr206,
The program only supports one highfrequency predictor. If you have many predictors, consider forecast combination of different models. If you would like to exclude the constant or other terms, one way is to adapt the code. For example, in GarchMidas.m there is a subfunction fML, in which the unknown parameter vector is allocated to structural parameters. You may add or subtract components from there.
tr206 (view profile)
Hi Hang,
your code is only for one independent variable but I need to do this for 5 or 6 variables. Can I somehow do the analysis for multiple variables?
I think I could simply add the taus of the individual variables but then I guess I will have a problem with the constant in the tau formula. Can I somehow exclude the constant from tau?
Hang Qian (view profile)
Hi Amor,
Thank you for your comments. Could you please send me an email about your code and sample data? Processing date/time is difficult in MATLAB, and the program may not correctly recognize your date format and match the two series.
AmorAniss Benmoussa (view profile)
Hello, I think there is an error in the code. For example, for a twoquarter forecast in advance if the low frequency series is quarterly with a monthly series at high frequency, the low frequency data does not go back sufficiently. I tried it with the UMIDAS specification.
Amor Aniss Benmoussa
Hang Qian (view profile)
Hi Alberto,
The paper you mentioned used different software/programs, and I wrote a MATLAB program GarchMidas last year, just to illustrate the idea of GARCHMIDAS models. It probably will not replicate everything seen in the paper. The parameters are estimated by numeric search for optimal values, so you may experiment if the starting values and the optimization options affect your results. Sometimes there are convergence issues. It is a good idea to look at the codes, as you noted in line 206. If you find better ways to estimate the model, feel free to modify the program. Also let me know if you have suggestions for improving the software. Thank you very much.
Alberto Grassi (view profile)
Hello Hang,
I'm trying to replicate the paper "Stock Market Volatility and Macroeconomic Fundamentals" through your toolbox. I am using only dowjones data for the part without the macroeconomics and everything works well, but when I go for the part with industrial production I obtain the figure (3) where the blue line is completely flat. This with my data and also with yours. Also I have a signal of error in line 206 of your code, but I can't understand why. Can you please help me? Thanks in advance.
Hang Qian (view profile)
Hi Mantu,
In the toolbox, there is a garch midas function: GarchMidas(y, name,value,...) . The user guide in the package describes how to use it.
mantu (view profile)
Hello Hang. @IHSEViews told me on twitter to I can use garch midas model in this program with higher frequency dependent variable. Can I use it I m looking for articles and user guide like crazy but I cant see anything. Also I ll use financial series not macroeconomic variables. My models will be with monthly dependent variable and quarterly independent variables. thanks
Ting XIA (view profile)
Hello Hang
Thank you for your advice “Also consider setting the namevalue pair 'LogTau' if the regressor X is other than the realized volatility” (on 23 Nov 2016). It settles my problem.
When the regressor X is not the RV, setting “LogTau ” to 1 seems to be essential in most circumstances.
Thanks again.
Hang Qian (view profile)
Hi Anup,
Matlab 2011b is an old version that does not support some namevalue pairs of the inputParser class. You may try to replace addParameter by addParamValue. I think the syntax is the same. However, there are updates to the optimization tools in recent years. I am not sure if the codes yield good results under older version of MATLAB.
czbx51 (view profile)
Hi Hang，
Thank you so much! I have solved my problem.The data Y begins ealier than the suggested start date, which is determined by X and the lags. Without exoreg, the program works well and reports" Start date cannot be earlier than 24Mar2003 due to lagged regressors. Reset start date to 24Mar2003 ". But it cannot run with the exoregs. I cut Y to the suggested starting date and it works well.
Anup Chowdhury (view profile)
Dear Qian,
Many thanks for uploading this fantastic resource. I am using Matlab2011b version and getting following error messeages:
For ADLMIDAS:
No appropriate method, property, or field addParameter for class inputParser.
Error in MIDAS_ADL (line 201)
parseObj.addParameter('Xlag',9,@(x)validateattributes(x,{'numeric','char'},{},callerName));
For GARCHMIDAS:
Undefined function 'addParameter' for input
arguments of type 'inputParser'.
Error in GarchMidas (line 146)
addParameter(parseObj,'X',[],@(x)validateattributes(x,{'numeric'},{'2d'},callerName));
Can you please help me to fix these. Many thanks again for your nice cooperation.
Anup
Hang Qian (view profile)
Hi czbx51,
You may take a look at the example file appADLMIDAS4, in which there is an example of running the program with exogenous regressors. In that example, I saw ExoReg and Y are both column vectors with the same length. To process exogenous regressors, make sure the time series is a column vector with long enough length (taking the presample truncation caused by Xlag, Ylag into account as well). I am not sure why there is an error when you run the codes, but you may also set a break point at 297. Ideally, you would see both EstY and Mimic.EstY are two column vectors of the same length. Otherwise, try if it helps to remove that line (which only does some error checking). Also, check the date format, which varies from country to country. If MATLAB fails recognize your date format correctly, then the program will not run properly as well.
czbx51 (view profile)
Hi Hang,
Thank you so much for this toolbox, it really helps a lot.
However, I cannot apply the exogenous variable into the ADL_MIDAS program. Matlab reports the bug as'错误使用 ~= 矩阵维度必须一致。MIDAS_ADL (line 297) if any(EstY ~= Mimic.EstY)', saying the dimension of the matrix is not the same. However the ExoReg data is exactly same date and length with the low frequency dependent variable Y, and it doesn't have any NaN value. Can you tell me what's wrong with this mimic part? Thank you!
Hang Qian (view profile)
Hi Ning,
The toolbox supports multistep forecast. If you run the example file appADLMIDAS1.m. There are four outputs of the main function MIDAS_ADL. The first one is the forecasted values after the estimation sample, and the fourth output variable is the outofsample forecast after DataY is exhausted.
ning xu (view profile)
Hi Hang,
First, Thanks for uploading this toolbox! Especially the ADLMIDAS is very useful to me.
I wonder how do you perform hstep ahead forecast using this toolbox? I have referred to the MIDAS user guide for the multistep forecast, but I still don't understand how to operate. Can you give me an example?
Thank you.
Hang Qian (view profile)
Hi Chen Ryan,
It seems that the MATLAB Optimization Toolbox is not installed on your computer. The DccMIDAS uses a numeric optimization function FMINCON for maximum likelihood estimation. When that function is not available, it is supposed to switch to another optimization function FMINSEARCH in the core MATLAB. However, there was a bug that FMINSEARCH was not invoked properly. I just fixed the problem and the updated files should work in the absence of Optimization Toolbox. Thank you very much for reporting the issue!
Chen Ryan (view profile)
Hi Hang,
Thank you for the nice toolbox. Whe I ran the code of the GARCHMIDAS model, no problem emrged. When I ran the DCCMIDAS model ,however, the follow error pops up:
警告: FMINCON failed... Switch to FMINSEARCH.
> In DccMidas (line 386)
In appDCCMIDAS1 (line 43)
错误使用
DccMidas>@(params)nansum(fML(params,Resid,CrossResid,ResidCorr,period,nlagCorr,adjustLag,zeroLogL,beta2Para,rollWindow))
输入参数太多。
出错 fminsearch (line 200)
fv(:,1) = funfcn(x,varargin{:});
出错 DccMidas (line 387)
estParamsStep2 = fminsearch(myfun,params0,[],[],[],[],lb,ub,[],options);
would you pls help to point out where the prolem lies? Thanks a lot.
Hang Qian (view profile)
Hi Yu,
The codes only support one predictors, either the realized volatility or a macroeconomic variable. You may consider forecast combination by running two models. If you would like to put more than one macro variables in the regression, you will have to modify the codes. There is a subfunction [logL,...]=fML(params...) which computes the log likelihood. So you may want to expand the length of params and then add those macroeconomic variables that contribute to the log likelihood.
Hang Qian (view profile)
Hi Sebastian,
When the MIDAS component is suppressed (Set Xlag=0), the parameters in the Beta polynomials, etc, become unidentified. Refer to the Davies problem. The codes do not support regression without high frequency regressors. If you really want to run an AR(p) without highfrequency predictors, you might extract the regressors and response variables from the output variable MixedFreqData, in which there are variables like EstY, EstX, EstLagY. By extracting those regression data, you could call the MATLAB function regress, fitlm or arima so as to run a AR(p) model. Then you could still compare R^2 of the two models.
Yu (view profile)
Dear Hank,
I want to estimate a twocomponent(or more components ) GARCHMIDAS model, e.g., two or more macroeconomic fundamentals once in a GARCHMIDAS model.
Is it possible?
Thank you very much!
Sebastian Bentele (view profile)
Hi Hang,
for my research I would like to compare my results of the MIDA model to an Ar(p) process. I tried to estimate and forecast the ARprocess with the MIDAs toolbox as it is described in the manual (Set Xlag=0) but everytime I get an error: "Error using *
Inner matrix dimensions must agree".
How may I solve this problem?
Thanks in advance.
jianjian lyu (view profile)
Hang Qian (view profile)
Hi Johann,
I am sorry but there is no such magic function that could identify the appropriate starting values for numeric optimization.
johann guenkel (view profile)
Hi Hang,
I have tried to increase the number of iterations but I cannot eliminate the problem. Is there a function I can use to identify the appropriate starting values?
Hang Qian (view profile)
Yes, increasing the number of iterations may help convergence. For GarchMidas.m and DccMidas.m, there is a namevalue pair called 'Options', in which you could specify the number of iterations for the numeric solver. For MIDAS_ADL.m, that option is not available, but one may step into the internal functions (in the private folder) such as bnls_adl_new.m (for Beta polynomials) and modify the variable ‘options’. Refer to MATLAB documentation page for optimoptions.
johann guenkel (view profile)
Hi Hang,
another idea that just came into mind is to increase the number of iterations. Sometimes I get the message that the solver stopps prematurely as by default the number of iterations is 3000. Do you think it helps to increase the number of iterations to 10000? How can I adjust the number of iterations?
johann guenkel (view profile)
Hi Hang,
Thanks for your reply. If I get it right, the warning indicates that the model does not converge. In some cases I fiddled with the starting values and it now works for most variables. However, there are still few cases that do not work must I change the optimization method in this case? How can I do that in the code?
Hang Qian (view profile)
Hi Johann,
When we resort to numeric methods for likelihood maximization (squared residual minimization), it may or may not converge to a local optimal point. When it fails to converge, the warning message is likely to pop up. In that case, we will need to experiment on different starting values and alternative optimization methods.
johann guenkel (view profile)
Hi Hang,
I want to analyse the relationship between stock index returns and macroeconomic variables such as inflation or GDP growth. In some cases the midas analysis returns good results i.e. I get significance and no warning message. However, in some cases I get the warning
Warning: Covariance matrix of estimators cannot be computed precisely due to
inversion difficulty.
In my code, I assumed the starting values given by default. I neither changed them nor did I determine my own starting values. What does that mean? How can I avoid this message?
Hang Qian (view profile)
Ting 
The namevalue pairs W0, Alpha0, Beta0 control for the initial parameters for MLE, while ZeroLogL controls for the initial observations. You may try both. Also consider setting the namevalue pair 'LogTau' if the regressor X is other than the realized volatility.
Ting XIA (view profile)
Hello Hang,
Thanks for your reply.
I checked my X data, there was no abnormal values, and its statistical characteristic seems normal, I changed other X data, it returned the same.
You mean reset the starting values, is it to reset W0, Alpha0, Beta0 which are used in MLE OR to set the ‘ZeroLogL’ to, such as in the input Syntax like ‘ZeroLogL’,[1,2] ?
I tried both, it returned the same. I also tried to set the ‘Options’, it seemed a little complex and didn’t get it work well yet, does it matter?
Regards.
Hang Qian (view profile)
Ting  Yes, the data might have some problems, for example excessive amount of missing values, and the log likelihood at the initial parameter values is not finite. You may try some other starting values. If all the reasonable starting values return infinite/NaN log likelihood, then the data are possibly have some problems.
Alex  You may contact Eric for codes request.
Ting XIA (view profile)
Hi Hang Qian,
Thanks for you great toolbox. I just started with GarchMidas model, it worked well. But when I tried my data, using a macroeconomic variable (X) to model GarchMidas, the X is monthly data, it replied this problem:
Warning: FMINCON failed... Switch to FMINSEARCH. Error
Message: Objective function is undefined at initial
point. Fmincon cannot continue.
>In GarchMidas (line 303)
Is it my data(X) problem? Could you give any suggestion?
Thanks in advance.
Alex L (view profile)
Excellent tool. For my research I am very interested in the "mixed frequency VAR model" programs (classical approach), based on Ghysels (2016). Will they be included in the toolbox? I read in the userguide that they can be available upon request.
Thank you very much for sharing the toolbox.
Alex L (view profile)
Sam Rolland (view profile)
Thank you Hang
It was my date configuration for the Ydata. I had chosen different representations of quarterly data. Eventually worked with a 1 lead configuration.
Hang Qian (view profile)
Hi Sam,
If your model does not include lagged autoregressive Y terms, you may try to append some values to the end of the Y series. If there are sufficient amount of X data, OutputForecast might produce some outputs.
Sam Rolland (view profile)
Hello Hang
I am trying to run a basic nowcast (Horizon= 2) variation of the model, using MIDAS1 My YData goes to 20160630, and my XData goes to 20160831. However, when I try and run the model at EstEnd: 20160630, there is no OutputForecast produced, and when I take it back (say, a year), it only goes to my last YDate. Why would this be, and where should I be looking to make it that I can produce a forecast for 20160931?
Thanks in advance
Hang Qian (view profile)
Hi Trung,
If you would like to impose constraints on the coefficients, you will have to step into the codes and make changes. You may go to bnls_adl_new.m and search for the unconstrained numeric optimizer 'fminunc', and replace it by the constrained optimizer 'fmincon' with the desired constraints.
Trung Le (view profile)
Hi Hang Quian
Thanks for the great toolbox.
Currently, I am working on the MIDAS_ADL function with the Beta polynomial specification. I would like to put a constraint on Beta1 of Beta polynomial to 1 to ensure the monotonic pattern of weight. How could I do that in the toolbox?
Thanks
T
Ghulam Abbas (view profile)
Hang Qian (view profile)
Yes, you may need to modify the codes. When we combine models in forecast, we need weights, which are proportional to the inverse of the forecast MSE. Both X and y data are needed to compute MSE.
Sam Rolland (view profile)
Hi Hanq Qian
Thank you for this, I understand the theory behind it. One further question, to perform an extended forecast to a point where DataX is exhausted, am I correct in saying that appADLMIDAS3.m requires alteration to include the function 'ExtendedForecast.m' to perform a true outofsample forecast? I a struggling to understand the 'Combined Forecast by xxx' numbers and how they only go to the end of the DataY sample size.
Hang Qian (view profile)
Prof. Ghysels added comments on Sam’s question: “While it is in principle possible to estimate MIDAS regressions with various HF regressors, it is preferred to use forecast combination techniques as HF regressors often tend to be highly colinear, which causes estimation problems. Nevertheless, some packages such as EViews have implemented MIDAS regressions with multiple HF regressors. It is a possibility but has to be applied with caution in many practical applications.”
Hang Qian (view profile)
Hi Sam,
Basically we estimate two or more models separately and then combine the forecast results by ForecastCombine(Output1,Output2). The example file appADLMIDAS3.m illustrates forecast combination.
Sam Rolland (view profile)
Hello Hang Qian
I am new to this toolbox, although it appears to be very well constructed.
Potentially a silly question, but how does one add a second variable to then use in ForecastCombine.m? It mentions it "By adding the industrial production as a second high frequency series", but does not elaborate.
Can you assist please?
Hang Qian (view profile)
Hi Ruiru,
I do not have codes on your MIDAS_CJ model. The licence of the toolbox gives you permission to do modifications on the original codes. It is fine to adapt the codes so it is more suitable for your own studies.
Ruiru Guo (view profile)
Hello,Qian,thank you for the great toolbox! I am now trying to apply a MIDAS_CJ model where I seperate the continuous part and the jump part in the high frequency data. I am wondering if I could do some change to your original function MIDAS_ADL to realize it or it is better for me to write a new function on MIDAS_CJ? Or do you have any related code on MIDAS_CJ? Thank you so much!
Hang Qian (view profile)
Hi Chen Ryan,
It is possible that the numeric optimizer fails to find an optimum. I do not have a good solution, but you may experiment different starting values by setting the namevalue pairs. Also, turn on 'Gradient' and try to set the FMINCON 'Options' and see how alternative numeric optimization algorithms work.
Chen Ryan (view profile)
Hello,Qian,thank you for the nice toolbox. I have tried to use the code you provided and they all work just fine. However, when I tried to implement more than one macroeconomic variables in GARCHMIDAS and DCCMIDAS models through constructing a linear model x = f(X,theta) that incorporates the macroeconomic variables, I failed numerous times. Would you like to be a little more specific on how to implement more than one macroeconomic variables in GARCHMIDAS and DCCMIDAS models? Thank you!
Jason (view profile)
hi Hang Qian
I have solve the problem of the “corr" function you are right there is another "corr" function ,I did not find it is misused .
thank you
Jason (view profile)
HI Hang Qian
I am using 2014a matlab ,is it possible that the error is caused by the version difference?
thank you
Hang Qian (view profile)
Hi Jason,
Thank you for your interest in DCC MIDAS. The codes work on my computer. One reason that it might fail on yours is the "corr" function is overloaded by your own. The error message seemed to indicate that "corr" is not the original MATLAB function.
Jason (view profile)
Hi Hang Qian
I am using the DCCmidas command. I follow the
the code in the user guide
options = optimoptions('fmincon','Algorithm','activeset');
[estParamsStep1,¬,estParamsStep2,¬,Variance,LongRunVar,CorrMatrix,LongRunCorrMatrix]...
= DccMidas(Data,'Period',20,'NumLagsVar',36,'NumLagsCorr',144,...
'options',options,'ZeroLogL',1:3600,'mu0',0.001);
CorrMatrix = reshape(CorrMatrix,9,nobs)';
LongRunCorrMatrix = reshape(LongRunCorrMatrix,9,nobs)';
and the data is from the toolbox, NASDAQCOM, DEXJPUS, DGS10 .
but when I execute the code ,their is running error, the warning is
"错误使用 pe (line 54)
输入参数的数目不足。
出错 corr (line 3)
k=x(1)*price+x(2)*fund+x(3)*pe
出错 DccMidas (line 489)
sampleCorr = corr(Resid);
I can not get the correlation varience ,the code is just exactly the same as in the userguide .
thank you .
Hang Qian (view profile)
Hi mael Blanchet,
When that warning message shows up, the most likely reason is that the model fit is poor and the optimizer gets trapped somewhere other than the maximum point. In that case, usually we have to make adjustment on the model specification.
mael Blanchet (view profile)
Hello,
Thank you for toolbox.
However, I have a problem with the Maximum Likelihood Estimator. The software displays a warning message: "Warning: Covariance matrix of estimators cannot be computed precisely due to inversion difficulty.
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate."
Do you have any advice?
thank you.
Hang Qian (view profile)
Hi AmorAniss,
The periods are in OutputForecast.YfDates. Weights such as RMFE and others are also retrieved from OutputForecast. Refer to the help header of the corresponding functions for details. Thank you.
AmorAniss Benmoussa (view profile)
Hello , how I can know the period for estimating weight for the combination of forecasts with DMSFE or MSFE approach? For exemple the page 29 in the user guide.
thank you
Stephen Zhang (view profile)
Hi Hang Qian,
Thank you very much.
Stephen
Hang Qian (view profile)
Hi Stephen,
When 'Beta2Para' is set to be false, it fixes one parameter equal to one and varies the other parameter, so that the weights are monotone decreasing. Basically, the default behavior of the software is as you described.
For DccMidas, residuals can be changed if you replace Line 274283 by whatever estimation method.
Thank you.
Stephen Zhang (view profile)
Hi Hang Qian,
Thanks a lot for the toolbox. I am working on the GarchMidas and DccMidas and I have two questions:
1: For GarchMidas, when setting 'Beta2Para' to be true, we have two weights, w1 and w2. Based on Asgharian, How and Javed, 2013, its better to set w1 fixed equal to 1, and vary w2. Can we do this with the toolbox?
2: For DccMidas, the 2nd step estimation(the dcc part) is based on the residuals of the GarchMidas, can we keep the second part but change the residuals to be from the basic Garch model?
Thank you for your concerns. I really appreciate your work on the toolbox.
Best,
Stephen Zhang
chengyuan Ai (view profile)
Hang Qian (view profile)
Hi luis,
The date matching algorithm is not perfect, and it could fail in some cases. You may try to append zero values to the end of the series and make them look as if they were estimation data points. This might help you if the program correctly aligns the estimation data. Also try to format your dates and data in the same format as those in the example file. They are so many ways to write down calendar dates, and I am not sure which format works better than other formats.
luis gomez (view profile)
Hello:
I am not able to get the "Extended Forecast". In the subroutine there seems to be something wrong when calling "MixFreqData" because the structure I get back from it does not have the padded "Y" or the correct "X". I have quarterly data till 2016Q1 and monthly till march 2016 and I want to forecast 2016Q2. I'd really appreciate your help.
Regards
LMGZ
Test Topi (view profile)
Dear Hang Qian,
Dear Eric,
many thanks for your responses.
Regards,
Topi
Eric (view profile)
Dear Test Topi:
I'd like to add to Hang's reply that the Engle, Ghysels and Sohn (REStat, 2013) paper suggests to profile the likelihood function to decide on the lag structure. Hang's reply is absolutely correct. If one wants to decide on lag length and also the aggregation level of say the RV measures in the long run component  then profiling is a good idea. See the aforementioned paper for further details
EG
Hang Qian (view profile)
Dear Test Topi,
'NumLagsVar' specifies the number of lags in filtering the secular component by MIDAS weights in the first step estimation. In term of parameter estimation, there is no penalty of many lags, except that some initial values will be lost. It should be fine if the lag length is long enough to make the weights vanish to zero.
'NumLagsCorr' specifies the number of lags for the second step estimation of correlation matrix. The number of parameters does not increase, so a long lag length should be fine provided that there are sufficient amount of observations.
Test Topi (view profile)
Dear Hang Qian,
many thanks for the quick response. However, I have one last question, hope is not to clumsy: is there a method in order to determine the optimal values for 'NumLagsVar' and 'NumLagsCorr'?
Thanks in advance.
Hang Qian (view profile)
Dear Test Topi,
The DCC MIDAS codes support an arbitrary number of series. Just provide a Tbyn matrix input to the function DccMidas(...). The output variables CorrMatrix and LongRunCorrMatrix should be nbynbyT. Of course, you might want to adapt the demo scripts appDCCMIDAS1 when you plot the results. For example, Line 44 and 45 can be reshaped as
CorrMatrix = reshape(CorrMatrix,n^2,nobs)';
LongRunCorrMatrix = reshape(LongRunCorrMatrix,n^2,nobs)';
Test Topi (view profile)
Dear Hang Qian,
many thanks for the DCC MIDAS code. However, I wonder if it is possible to change the trivariate code for DCC MIDAS in order to estimate a bivariate DCC MIDAS model? Should I replace the output arguments for CorrMatrix and LongRunCorrMatrix?
Eric (view profile)
Dear Raphael:
In the ADLMIDAS model one typically selects the Ylag using information criteria such as BIC  see e.g. Andreou, Ghysels and Kourtelos (JBES, 2013). For the Xlag, one typically uses a long enough lag such that the weights vanish to zero. The only downside of having too many lags is the loss of initial values at the start of the sample. With MIDAS polynomial there is no penalty in terms of parameter estimation when adding lags since the hyper parameters stay the same. Of course, that is not true with UMIDAS or MIDAS with stepfunction  in which case one uses again information criteria
Raphael Zagaglia (view profile)
Hi, I would like to know what is the procedure to choose the Ylag and Xlag in the model ? Is there any test to figure out which value must I use ?
Thanks in advance.
Hang Qian (view profile)
Hi Hafize,
When we see the estimated covariance matrix is not positive definite in numerical maximum likelihood or nonlinear least squares, some causes are: 1) some parameters are not individually identified; 2) the numerical optimizer does not find a local maximum or minimum point; and 3) the data is not suitable for the proposed model. Some possible solutions: 1) try a more parsimonious model; 2) transform the data, either in the statistical or economic sense; and 3) change the starting values for numerical optimization and consider alternative solvers. Good luck!
Hafize (view profile)
Hi Hang Qian,
Many thanks for the matlab code. I want to estimate monthly variance of returns using daily returns, but when I run the code, I get a warning saying that the covariance matrix is not positive definite and that's why get NaN for the standard deviations and tvalues of the beta1 and beta2 parameters. Now I know that this can be a result of variables which are highly correlated (multicollineairty), but I have no idea how I can solve this, can you help me out?
Hafize
Hang Qian (view profile)
Hi Joyce,
The codes you are running are different from those used in the original paper, so it can only replicate (or nearly replicate) a subset of results in the paper. The codes treat parameters symmetrically among equations and do not impose crossequation constraints (i.e., some parameters are shared by multiple equations). It does not get the result of dcc=2. However, you can adapt the codes to impose constraints by modifying the subfunction fml(...) in line 526 – 683. Basically, you may reduce the length of the variable "params" and allocate it to various equations in the DCCMIDAS regression.
Joyce L (view profile)
Hi!
Thanks a lot for this matlab package.
I am studying DCCMidas model and trying to replicate the empirical part of Colacito et al. (2011).After reading the userguide,I try to set the "MorePara"(DccMidas.m) to 1 and then I get a1 a2 a3&b1 b2 b3.Is this the result of DCC=3?
And I wonder if there is a way to get the result of dcc=2 using this packages?
Really sorry to bother you.
Thanks in advance.
Joyce
Hang Qian (view profile)
Hi Daisy,
Double check your data and make sure all the dates are properly recorded. The MATLAB internal function datevec throws an error message "Cannot parse date 0" when some dates look like a string of zero, say datevec('0'). Also, some users cannot run the program if their operating system locale is not US English, when MATLAB or EXCEL interprets the date string in a different way.
Daisy Doan (view profile)
Hi Hang,
Thank you very much for pointing out the problem. I have adjusted my data to a balanced one with the same number of daily obs (19) in each month. However, when running MIDAS_ADL, I encountered the following errors:
Error using datevec (line 276)
Cannot parse date 0.
Error in MixFreqData (line 99)
DataYdateVec = datevec(DataYdate)
do you think explicitly specifying the format of the input string as'mmddyyyy HH:MM:SS' will solve the problem?
Below is a sample of the data for Y
DATE VALUE
01/31/1974 0.006483
02/28/1974 0.003119
03/31/1974 0.021241
and for X:
DATE VALUE
01/02/1974 3.67E06
01/03/1974 0.000474398
01/04/1974 7.40E05
01/07/1974 6.41E05
Hang Qian (view profile)
Hi Daisy,
Dailymonthly aggregation is unbalanced, and I am not sure if the program’s datadate conversion routine can work properly in that case. However, you may try Xlag = 22 so as to approximate dailymonthly aggregation. Does the program generate an error message or produce unreasonable results? If the program can still run, you may check the mixed frequency regression time frame displayed on the screen. It shows how the program matches y with X. Also, the output variable MixedFreqData will display the matched y and X matrices, based on which the nonlinear least squares are run. Good luck.
Daisy Doan (view profile)
Hi Qian,
thank you for the MIDAS program. I try with monthly and daily data but it does not seem to work.
Here is the sample of my data:
Monthly data:
DATE VALUE
01/31/1974 0.006483
02/28/1974 0.003119
03/31/1974 0.021241
Daily
DATE VALUE
01/02/1974 3.67E06
01/03/1974 0.000474398
01/04/1974 7.40E05
01/07/1974 6.41E05
and my codes:
[DataY,DataYdate] = xlsread('mydata1.xlsx','sheet1');
DataYdate1 = DataYdate(2:end,1);
datadatesformat1='dd/mm/yyyy';
DateYnum=datenum(DataYdate1,datadatesformat1);
datadatesformat2='mm/dd/yyyy';
DataYdate=datestr(DateYnum,datadatesformat2);
[DataX,DataXdate] = xlsread('mydata1.xlsx','sheet2');
DataXdate1 = DataXdate(2:end,1);
DateXnum=datenum(DataXdate1,datadatesformat1);
DataXdate=datestr(DateXnum,datadatesformat2);
Xlag = 0;
Ylag = 0;
Horizon = 1;
EstStart = '01/01/1989';
EstEnd = '01/01/2010'; % to match with Baker and Wurgler's period for investment sentiment.
Method = 'fixedWindow';
[OutputForecast,OutputEstimate,MixedFreqData,ExtendedForecast] = MIDAS_ADL(DataY,DataYdate,DataX,DataXdate)
[OutputForecast1,OutputEstimate1,MixedFreqData,ExtendedForecast] = MIDAS_ADL(DataY,DataYdate,DataX,DataXdate,...
'Xlag',Xlag,'Ylag',Ylag,'Horizon',Horizon,'EstStart',EstStart,'EstEnd',EstEnd,'Polynomial','beta','Method',Method);
Hope you can shed light into my problem. Many thanks.
Daisy
ququxi (view profile)
Hi Hang Qian,thank you for your work about MIDAS model! But when I run the data of China, I find the function doesn't converge to global optimal point!So I want to know if we can use simulated annealing algorithm to solve this problem with linear constraint!
Hang Qian (view profile)
Hi EMEL,
It appears that your MATLAB does not recognize the ‘private’ folder. It might be caused by some global preference that overloads the default filesystem precedence. You may try the program on another machine. Also, you may consider dragging all the files out of the ‘private’ folder and place them into your current folder, or adding the folder on your MATLAB search path. Good luck!
EMEL ODABASI (view profile)
Hi Hang Quian,
First of all many thanks for your sharing. I am a very new user of Matlab. Before uploding my own data in the toolbox, I tried to run programme. But It gives error as follows:
Undefined function or variable 'bnls_adl_new'.
Error in MIDAS_ADL>MIDAS_Estimate (line 462)
Results = bnls_adl_new(y,x,numofparams,output_type,polyconstr);
Error in MIDAS_ADL (line 315)
OutputEstimate = MIDAS_Estimate(EstY,EstX,EstLagY,EstXdate,polynomial,stepfun,almonDegree,nExoReg,ylagVec);
Error in appADLMIDAS1 (line 40)
[OutputForecast1,OutputEstimate1,MixedFreqData,ExtendedForecast] = MIDAS_ADL(DataY,DataYdate,DataX,DataXdate,...
How can I correct this error to obtain the results?
Thanks in advance
EMEL
Hang Qian (view profile)
Hi Xiaojun,
Though the software supports a single macroeconomic variable, the GARCHMIDAS with a single index series indeed could be a function of multiple macro series.... x = f(X,theta), where f is a linear function and X a set of macro series. The parameters theta were estimated along with the rest of the model. You will have to modify the codes and insert those macro series in the likelihood function. In the subfunction fML(...) starting from Line 432, you may replace the scalar theta0 by a vector theta0 and then add the macro series in that subfunction. It needs some coding work, but the model with multiple macro series is valid. You may consider the similar for DccMidas as well.
Yes, estParamsStep1 is 6byn estimated parameters for [mu;alpha;beta;theta;w;m] obtained from univariate GARCHMIDAS models
Chu xiaojun (view profile)
Hi Hang Qian,
First of all thanks for the toolbox.
When I run GARCH MIDAS, I find only one macroeconomic variables X is supported. If I want to use N macroeconomic variables, i.e., X is TxN, how could it be implemented?
Is it possible with DccMidas code to run GARCH MIDAS with N macroeconomic variables?
Is the estParamsStep1 GARCH MIDAS result?
Thanks
Xiaojun
Hang Qian (view profile)
Hi Aniss,
The codes address one high frequency regressor. In your case, one quarterly variable with one or more yearly variables. Thank you.
AmorAniss Benmoussa (view profile)
Hello,
I have a very quick question. The code you provide is it enough to make a general MIDAS regression with annual data (low frequency) and quarterly (high frequencies) and also to do with a combination of quarterly indicators ?
Thank you!!
Aniss
Hang Qian (view profile)
Hi KK Chen,
The MIDAS toolbox supports multiple low frequency regressors. Users may specify the namevalue pairs 'ExoReg' and 'ExoRegDate', where the former is a matrix of lowfrequency exogenous regressors and latter is a vector date of those regressors. There is a toolbox demo file appADLMIDAS4.m that illustrates how to include exogenous predictors in MIDAS regression.
Currently the toolbox handles a single high frequency regressor. Users may consider forecast combination if there are multiple high frequency regressors. Forecast combination might yield more robust prediction results. The toolbox demo file appADLMIDAS3.m shows an application of forecast combination.
Thank you!
KK Chen (view profile)
Hi Qian,
May I know if the MIDAS function supports multifactors of low frequency and high frequency data? It seems that the argument DataX and DataY in function MixFreqData only accept vector instead of a matrix.
Eli Twire (view profile)
Hi Qian,
May I ask you why, in the MidasGarch.m line 34, when plotting, you scaled LongRunVar by 252?
line 34:
plot(year(seq),sqrt(252*LongRunVar(seq)),'b','LineWidth',2);
AmorAniss Benmoussa (view profile)
Hi Hang Qian,
Thanks you!
I solved the problem, which came from the convertion of time in excel to Matlab.
Amor
Hang Qian (view profile)
Hi Amor,
I just tried appADLMIDAS2 on Matlab 2015a, and the codes worked with no error messages. I am not sure about the cause of failure on your machine, but I guess these two possibilities:
* The xlsx file is not opened by the MS EXCEL server, and the loaded data series are different.
* The language locale is not U.S. English and the date format is different.
Anyway, after your modification of codes, would you be able to obtain the same results, which look like
RMSE Beta: 0.3146
RMSE Beta NonZero: 0.3311
RMSE Exp Almon: 0.3395
RMSE UMIDAS: 0.3272
RMSE Stepfun: 0.3245
RMSE Almon: 0.3376
Thank you.
AmorAniss Benmoussa (view profile)
Hi Hang Qian,
I use Matlabr2015a and I can not make the example appADLMIDAS2 (or others). I always get the following errors :
Index exceeds matrix dimensions.
Error in MixFreqData (line 264)
fprintf('Reg Y(%s) on ',datestr(EstYdate(m),2));
Error in MIDAS_ADL (line 255)
MixedFreqData = MixFreqData(DataY,DataYdate,DataX,DataXdate,xlag,ylag,horizon,estStart,estEnd,dispTime);
Error in appADLMIDAS1 (line 45)
[OutputForecast1,OutputEstimate1,MixedFreqData,ExtendedForecast] = MIDAS_ADL(DataY,DataYdate,DataX,DataXdate,...
I had to modify the Load data section of this code to be able to have my growth vectors as well as time:
% Load data
[DataY,DataYdate] = xlsread('mydata.xlsx','Sheet1');
DataYdate = DataYdate(2:end,1);
[DataX,DataXdate] = xlsread('mydata.xlsx','Sheet2');
DataXdate = DataXdate(2:end,1);
DataXgrowth = log(DataX(2:end,2)./DataX(1:end1,2))*100;
DataYgrowth = log(DataY(2:end,2)./DataY(1:end1,2))*100;
DataYdate = DataY(2:end,1);
DataXdate = DataX(2:end,1);
DataX=DataXgrowth;
DataY=DataYgrowth;
Thank you,
Amor
Hang Qian (view profile)
Hi Nicolas,
I wrote the GARCHMIDAS codes several months ago, and they are not the codes used in the original paper. The original codes can be found in the data archives of Review of Economics and Statistics:
https://dataverse.harvard.edu/dataverse/restat
You may search the item “Replication data for: Stock Market Volatility and Macroeconomic Fundamentals”.
I did not notice any problems in your specified input arguments, but I do not have the original data and thus are not aware of the source of discrepancy. For the realized volatility MIDAS models, the results obtained from my codes are usually similar to the original codes, given the exactly identical data (both the data source and the method to pretreat the data have to be exactly the same).
Also, I feel that GARCHMIDAS models are robust: the estimated parameters may vary, but the conditional variance patterns and forecasted volatility are similar. My suggestion is to focus on the graphs of the conditional volatility and check if surge and drop of the volatilities have good economic interpretations, and evaluate the predictive power of your estimated volatility model.
Thank you. Good luck!
Hang Qian
Nicolas Soemer (view profile)
Hallo,
First of all thanks for the toolbox. Especially the GARCHMiDaS is very useful to me.
I tried to replicate the results from the 2013 paper “Stock Market Volatility and Macroeconomic Fundamentals” by Engle, Ghysels and Sohn. I used the returns from Schwert’s page and transformed the IP and PPI series as described in the paper, to replicated the results. The descriptive statistics of the returns and macro time series fit. Unfortunately, the results of the regression – especially those with the macro variables – differ a lot. Therefore I was wondering was this matlab model used in the paper?
If yes, what is the correct value for the input arguments? I used 'ThetaM' ,true, 'Period’, 65, and 'NumLag', 16. (This is how I understand it was done in the paper.) Unfortunately, my results differ and are very sensitive to the Period value.
Regards, Nicolas
wang (view profile)
Hi Hang Qian,
Thanks for your rely!
Best regards,
wang
Hang Qian (view profile)
Hi Wang,
For volatility forecasting with a macroeconomic variable X, we need the value of X in the forecasting periods. Therefore, the length of y and X must be the same when we run the program GarchMidas. Otherwise, there will be an error message.
In your scripts, I saw 'X' is assigned a value xDay, which does not increases its size within the FOR loop. So you might want to expand the size of the variable xDay in order to match the size of yBig. For example, the codes would look like
xDayBig = [xDay;xNew];
where xNew is the value of the macroeconomic variable in a onestep forecasting period.
Thank you.
wang (view profile)
Hi Hang Qian,
In out of sample forecast using direct marcoeconomic variable X, I encounter with an error message:
Error using GarchMidas (line 189)
Macroeconomic regressor must be a vector of the same length as y.
could you give me some advice
this code is shown as follows:
yBig = [y;0];
for t = 1:nForecast
[~,~,Variance,LongRunVar] = GarchMidas(yBig,'Period',period,'NumLags',numLags,'X',xDay,'LogTau',1,'ThetaM',1,'Beta2Para',1,'RollWindow',1,'Params',estParams);
yPseudo = estParams(1) + sqrt(Variance(end));
yBig = [yBig(1:end1);yPseudo;0];
end
wang (view profile)
Hi Hang qian,
Thank you very much for your rely.
Hang Qian (view profile)
Hi Wang,
Thanks for your interests in the toolbox. In reply to your question about the outofsample forecast, the variable “yPseudo” is not an observation, but a mathematic construction such that its squared value can recover the conditional variance. Recall that the GARCHMIDAS variances recursion is given by g(i,t) = (1ab) + a * (y(i1,t)mu)^2/tau + b*g(i1,t). In an outofsample forecast, the squared yPseudo works as if it were the squared y(i1,t) because the expected value of (yPseudo – mu)^2 equals the conditional variance. If you would like to add the residual “Resid”, you might want to find a variable whose squared value has the unit variance. Thank you.
wang (view profile)
Hi Hang Qian,
thanks for your wondeful toobox. In Outofsample forecast, yPseudo = estParams(1) + sqrt(Variance(end)); why not is yPseudo = estParams(1) + sqrt(Variance(end))*Resid.
Di Mo (view profile)
Hang Qian (view profile)
The “nobs” you saw is a scalar variable that keeps track of the number of observations. I am not aware in the codes that the variable is used before it is defined. You might check the line number that generates the error message?
Di Mo (view profile)
Hi Hang Qian,
Thank you for the quick reply. I have received another wrong message when running the GARCHMidas Command. The error is as follows:
Undefined function or variable 'nobs'.
Do you have any suggestions on this?
Kind Regards
Di
Hang Qian (view profile)
Hi Di,
The error message you saw is most likely a problem of older version of MATLAB. A few years ago, the Optimization Toolbox of MATLAB migrated optimset to optimoptions. If your MATLAB version is older than 2014a, the software will not recognize optimoptions. You may change optimoptions(...) by something like options = optimset(...).
Di Mo (view profile)
Hi Hang Qian,
Thank you very much for this wonderful Midas Toolbox. I just started with GarchMidas model and an error appeared as follows:
??? Undefined function or method 'optimoptions' for input arguments of type 'char'.
Error in ==> GarchMidas at 294
options = optimoptions('fmincon','Algorithm','interiorpoint','Display','notifydetailed');
Could you give me some advice on this please?
Thank you very much!
Best,
Di
Hang Qian (view profile)
Hi Muhammad,
If your MATLAB version is earlier than R2014b, you may see an error message from the input parser. You will have to replace the name “addParameter” by “addParamValue”. They are the same thing, but the former is its new name. Thank you.
Muhammad Yudhistira (view profile)
Hi Qian,
Thanks a lot for this great toolbox. I just start with MIDAS model, and trying one of the example in the toolbox: appADLMIDAS2. I encounter with this problem.
Error in ==> MIDAS_ADL at 201
parseObj.addParameter('Xlag',9,@(x)validateattributes(x,{'numeric','char'},{},callerName));
Could you give any suggestion?
Best
Hang Qian (view profile)
Hi Yijie,
When you adjust the parameter ”Horizon”, it will shift the dates of the high frequency regressors backward or forward. Setting the Horizon = 2 indicates shift the dates two periods ahead. Depending on how many high frequency periods equal to a low frequency period, this may give you a nowcasting effect. When you run the program, the screen will show how the dates of low and high frequency regressions match each other in a regression. This time frame will be the same for both estimation and forecast.
Also, if you want to verify how the dates match, you may look at the output struct MixFreqData, in which the variables OutYdate and OutXdate are the dates of the low and high variables in the forecasting periods, respectively.
Hang Qian (view profile)
Hi Jennifer,
The error message you saw is a date format issue. The program relies on the MATLAB function datevec to translate string dates to vector dates. It supports 14 date formats, but “01.04.1947” is not one of them. Refer to the documentation of the MATLAB function datevec.
You will have to replace 01.04.1947 by 04/01/1947 (or perhaps 01/04/1947?) Both R2015b and earlier versions of MATLAB use the same date convention. Therefore, the easiest solution is to change the date format in your dataset.
jennifer (view profile)
Thanks for sharing useful toolbox.
The program didnt work on MATLAB R2015b. It gives following errors. Could you give some advice ?
Best
error using datevec (line 276)
Cannot parse date 01.04.1947.
Error in MixFreqData (line 99)
DataYdateVec = datevec(DataYdate);
Error in MIDAS_ADL (line 255)
MixedFreqData = MixFreqData(DataY,DataYdate,DataX,DataXdate,xlag,ylag,horizon,estStart,estEnd,dispTime);
Error in appADLMIDAS5 (line 49)
[OutputForecast1,OutputEstimate1,MixedFreqData,ExtendedForecast] = MIDAS_ADL(DataY,DataYdate,DataX,DataXdate,...
Yijie Huang (view profile)
Hi Qian,
Thanks a million for this toolbox.
In your application 3, if setting the Horizon = 2,is it nowcasting GDP with monthly data? E.g. the forecast result is in 10/01/2009 is based one the 10/01/2009  12/01/2009 monthly data?
Thanks very much.
Hang Qian (view profile)
Hi David,
I guess the error message is most likely a MATLAB version issue. Double check that the Optimization Toolbox is installed and your MATLAB version is R2013b or newer.
If you have the Optimization Toolbox, the namevalue pairs of the optimization options vary from version to version. If your software cannot recognize parameter names like 'LargeScale and 'Jacobian', simply remove it from the codes and use the default optimization setting.
If you do not have the Optimization Toolbox, the only way you can use this software is to change the solver. Replace the toolbox functions lsqnonlin or fmincon by fminsearch, which is available for the base MATLAB. Also remove the bounds constraints, as fminsearch does not support constrained optimization.
Thank you.
David Stephan (view profile)
Thank you for a great toolbox. I am just getting started with MIDAS models and have been trying to follow the example in the user guide. Although everything works fine for models 46 I get a similar error for models 13.
For Models 1 and 2:
Error using optimset (line 219)
Unrecognized parameter name 'LargeScale'.
For Model 3 a similar error:
Error using optimset (line 219)
Unrecognized parameter name 'Jacobian'.
Any ideas what I am doing wrong?
Thanks again for a great toolbox
Saeed (view profile)
Thanks much Eric.
And yes I am using ExoReg to have couple of variables on the right hand side that have the same frequency as the dependent variable.
And yes you are totally correct, I can improve upon simple averaging by using more sophisticated forecast combination approaches.
Thanks,
Saeed
Eric (view profile)
Dear Saeed:
Thanks for your kind words about the MIDAS Matlab Toolbox.
You are correct that multiplicative MIDAS is not yet implemented. Empirical evidence seems to indicate that regular MIDAS specifications typically do better though.
Regarding your question of adding leads of another variable which you call var2. In principle you can use the ExoReg specification to do this, if you properly align the var2 series. So, you can do the direct estimation, assuming that the var2 is not a variable you estimate via a MIDAS polynomial.
Otherwise, if the var2 series is also high frequency it is much easier to run two MIDAS regressions with leads, one for var1 and one for var2, and do forecast combination. You mention that you simply take the average. That is typically not a good idea. Better forecast combination methods exist and are available in the Toolbox
EG
Saeed (view profile)
Dear Eric and Hang:
First of all, I have found the toolbox extremely useful and the accompanying user guide quite detailed and very well written, and so many thanks for making this availabe to all.
Secondly, I am assuming that multiplicative MIDAS is still not implemented (page 16 of the userguide mentions it as well). I ask, because many papers published do seem to apply multiplicative MIDAS such as Andreou, Ghysels, and Kourtellos (2013): Should macroeconomic forecasters look at daily financial data? (JBES).
So currently, I am using daily series named var1 with leads to forecast a monthly series Y. But on the right hand side I also want to have leads of another variable, var2. Since I cannot use multiplicative MIDAS, so I run one MIDAS regression using only leads of var1, and then I run another MIDAS regression using only leads of var2. I average the two forecasts of Y. But it will be nice to just run "one" MIDAS regression that allows for leads of both variables var1, and var2.
Any help in that regard will be very much appreciated. Thanks in advance.
Eric (view profile)
Dear Philippe:
This is essentially a question about mixed frequency VAR models. There is a literature on this. See for example the paper entitled "Macroeconomics and the reality of mixed frequency data", forthcoming in the Journal of Econometrics which I wrote. Estimation can be done with standard VAR packages.
Regards,
EG
Philippe (view profile)
Hello,
Is it possible with this code to run multivariate MIDAS regressions? If not, how could it be implemented?
Regards,
Philippe
Eric (view profile)
Dear Duhyun:
The MIDAS Toolbox only covers MIDAS regression analysis. To my knowledge there is no user friendly MIDAS volatility model code publicly available. Still to be done, unfortunately. However, it is not so difficult to start from Matlab ARCHtype code and replace the volatility dynamics with a MIDAS polynomial specification. It would not be generic, but easy to tailor to a specific application you have in mind.
I agree that it would be useful to have generic MIDAS volatility code publicly available. I've had discussions with Hang on this topic.
Sincerely,
Eric Ghysels
Duhyun Cho (view profile)
It is honor to say to you Eric
Actually, I am deeply interested asymmetric MIDAS model in your paper "There is risk return tradeoff after all"
One of my focuses is finding empirical relations between risk and return though estimating ICAPM model in Asian Pacific stock market.
Anyway I found a related toolbox manual
the ULR is that
http://pages.stern.nyu.edu/~ehedegaa/PDFs/MidasManual.pdf
However, there was only manual of a toolbox but I couldn't find original toolbox still.
If I wouldn't be bothering you, I want to ask a help about the toolbox.
Anyway,thank you for giving a change to me describing my focus. I will wait your answer Thank you very much
Duhyun Cho (view profile)
It is honor to say to you Eric
Actually, I am deeply interested asymmetric MIDAS model in your paper "There is risk return tradeoff after all"
One of my focuses is finding empirical relations between risk and return though estimating ICAPM model in Asian Pacific stock market.
Anyway I finded a related toolbox manual
the ULR is that
http://pages.stern.nyu.edu/~ehedegaa/PDFs/MidasManual.pdf
However, there was only manual of a toolbox but I couldn't find original toolbox still.
If I wouldn't be bothering you, I want to ask a help about the toolbox.
Anyway,thank you for giving a change to me describing my focus. I will wait your answer Thank you very much
Eric (view profile)
Dear Duhyun:
Would you mind being more specific about asymmetric MIDAS  what exactly you are thinking of?
Thanks
Eric Ghysels
Duhyun Cho (view profile)
Thnak you very much for your kindness
I tried again as I mentioned before and there is no problem the error message has been completely removed.
If it wouldn't be annoying you, I want to ask one more question with respect to asymmetric MIDAS regression.
first, is this code available for asymmetric MIDAS? or needed to change some codes or syntax of this toolbox.
I tried to find asymmetric model form Eric Ghysels homepage and other authors of academic papers related to MIDAS model but this is not really easy task to find it.
could you give me an idea? I shall wait your answer
Hang Qian (view profile)
Hi Duhyun,
Thank you for catching that.
The error message at Line 392 pops up after parameter estimation. The estimation results have displayed on the screen. This line just makes date display more beautiful. The error comes from reshaping a vectorized empty matrix; it changes the row/column dimension of an empty matrix.
I have updated the codes. The error message should disappear.
Duhyun Cho (view profile)
Hi Qian
firstly, Thanks for uploading the toolbox
Actually, I wander how to use DL MIDAS model in this tool box.
I tried several times Ylag = 0 in the toolbox because, in my research, autoregression terms do not needed.
unfortunately, there is several error massage in matlab like
Error : MIDAS_ADL (line 392)
MixedFreqData.EstLagYdate = reshape(cellstr(datestr(MixedFreqData.EstLagYdate)),size(MixedFreqData.EstLagYdate));
is there any method to clean that error?
Hang Qian (view profile)
Hi Ruizhi,
I did not test and do not know whether the program can work properly using minute or second data, but you may have a try. DataXdate and DataYdate follow the MATLAB supported time format. For example, 01Mar2000 15:45:17 and 20000301 15:45:17 can be recognized by MATLAB.
Thank you.
Ruizhi Ma (view profile)
Hello! Really thanks for the upload! I'm curious about using intradaily data to forecast daily stock returns by MIDAS, how can I write the DataXdate and DataYdate ? Thank you!
Anni208 (view profile)
Thank you for the very fast answer!
I will follow your advice!
Hang Qian (view profile)
Hi Anni208,
The date string '01.04.1947' is not a supported MATLAB date format, so it cannot be parsed by the program. MATLAB has 14 supported formats, such as '01/04/1947', '19470104', '04Jan1947', 'Jan.01,1947', etc.. If you could change your date format to one of the supported formats, the error message will disappear.
You may refer to this page for the MATLAB date string format:
http://www.mathworks.com/help/matlab/ref/datevec.html
Thank you.
Anni208 (view profile)
Hello!
I'm very cuurious to try your code unfortunately while running appADLMIDAS1.m I receive the following error message:
Error using datevec (line 277)
Cannot parse date 01.04.1947.
Why is there a problem with datevec? Can you please help me with this?
Thanks in advance!
Anni208
WMendieta89 (view profile)
Thank you very much for your reply! It worked!
Thanks again for this great toolkit.
William M.
Hang Qian (view profile)
Hi WMendieta,
MIDAS uses a direct multistep forecast. For example, if we want a 3step ahead forecast, we specify a MIDAS model as
Y(t+3) = b0 + b1*Y(t) + b2*Y(t1) + ... + high frequency regressor terms X(j,ti), j=1,...,Nd, i = 0,1,2,...
Similarly, for a 5step ahead forecast, we use a model like
Y(t+5) = b0 + b1*Y(t) + b2*Y(t1) + ... + high frequency regressor terms X(j,ti), j=1,...,Nd, i = 0,1,2,...
By direct forecast, we mean the left hand side of the model is the hstep ahead dependent variable. This is in contrast to the iterated forecast in an autoregressive model.
Please refer to Section 2.3 of the MIDAS user guide for the multistep forecast:
http://www.unc.edu/~eghysels/papers/MIDAS_Usersguide_V1.0.pdf
For the software usage, put the lagged dependent variables in 'ExoReg' and then adjust the namevalue pair 'Horizon' accordingly.
Thank you.
WMendieta89 (view profile)
Hi! Thanks for uploading this toolbox! I wonder how do you perform hstep ahead forecast using this toolbox? I have performed 1 step ahead outofsample forecast but i´ve been unable to do so for hstep ahead forecasts
thanks in advanced,
WMendieta