<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi Mark,<div>I was able to do a model like you're talking about (Poisson with identity link) without constraining the mean. I also had random effects of year and individual. I had to start it with good values. You could first try a linear model (with a normal distribution). Check if the linear model ever goes below zero. In my case, the mean was always positive.</div><div><br></div><div>For profiling I did have to constrain the mean using posfun (see code at end of message). Some purists would say that if you have to use posfun, then you aren't actually fitting the statistical model you say you are. I'm pragmatic about it, but I now people should be cautious. You should make the program notify you if posfun is having to make alterations by checking if fpen>0. Then think seriously about the alterations.</div><div><br></div><div>After doing that, I learned that to be kosher I could have followed the method in this paper. Check it out:</div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 20px; text-indent: -20px; font: normal normal normal 12px/normal Helvetica; ">Marschner, I. C. (2010). Stable Computation of Maximum Likelihood Estimates in Identity Link Poisson Regression. <i>Journal of Computational and Graphical Statistics</i>, <i>19</i>(3), 666–683. doi:10.1198/jcgs.2010.09127</div></div><div><br></div><div>At least I can point to this paper (and others) to say that Poisson models with identity links are legit.</div><div><br></div><div>cheers,</div><div>Mollie</div><div><br><div><div>DATA_SECTION</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>init_int nobs;</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>init_int nyears;</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>init_vector shts_next(1,nobs);</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>init_vector shts(1,nobs);</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>init_int nfix;</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>init_matrix fixmm(1,nobs,1,nfix);</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>init_int nind;</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>init_ivector indiv(1,nobs);</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>init_ivector year(1,nobs);</div><div><span class="Apple-tab-span" style="white-space:pre">   </span></div><div>PARAMETER_SECTION</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>init_vector fcoeffs(1,nfix,1);</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>init_bounded_number log_indiv_std(-25,10,1);</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>init_bounded_number log_year_std(-25,10,3);</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>sdreport_number indiv_std1;</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>random_effects_vector rcoeffs_indiv(1,nind,1);</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>random_effects_vector rcoeffs_year(1,nyears,3);</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>objective_function_value jnll;</div><div><br></div><div>PROCEDURE_SECTION</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>jnll=0.0;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>for(int i=1; i<=nobs; i++)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>obs(i,fcoeffs,log_indiv_std,log_year_std,rcoeffs_indiv(indiv(i)), rcoeffs_year(year(i)));</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>//now add in the nll of the random effects</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>for(int i=1; i<=nind; i++)</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>rand(rcoeffs_indiv(i));</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>for(int i=1; i<=nyears; i++)</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>{</div><div><span class="Apple-tab-span" style="white-space:pre">            </span>rand(rcoeffs_year(i));</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>indiv_std1=exp(log_indiv_std);</div><div><span class="Apple-tab-span" style="white-space:pre">       </span></div><div>SEPARABLE_FUNCTION void obs(int i,const dvar_vector& fcoeffs,const dvariable& log_indiv_std,const dvariable& log_year_std,const dvariable& rcoeff_indiv,const dvariable& rcoeff_year)</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>dvariable indiv_std = exp(log_indiv_std);</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>dvariable year_std = exp(log_year_std);</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>dvariable prediction=fixmm(i)*fcoeffs+</div><div><span class="Apple-tab-span" style="white-space:pre">       </span> <span class="Apple-tab-span" style="white-space:pre">                                   </span>indiv_std*rcoeff_indiv+</div><div><span class="Apple-tab-span" style="white-space:pre">                                              </span>year_std*rcoeff_year;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>dvariable fpen=0.0;</div><div><span class="Apple-tab-span" style="white-space:pre">  </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>prediction=1.e-8+posfun(prediction,.01,fpen);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>jnll+=fpen;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>jnll+=-shts_next(i)*log(prediction)+prediction + gammln(shts_next(i)+1.);</div><div><span class="Apple-tab-span" style="white-space:pre">    </span></div><div>SEPARABLE_FUNCTION void rand(const dvariable& ui)</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>jnll+=0.5*(ui*ui)+0.5*log(2.*M_PI);</div><div><span class="Apple-tab-span" style="white-space:pre">  </span></div><div>TOP_OF_MAIN_SECTION</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>arrmblsize = 30000000;</div><div>    gradient_structure::set_MAX_NVAR_OFFSET(168514);</div><div><br></div><div><br></div></div><div>
Mollie Brooks<br>Ph.D. Candidate<br>NSF IGERT Fellow<br>Biology Department<br>University of Florida<br><a href="mailto:mbrooks@ufl.edu">mbrooks@ufl.edu</a><br>http://people.biology.ufl.edu/mbrooks<br><br><br><br>
</div>
<br><div><div>On 19 Jun 2012, at 11:41 AM, Mark Payne wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>Dear ADMBers,<br><br>I have a problem that is essentially a poisson GLM with a linear link function i.e.<br><br>y | lambda ~ Pois(lambda)<br><br>lamba = a*x1 + b*x2 + c*x3.....<br><br>where  y are my observations, lambda is the expected value, x are the explanatory variables, and a-c are the coefficients that I want to estimate. Now, a linear link function is relatively unusual in this context, but it arises from the process that I am modelling and therefore is a fixed part of the model - essentially the underlying process giving rise to the observations is a linear sum by nature, and I am then observing the results via a counting process.<br><br>Unfortunately, the problem is that the mean value in the poisson likelihood, lambda, needs to be kept strictly positive, otherwise the likelihood is undefined. The question is, how can I best do this in ADMB *and* maintain the linear structure of my model? Are there any tricks in ADMB or transforms that could be used to make this problem more stable?<br><br>Best wishes,<br><br>Mark<br>_______________________________________________<br>Users mailing list<br><a href="mailto:Users@admb-project.org">Users@admb-project.org</a><br>http://lists.admb-project.org/mailman/listinfo/users<br><br></div></blockquote></div><br></div></body></html>