Just as a side note:

Instead of 
 randn(mprt,1)

you might just want to use

randn(mprt)

to create a vector instead of a matrix with one column.


On Tuesday, November 3, 2015 at 3:00:37 PM UTC+1, Kristoffer Carlsson wrote:
>
> 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.
>>>>
>>>>

Reply via email to