[R-sig-ME] Nest survival: (maxstephalfit) PIRLS step-halvings failed to reduce deviance in pwrssUpdate

Mark Herzog mherzog at usgs.gov
Mon Mar 9 21:30:17 CET 2015


   RE: [R-sig-ME] Nest survival: (maxstephalfit) PIRLS step-halvings failed
to reduce deviance in pwrssUpdate

I think it might be a result of you having an exposure period of zero days
in your data... That won't work very well given the link function....

Sorry this is based using my R package, so the codes a little different,
but here's the example:

> library(nestsurvival)

> mydata<-read.csv("c:/users/mherzog/Downloads/habitat-type_example.csv")

>
glm1<-glm(survive/trials~habitat,family=binomial(logexp(days=mydata$expos)),data=mydata)

Error: cannot find valid starting values: please specify some

> mydata<-subset(mydata,expos>0)

>
glm1<-glm(survive/trials~habitat,family=binomial(logexp(days=mydata$expos)),data=mydata)

> summary(glm1)

Call:

glm(formula = survive/trials ~ habitat, family = binomial(logexp(days =
mydata$expos)),

    data = mydata)

Deviance Residuals:

    Min       1Q   Median       3Q      Max

-2.0963  -0.8808   0.5694   0.8052   2.2708

Coefficients:

              Estimate Std. Error z value Pr(>|z|)

(Intercept)     1.9629     0.4036   4.863 1.16e-06 ***

habitatForest  -0.0342     0.4327  -0.079   0.9370

habitatHeath    0.5090     0.4126   1.234   0.2173

habitatScrub    0.8395     0.4497   1.867   0.0619 .

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 787.11  on 568  degrees of freedom

Residual deviance: 621.21  on 565  degrees of freedom

AIC: 629.21

Number of Fisher Scoring iterations: 5

 -----Original Message-----

From: R-sig-mixed-models [mailto:r-sig-mixed-models-bounces at r-project.org
<r-sig-mixed-models-bounces at r-project.org>] On Behalf Of Ben Bolker

Sent: Sunday, March 08, 2015 6:18 PM

To: r-sig-mixed-models at r-project.org

Subject: Re: [R-sig-ME] Nest survival: (maxstephalfit) PIRLS step-halvings
failed to reduce deviance in pwrssUpdate

Elwyn Sharps <e.sharps at ...> writes:

>

> Hi Ben

>

> Thank you very much for your reply. If you click on this link, it

> should give you the data in a CSV file.

> https://sites.google.com/site/es263datahlp/habitat-type_example.csv

>

> Many thanks

>

> Elwyn

  I worked on this for a while, without complete success. The main issue is
that the inverse-link function and derivative functions need some clamping
so that they don't hit 0/1 ... this still doesn't solve the lme4 problem,
but at least it allows the GLM to work.

  Have you considered a cloglog link + offset(log(exposure)) model?  That
*might* be a little more stable ...

library(lme4)

library(MASS)

logexp <- function(exposure = 1, eps=1e-8, maxlink=Inf) {

  linkfun <- function(mu) {

      r <- qlogis(mu^(1/exposure))

      ## clamp link function: not actually necessary?

      ##  maxlink set to Inf

      if (any(toobig <- abs(r)>maxlink)) {

          ## cat("max threshold hit")

          r[toobig] <- sign(r[toobig])*maxlink

      }

      return(r)

  }

  ## utility for clamping inverse-link, derivative function

  clamp <- function(x) {

      x <- pmax(eps,x)

      if (upr) x <- pmin(1-eps,x)

      return(x)

  }

  linkinv <- function(eta)  clamp(plogis(eta)^exposure)

  mu.eta <- function(eta) {

      r <- exposure * clamp(plogis(eta)^(exposure-1)) *

          .Call(stats:::C_logit_mu_eta, eta, PACKAGE = "stats")

      return(r)

  }

  valideta <- function(eta) TRUE

  link <- paste("logexp(", deparse(substitute(exposure)), ")",

                sep="")

  structure(list(linkfun = linkfun, linkinv = linkinv,

                 mu.eta = mu.eta, valideta = valideta,

                 name = link),

            class = "link-glm")

}

##Read in data, called 'mydata'

mydata <- read.csv("habitat-type_example.csv")

library("ggplot2")

with(mydata,table(survive,trials))

with(mydata,table(survive,habitat))

ggplot(mydata,aes(log(1+expos),survive,colour=habitat))+

    geom_point()+

    geom_smooth(method="glm",family="binomial")

ggplot(subset(mydata,habitat=="Conregrowth"),

       aes(expos,survive))+

           stat_sum(aes(size=..n..))+

    geom_smooth(method="glm",family="binomial")+

        scale_size_area()

## trials is always == 1 in this data set

## the fact that glm() fails means that the problem is more ## basic than a
GLMM problem

glm1 <- glm(survive~habitat,

            family=binomial(logexp(exposure=mydata$expos)),

            data=mydata)

Mod1 <- glmer(survive~habitat + (1|site)+(1|year),

              family=binomial(logexp(exposure=mydata$expos)),data=mydata,

              nAGQ=1,

              devFunOnly=TRUE,

              control=glmerControl(nAGQ0initStep=FALSE),

              start=list(beta=coef(glm1),theta=1e-5),

              verbose=100)

Mod2 <- glmer(survive~habitat + (1|year),

              family=binomial(logexp(exposure=mydata$expos)),data=mydata,

              start=list(theta=c(1e-6,1e-6)),

              nAGQ=0,

              devFunOnly=TRUE)

Mod3 <- glmer(survive~habitat + (1|site),

              family=binomial(logexp(exposure=mydata$expos)),data=mydata,

              start=list(theta=c(1e-6,1e-6)),

              nAGQ=0,

              devFunOnly=TRUE)

mydata3 <- droplevels(subset(mydata,habitat!="Conregrowth"))

Mod4 <- glmer(survive~habitat + (1|year),

              family=binomial(logexp(exposure=mydata3$expos)),data=mydata3)

Mod5 <- glmer(survive~habitat + (1|site),

              family=binomial(logexp(exposure=mydata3$expos)),data=mydata3,

              nAGQ=1,

              devFunOnly=TRUE,

              control=glmerControl(nAGQ0initStep=FALSE),

              start=list(beta=coef(glm1),theta=1e-5),

              verbose=100)

with(mydata3,table(site,habitat,survive))

with(mydata,table(year,habitat,survive))

>

> On 5 March 2015 at 03:11, Ben Bolker <bbolker at ...> wrote:

>

> > Elwyn Sharps <e.sharps <at> ...> writes:

> >

> > >

> >

> > [snip]

> >

> > > I am using a nest survival model (glmer) with random effects and a

> > logistic

> > > exposure link function, as described here:

> > >

> > >

> > http://stackoverflow.com/questions/19012128/user-defined-link-functi

> > on-for-

> > > glmer-for-known-fate-survival-modelling

> > >

> > > I am running a number of different models, with varying fixed effects.

> > Some

> > > of them are running well, with no error or warning messages,

> > > however for other models, I am getting the following message:

> > >

> > > *Error: (maxstephalfit) PIRLS step-halvings failed to reduce

> > > deviance in

> > > pwrssUpdate*

> > >

> > > I'm not sure what is causing this error. I have tried to check the

> > > data

> > for

> > > simple problems, however can't see anything that could be causing

> > trouble.

> > >

> > > I've also tried running the model without the random effects. This

> > results

> > > in a different error message:

> > >

> > > *Error: cannot find valid starting values: please specify some*

> >

> >   Example data doesn't seem to be attached: it may have been

> > stripped by the mailing list software.  Can you post it somewhere

> > public and provide a URL?

> >

> >   My guess it that there is something rather wonky about the data

> > for this example, e.g. complete separation (for example, no

> > individuals die for some combination of predictor variables).  Hard

> > to say without the data though.

> >

> >   Ben Bolker

> >

> > _______________________________________________

> > R-sig-mixed-models at ... mailing list

> > https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models

> >

>

>       [[alternative HTML version deleted]]

>

>

_______________________________________________

R-sig-mixed-models at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models

	[[alternative HTML version deleted]]



More information about the R-sig-mixed-models mailing list