@@ -121,6 +121,8 @@ struct Likelihood{K,X} <: AbstractLikelihood
121
121
Likelihood (μ, x) = Likelihood (kernel (μ), x)
122
122
end
123
123
124
+ (lik:: AbstractLikelihood )(p) = exp (ULogarithmic, logdensityof (lik. k (p), lik. x))
125
+
124
126
DensityInterface. DensityKind (:: AbstractLikelihood ) = IsDensity ()
125
127
126
128
function Pretty. quoteof (ℓ:: Likelihood )
@@ -146,24 +148,24 @@ end
146
148
147
149
# basemeasure(ℓ::Likelihood) = @error "Likelihood requires local base measure"
148
150
149
- export likelihood
151
+ export likelihoodof
150
152
151
153
"""
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)
154
156
155
157
A likelihood is *not* a measure. Rather, a likelihood acts on a measure, through
156
158
the "pointwise product" `⊙`, yielding another measure.
157
159
"""
158
- function likelihood end
160
+ function likelihoodof end
159
161
160
- likelihood (k, x, :: NamedTuple{()} ) = Likelihood (k, x)
162
+ likelihoodof (k, x, :: NamedTuple{()} ) = Likelihood (k, x)
161
163
162
- likelihood (k, x; kwargs... ) = likelihood (k, x, NamedTuple (kwargs))
164
+ likelihoodof (k, x; kwargs... ) = likelihoodof (k, x, NamedTuple (kwargs))
163
165
164
- likelihood (k, x, pars:: NamedTuple ) = likelihood (kernel (k, pars), x)
166
+ likelihoodof (k, x, pars:: NamedTuple ) = likelihoodof (kernel (k, pars), x)
165
167
166
- likelihood (k:: AbstractTransitionKernel , x) = Likelihood (k, x)
168
+ likelihoodof (k:: AbstractTransitionKernel , x) = Likelihood (k, x)
167
169
168
170
export log_likelihood_ratio
169
171
@@ -182,4 +184,22 @@ more efficient than
182
184
"""
183
185
log_likelihood_ratio (ℓ:: Likelihood , p, q) = logdensity_rel (ℓ. k (p), ℓ. k (q), ℓ. x)
184
186
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