Find Crossover Points of Two Spline Functions

5 messages
Open this post in threaded view
|

Find Crossover Points of Two Spline Functions

 Good day, I have two probability densities, each with a function determined by splinefun(densityResult[['x']], densityResult[['y']], "natural"), where densityResult is the output of the density function in stats. How can I determine all of the x values at which the densities cross ? -------------------------------------- Dario Strbenac PhD Student University of Sydney Camperdown NSW 2050 Australia ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

Re: Find Crossover Points of Two Spline Functions

 Dario Strbenac uni.sydney.edu.au> writes: > > Good day, > > I have two probability densities, each with a function determined > by splinefun(densityResult[['x']], > densityResult[['y']], "natural"), where densityResult is the > output of the density function in stats. > How can I determine all of the x values at which the densities cross ? >   My initial thought was this is non-trivial, because the two densities could cross (or nearly-but-not-quite cross) at an unlimited number of points. I thought it would essentially boils down to "how do I find all the roots of an arbitrary (continuous, smooth) function?   However, after thinking about it for a few more seconds I realize that at least the functions are piecewise cubic.  I still don't see a *convenient* way to do it ... if the knots were all coincident between the two densities (maybe you could constrain them to be so?) then you just have a difference of cubics within each segment, and you can use polyroot() to find the roots (and throw out any that are complex or don't fall within the segment).   If the knots are not coincident it's more of a pain but you should still be able to do it by considering overlapping segments ... ______________________________________________ [hidden email] mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.
Open this post in threaded view
|

Re: Find Crossover Points of Two Spline Functions

 Use ?uniroot to do it numerically instead of polyroot()? Cheers, Bert Bert Gunter "Data is not information. Information is not knowledge. And knowledge is certainly not wisdom."    -- Clifford Stoll On Mon, Sep 28, 2015 at 9:17 AM, Ben Bolker <[hidden email]> wrote: > Dario Strbenac uni.sydney.edu.au> writes: > >> >> Good day, >> >> I have two probability densities, each with a function determined >> by splinefun(densityResult[['x']], >> densityResult[['y']], "natural"), where densityResult is the >> output of the density function in stats. >> How can I determine all of the x values at which the densities cross ? >> > >   My initial thought was this is non-trivial, because the two densities could > cross (or nearly-but-not-quite cross) at an unlimited number of points. > I thought it would essentially boils down to "how do I find all > the roots of an arbitrary (continuous, smooth) function? > >   However, after thinking about it for a few more seconds I realize > that at least the functions are piecewise cubic.  I still don't see > a *convenient* way to do it ... if the knots were all coincident between > the two densities (maybe you could constrain them to be so?) then you > just have a difference of cubics within each segment, and you can use > polyroot() to find the roots (and throw out any that are complex or > don't fall within the segment). >   If the knots are not coincident it's more of a pain but you should > still be able to do it by considering overlapping segments ... > > ______________________________________________ > [hidden email] mailing list -- To UNSUBSCRIBE and more, see > 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 -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-helpPLEASE do read the posting guide http://www.R-project.org/posting-guide.htmland provide commented, minimal, self-contained, reproducible code.