[R] Find Crossover Points of Two Spline Functions

Bert Gunter bgunter.4567 at gmail.com
Mon Sep 28 18:36:10 CEST 2015

Use ?uniroot to do it numerically instead of polyroot()?

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 <bbolker at gmail.com> wrote:
> Dario Strbenac <dstr7320 <at> 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 ...
> ______________________________________________
> R-help at r-project.org 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.

More information about the R-help mailing list