14#include <unordered_set>
19using OptionalRange = std::optional<std::reference_wrapper<const hgps::core::DoubleInterval>>;
22 std::optional<std::reference_wrapper<const std::vector<hgps::core::DoubleInterval>>>;
37 return static_cast<int>(lhs) ==
static_cast<int>(rhs);
73 std::shared_ptr<RiskFactorSexAgeTable> expected,
74 std::shared_ptr<std::unordered_map<core::Identifier, double>> expected_trend,
75 std::shared_ptr<std::unordered_map<core::Identifier, int>> trend_steps,
77 std::shared_ptr<std::unordered_map<core::Identifier, double>> expected_income_trend =
79 std::shared_ptr<std::unordered_map<core::Identifier, double>>
80 expected_income_trend_decay_factors =
nullptr);
92 bool apply_trend)
const;
100 RuntimeContext &context,
const std::vector<core::Identifier> &factors,
101 OptionalRanges ranges,
bool apply_trend,
103 std::optional<std::size_t> income_stratum_filter = std::nullopt,
104 std::vector<IncomeStratumAdjustmentExampleRow> *debug_example_rows =
nullptr)
const;
113 const std::shared_ptr<std::unordered_map<core::Identifier, double>> &
115 return expected_trend_;
129 RuntimeContext &context,
const std::vector<core::Identifier> &factors,
130 OptionalRanges ranges,
bool apply_trend,
132 std::optional<std::size_t> income_stratum_filter = std::nullopt,
133 std::vector<IncomeStratumAdjustmentExampleRow> *debug_delta_rows =
nullptr)
const;
137 const std::vector<core::Identifier> &factors,
138 const std::unordered_set<core::Identifier> &logistic_factors = {},
139 std::optional<std::size_t> income_stratum_filter = std::nullopt);
141 std::shared_ptr<RiskFactorSexAgeTable> expected_;
142 std::shared_ptr<std::unordered_map<core::Identifier, double>> expected_trend_;
143 std::shared_ptr<std::unordered_map<core::Identifier, int>> trend_steps_;
149 std::shared_ptr<std::unordered_map<core::Identifier, double>> expected_income_trend_;
150 std::shared_ptr<std::unordered_map<core::Identifier, double>>
151 expected_income_trend_decay_factors_;
154 std::unordered_set<core::Identifier> logistic_factors_;
170 std::unique_ptr<RiskFactorSexAgeTable> expected,
171 std::unique_ptr<std::unordered_map<core::Identifier, double>> expected_trend,
172 std::unique_ptr<std::unordered_map<core::Identifier, int>> trend_steps,
178 std::shared_ptr<std::unordered_map<core::Identifier, int>>
trend_steps_;
Defines the two-dimensional map (lookup table) data type.
Definition map2d.h:14
Defines the virtual population data type.
Definition population.h:19
Risk factor adjustable model definition interface.
Definition risk_factor_adjustable_model.h:158
TrendType trend_type_
Definition risk_factor_adjustable_model.h:179
std::shared_ptr< std::unordered_map< core::Identifier, double > > expected_trend_
Definition risk_factor_adjustable_model.h:177
std::shared_ptr< std::unordered_map< core::Identifier, int > > trend_steps_
Definition risk_factor_adjustable_model.h:178
~RiskFactorAdjustableModelDefinition() override=default
Destroys a RiskFactorAdjustableModelDefinition instance.
std::shared_ptr< RiskFactorSexAgeTable > expected_
Definition risk_factor_adjustable_model.h:176
Risk factor model interface with mean adjustment by sex and age.
Definition risk_factor_adjustable_model.h:63
virtual double get_expected(RuntimeContext &context, core::Gender sex, int age, const core::Identifier &factor, OptionalRange range, bool apply_trend) const
Gets a person's expected risk factor value.
Definition risk_factor_adjustable_model.cpp:85
const std::shared_ptr< std::unordered_map< core::Identifier, double > > & get_expected_trend() const noexcept
Gets the expected trend values.
Definition risk_factor_adjustable_model.h:114
int get_trend_steps(const core::Identifier &factor) const
Gets the number of time steps to apply the trend.
Definition risk_factor_adjustable_model.cpp:433
void set_logistic_factors(const std::unordered_set< core::Identifier > &logistic_factors)
Sets the logistic factors for simulated mean calculation.
Definition risk_factor_adjustable_model.cpp:440
void adjust_risk_factors(RuntimeContext &context, const std::vector< core::Identifier > &factors, OptionalRanges ranges, bool apply_trend, const RiskFactorSexAgeTable *expected_override=nullptr, std::optional< std::size_t > income_stratum_filter=std::nullopt, std::vector< IncomeStratumAdjustmentExampleRow > *debug_example_rows=nullptr) const
Adjust risk factors such that mean sim value matches expected value.
Definition risk_factor_adjustable_model.cpp:143
Risk factor model definition interface.
Definition risk_factor_model.h:44
Risk factor model interface.
Definition risk_factor_model.h:21
Defines the Simulation runtime context data type.
Definition runtime_context.h:22
Gender
Enumerates gender types.
Definition forward_type.h:18
Top-level namespace for Health-GPS Console host application.
Definition command_options.cpp:8
bool operator!=(TrendType lhs, TrendType rhs) noexcept
Inequality comparison operator for TrendType.
Definition risk_factor_adjustable_model.h:41
bool operator==(TrendType lhs, TrendType rhs) noexcept
Equality comparison operator for TrendType.
Definition risk_factor_adjustable_model.h:36
TrendType
Defines the trend type enumeration for factors mean adjustment.
Definition risk_factor_adjustable_model.h:29
@ IncomeTrend
Income-based trends applied to factors mean adjustment.
@ Null
No trends applied to factors mean adjustment.
@ UPFTrend
UPF (ultra-processed food) trends; config: "upf_trend", "trend" or "UPFTrend".
One debug row showing stratum expected/simulated delta and one sample applied update.
Definition risk_factor_adjustable_model.h:47
std::size_t bucket
Definition risk_factor_adjustable_model.h:48
std::string sex
Definition risk_factor_adjustable_model.h:51
double simulated_mean
Definition risk_factor_adjustable_model.h:54
double after_delta_value
Definition risk_factor_adjustable_model.h:58
int age
Definition risk_factor_adjustable_model.h:52
double expected_value
Definition risk_factor_adjustable_model.h:53
double delta
Definition risk_factor_adjustable_model.h:55
std::string stratum_id
Definition risk_factor_adjustable_model.h:49
std::size_t person_id
Definition risk_factor_adjustable_model.h:56
double final_value
Definition risk_factor_adjustable_model.h:59
double current_value
Definition risk_factor_adjustable_model.h:57
std::string factor
Definition risk_factor_adjustable_model.h:50
Entity unique identifier data type.
Definition identifier.h:20