Prior Marginalization
Use PriorMarginalizedTempoTask to marginalize over a parameter using a prior and a node rule. It chains or independently executes a series of runs with per-node overrides, aggregating results.
Current support boundary:
- serial node execution is implemented
scheduler = :distributedis reserved for future workkeep_node_dirsis currently an advisory setting rather than an enforced cleanup policy
Settings
PriorMarginalizationSettingscontrols the parameter (parameter::Symbol), the prior (AnalyticPrior | GridPrior | SampledPrior), node selection (e.g.,ClenshawCurtisNodes), and execution options (PriorExecutionOptions).- Likelihood source and representative can be customized (e.g.,
:chi2_fit,:prior_median).
Example
using Distributions: Normal
base = BasicTempoTask(TempoRunSettings(
work_dir="/abs/work",
par_input="a.par",
tim_input="a.tim",
par_output="a_out.par",
tempo_version=Tempo2("/path/to/TEMPO2"),
))
ps = PriorMarginalizationSettings(
parameter=:DDOT,
pin_mode=:fixed,
prior=AnalyticPrior(Normal(0.0, 1.0)),
nodes=ClenshawCurtisNodes(6),
likelihood_source=:chi2_fit,
representative=:prior_median,
save_node_results=true,
exec_options = PriorExecutionOptions(mode=:chained, chain_direction=:backward, chain_snapshot_par=true)
)
task = PriorMarginalizedTempoTask(base, ps)
# Uncomment when TEMPO2 and input files are available:
# res = run_task(task)