Changelog of @hackage/epi-sim 0.7.0

Changelog for epi-sim

0.7.0

  • Simulation functions (eg simulationWithGenIO) return either the simulated events of the summary produced by the termination handler if the simulation terminated early.
  • The InhomBDSCODPop now records the number of individuals that have been removed and there are getter functions exported to access this information.
  • Add TerminationHandler to provide better control over early termination of simulations. For example, this makes it possible to terminate the simulation early if certain stopping conditions are met and to call a function that summarises why the simulation is being terminated. This will break old code in that the configuration functions provided by the example models all now have an additional parameter of type Maybe TerminationHandler.

0.6.0

  • Improve documentation.
  • Allow a flexible start time of the simulation so it does not assume a start time of zero.
  • Rename a bunch of the simulation functions so their use case is clearer.

0.5.2

  • Include helper functions in Epidemic.Types.Simulation to make it easier to create PRNG with or without a fixed seed.

0.5.1

  • Bug fix and tidy up some code.

0.5.0

  • Add absolute times to the extinction and stopping time events to provide a consistent interface.
  • Add the aggregated function to help aggregated individual level samples into population level samples. This is tested in aggregationTests.
  • Add TimeStamp type class to abstract working with types that have an absolute time associated with them.
  • Add TimeInterval type for working with intervals of time, there are also some helper functions to make it easier to work with intervals.
  • Add the maybeNextTimed helper function and clean up some code in the Time module.
  • Extend ModelParameters class to have an eventWeights to provide a vector of event weights for computing which event actually occurred.

0.4.2

  • Include simulationWithGenIO and add scRequireCherry to the SimulationConfiguration record type to make it easier to control how simulations are conditioned upon particular observations.
  • Documentation.
  • Bug fix in edge case of no sequenced samples.

0.4.1

  • Update the simulationWithSystemRandom function so that this works again.

0.4.0.0

  • The following changes to the EpidemicEvent type will be the real sticking point in moving from 0.3.0.0 to 0.4.0.0:
-- | Events that can occur in an epidemic with their absolute time.
data EpidemicEvent
  = Infection AbsoluteTime Person Person -- ^ infection time, infector, infectee
  | Removal AbsoluteTime Person -- ^ removal without observation
  | Sampling AbsoluteTime Person -- ^ removal and inclusion in phylogeny
  | Catastrophe AbsoluteTime People -- ^ scheduled sampling of lineages
  | Occurrence AbsoluteTime Person -- ^ removal and observed by not in phylogeny
  | Disaster AbsoluteTime People -- ^ scheduled occurrence of lineages
  | Extinction -- ^ epidemic went extinct time time can be recovered from the preceeding removal
  | StoppingTime -- ^ the simulation reached the stopping time
  deriving (Show, Generic, Eq)

becomes

-- | Events that can occur in an epidemic with their absolute time.
data EpidemicEvent
  = Infection AbsoluteTime Infector Infectee
  | Removal AbsoluteTime Person
  | IndividualSample
      { indSampTime :: AbsoluteTime
      , indSampPerson :: Person
      , indSampSeq :: Bool
      }
  | PopulationSample
      { popSampTime :: AbsoluteTime
      , popSampPeople :: People
      , popSampSeq :: Bool
      }
  | Extinction -- ^ epidemic went extinct time time can be recovered from the preceeding removal
  | StoppingTime -- ^ the simulation reached the stopping time
  deriving (Show, Generic, Eq)
  • Remove CSV export, now there is only JSON export. If you want to include an orphan instance for working with cassava the following might be useful
instance Csv.ToRecord EpidemicEvent where
  toRecord e =
    case e of
      (Infection time person1 person2) ->
        Csv.record
          [ "infection"
          , Csv.toField time
          , Csv.toField person1
          , Csv.toField person2
          ]
      (Removal time person) ->
        Csv.record ["removal", Csv.toField time, Csv.toField person, "NA"]
      (Sampling time person) ->
        Csv.record ["sampling", Csv.toField time, Csv.toField person, "NA"]
      (Catastrophe time people) ->
        Csv.record ["catastrophe", Csv.toField time, Csv.toField people, "NA"]
      (Occurrence time person) ->
        Csv.record ["occurrence", Csv.toField time, Csv.toField person, "NA"]
      (Disaster time people) ->
        Csv.record ["disaster", Csv.toField time, Csv.toField people, "NA"]
      Extinction -> Csv.record ["extinction", "NA", "NA", "NA"]
      StoppingTime -> Csv.record ["stop", "NA", "NA", "NA"]
  • Move the Newick material into Epidemic.Types.Newick.
  • Remvoe the TransmissionTree and SampleTree data types because there is already the EpidemicTree and ReconstructedTree in the Epidemic.Types.Events which should be used preferentially.
  • Remove dependency on trifecta since this functionality is not necessary.

0.3.0.0

  • Add an ARCHITECTURE.md file to outline the structure of this package.
  • Move all the temporal types into their own submodule Epidemic.Types.Time so they are easier to isolate.
  • Provide a Epidemic.Types.Observations module to provide the functionality surrounding extracting the observed events from a simulation.
  • Add Extinction and StoppingTime constructors for the EpidemicEvent type so that we can encode why the simulation finished in the events. As a result of this change, every simulation that was not terminated early should end with an Extinction event or a StoppingTime event.
  • Update the resolver to 17.2
  • Extend the ModelParameters class to include a Population parameter type since this is needed to compute event rates in for the logistic model.
  • Create Epidemic.Type.Simulation module for types relating to running generic simulations from the models to avoid confusion as to where these are defined.
  • Move class definitions into corresponding Epidemic.Type.X modules.
  • Add a Epidemic.Model.LogisticBDSD module implementing a logistic birth-death process with unscheduled sampling and scheduled unsequenced sampling.
  • Move the models into a new Epidemic.Model module so that it is clearer that these are really just examples of putting together functionality provided by the rest of the library.
  • Use a new type Identifier to represent identities of people rather than a raw integer this way it is clearer what it really is.
  • Replace Time with AbsoluteTime and TimeDelta types to make it explicit what is being represented.
  • Reduce the number of models that are included to the more interesting subset.

0.2.2.0

  • Clean up for a release candidate.

0.2.1.0

  • Update the stack resolver to lts-16.17 and add bounds on the package versions to use.
  • Remove dependency upon epi-types by moving its modules into this package and include the tests from that package.
  • Remove unused Setup.hs file.

0.2.0.1

  • Improve documentation in Epidemic.BDSCOD.
  • Upgrade to epi-types-0.2.1.2 for the bug fix.

0.2.0.0

  • Predicates such as isSampling and isOccurrence have been replaced with clearer named alternatives: isNonReconTreeObservation and isReconTreeLeaf to avoid uncertainty about whether scheduled events are included.
  • Upgrade to epi-types-0.2.1.0 which adds substantial amounts of Newick functionality meaning this can be removed.

0.1.9.0

  • Upgrade to epi-types-0.2.0.0 which makes a lot of functions redundant so they have been removed.

0.1.8.8

  • Upgrade to epi-types-0.1.1.1 and remove joinTimed since it is no longer needed.

0.1.8.7

  • Upgrade to epi-types-0.1.1.0 and start using the Timed * class.

0.1.8.6

  • Use -j2 to slightly improve compilation time.
  • Include a observedEvents function which was missing from the InhomogeneousBDS module.

0.1.8.5

  • Start using cabal directly without hpack.
  • Move time dependent parameters into a epi-sim package so they are easier to share, and import them here.

0.1.8.4

  • Improve documentation of construction of inhomBDSRates and include a test to check this conforms to expectations.
  • Implement a birth-death-sampling model with time-dependent birth rates and include an example of what this returns in the README.

0.1.8.3

  • Improve error handling in birth-death-lines.R.
  • Refactor some of the plotting code in birth-death-lines.R to make it easier to maintain.
  • Use the future and furrr packages in R to generate the visualisation of a simulation in parallel since the serial version is frustratingly slow. Both packages are on CRAN so it does not seem unreasonable.

0.1.8.2

  • Include an additional parameter in the simulation and simulationWithSystemRandom to determine whether the simulation should be conditioned on having at least two sampled leaves in the reconstructed tree. It does this by repeatedly simulating until such a tree is acheved.

0.1.8.1

  • Implement an example of the inhomogeneous birth-death process and include it in the README.
  • Fix broken example using the BDSCOD model and organise examples in examples/ rather than just the single one in app/.

0.1.8.0

  • Define an inhomogeneous birth-death process in InhomogeneousBD.
  • Define an inhomogeneous exponential random sampler using Timed Rates.
  • Extend the ModelParameters class to have a birthProb function.
  • Include a Timed type for time varying values.
  • Include a test that the final size of a birth-death simulation is approximately correct.
  • Format the changelog to make it easier to read outside of a browser.
  • Fix naming convention and exports in the BirthDeath, BirthDeathSampling and BirthDeathSamplingOccurrencemodules to conform to the pattern used in the BDSCOD module and move simulation into the Utility module since it is common between all models
  • Adjust the type of the ModelParameters interface to include potential time dependence.

0.1.7.2

  • Make Event an instance of FromRecord to match with ToRecord.

0.1.7.1

  • Provide vis/birth-death-lines.R which visualises a simulation.

0.1.7.0

  • Provide vis/ott.R to visualise observations through time and make vis/ltt.R ignore disasters.
  • Replace some Catastrophe specific functions with equivalents for handling scheduled events more generally
    • noCatastrophe becomes noScheduledEvent
    • firstCatastrophe becomes firstScheduled
  • Change the naming of the BDSCO model to be consistent with the new BDSCOD model.
  • Implement a birth-death-sampling-catastrophe-occurrence-disaster model in Epidemic.BDSCOD.

0.1.6.2

  • Update the visualisation code in vis/ltt.R such that it parses the catastrophe events to draw the LTT.
  • BUG FIX: In the observed events catastrophes are replicated when they should not be.

0.1.6.1

  • Include a visualisation script for the LTT of reconstructed trees: vis/ltt.R which is described in the README.

0.1.6.0

  • Move the ToField declarations into the Epidemic module to avoid orphaned instance and select a representation for multiple people in the CSV output.
  • Implement a birth-death-sampling-catastrophe-occurrence model in Epidemic.BirthDeathSamplingCatastropheOccurrence; it's a shame about the length of the name.
  • Include a contructor for catastrophe events in which multiple people can be sampled simultaneously.

0.1.5.1

  • Include a .gitignore.
  • Improved documentation with haddock.

0.1.5.0

  • Include some testing with hspec.
  • The Epidemic.BirthDeathSamplingOccurrence module now has a function to extract the observable events.
  • Change the simulation functions to return events in the order they occurred.
  • Change the configuration functions to take tuples of model parameters.

0.1.4.0

  • Make Event an instance of the Ord typeclass.
  • Implement types and conversion functions for a TransmissionTree and a SampleTree.
  • Implement a parser and printer for Newick in Epidemic.Utility.

0.1.3.0

  • Implement a birth-death-sampling-occurrence model in Epidemic.BirthDeathSamplingOccurrence.
  • Implement a visualisation of the birth-death-sampling LTT in vis/birthDeathSamplingVisualisation.R.
  • Implement a birth-death-sampling model in Epidemic.BirthDeathSampling.

0.1.2.0

  • Implement a visualisation of the infection network in vis/infection-tree.vg.json.
  • Implement Epidemic.Utility.eventsAsJsonTree.
  • Move the Epidemic.Simulation module to Epidemic.Utility.

0.1.1.0

  • Write the output to CSV using cassava

0.1.0.0

  • Basic prototype to simulate a constant rate birth-death process.