Dear Members of the Help List, Honestly, I feel a little bit stupid - I would like to do something rather simple: fit a non linear model to existing data, to be more precise I wanted to start with simple higher order polynomials. Unfortunately, I do not quite understand the examples in the helpfiles for the nlm, nls and nlsModel commands. Could anyone please provide a simple example to get me started (i.e. y = p + x^2 fitted to x= -1 0 1 y = 2 1 2; a simple parabola p should turn out to be 1). How do I do this and how do I do the same for something like y = a + bx + cx^2 + dx^3 ?? Thank you very much, Christian Endter -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
non linear models
3 messages · Christian Endter, Brian Ripley, John Fox
On Sun, 30 Sep 2001, Christian Endter wrote:
Dear Members of the Help List, Honestly, I feel a little bit stupid - I would like to do something rather simple: fit a non linear model to existing data, to be more precise I wanted to start with simple higher order polynomials.
Which in that sense are not non-linear models...
Unfortunately, I do not quite understand the examples in the helpfiles for the nlm, nls and nlsModel commands. Could anyone please provide a simple example to get me started (i.e. y = p + x^2 fitted to x= -1 0 1 y = 2 1 2; a simple parabola p should turn out to be 1). How do I do this and how do I do the same for something like y = a + bx + cx^2 + dx^3 ??
Fitting to noise-free data is not a good test, so I've added some more
observations (or the cubic is not determined) and some noise.
set.seed(1)
x <- c(-1:1, runif(10, -1, 1))
y <- 1+ x^2+ rnorm(13, 0, 0.1)
quadratic:
lm(y ~ offset(x^2))
Coefficients:
(Intercept)
0.977
via nls:
nls(y ~ p + I(x^2), start=list(p=0))
Nonlinear regression model
model: y ~ p + I(x^2)
data: parent.frame
p
0.9769938
residual sum-of-squares: 0.1429682
General cubic:
lm(y ~ x + I(x^2) + I(x^3))
Coefficients:
(Intercept) x I(x^2) I(x^3)
1.0224 -0.1833 0.9425 0.2188
or (better) use orthogonal polynomials
lm(y ~ poly(x, 3))
Coefficients:
(Intercept) poly(x, 3)1 poly(x, 3)2 poly(x, 3)3
1.4543 -0.8127 1.2372 0.1289
or via nls
nls(y ~ a + b*x + c*x^2 + d*x^3, start=list(a=0, b=0, c=0, d=0))
Nonlinear regression model
model: y ~ a + b * x + c * x^2 + d * x^3
data: parent.frame
a b c d
1.0224028 -0.1833263 0.9425109 0.2187559
residual sum-of-squares: 0.1213026
Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272860 (secr) Oxford OX1 3TG, UK Fax: +44 1865 272595 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
Dear Christian,
Polynomial-regression models are linear in the parameters, so they can be
fit by lm. There are several ways to do your example:
> x <- c(-1, 0, 1)
> y <- c(2, 1, 2)
> lm(y ~ I(x^2))
Call:
lm(formula = y ~ I(x^2))
Coefficients:
(Intercept) I(x^2)
1 1
> lm(y ~ x + I(x^2)) # this fits a term in x as well as x^2
Call:
lm(formula = y ~ x + I(x^2))
Coefficients:
(Intercept) x I(x^2)
1.00e+00 -7.85e-17 1.00e+00
> lm(y ~ poly(x, 2)) # this fits order-2 orthogonal polynomials
Call:
lm(formula = y ~ poly(x, 2))
Coefficients:
(Intercept) poly(x, 2)1 poly(x, 2)2
1.667e+00 -3.127e-16 8.165e-01
I hope that this helps,
John
At 11:59 AM 30/09/2001 -0400, Christian Endter wrote:
Dear Members of the Help List, Honestly, I feel a little bit stupid - I would like to do something rather simple: fit a non linear model to existing data, to be more precise I wanted to start with simple higher order polynomials. Unfortunately, I do not quite understand the examples in the helpfiles for the nlm, nls and nlsModel commands. Could anyone please provide a simple example to get me started (i.e. y = p + x^2 fitted to x= -1 0 1 y = 2 1 2; a simple parabola p should turn out to be 1). How do I do this and how do I do the same for something like y = a + bx + cx^2 + dx^3 ??
----------------------------------------------------- John Fox Department of Sociology McMaster University Hamilton, Ontario, Canada L8S 4M4 email: jfox at mcmaster.ca phone: 905-525-9140x23604 web: www.socsci.mcmaster.ca/jfox ----------------------------------------------------- -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._