10#ifndef MULTINOMIAL_LPMF
11#define MULTINOMIAL_LPMF
14#include "../../common/fims_vector.hpp"
15#include "../../common/def.hpp"
17namespace fims_distributions {
36template <
typename Type>
72 this->
lpdf =
static_cast<Type
>(0.0);
75 std::fill(this->
lpdf_vec.begin(), this->lpdf_vec.end(), 0);
76 size_t lpdf_vec_idx = 0;
81 throw std::invalid_argument(
82 "MultinomialLPDF: Vector index out of bounds. The dimension of "
84 "number of rows times the number of columns is of size " +
86 " and the expected vector is of size " +
92 throw std::invalid_argument(
93 "MultinomialLPDF: Vector index out of bounds. The dimension of the "
94 "number of rows times the number of columns is of size " +
96 " and the observed vector is of size " +
100 throw std::invalid_argument(
101 "MultinomialLPDF: Vector index out of bounds. The dimension of the "
102 "observed vector of size " +
104 " and the expected vector is of size " +
105 fims::to_string(this->expected_values.size()));
109 for (
size_t i = 0; i <
dims[0]; i++) {
117 bool containsNA =
false;
120 for (
size_t j = 0; j <
dims[1]; j++) {
125 static_cast<size_t>(j)) ==
131 size_t idx = (i *
dims[1]) + j;
138 size_t idx = (i *
dims[1]) + j;
145 std::fill(this->
lpdf_vec.begin() + lpdf_vec_idx,
146 this->lpdf_vec.begin() + lpdf_vec_idx +
dims[1],
147 dmultinom(observed_values_vector.
to_tmb(),
148 prob_vector.
to_tmb(),
true));
154 lpdf_vec_idx +=
dims[1];
Definition fims_vector.hpp:27
void resize(size_t s)
Changes the number of elements stored.
Definition fims_vector.hpp:375
std::vector< Type > to_tmb() const
Convert fims::Vector to TMB vector type.
Definition fims_vector.hpp:468
size_type size() const
Returns the number of elements.
Definition fims_vector.hpp:273
Declares the DensityComponentBase class, which is the base class for all distribution functors.
Base class for all module_name functors.
Definition density_components_base.hpp:32
fims::Vector< Type > lpdf_vec
Vector storing observation-level log-likelihood contributions.
Definition density_components_base.hpp:190
fims::Vector< Type > observed_values
Input value of distribution function for priors or random effects.
Definition density_components_base.hpp:61
Type & get_expected(size_t i)
Retrieve one expected value based on input_type and use_mean.
Definition density_components_base.hpp:122
Type lpdf
Total log probability density contribution of the distribution.
Definition density_components_base.hpp:180
fims::Vector< Type > * data_expected_values
Expected value vector for data pathways.
Definition density_components_base.hpp:53
Type & get_observed(size_t i)
Retrieve one observed value based on input_type.
Definition density_components_base.hpp:83
std::string input_type
Classification of the input pathway for this distribution object. Options used by accessor methods ar...
Definition density_components_base.hpp:38
std::shared_ptr< fims_data_object::DataObject< Type > > data_observed_values
Observed data.
Definition density_components_base.hpp:41
Implements the MultinomialLPMF distribution functor used by FIMS to evaluate the observation-level an...
Definition multinomial_lpmf.hpp:37
virtual const Type evaluate()
Evaluates the multinomial log probability mass function.
Definition multinomial_lpmf.hpp:63
virtual ~MultinomialLPMF()
Destructor.
Definition multinomial_lpmf.hpp:50
fims::Vector< size_t > dims
Dimensions of the number of rows and columns of the multivariate dataset.
Definition multinomial_lpmf.hpp:42
MultinomialLPMF()
Constructor.
Definition multinomial_lpmf.hpp:46