packages feed

epi-sim-0.4.2: ChangeLog.md

# Changelog for epi-sim

## 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 Rate`s.
- 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 `BirthDeathSamplingOccurrence`modules 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.