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 <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.