[ADMB Users] Are parameters scaled for optimization.
Mark Maunder
mmaunder at iattc.org
Wed Jan 1 16:46:07 PST 2014
Thanks Dave.
> Extending this so that std dev terms can be scaled in multivariate
> random effects models sounds useful. However, I will let others comment on whether this is a useful project.
Regards,
Mark
IATTC
> On Jan 1, 2014, at 6:35 PM, "dave fournier" <davef at otter-rsch.com> wrote:
>
> On 14-01-01 01:43 PM, Mark Maunder wrote:
>
> for an unbounded parameter (an init_number)
> the scalefactor is implmented OK.
>
> 238 void df1b2_init_number::set_value(const init_df1b2vector& _x,const int& _ii,
> 239 const df1b2variable& pen)
> 240 {
> 241 ADUNCONST(init_df1b2vector,x)
> 242 ADUNCONST(int,ii)
> 243 if (scalefactor==0.0)
> 244 operator = (x(ii++));
> 245 else
> 246 operator = (x(ii++)/scalefactor);
> 247 }
> 248
>
> So this is OK.
>
> However the code for an init_bounded_vector never wrote itself.
>
> 569 void df1b2_init_bounded_vector::set_value(const init_df1b2vector& _x,
> 570 const int& ii,const df1b2variable& pen)
> 571 {
> 572 init_df1b2vector& x=(init_df1b2vector&) _x;
> 573 if (initial_params::mc_phase)
> 574 {
> 575 ::set_value_mc(*this,x,ii,minb,maxb);
> 576 }
> 577 else
> 578 {
> 579 ::set_value(*this,x,ii,minb,maxb,pen);
> 580 }
>
> I was hoping that someone would take up the job after the init_bounded_number was done,
> but there seems to be more interest in doxygen and unbelievably complicated script files.
>
> If there is some interest I can extend this a bit. One application would be to multivariate
> random effects models. It appears that scaling the std dev terms greatly improves the stability of
> glmmadmb and I expect this is a fairly general result.
>
>> I assume it is the same for standard parameters and re parameters.
>
>
> I'm not sure what is meant here.
>
>
> Dave
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>> Thanks Dave. What if it is unbounded? I assume it is the same for standard parameters and re parameters.
>>
>> Regards,
>>
>> Mark
>> IATTC
>>
>>> On Dec 31, 2013, at 1:03 PM, "dave fournier" <davef at otter-rsch.com> wrote:
>>>
>>>
>>> For a random effects model
>>> The relevant code appears to be
>>>
>>> if the scalefactor has not been set (i.e. =0)
>>>
>>> 409 df1b2variable boundp(const df1b2variable& x, double fmin, double fmax,
>>> 410 const df1b2variable& _fpen)
>>> 411 {
>>> 412 ADUNCONST(df1b2variable,fpen)
>>> 413 df1b2variable t;
>>> 414 //df1b2variable y;
>>> 415 //y=x;
>>> 416 double diff=fmax-fmin;
>>> 417 const double l4=log(4.0);
>>> 418 df1b2variable ss=0.49999999999999999*sin(x*1.57079632679489661)+0.50;
>>> 419 t=fmin + diff*ss;
>>> 420
>>>
>>> So the parameter is effectively scaled by diff.
>>> Better would be
>>>
>>> 418 df1b2variable ss=0.49999999999999999*sin(x/diff*1.57079632679489661)+0.50;
>>>
>>> The only difficulty would be that the function minimizer report does not deal with large numbers well.
>>>
>>> For parameters whose scalefactor has been set the code is
>>>
>>>
>>> 460 df1b2variable boundp(const df1b2variable& _x, double fmin, double fmax,
>>> 461 const df1b2variable& _fpen,double s)
>>> 462 {
>>> 463 ADUNCONST(df1b2variable,fpen)
>>> 464 df1b2variable t;
>>> 465 df1b2variable x=_x/s;
>>> 466 //df1b2variable y;
>>> 467 //y=x;
>>> 468 double diff=fmax-fmin;
>>> 469 const double l4=log(4.0);
>>> 470
>>> 471 // ss is underlying varialbe on [0,1] and t lives in [fmin,fmax]
>>> 472 df1b2variable ss=0.49999999999999999*sin(x*1.57079632679489661)+0.50;
>>> 473 t=fmin + diff*ss;
>>> 474
>>>
>>> again
>>>
>>> 472 df1b2variable ss=0.49999999999999999*sin(x/diff*1.57079632679489661)+0.50;
>>>
>>> would be better.
>>>
>>> I wrote a note about this earlier, but it did not generate much interest.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at admb-project.org
>>> http://lists.admb-project.org/mailman/listinfo/users
>
More information about the Users
mailing list