[R-sig-ME] Error message from nlmer
Douglas Bates
bates at stat.wisc.edu
Tue Oct 30 13:31:29 CET 2007
On 10/30/07, Kari Ruohonen <kari.ruohonen at utu.fi> wrote:
> I apologise that I re-post this question but I just learnt about this
> specific mixed model list, and since I got no replies from r-help I
> thought there may be people able to help on this list that are not
> reading the main r-help.
>
> Once more my sincere apologies if someone feels this is misuse of the
> list. I would appreciate very much any hints to solve the problem
> described below since I am totally puzzled.
No apology needed. This type of message is entirely appropriate for this list.
I didn't notice your message on R-help or I would have responded there.
The answer to your question is that nlmer currently requires an
analytic gradient of the nonlinear model function. You could use the
deriv function to create a version of your grModel that returns the
gradient.
> grModel <- deriv(expression(((x-Tmin)*(x-Tmax))/((x-Tmin)*(x-Tmax)-(x-Topt)^2)*kopt*w^m),
+ c("Tmin","Tmax","Topt","kopt","m"), function(x, Tmin, Tmax,
Topt, kopt, m){})
> grModel <- function(x,w,Tmin,Tmax,Topt,kopt,m)((x-Tmin)*(x-Tmax))/((x-Tmin)*(x-Tmax)-(x-Topt)^2)*kopt*w^m
> str(body(grModel))
language ((x - Tmin) * (x - Tmax))/((x - Tmin) * (x - Tmax) - (x -
Topt)^2) * kopt * w^m
> grModg <- deriv(body(grModel), namevec = c("Tmin","Tmax","Topt","kopt","m"), func = grModel)
> grModg
function (x, w, Tmin, Tmax, Topt, kopt, m)
{
.expr1 <- x - Tmin
.expr2 <- x - Tmax
.expr3 <- .expr1 * .expr2
.expr4 <- x - Topt
.expr6 <- .expr3 - .expr4^2
.expr7 <- .expr3/.expr6
.expr8 <- .expr7 * kopt
.expr9 <- w^m
.expr13 <- .expr6^2
.value <- .expr8 * .expr9
.grad <- array(0, c(length(.value), 5L), list(NULL, c("Tmin",
"Tmax", "Topt", "kopt", "m")))
.grad[, "Tmin"] <- -((.expr2/.expr6 - .expr3 * .expr2/.expr13) *
kopt * .expr9)
.grad[, "Tmax"] <- -((.expr1/.expr6 - .expr3 * .expr1/.expr13) *
kopt * .expr9)
.grad[, "Topt"] <- -(.expr3 * (2 * .expr4)/.expr13 * kopt *
.expr9)
.grad[, "kopt"] <- .expr7 * .expr9
.grad[, "m"] <- .expr8 * (.expr9 * log(w))
attr(.value, "gradient") <- .grad
.value
}
Now use grModg instead of grModel.
> -------- Forwarded Message --------
> From: Kari Ruohonen <kari.ruohonen at utu.fi>
> To: r-help at r-project.org
> Subject: Error message from nlmer
> Date: Thu, 25 Oct 2007 15:31:46 +0300
>
> Hi,
>
> I have R 2.6.0 with updated lme4 and Matrix packages, and I am trying to
> fit a nonlinear multilevel model. I get the following error message:
>
> Error in nlmer(f ~ grModel(x, w, Tmin, Tmax, Topt, kopt, m) ~ kopt |
> flat, :
> gradient attribute of evaluated model must be a numeric matrix
>
> and I wonder what this may indicate.
>
> The nonlinear model I try to fit is as follows:
>
> > grModel
> function(x,w,Tmin,Tmax,Topt,kopt,m)((x-Tmin)*(x-Tmax))/((x-Tmin)*(x-Tmax)-(x-Topt)^2)*kopt*w^m
>
> and my call of nlmer is as follows:
>
> nlmr1<-nlmer(feed~grModel(temp,MW,Tmin,Tmax,Topt,kopt,m)~kopt|
> flat,data=egi,start=c(Tmin=0.2,Tmax=21.1,Topt=14.6,kopt=2.5,m=.51))
>
> 'flat' is a factor with 11 levels.
>
> My start values are from nls that fits the model with no errors. The
> call I have used is as follows:
>
> nls1<-nls(feed~grModel(temp,MW,Tmin,Tmax,Topt,kopt,m),data=egi,start=c(Tmin=1,Tmax=20,Topt=13,kopt=3,m=.7))
>
> The examples given on the help page of nlmer run with no errors.
>
> I would appreciate any hints and help to track the problem indicated by
> the error message.
>
> Thanks,
>
> Kari
>
> _______________________________________________
> R-sig-mixed-models at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-mixed-models
>
More information about the R-sig-mixed-models
mailing list