LME() error - iteration limit reached In specifying a crossed mixed effects model, I am trying to include interactions. However, I get the following error message:
Error in lme.formula(rate ~ nozzle, random = ~nozzle | operator, data = Flow) : 
nlminb problem, convergence error code = 1
message = iteration limit reached without convergence (10)

The model has the following:
1. 3 nozzle types (fixed effect)
2. 5 operators, each with 3 repeat measures on fuel flow from the 3 nozzle types.
I was asked to include the interaction between nozzle type and operator in the model. 
This is my code for the model:
flow.lme <- lme(rate ~ nozzle, error= nozzle|operator, data=Flow)

Why would I get this error message?? 
 A: First, this is an ANOVA model, not a mixed model.
Second, it seems to me that your model is not identified. In equation form, you have
$$
\mbox{response}_{ij} = \beta_1 \mbox{nozzle type}_{1ij} + \beta_2 \mbox{nozzle type}_{2ij} + \beta_3 \mbox{nozzle type}_{3ij} + \mbox{operator}_i + \mbox{nozzle within operator}_{ij}
$$
where nozzle types are fixed effects (dummy variables), operator is a random effect, and nozzle within operator is a random effect, too.
The last term has 15 separate values for 15 observations that you have. There are no degrees of freedom left to get any other terms in the model. Including interactions was a poor advice. You'd have to drop them whatsoever; even including them as crossed effects won't help, as they will then be perfectly collinear with the fixed effects, and won't be estimable. A maximum likelihood or REML model with 15 observations does not make sense; the asymptotic results of maximum likelihood theory simply won't work: this is a Ferrari you are trying to drive on a plowed field.
A: I haven't heard of the error argument to lme and I don't see it in the documentation. Are you sure that isn't a typo? But, to answer the question you asked:
Try ?lmeControl
Setting the maxIter, msMaxIter, niterEM, and/or msMaxEval arguments to higher values than the default may fix this. Capture the output from lmeControl to an object and then pass that object to the control argument of lme.
Or...
The new default optimizer lme uses is flaky. Half the time these sorts of problems get solved for me when I change it back to the old optimizer. You do this by setting the opt argument for lmeControl to 'optim'.
So, putting it together:
ctrl <- lmeControl(opt='optim');
flow.lme <- lme(rate ~ nozzle, error= nozzle|operator, control=ctrl, data=Flow);

