Hi All. I'd like to send some control arguments to the nls function when performing a nlsList analysis. I'm fitting a power model to some grouped data and would like to impose lower bounds on the estimates using the "port" algorithm. Obtaining the lower bound constraint works fine with a direct call to nls for a single level of the grouping variable. ?However, the bounds aren't imposed when performing the nlsList analysis across the levels of the grouping variable. ?Any idea why this isn't working? # Generate example data ########## trial ?<- 1:100 result <- list() for (i in 1:3) { ?min <- rnorm(max(trial),250,5) ?dif <- rnorm(max(trial),500,5) ?p ? <- rnorm(max(trial),-.5,.1) ?e ? <- rnorm(max(trial),mean=0,sd=5) ?y ? <- min + dif*(trial)^p + e ?result[[i]] <- data.frame(y,trial,id=i) } newdf ? <-do.call('rbind',result) df.gr ? ? <- groupedData( y ~ trial | id, data=newdf) ### Single unit analysis ........................................................................ ### The boundary condition on the dplt parameter is enforced! .......... df.one <- subset(df.gr,id==1) nls(y~SSpowrDplt(trial,min,dplt,dif,p),data=df.one,algorithm="port",lower=c(0.0,0.0,0.0,-10)) ...... example output.......>Nonlinear regression model > ?model: ?y ~ SSpowrDplt(trial, min, dplt, dif, p) > ?data: ?df.one > ? ?min ? ?dplt ? ? dif ? ? ? p >247.052 ? 0.000 491.965 ?-0.462 > residual sum-of-squares: 234322 > Algorithm "port", convergence message: relative convergence (4)################################## ### nlsList analysis ........................................................................................ ### Boundary condition on dplt is not enforced ............................................. Lfit.nls ? ?<- nlsList(y~SSpowrDplt(trial,min,dplt,dif,p),data=df.gr,control=list(algorithm='port',lower=c(0.0,0.0,0.0,-10),maxiter=100)) ...... example output.......>Call: > ?Model: y ~ SSpowrDplt(trial, min, dplt, dif, p) | id > ? Data: df.gr>Coefficients: > ? min > ?Estimate Std. Error ? t value ? ? Pr(>|t|) >1 276.2354 ? 16.16609 17.087337 1.086442e-44 >2 257.0127 ? 20.43564 12.576694 3.390686e-30 >3 206.4017 ? 29.01315 ?7.114075 7.354863e-12 > ? dplt > ? ? Estimate Std. Error ? ?t value ?Pr(>|t|) >1 -0.06579982 0.03848086 -1.7099365 0.0951222 >2 -0.01694362 0.04161933 -0.4071093 0.6786473 >3 ?0.08981518 0.04636532 ?1.9371199 0.0528957 > ? dif > ?Estimate Std. Error ?t value ? ? Pr(>|t|) >1 477.5049 ? 21.89002 21.81382 6.679439e-62 >2 488.7171 ? 22.11908 22.09482 4.466288e-66 >3 552.7105 ? 25.04206 22.07129 9.215344e-65 > ? p > ? ?Estimate Std. Error ? t value ? ? Pr(>|t|) >1 -0.5455936 0.06262040 -8.712713 7.615265e-16 >2 -0.4839114 0.06074282 -7.966560 1.307734e-14 >3 -0.4059903 0.05455864 -7.441355 9.297527e-13>Residual standard error: 27.43384 on 888 degrees of freedom##################################################### If you look at the structure of Lfit.nls, it looks like the control arguments are passed correctly. str(Lfit.nls) List of 3 ?$ 1:List of 6 ?..$ control ? ?:List of 7 ?.. ..$ maxiter ?: num 100 ?.. ..$ tol ? ? ?: num 1e-05 ?.. ..$ minFactor: num 0.000977 ?.. ..$ printEval: logi FALSE ?.. ..$ warnOnly : logi FALSE ?.. ..$ algorithm: chr "port" ?.. ..$ lower ? ?: num [1:4] 0 0 0 -10 If it helps, here's the selfStart function that I'm using.... powrDpltInit <- function(mCall, LHS, data) { ? xy ? ? <- sortedXyData(mCall[["x"]],LHS,data) ? min.s ?<- min(y) ? dif.s ?<- max(y)-min(y) ? dplt.s <- 0.5 ? p.s ? ?<- -.20 ? value ?<- c(min.s, dplt.s, dif.s, p.s) ? names(value) <- mCall[c("min","dplt","dif","p")] ? value } SSpowrDplt<-selfStart(~min + dplt*x + dif*x^p,initial=powrDpltInit, parameters=c("min","dplt","dif","p")) Thanks for your help! Rick DeShon