[ADMB Users] Random effects model with integration in the likelihood
dave fournier
davef at otter-rsch.com
Sun Nov 11 09:35:59 PST 2012
On 12-11-11 08:06 AM, Jeff Laake wrote:
This appears to do the job. I think it is a bit technical for you to
take on alone.
The main technical thing is the use of a virtual function in class
funciton_minimizer
to get a pointer to the instance of df1b2_parameters os that the correct
function fct can get called.
This involves a bit of extra stuff added to the htp file. I put the
code at the top of s.cpp
but eventually it will need to be put in with code in df1b2_separable.
The corresponding member functions will need to be added to class
function_minimizer
in admodel.h
Maybe someone want to get involved.
> Thanks for the thought and work on this. Do I use adhmodel.h that you
> modified for the admb project or do I make that change locally to my
> machine. What is s.htp? It has been a long time since I programmed
> with c and I'm still quite new with admb. I'm still in process of
> reading the manuals to understand more thoroughly. The re component of
> admb is really useful and I want to use it to expand the role of
> fitting models with random effects in distance sampling and
> capture-recapture data. I believe both could widen the influence and
> role of admb in ecological research.
>
> regards --jeff
>
>
> On Sat, Nov 10, 2012 at 9:21 AM, dave fournier <davef at otter-rsch.com
> <mailto:davef at otter-rsch.com>> wrote:
>
>
>
>
> -------- Original Message --------
> Subject: Re: [ADMB Users] Random effects model with integration
> in the likelihood
> Date: Sat, 10 Nov 2012 09:17:59 -0800
> From: dave fournier <davef at otter-rsch.com>
> <mailto:davef at otter-rsch.com>
> To: users at admb-project.org <mailto:users at admb-project.org>
>
>
>
> When I want to try and understand something like this I try and let
> the compiler do the work. So I run tpl2rem on your tpl (after
> getting rid of the sigma thing for now).
> An immediate problem is
>
> df1b2variable sigma=exp(beta+eps);
> mu=adromb(&model_parameters::fct,0,width,8);
> f -= -0.5*square(u);
>
> Need to change that to
> > mu=adromb(&df1b2_parameters::fct,0,width,8);
> That is a problem with the sed scripts in tpl2rem
>
> Now compile again and you get
> undefined reference to df1b2_pre_parameters::adromb(df1b2variable
> (df1b2_parameters::*)(df1b2variable const&), int, data_number&, int)
>
> So give it what it want. Put this in s.htp
>
> class df1b2_parameters;
>
> class df1b2_pre_parameters : public model_parameters
> {
> public:
> df1b2_pre_parameters(int sz,int argc, char * argv[]) :
> model_parameters(sz,argc,argv){;}
> re_objective_function_value f;
> void begin_df1b2_funnel(void);
> void setup_quadprior_calcs(void);
> void end_df1b2_funnel(void);
> void ll_j(const int j, const funnel_init_df1b2variable& beta,const
> funnel_init_df1b2variable& sigeps,const funnel_init_df1b2variable& u);
> df1b2variable df1b2_pre_parameters::adromb(df1b2variable
> (df1b2_parameters::*)(const df1b2variable&), int, data_number&, int);
> };
>
> Now it compiles and returns a link error for this function. So now we
> understand the hierarchy.
> So where is the difficulty? What we would like to do is to put this
> function in a base class, in this
> case function_minimizer. that is where the dvariable form lives. It
> almost works, but
> the problem is that function_minimizer does not know about
> df1b2variables so you can't return one
> because at that time it wont know what the size on the stack is.
>
> Anyway that is the idea. To fix this we can pass the df1b2variable as a
> reference to the function
> instead of returning it and make the function void. So in admodel.h I added
>
> #if defined(USE_LAPLACE)
> class df1b2variable;
> class init_df1b2vector;
> class df1b2vector;
> class df1b2_parameters;
> typedef df1b2variable (df1b2_parameters::*DFPMF) (const df1b2variable&);
> #endif
>
>
> class function_minimizer
> {
> // stuff ...
>
> #if defined(USE_LAPLACE)
> void adromb(DFPMF,double a,double b,const df1b2variable& _v,int ns=9);
> #endif
>
>
> This is all the information the compiler needs.
>
> We can put the code for the actual function in a place where it knows
> about df1b2variables.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.admb-project.org/pipermail/users/attachments/20121111/6500d38b/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: new_s.zip
Type: application/zip
Size: 3861 bytes
Desc: not available
URL: <http://lists.admb-project.org/pipermail/users/attachments/20121111/6500d38b/attachment.zip>
More information about the Users
mailing list