Hi all, I want to fit data called "metal" with a polynominal function as dP ~ a.0 + a.1 * U0 + a.2 * U0^2 + a.3 * U0^3 + a.4 * U0^4 The data set includes, the independant variable U0 and the dependant variable dP. I've seen that the combination of lm() and poly() can do that instead of using the nls() function. But I don't get how to interpret the results from the linear regression, as the coefficients do not match the ones from the nonlinear regression #data metal U0 dP 1 0.00 0 2 0.76 10 3 1.43 20 4 2.56 40 5 3.05 50 6 3.52 60 7 3.76 70 8 4.05 80 9 4.24 90 10 4.47 100 #linear d <- seq(0, 4, length.out = 200) for(degree in 1:4) { fm <- lm(dP ~ poly(U0, degree), data = metal) assign(paste("metal", degree, sep="."), fm) lines(d, predict(fm, data.frame(U0=d)), col = degree) } metal.4 Call: lm(formula = dP ~ poly(U0, degree), data = metal) Coefficients: (Intercept) poly(U0, degree)1 poly(U0, degree)2 poly(U0, degree)3 poly(U0, degree)4 52.000 100.612 19.340 7.101 2.628 #nonlinear fm<-nls (dP~ a.0 + a.1*U0 + a.2*U0^2 + a.3*U0^3 + a.4*U0^4, data=metal) Nonlinear regression model model: dP ~ a.0 + a.1 * U0 + a.2 * U0^2 + a.3 * U0^3 + a.4 * U0^4 data: metal a.0 a.1 a.2 a.3 a.4 0.02408 9.81452 5.54269 -2.24657 0.36737 residual sum-of-squares: 5.843 Number of iterations to convergence: 2 Achieved convergence tolerance: 1.378e-06 Regards/Cordialement ------------- Benoit Boulinguiez Ph.D student Ecole de Chimie de Rennes (ENSCR) Bureau 1.20 Equipe CIP UMR CNRS 6226 "Sciences Chimiques de Rennes" Avenue du Général Leclerc CS 50837 35708 Rennes CEDEX 7 Tel 33 (0)2 23 23 80 83 Fax 33 (0)2 23 23 81 20 <http://www.ensc-rennes.fr/> http://www.ensc-rennes.fr/ [[alternative HTML version deleted]]
Hi, if I see it correctly, the nls you run is a linear model. It will probably give you the same (or virtually identical) result as lm(dP~U0+I(U0^2)+I(U0^3)+I(U0^4)). Your lm model, by contrast, creates orthogonal polynomials such that all orders of the polynomials are uncorrelated with the others. That is, there is some transformation involved to orthogonalize the polynomials. This is the likely reason why you see differences in your nls and your lm specification. Daniel ------------------------- cuncta stricte discussurus ------------------------- -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Benoit Boulinguiez Sent: Tuesday, December 22, 2009 12:10 PM To: r-help at r-project.org Subject: [R] use of lm() and poly() Hi all, I want to fit data called "metal" with a polynominal function as dP ~ a.0 + a.1 * U0 + a.2 * U0^2 + a.3 * U0^3 + a.4 * U0^4 The data set includes, the independant variable U0 and the dependant variable dP. I've seen that the combination of lm() and poly() can do that instead of using the nls() function. But I don't get how to interpret the results from the linear regression, as the coefficients do not match the ones from the nonlinear regression #data metal U0 dP 1 0.00 0 2 0.76 10 3 1.43 20 4 2.56 40 5 3.05 50 6 3.52 60 7 3.76 70 8 4.05 80 9 4.24 90 10 4.47 100 #linear d <- seq(0, 4, length.out = 200) for(degree in 1:4) { fm <- lm(dP ~ poly(U0, degree), data = metal) assign(paste("metal", degree, sep="."), fm) lines(d, predict(fm, data.frame(U0=d)), col = degree) } metal.4 Call: lm(formula = dP ~ poly(U0, degree), data = metal) Coefficients: (Intercept) poly(U0, degree)1 poly(U0, degree)2 poly(U0, degree)3 poly(U0, degree)4 52.000 100.612 19.340 7.101 2.628 #nonlinear fm<-nls (dP~ a.0 + a.1*U0 + a.2*U0^2 + a.3*U0^3 + a.4*U0^4, data=metal) Nonlinear regression model model: dP ~ a.0 + a.1 * U0 + a.2 * U0^2 + a.3 * U0^3 + a.4 * U0^4 data: metal a.0 a.1 a.2 a.3 a.4 0.02408 9.81452 5.54269 -2.24657 0.36737 residual sum-of-squares: 5.843 Number of iterations to convergence: 2 Achieved convergence tolerance: 1.378e-06 Regards/Cordialement ------------- Benoit Boulinguiez Ph.D student Ecole de Chimie de Rennes (ENSCR) Bureau 1.20 Equipe CIP UMR CNRS 6226 "Sciences Chimiques de Rennes" Avenue du Giniral Leclerc CS 50837 35708 Rennes CEDEX 7 Tel 33 (0)2 23 23 80 83 Fax 33 (0)2 23 23 81 20 <http://www.ensc-rennes.fr/> http://www.ensc-rennes.fr/ [[alternative HTML version deleted]]
Get some statistical consulting help or read up on these topics -- any good textbook on regression should contain the necessary material. This has nothing to do with nonlinear regression, so you are confused about the basic ideas. It has nothing to do with R. If you don't understand how the statistical tools work, you shouldn't be using them (without help, anyway). Would you feel comfortable about me playing in your chemistry lab based on my year of college chemistry ~45 years ago? Bert Gunter Genentech Nonclinical Biostatistics -----Original Message----- From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org] On Behalf Of Benoit Boulinguiez Sent: Tuesday, December 22, 2009 9:10 AM To: r-help at r-project.org Subject: [R] use of lm() and poly() Hi all, I want to fit data called "metal" with a polynominal function as dP ~ a.0 + a.1 * U0 + a.2 * U0^2 + a.3 * U0^3 + a.4 * U0^4 The data set includes, the independant variable U0 and the dependant variable dP. I've seen that the combination of lm() and poly() can do that instead of using the nls() function. But I don't get how to interpret the results from the linear regression, as the coefficients do not match the ones from the nonlinear regression #data metal U0 dP 1 0.00 0 2 0.76 10 3 1.43 20 4 2.56 40 5 3.05 50 6 3.52 60 7 3.76 70 8 4.05 80 9 4.24 90 10 4.47 100 #linear d <- seq(0, 4, length.out = 200) for(degree in 1:4) { fm <- lm(dP ~ poly(U0, degree), data = metal) assign(paste("metal", degree, sep="."), fm) lines(d, predict(fm, data.frame(U0=d)), col = degree) } metal.4 Call: lm(formula = dP ~ poly(U0, degree), data = metal) Coefficients: (Intercept) poly(U0, degree)1 poly(U0, degree)2 poly(U0, degree)3 poly(U0, degree)4 52.000 100.612 19.340 7.101 2.628 #nonlinear fm<-nls (dP~ a.0 + a.1*U0 + a.2*U0^2 + a.3*U0^3 + a.4*U0^4, data=metal) Nonlinear regression model model: dP ~ a.0 + a.1 * U0 + a.2 * U0^2 + a.3 * U0^3 + a.4 * U0^4 data: metal a.0 a.1 a.2 a.3 a.4 0.02408 9.81452 5.54269 -2.24657 0.36737 residual sum-of-squares: 5.843 Number of iterations to convergence: 2 Achieved convergence tolerance: 1.378e-06 Regards/Cordialement ------------- Benoit Boulinguiez Ph.D student Ecole de Chimie de Rennes (ENSCR) Bureau 1.20 Equipe CIP UMR CNRS 6226 "Sciences Chimiques de Rennes" Avenue du Giniral Leclerc CS 50837 35708 Rennes CEDEX 7 Tel 33 (0)2 23 23 80 83 Fax 33 (0)2 23 23 81 20 <http://www.ensc-rennes.fr/> http://www.ensc-rennes.fr/ [[alternative HTML version deleted]]