Hi, I'm getting an error that I don't understand when updating an nls object. Here is a toy example. dd <- structure(list(Contrast = c(0.00376, 0.03759, 0.12782, 0.25564, 0.50376, 1), Response = c(0.29915, 6.13248, 29.01709, 30.0641, 29.46581, 27.67094)), .Names = c("Contrast", "Response"), class = "data.frame", row.names = c(NA, -6L)) m1 <- nls(Response ~ Rm * Contrast^ex/(Contrast^ex + sig^ex), data = dd, start = list(Rm = 30, sig = 0.05, ex = 3)) m2 <- update(m1, . ~ Rm * Contrast^ex/(Contrast^fx + sig^fx), start = list(Rm = 30, sig = 0.05, ex = 3, fx = 3.1)) Error in terms.formula(tmp, simplify = TRUE) : invalid power in formula but there is nothing wrong with fitting the second model directly with nls m2a <- nls(Response ~ Rm * Contrast^ex/(Contrast^fx + sig^fx), data = dd, start = list(Rm = 30, sig = 0.05, ex = 3, fx = 3.1)) nor with fitting the model with the data transformed (though it is not necessarily the way I would like to fit the model in this case). m2b <- update(m1, log(.) ~ log(.)) m3 <- update(m2b, . ~ log(Rm * Contrast^ex/(Contrast^fx + sig^fx)), start = list(Rm = 30, sig = 0.05, ex = 3, fx = 3.1)) sessionInfo() R version 2.10.1 Patched (2010-01-25 r51051) i386-apple-darwin9.8.0 locale: [1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8 attached base packages: [1] stats graphics grDevices utils datasets methods [7] base Thanks, in advance, for any help. Ken -- Ken Knoblauch Inserm U846 Stem-cell and Brain Research Institute Department of Integrative Neurosciences 18 avenue du Doyen L?pine 69500 Bron France tel: +33 (0)4 72 91 34 77 fax: +33 (0)4 72 91 34 61 portable: +33 (0)6 84 10 64 10 http://www.sbri.fr/members/kenneth-knoblauch.html
Ken, You just need to wrap the rhs of your formula in I() to get around update()'s parsing of terms. m2 <- update(m1, . ~ I(Rm * Contrast^ex/(Contrast^fx + sig^fx)), start = list(Rm = 30, sig = 0.05, ex = 3, fx = 3.1)) -Peter Ehlers Ken Knoblauch wrote:> Hi, > > I'm getting an error that I don't understand when updating an nls > object. Here is a toy example. > > dd <- structure(list(Contrast = c(0.00376, 0.03759, 0.12782, 0.25564, > 0.50376, 1), Response = c(0.29915, 6.13248, 29.01709, 30.0641, > 29.46581, 27.67094)), .Names = c("Contrast", "Response"), class = > "data.frame", row.names = c(NA, > -6L)) > > m1 <- nls(Response ~ > Rm * Contrast^ex/(Contrast^ex + sig^ex), > data = dd, > start = list(Rm = 30, sig = 0.05, ex = 3)) > > m2 <- update(m1, . ~ > Rm * Contrast^ex/(Contrast^fx + sig^fx), > start = list(Rm = 30, sig = 0.05, ex = 3, > fx = 3.1)) > Error in terms.formula(tmp, simplify = TRUE) : invalid power in formula > > but there is nothing wrong with fitting the second model directly > with nls > > m2a <- nls(Response ~ > Rm * Contrast^ex/(Contrast^fx + sig^fx), > data = dd, > start = list(Rm = 30, sig = 0.05, ex = 3, > fx = 3.1)) > > > nor with fitting the model with the data transformed (though it is > not necessarily the way I would like to fit the model in this > case). > > m2b <- update(m1, log(.) ~ log(.)) > m3 <- update(m2b, . ~ > log(Rm * Contrast^ex/(Contrast^fx + sig^fx)), > start = list(Rm = 30, sig = 0.05, ex = 3, > fx = 3.1)) > > sessionInfo() > R version 2.10.1 Patched (2010-01-25 r51051) > i386-apple-darwin9.8.0 > > locale: > [1] en_US.UTF-8/en_US.UTF-8/C/C/en_US.UTF-8/en_US.UTF-8 > > attached base packages: > [1] stats graphics grDevices utils datasets methods > [7] base > > Thanks, in advance, for any help. > > Ken >-- Peter Ehlers University of Calgary
Reasonably Related Threads
- problem in applying function in data subset (with a level) - using plyr or other alternative are also welcome
- nls profiling with algorithm="port" may violate bounds (PR#8508)
- compare two matrices
- Fwd: simple question
- lme4/lmer: P-Values from mcmc samples or chi2-tests?