The problem is the following: When you call PF_RE_AR1_outer_alt from hessian it will send in a ForwardDiff number as the C_parm argument.
This line: sige = C_parm[2] # scale volatility on trend inflation SV means that sige will be a ForwardDiff number. This line trd_SV_j1 = randn(mprt,1)*sige + log( trd_SV_0 ) means that trd_SV_j1 is now a vector of ForwardDiff numbers due to promotion. And the last problem is t_SV[:,j] = trd_SV_j1 where you try to assign a vector of ForwardDiff number to an array which is supposed to only hold floats. The solution to this is to change t_SV = zeros(mprt, obs) to t_SV = zeros(eltype(C_parm), mprt, obs) for each array that will store an intermediate result. This means that the element type of the array will always be the same as the element type of the input argument. On Tuesday, November 3, 2015 at 2:43:39 PM UTC+1, [email protected] wrote: > > Hi Kristoffer: > > Thank you. Attached are > > test_RE_AR_alt.jl > > which is the main program that calls to > > PF_RE_AR1_outer.jl > > The goal of these programs is to estimate a multivariate stochastic > volatility model using a Bayesian particle Markov Chain Monte Carlo > simulator. > > Using Tony's suggestion solved one problem, but the current issue is that > running test_RE_AR_alt.jl causes Julia to return > > > LoadError: InexactError() > in unsafe_setindex! at array.jl:318 > in _unsafe_batchsetindex! at multidimensional.jl:329 > in PF_RE_AR1_outer_alt at > /home/jim_nason/jmn_work/smith/NS4/jl_code_Summer2015/RE_rho/MH_PF_test/PF_RE_AR1_outer_alt.jl:72 > in _calc_hessian at > /home/jim_nason/.julia/v0.4/ForwardDiff/src/api/hessian.jl:98 > in hessian at /home/jim_nason/.julia/v0.4/ForwardDiff/src/api/hessian.jl:27 > [inlined code] from > /home/jim_nason/jmn_work/smith/NS4/jl_code_Summer2015/RE_rho/MH_PF_test/test_RE_AR1_alt.jl:182 > in anonymous at no file:177 > in include at ./boot.jl:261 > in include_from_node1 at ./loading.jl:304 > while loading > /home/jim_nason/jmn_work/smith/NS4/jl_code_Summer2015/RE_rho/MH_PF_test/test_RE_AR1_alt.jl, > > in expression starting on line 125 > > > Line 72 of PF_RE_AR1_outer_alt.jl is > > t_SV[:,j] = trd_SV_j1 > > where t_SV = zeros(mprt, obs) is allocated prior to entering the loop > found in PF_RE_AR1_outer.jl, where mprt = 10 and obs = 187 (the length of > the sample SPF_pi) are constants set in test_RE_AR1_alt.jl and trd_SV_j1 is > a random walk process that is mprt x 1 and updated in the loop found in > PF_RE_AR1_outer.jl. Note that mprt = 10 is to get to the > ForwardDiff.hessian quickly. More typical is mprt = 500 to 20000. > > Since these programs are implementing a simulator, are the indexing > problems generated by calling to ForwardDiff.hessian problematic? > > Also, attached are several more programs related to running > test_RE_AR1_alt.jl. > > Jim > > > On Tuesday, November 3, 2015 at 3:32:20 AM UTC-5, Kristoffer Carlsson > wrote: >> >> As a tip, when you ask for help it is much easier if you post actual >> runnable code. If you provide a file where "julia thefile.jl" throws an >> InexactError I'm pretty sure it can be figured out quickly what the problem >> is. >> >> On Tuesday, November 3, 2015 at 12:23:36 AM UTC+1, Tony Kelman wrote: >>> >>> It might be a different kind of InexactError then. Try adding a @show on >>> the rhs value, see what type it is. The array might need to be constructed >>> in a way that it's capable of holding dual number element types. >>> >>> >>> >>> On Mon, Nov 2, 2015 at 3:18 PM -0800, <[email protected]> wrote: >>> >>> Hi Tony: >>> >>> Thanks, but remember you asked. >>> >>> Your first request is answered by >>> >>> const dsts = 2 # dim( state vector ) >>> >>> which is set in the main file that calls to PF_RE_AR1_outer_alt.jl >>> >>> In PF_RE_AR1_outer_alt.jl, I set >>> >>> cs00V = eye(dsts) >>> cs00V[2,2] = sigu*sigu/(1.0 - rho1*rho1) # this is the line at which >>> Julia responds with ERROR: LoadError: InexactError() >>> >>> Note that sigu and rho1 are Float64 types. >>> >>> If you want, I can send you the complete set of Julia files/functions >>> generating the problem in ForwardDiff.hessian. >>> >>> Best, >>> >>> Jim >>> >>> >>> On Monday, November 2, 2015 at 10:31:08 AM UTC-5, Tony Kelman wrote: >>> >>> Misread the part where you said dsts = 2. Can you post more of the code, >>> exactly how is dsts getting passed to these lines? >>> >>> >>> On Monday, November 2, 2015 at 7:28:56 AM UTC-8, Tony Kelman wrote: >>> >>> By "the destination array" I meant the line >>> >>> cs00V = eye(dsts) >>> >>> If dsts is an integer element type there, then cs00V will also have an >>> integer element type. Try eye(size(dsts)...) >>> >>> >>> On Monday, November 2, 2015 at 5:32:54 AM UTC-8, [email protected] >>> wrote: >>> >>> Hi Tony: >>> >>> Thanks for the suggestion. >>> >>> Unfortunately, the result is the same. >>> >>> I initialized/pre-allocated the destination array for the Hessian as >>> >>> hessh = zeros(nparm,nparm) >>> >>> Julia's reply from the call to >>> >>> hessh = ForwardDiff.hessian(PF_RE_AR1_outer_alt, parms) >>> >>> began with >>> >>> >>> ForwardDiff.HessianNumber{7,Float64,Tuple{Float64,Float64,Float64,Float64,Float64,Float64,Float64}} >>> >>> ForwardDiff.HessianNumber{7,Float64,Tuple{Float64,Float64,Float64,Float64,Float64,Float64,Float64}} >>> >>> followed by the ERROR: LoadError: InexactError() statement. >>> >>> Jim >>> >>> >>> On Sunday, November 1, 2015 at 11:35:16 PM UTC-5, Tony Kelman wrote: >>> >>> You probably need to initialize the destination array with a floating >>> point, rather than integer, element type. >>> >>>
