Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.
From | Richard Gates <rgates@stata.com> |
To | statalist@hsphsun2.harvard.edu |
Subject | Re: st: state space model estimation in STATA |
Date | Thu, 09 Feb 2012 11:50:15 -0600 |
Adjmal Sekander Sirak is attempting to estimate a dynamic factor model using -sspace-, but is having convergence problems. He describes the essence of the model thus: > > ... I want to estimate a so > called Dynamic Nelson-Siegel model for sovereign bond yields, which is > basically just a dynamic factor model. I have daily observations over a span > of several years for yields of zero coupon bonds for 16 maturities ranging > from 3 months to ten years. They are all for the same country, of course. > The model that I want to estimate looks like this: > > y_{t}(tau) = Lambda(tau)*f_{t}+eps_{t} > f_{t} = A*f_{t-1} + (I-A)*mu + eta_{t} > > where t denotes the time of observation and tau the maturity. y_{t} is a > 16x1 vector and f_{t} is usually 3x1, but I discard the third element for > parsimony. This is also done by other authors in the literature. The > elements of Lambda(tau) are fixed values given by the Nelson-Siegel model > and need not be estimated. The two error terms are independent of each other > and of their own lags or leads. The statespace specification is > . sspace (lev L.lev L.slo, state) (slo L.lev L.slo, state) /// > > (italy_3m lev slo, noconstant) (italy_6m lev slo, noconstant) /// > > (italy_9m lev slo, noconstant) (italy_12m lev slo, noconstant) /// > > (italy_15m lev slo, noconstant) (italy_18m lev slo, noconstant) /// > > (italy_24m lev slo, noconstant) (italy_30m lev slo, noconstant) /// > > (italy_36m lev slo, noconstant) (italy_48m lev slo, noconstant) /// > > (italy_60m lev slo, noconstant) (italy_72m lev slo, noconstant) /// > > (italy_84m lev slo, noconstant) (italy_96m lev slo, noconstant) /// > > (italy_108m lev slo, noconstant) (italy_120m lev slo, noconstant) /// > > in 1/3001, constraints(1/32) covstate(unstructured) covobserved(diagonal) > > /// > > technique(bfgs 30 dfp) difficult trace from(init) The model without constraints has 57 parameters. He correctly sets the 32 constraints for Lambda(tau). The remaining 25 parameters to estimate are the regression coefficients and constants for the states -lev- and -slo-, 2x3 = 6, and 3 variance-covariances for the unstructured state-equations covariance, and the 16 variance estimates for the diagonal observed-equations covariance. > He asks: > > 1: Could it be that STATA is just incapable of estimating state space models > with say more than 20 parameters? My ultimate goal is to include more > regressors, so the number of parameters would increase at a later stage. If > so, what other packages can you recommend? -sspace- can estimate models with more than 20 parameters. Of course, the more parameters that are being estimated the greater the chance of one or more parameters not be identified. > 2: Am I doing something wrong in the model set-up? How can it be that the > log-likelihood is -22 million when my initial guess comes from a less > sophisticated, but decent estimate of the model? Do I assign the initial > values in a wrong manner? I made sure to use the same order of coefficients > in my initial values vector "init" (see below) as in the parameter vector > e(b). Could you please take a look at my sspace command and the constraints? It looks to me as though the -sspace- problem is correctly set up. However, the interation log provided by Adjmal shows that the variance for the 7-th observation equation, italy_24m, is going to zero. c1 c2 c3 c4 c5 c6 r1 .0073258 .0011075 .997674 -.0081537 .9988129 .0009616 n11 n12 n22 e1 e2 .0026353 -.0022236 .0071163 .5454731 .2593829 e3 e4 e5 e6 **e7** e8 r1 .1128243 .0470635 .0209328 .0083046 1.27e-10 .0014872 e9 e10 e11 e12 e13 .0014012 .0002085 .0032718 .0169846 .0443123 e14 e15 e16 r1 .0825854 .1254572 .1698563 > Any help will gratefully be appreciated. I would like to make the following suggestions: 1. Try to simplify the model using the -covobserved(dscalar)- option, not necessarily as a final model parameterization, but as starting point in model development. 2. Do not use the DFP optimization technique. Stick with BFGS followed by NR, the default optimization technique. If it converges using Newtion-Raphson, you know you have true convergence. The "refining step" transforms the variances and will take NR steps regardless of the technique specified. "Convergence" using BFGS or BFP does not guarantee the NR steps during the "refining step" will converge if the model parameters are not identified. 3. Use the -iterate()- option to terminate the search early. The coefficient table will display (assuming -sspace- can transform the variance parameters). You will be able to see which parameters are giving you trouble. Also, there is an undocumented postestimation command for -sspace- . estat ssdisplay which will display the estimates in state space form. I hope this has been helpful and if you have any further difficulties, please feel free to contact Stata technical support at tech-support@stata.com. -Rich Gates rgates@stata.com * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/statalist/faq * http://www.ats.ucla.edu/stat/stata/