Docs
Loading...
Searching...
No Matches
continuos_covariate_module_cache.hpp
Go to the documentation of this file.
1
5
6#pragma once
7
11#include <cmath>
12#include <vector>
13
27protected:
33 const Data &data;
34
36
38
43 const bool fixed_v;
44 const double m;
45 const double B;
46 const double v;
47 const double nu;
48 const double S0;
49
51
56
62 ContinuosCache::ClusterStats compute_cluster_statistics(const Eigen::Ref<const Eigen::VectorXi> obs) const;
63
96 double compute_log_marginal_likelihood_NN(const ContinuosCache::ClusterStats &stats) const __attribute__((hot));
97
114 double compute_log_marginal_likelihood_NNIG(const ContinuosCache::ClusterStats &stats) const __attribute__((hot));
115
133 double compute_predictive_NN(const ContinuosCache::ClusterStats &stats, double covariate_val) const;
134
154 double compute_predictive_NNIG(const ContinuosCache::ClusterStats &stats, double covariate_val) const;
155
164 inline double compute_log_marginal_likelihood(const ContinuosCache::ClusterStats &stats) const __attribute__((hot, always_inline)) {
165 if (fixed_v) {
167 } else {
169 }
170 }
171
180 inline double compute_log_predictive_likelihood(const ContinuosCache::ClusterStats &stats, double covariate_val) const
181 __attribute__((hot, always_inline)) {
182 if (fixed_v) {
183 return compute_predictive_NN(stats, covariate_val);
184 } else {
185 return compute_predictive_NNIG(stats, covariate_val);
186 }
187 }
188
190
195
196 const double Bv;
197
198 const double log_B;
199 const double log_v;
200
201 const double const_term;
202
203 const double lgamma_nu;
204 const double nu_logS0;
205
206 std::vector<double> log_v_plus_nB;
207 std::vector<double> lgamma_nu_n;
208
210
211public:
226 ContinuosCovariatesModuleCache(const Data &data_, const ContinuosCache &continuos_cache_, bool fixed_v_,
227 double m_ = 0, double B_ = 1.0, double v_ = 1.0, double nu_ = 1.0, double S0_ = 1.0,
228 const Eigen::VectorXi *old_alloc_provider = {},
229 const std::unordered_map<int, std::vector<int>> *old_cluster_members_provider_ = {})
230 : data(data_), continuos_cache(continuos_cache_), fixed_v(fixed_v_), m(m_), B(B_), v(v_), nu(nu_), S0(S0_),
231 Module(old_alloc_provider, old_cluster_members_provider_),
232 // Initialize constants here in the list
233 Bv(B * v), log_B(std::log(B)), log_v(std::log(v)), const_term(-0.5 * std::log(2.0 * M_PI)),
234 lgamma_nu(std::lgamma(nu)), nu_logS0(nu * std::log(S0)) {
235
236 // Precompute caches for efficiency if needed
237 if (fixed_v) {
238 log_v_plus_nB.reserve(data_.get_n() + 1);
239 for (int n = 0; n <= data_.get_n(); ++n) {
240 log_v_plus_nB.push_back(std::log(v + n * B));
241 }
242 } else {
243 lgamma_nu_n.reserve(data_.get_n() + 1);
244 for (int n = 0; n <= data_.get_n(); ++n) {
245 lgamma_nu_n.push_back(std::lgamma(nu + 0.5 * static_cast<double>(n)));
246 }
247 }
248 }
249
254
275 double compute_similarity_cls(int cls_idx, bool old_allo = false) const;
276
290 double compute_similarity_obs(int obs_idx, int cls_idx) const __attribute__((hot));
291
301 Eigen::VectorXd compute_similarity_obs(int obs_idx) const;
302
304};
Data structure for managing point distances and cluster allocations.
Base class for modules used in processes.
Cache for spatial model with continuous covariates.
Definition continuos_cache.hpp:16
const double S0
Prior scale parameter for variance (NNIG).
Definition continuos_covariate_module_cache.hpp:48
const double nu
Prior shape parameter for variance (NNIG).
Definition continuos_covariate_module_cache.hpp:47
const double log_v
Log of observation variance.
Definition continuos_covariate_module_cache.hpp:199
const Data & data
Reference to data object with cluster assignments.
Definition continuos_covariate_module_cache.hpp:33
ContinuosCache::ClusterStats compute_cluster_statistics(const Eigen::Ref< const Eigen::VectorXi > obs) const
Compute cluster statistics for covariate similarity.
Definition continuos_covariate_module_cache.cpp:9
const double v
Observation variance for covariate.
Definition continuos_covariate_module_cache.hpp:46
std::vector< double > log_v_plus_nB
Cache for log(v_plus_nB) for NN.
Definition continuos_covariate_module_cache.hpp:206
ContinuosCovariatesModuleCache(const Data &data_, const ContinuosCache &continuos_cache_, bool fixed_v_, double m_=0, double B_=1.0, double v_=1.0, double nu_=1.0, double S0_=1.0, const Eigen::VectorXi *old_alloc_provider={}, const std::unordered_map< int, std::vector< int > > *old_cluster_members_provider_={})
Constructor for CovariatesModule.
Definition continuos_covariate_module_cache.hpp:226
double compute_similarity_obs(int obs_idx, int cls_idx) const __attribute__((hot))
Compute covariate similarity for a single observation in a cluster.
Definition continuos_covariate_module_cache.cpp:38
double compute_log_marginal_likelihood_NNIG(const ContinuosCache::ClusterStats &stats) const __attribute__((hot))
Compute log marginal likelihood for cluster given covariates.
Definition continuos_covariate_module_cache.cpp:66
const double B
Prior variance for covariate.
Definition continuos_covariate_module_cache.hpp:45
double compute_predictive_NNIG(const ContinuosCache::ClusterStats &stats, double covariate_val) const
Compute log predictive density for a new observation (NNIG model).
Definition continuos_covariate_module_cache.cpp:156
const double nu_logS0
ν log(S₀) for NNIG model (v ~ IG(ν, S₀))
Definition continuos_covariate_module_cache.hpp:204
std::vector< double > lgamma_nu_n
Cache for lgamma(nu_n) for NNIG.
Definition continuos_covariate_module_cache.hpp:207
const double m
Prior mean for covariate.
Definition continuos_covariate_module_cache.hpp:44
const double log_B
Log of prior variance.
Definition continuos_covariate_module_cache.hpp:198
double compute_log_marginal_likelihood(const ContinuosCache::ClusterStats &stats) const __attribute__((hot
Compute log marginal likelihood based on model type.
double compute_predictive_NN(const ContinuosCache::ClusterStats &stats, double covariate_val) const
Compute log predictive density for a new observation (Normal-Normal model).
Definition continuos_covariate_module_cache.cpp:139
double always_inline
Product of prior variance and observation variance.
Definition continuos_covariate_module_cache.hpp:164
double compute_similarity_cls(int cls_idx, bool old_allo=false) const
Compute covariate similarity contribution for a cluster.
Definition continuos_covariate_module_cache.cpp:23
const double lgamma_nu
log Gamma(ν) for NNIG model (v ~ IG(ν, S₀))
Definition continuos_covariate_module_cache.hpp:203
const bool fixed_v
Whether observation variance is fixed (NN) or random (NNIG).
Definition continuos_covariate_module_cache.hpp:43
double compute_log_marginal_likelihood_NN(const ContinuosCache::ClusterStats &stats) const __attribute__((hot))
Compute log marginal likelihood for cluster given covariates.
Definition continuos_covariate_module_cache.cpp:103
const double const_term
Constant term in log likelihood.
Definition continuos_covariate_module_cache.hpp:201
const ContinuosCache & continuos_cache
Reference to covariate cache for precomputed stats.
Definition continuos_covariate_module_cache.hpp:35
Manages distance matrices and cluster allocations for points.
Definition Data.hpp:27
int get_n() const
Gets the total number of points.
Definition Data.hpp:78
Module(const Eigen::VectorXi *old_allocations_provider_=nullptr, const std::unordered_map< int, std::vector< int > > *old_cluster_members_provider_=nullptr)
Definition Module.hpp:31
Cache for spatial model with continuous covariates.
Structure to hold statistics for each cluster.
Definition continuos_cache.hpp:25