Leeds-MRG / Minos

SIPHER Microsimulation for estimating the effect on Income policy on mental health.
MIT License
3 stars 2 forks source link

Fix cross validation after `randomise_fixed_effects` broke it #438

Open ld-archer opened 2 months ago

ld-archer commented 2 months ago

Cross validation on default run is not currently working, hitting the following error:

Started simulation setup at 2024-04-23 11:19:26
2024-04-23 11:19:26.102 | DEBUG    | vivarium.framework.values:register_value_modifier:392 - Registering metrics.1.population_manager.metrics as modifier to metrics
2024-04-23 11:19:47.610 | DEBUG    | vivarium.framework.values:_register_value_producer:338 - Registering value pipeline mortality_rate
2024-04-23 11:20:25.850 | DEBUG    | vivarium.framework.values:_register_value_producer:338 - Registering value pipeline fertility rate
2024-04-23 11:20:25.887 | DEBUG    | vivarium.framework.values:_register_value_producer:338 - Registering value pipeline metrics
Simulation loop start at 2024-04-23 11:20:26
Saved initial data to:  output/cv/default1/baseline/2024_04_23_11_19_22/2015.csv
2024-04-23 11:20:26.180 | DEBUG    | vivarium.framework.engine:step:172 - 2015-10-15 00:00:00
Traceback (most recent call last):
  File "/home/luke/Documents/WORK/MINOS/Minos/scripts/run.py", line 197, in <module>
    run(args)
  File "/home/luke/Documents/WORK/MINOS/Minos/scripts/run.py", line 160, in run
    RunPipeline(config)
  File "/home/luke/Documents/WORK/MINOS/Minos/minos/minosPipeline/RunPipeline.py", line 421, in RunPipeline
    simulation.run_for(duration=pd.Timedelta(days=365.25))
  File "/home/luke/miniconda3/envs/minos_conda/lib/python3.9/site-packages/vivarium/interface/interactive.py", line 100, in run_for
    return self.run_until(self._clock.time + duration, with_logging=with_logging)
  File "/home/luke/miniconda3/envs/minos_conda/lib/python3.9/site-packages/vivarium/interface/interactive.py", line 124, in run_until
    self.take_steps(number_of_steps=iterations, with_logging=with_logging)
  File "/home/luke/miniconda3/envs/minos_conda/lib/python3.9/site-packages/vivarium/interface/interactive.py", line 153, in take_steps
    self.step(step_size)
  File "/home/luke/miniconda3/envs/minos_conda/lib/python3.9/site-packages/vivarium/interface/interactive.py", line 61, in step
    super().step()
  File "/home/luke/miniconda3/envs/minos_conda/lib/python3.9/site-packages/vivarium/framework/engine.py", line 175, in step
    self.time_step_emitters[event](self._population.get_population(True).index)
  File "/home/luke/miniconda3/envs/minos_conda/lib/python3.9/site-packages/vivarium/framework/lifecycle.py", line 384, in _wrapped
    return method.__func__(*args, **kwargs)
  File "/home/luke/miniconda3/envs/minos_conda/lib/python3.9/site-packages/vivarium/framework/event.py", line 122, in emit
    listener(e)
  File "/home/luke/Documents/WORK/MINOS/Minos/minos/modules/tobacco.py", line 101, in on_time_step
    newWaveTobacco = pd.DataFrame(self.calculate_tobacco(pop))
  File "/home/luke/Documents/WORK/MINOS/Minos/minos/modules/tobacco.py", line 142, in calculate_tobacco
    self.transition_model = r_utils.randomise_fixed_effects(self.transition_model, self.rpy2Modules, "zip")
  File "/home/luke/Documents/WORK/MINOS/Minos/minos/modules/r_utils.py", line 658, in randomise_fixed_effects
    new_count_beta = MASS.mvrnorm(1, count_betas, count_Sigma)
  File "/home/luke/miniconda3/envs/minos_conda/lib/python3.9/site-packages/rpy2/robjects/functions.py", line 208, in __call__
    return (super(SignatureTranslatedFunction, self)
  File "/home/luke/miniconda3/envs/minos_conda/lib/python3.9/site-packages/rpy2/robjects/functions.py", line 131, in __call__
    res = super(Function, self).__call__(*new_args, **new_kwargs)
  File "/home/luke/miniconda3/envs/minos_conda/lib/python3.9/site-packages/rpy2/rinterface_lib/conversion.py", line 45, in _
    cdata = function(*args, **kwargs)
  File "/home/luke/miniconda3/envs/minos_conda/lib/python3.9/site-packages/rpy2/rinterface.py", line 869, in __call__
    raise embedded.RRuntimeError(_rinterface._geterrmessage())
rpy2.rinterface_lib.embedded.RRuntimeError: Error in (function (n = 1, mu, Sigma, tol = 1e-06, empirical = FALSE,  : 
  'Sigma' is not positive definite