Polynomial fitting

classic Classic list List threaded Threaded
5 messages Options
mfa
Reply | Threaded
Open this post in threaded view
|

Polynomial fitting

mfa
Hello,

i'm fairly familiar with R and use it every now and then for math related tasks.

I have a simple non polynomial function that i would like to approximate with a polynomial. I already looked into poly, but was unable to understand what to do with it. So my problem is this. I can generate virtually any number of datapoints and would like to find the coeffs a1, a2, ... up to a given degree for a polynomial a1x^1 + a2x^2 + ... that approximates my simple function. How can i do this with R?

Your help will be highly appreciated!
Reply | Threaded
Open this post in threaded view
|

Re: Polynomial fitting

Gerrit Eichner
Hello, mfa (Matti?),

if x and y contain the coordinates of your data points and k is the wanted
polynomial degree, then

fit <- lm( y ~ poly( x, k))

fits orthonormal polynomials up to degree k to your data. Using

dummy.coef( fit)

should give the coefficients you are interested in.

  Hth  --  Gerrit

On Thu, 7 Jul 2011, mfa wrote:

> Hello,
>
> i'm fairly familiar with R and use it every now and then for math related
> tasks.
>
> I have a simple non polynomial function that i would like to approximate
> with a polynomial. I already looked into poly, but was unable to understand
> what to do with it. So my problem is this. I can generate virtually any
> number of datapoints and would like to find the coeffs a1, a2, ... up to a
> given degree for a polynomial a1x^1 + a2x^2 + ... that approximates my
> simple function. How can i do this with R?
>
> Your help will be highly appreciated!
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Polynomial-fitting-tp3652816p3652816.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
---------------------------------------------------------------------
Dr. Gerrit Eichner                   Mathematical Institute, Room 212
[hidden email]   Justus-Liebig-University Giessen
Tel: +49-(0)641-99-32104          Arndtstr. 2, 35392 Giessen, Germany
Fax: +49-(0)641-99-32109        http://www.uni-giessen.de/cms/eichner

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
mfa
Reply | Threaded
Open this post in threaded view
|

Re: Polynomial fitting

mfa
Thank you Gerrit for the quick reply! And yes, i'm Matti.

I can get the coeffs now, though i'm not sure whether i'm doing
something wrong or whether poly is just not the right method for what
i'm trying to find. I will look into this more closely and give it
another try.

Is poly best for fitting on noisy data that's been generated by a
polynomial and not that good for approximating an arbitrary function? I
tried a least squares fitting with a web applet and got all exited
because the approximation looked quite promising. I understand that R is
designed mainly for statistical computing and may not be the best tool
for my purposes. Before i look elsewhere i would like to ask if there is
some other R method i should try, perhaps a least squares approximation?

Thank you for your help!

Matti Jokipii

08.07.2011 08:25, Gerrit Eichner kirjoitti:

> Hello, mfa (Matti?),
>
> if x and y contain the coordinates of your data points and k is the
> wanted polynomial degree, then
>
> fit <- lm( y ~ poly( x, k))
>
> fits orthonormal polynomials up to degree k to your data. Using
>
> dummy.coef( fit)
>
> should give the coefficients you are interested in.
>
> Hth -- Gerrit
>
> On Thu, 7 Jul 2011, mfa wrote:
>
>> Hello,
>>
>> i'm fairly familiar with R and use it every now and then for math related
>> tasks.
>>
>> I have a simple non polynomial function that i would like to approximate
>> with a polynomial. I already looked into poly, but was unable to
>> understand
>> what to do with it. So my problem is this. I can generate virtually any
>> number of datapoints and would like to find the coeffs a1, a2, ... up
>> to a
>> given degree for a polynomial a1x^1 + a2x^2 + ... that approximates my
>> simple function. How can i do this with R?
>>
>> Your help will be highly appreciated!
>>
>> --
>> View this message in context:
>> http://r.789695.n4.nabble.com/Polynomial-fitting-tp3652816p3652816.html
>> Sent from the R help mailing list archive at Nabble.com.
>>
>> ______________________________________________
>> [hidden email] mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
> ---------------------------------------------------------------------
> Dr. Gerrit Eichner Mathematical Institute, Room 212
> [hidden email] Justus-Liebig-University Giessen
> Tel: +49-(0)641-99-32104 Arndtstr. 2, 35392 Giessen, Germany
> Fax: +49-(0)641-99-32109 http://www.uni-giessen.de/cms/eichner
> ---------------------------------------------------------------------
>

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Reply | Threaded
Open this post in threaded view
|

Re: Polynomial fitting

Berry Boessenkool


Hey Matti,

lm() _is_ a least square approximation.
Did you notivce in the poly-help you'll probably need to set raw=TRUE ?
Helped me a lot once I figured that one out...
check this:

a <- c(-5:10)  ;  b <- 5*a^3 + 2*a^2 - 7*a + 3  + rnorm(15, 0, 100)
data.frame(a,b)
modell <- lm(b ~  poly(a,3, raw=T))     ;    modell
plot(a,b)  ; lines(a, predict(modell))

now try this with raw=FALSE. The graph will look the same, but the coefficients are normalized and centered.
Notice that the value estimated for the intercept is quite different form the "real" intercept (3), as the random numbers added have great variation (sd=100).
The other coefficents are closer to the "real" ones. Note also, that they are printed in reverse order than specified in b <- ...

A way to avoid the whole polyfunction altogether is:

lm(b ~ I(a^3) + I(a^2) + a)

You decide what's more elegant...

Hope this helps,
Berry

-------------------------------------
Berry Boessenkool
Potsdam
-------------------------------------


> Date: Fri, 8 Jul 2011 21:12:46 +0300
> From: [hidden email]
> To: [hidden email]
> CC: [hidden email]
> Subject: Re: [R] Polynomial fitting
>
> Thank you Gerrit for the quick reply! And yes, i'm Matti.
>
> I can get the coeffs now, though i'm not sure whether i'm doing
> something wrong or whether poly is just not the right method for what
> i'm trying to find. I will look into this more closely and give it
> another try.
>
> Is poly best for fitting on noisy data that's been generated by a
> polynomial and not that good for approximating an arbitrary function? I
> tried a least squares fitting with a web applet and got all exited
> because the approximation looked quite promising. I understand that R is
> designed mainly for statistical computing and may not be the best tool
> for my purposes. Before i look elsewhere i would like to ask if there is
> some other R method i should try, perhaps a least squares approximation?
>
[[elided Hotmail spam]]

>
> Matti Jokipii
>
> 08.07.2011 08:25, Gerrit Eichner kirjoitti:
> > Hello, mfa (Matti?),
> >
> > if x and y contain the coordinates of your data points and k is the
> > wanted polynomial degree, then
> >
> > fit <- lm( y ~ poly( x, k))
> >
> > fits orthonormal polynomials up to degree k to your data. Using
> >
> > dummy.coef( fit)
> >
> > should give the coefficients you are interested in.
> >
> > Hth -- Gerrit
> >
> > On Thu, 7 Jul 2011, mfa wrote:
> >
> >> Hello,
> >>
> >> i'm fairly familiar with R and use it every now and then for math related
> >> tasks.
> >>
> >> I have a simple non polynomial function that i would like to approximate
> >> with a polynomial. I already looked into poly, but was unable to
> >> understand
> >> what to do with it. So my problem is this. I can generate virtually any
> >> number of datapoints and would like to find the coeffs a1, a2, ... up
> >> to a
> >> given degree for a polynomial a1x^1 + a2x^2 + ... that approximates my
> >> simple function. How can i do this with R?
> >>
[[elided Hotmail spam]]

> >>
> >> --
> >> View this message in context:
> >> http://r.789695.n4.nabble.com/Polynomial-fitting-tp3652816p3652816.html
> >> Sent from the R help mailing list archive at Nabble.com.
> >>
> >> ______________________________________________
> >> [hidden email] mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-help
> >> PLEASE do read the posting guide
> >> http://www.R-project.org/posting-guide.html
> >> and provide commented, minimal, self-contained, reproducible code.
> >>
> > ---------------------------------------------------------------------
> > Dr. Gerrit Eichner Mathematical Institute, Room 212
> > [hidden email] Justus-Liebig-University Giessen
> > Tel: +49-(0)641-99-32104 Arndtstr. 2, 35392 Giessen, Germany
> > Fax: +49-(0)641-99-32109 http://www.uni-giessen.de/cms/eichner
> > ---------------------------------------------------------------------
> >
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
     
______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
mfa
Reply | Threaded
Open this post in threaded view
|

Re: Polynomial fitting

mfa
Oh yes! raw=T did the trick. I even tried raw=T while i was still trying
to dig up the coeffs directly from poly. It didn't cross my mind after i
learned about "fit<- lm( y ~ poly( x, k))" from Gerrit, and i jumped
into my own false conclusions. Good of you to "guess" that was my
problem. Now the approximation looks absolutely beautiful.

Thank you very much Berry and Gerrit for helping me out on this! I
really really like using R, and i'm so happy for not needing any other
tool for this.

Matti

09.07.2011 16:25, Berry Boessenkool kirjoitti:

>
>
> Hey Matti,
>
> lm() _is_ a least square approximation.
> Did you notivce in the poly-help you'll probably need to set raw=TRUE ?
> Helped me a lot once I figured that one out...
> check this:
>
> a<- c(-5:10)  ;  b<- 5*a^3 + 2*a^2 - 7*a + 3  + rnorm(15, 0, 100)
> data.frame(a,b)
> modell<- lm(b ~  poly(a,3, raw=T))     ;    modell
> plot(a,b)  ; lines(a, predict(modell))
>
> now try this with raw=FALSE. The graph will look the same, but the coefficients are normalized and centered.
> Notice that the value estimated for the intercept is quite different form the "real" intercept (3), as the random numbers added have great variation (sd=100).
> The other coefficents are closer to the "real" ones. Note also, that they are printed in reverse order than specified in b<- ...
>
> A way to avoid the whole polyfunction altogether is:
>
> lm(b ~ I(a^3) + I(a^2) + a)
>
> You decide what's more elegant...
>
> Hope this helps,
> Berry
>
> -------------------------------------
> Berry Boessenkool
> Potsdam
> -------------------------------------
>
>
>> Date: Fri, 8 Jul 2011 21:12:46 +0300
>> From: [hidden email]
>> To: [hidden email]
>> CC: [hidden email]
>> Subject: Re: [R] Polynomial fitting
>>
>> Thank you Gerrit for the quick reply! And yes, i'm Matti.
>>
>> I can get the coeffs now, though i'm not sure whether i'm doing
>> something wrong or whether poly is just not the right method for what
>> i'm trying to find. I will look into this more closely and give it
>> another try.
>>
>> Is poly best for fitting on noisy data that's been generated by a
>> polynomial and not that good for approximating an arbitrary function? I
>> tried a least squares fitting with a web applet and got all exited
>> because the approximation looked quite promising. I understand that R is
>> designed mainly for statistical computing and may not be the best tool
>> for my purposes. Before i look elsewhere i would like to ask if there is
>> some other R method i should try, perhaps a least squares approximation?
>>
>> Thank you for your help!
>>
>> Matti Jokipii
>>
>> 08.07.2011 08:25, Gerrit Eichner kirjoitti:
>>> Hello, mfa (Matti?),
>>>
>>> if x and y contain the coordinates of your data points and k is the
>>> wanted polynomial degree, then
>>>
>>> fit<- lm( y ~ poly( x, k))
>>>
>>> fits orthonormal polynomials up to degree k to your data. Using
>>>
>>> dummy.coef( fit)
>>>
>>> should give the coefficients you are interested in.
>>>
>>> Hth -- Gerrit
>>>
>>> On Thu, 7 Jul 2011, mfa wrote:
>>>
>>>> Hello,
>>>>
>>>> i'm fairly familiar with R and use it every now and then for math related
>>>> tasks.
>>>>
>>>> I have a simple non polynomial function that i would like to approximate
>>>> with a polynomial. I already looked into poly, but was unable to
>>>> understand
>>>> what to do with it. So my problem is this. I can generate virtually any
>>>> number of datapoints and would like to find the coeffs a1, a2, ... up
>>>> to a
>>>> given degree for a polynomial a1x^1 + a2x^2 + ... that approximates my
>>>> simple function. How can i do this with R?
>>>>
>>>> Your help will be highly appreciated!
>>>>
>>>> --
>>>> View this message in context:
>>>> http://r.789695.n4.nabble.com/Polynomial-fitting-tp3652816p3652816.html
>>>> Sent from the R help mailing list archive at Nabble.com.
>>>>
>>>> ______________________________________________
>>>> [hidden email] mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-help
>>>> PLEASE do read the posting guide
>>>> http://www.R-project.org/posting-guide.html
>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>
>>> ---------------------------------------------------------------------
>>> Dr. Gerrit Eichner Mathematical Institute, Room 212
>>> [hidden email] Justus-Liebig-University Giessen
>>> Tel: +49-(0)641-99-32104 Arndtstr. 2, 35392 Giessen, Germany
>>> Fax: +49-(0)641-99-32109 http://www.uni-giessen.de/cms/eichner
>>> ---------------------------------------------------------------------
>>>
>>
>> ______________________________________________
>> [hidden email] mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.