Source code for hstrat.phylogenetic_inference.priors._ArbitraryPrior

import numpy as np

from ._detail import PriorBase


class ArbitraryPrior(PriorBase):
    """Enacts a prior probability density distribution on the generation of the
    most recent common ancestor (MRCA) between extant hereditary stratigraphic
    columns that is arbitrary, but computationally efficient.

    The prior expectation for MRCA generation is taken as equal probability
    within each interval between ranks with common strata retained by both
    extant columns up through the first retained disparity between the columns.

    Prior probability density is assumed uniformly distributed within each
    interval between coincident retained ranks. So, conditioning on the
    assumption that the true generation of the MRCA occurs within a particular
    interval, the prior expected value for the MRCA generation will be the
    midpoint of the interval.

    This prior is simple to compute, but may not meaningfully reflect the
    a reasonable pre-expectation for the MRCA generation. Importantly, the
    enacted prior expectation will depend directly on the instrumentation used
    (i.e., the distribution of coincident retained strata induced by the chosen
    stratum retention policy). For example, a wide interval between coincident
    retained ranks and a short interval between coincident retained ranks will
    be assigned equal prior probability, resulting in greater per-generation
    prior probability within the small window than within a wide window.

    This prior policy guarantees the maximum likelihood estimate to fall
    between the last retained commonality and the first retained disparity of
    two extant columns. Because each interval between coincident retained ranks
    has equal prior probability, the likelihood of the true MRCA falling within
    preceding intervals strictly decreases with qualification by spurious
    differentia collisions (i.e., common retained strata). This property makes
    maximum likelihood estimation under this prior especially efficient.
    """

[docs] def CalcIntervalProbabilityProxy( self: "ArbitraryPrior", begin_rank: int, end_rank: int ) -> float: """Characterize the prior probability of the MRCA generation falling within an interval range. Parameters ---------- begin_rank : int The starting rank of the interval, inclusive. end_rank : int The ending rank of the interval, exclusive. Returns ------- float The proxy statistic, proportional to the true estimated interval probability of the MRCA value by a fixed (but unspecified) constant proportion. """ return 1.0
[docs] def CalcIntervalConditionedMean( self: "ArbitraryPrior", begin_rank: int, end_rank: int ) -> float: """Calculate the centriod of prior probability mass within an interval of possible MRCA generations. Parameters ---------- begin_rank : int The starting rank of the interval, inclusive. end_rank : int The ending rank of the interval, exclusive. Returns ------- float The prior expected generation of MRCA conditioned on the assumption that the MRCA falls within the given interval. """ return np.mean((begin_rank, end_rank - 1.0))
[docs] def SampleIntervalConditionedValue( self: "ArbitraryPrior", begin_rank: int, end_rank: int ) -> int: """Sample a generation of the MRCA conditioned on the assumption that the MRCA falls within the given interval. Parameters ---------- begin_rank : int The starting rank of the interval, inclusive. end_rank : int The ending rank of the interval, exclusive. Returns ------- int A sampled generation of the MRCA, conditioned on the assumption that the MRCA falls within the given interval. """ return np.random.uniform(begin_rank, end_rank - 1.0)