@@ -121,6 +121,8 @@ struct Likelihood{K,X} <: AbstractLikelihood
121121 Likelihood (μ, x) = Likelihood (kernel (μ), x)
122122end
123123
124+ (lik:: AbstractLikelihood )(p) = exp (ULogarithmic, logdensityof (lik. k (p), lik. x))
125+
124126DensityInterface. DensityKind (:: AbstractLikelihood ) = IsDensity ()
125127
126128function Pretty. quoteof (ℓ:: Likelihood )
@@ -146,24 +148,24 @@ end
146148
147149# basemeasure(ℓ::Likelihood) = @error "Likelihood requires local base measure"
148150
149- export likelihood
151+ export likelihoodof
150152
151153"""
152- likelihood (k::AbstractTransitionKernel, x; constraints...)
153- likelihood (k::AbstractTransitionKernel, x, constraints::NamedTuple)
154+ likelihoodof (k::AbstractTransitionKernel, x; constraints...)
155+ likelihoodof (k::AbstractTransitionKernel, x, constraints::NamedTuple)
154156
155157A likelihood is *not* a measure. Rather, a likelihood acts on a measure, through
156158the "pointwise product" `⊙`, yielding another measure.
157159"""
158- function likelihood end
160+ function likelihoodof end
159161
160- likelihood (k, x, :: NamedTuple{()} ) = Likelihood (k, x)
162+ likelihoodof (k, x, :: NamedTuple{()} ) = Likelihood (k, x)
161163
162- likelihood (k, x; kwargs... ) = likelihood (k, x, NamedTuple (kwargs))
164+ likelihoodof (k, x; kwargs... ) = likelihoodof (k, x, NamedTuple (kwargs))
163165
164- likelihood (k, x, pars:: NamedTuple ) = likelihood (kernel (k, pars), x)
166+ likelihoodof (k, x, pars:: NamedTuple ) = likelihoodof (kernel (k, pars), x)
165167
166- likelihood (k:: AbstractTransitionKernel , x) = Likelihood (k, x)
168+ likelihoodof (k:: AbstractTransitionKernel , x) = Likelihood (k, x)
167169
168170export log_likelihood_ratio
169171
@@ -182,4 +184,22 @@ more efficient than
182184"""
183185log_likelihood_ratio (ℓ:: Likelihood , p, q) = logdensity_rel (ℓ. k (p), ℓ. k (q), ℓ. x)
184186
185- # likelihood(k, x; kwargs...) = likelihood(k, x, NamedTuple(kwargs))
187+ # likelihoodof(k, x; kwargs...) = likelihoodof(k, x, NamedTuple(kwargs))
188+
189+ export likelihood_ratio
190+
191+ """
192+ likelihood_ratio(ℓ::Likelihood, p, q)
193+
194+ Compute the log of the likelihood ratio, in order to compare two choices for
195+ parameters. This is equal to
196+
197+ density_rel(ℓ.k(p), ℓ.k(q), ℓ.x)
198+
199+ but is computed using LogarithmicNumbers.jl to avoid underflow and overflow.
200+ Since `density_rel` can leave common base measure unevaluated, this can be
201+ more efficient than
202+
203+ logdensityof(ℓ.k(p), ℓ.x) - logdensityof(ℓ.k(q), ℓ.x)
204+ """
205+ likelihood_ratio (ℓ:: Likelihood , p, q) = exp (ULogarithmic, logdensity_rel (ℓ. k (p), ℓ. k (q), ℓ. x))
0 commit comments