|
| 1 | +# epiprocess 0.5.0.9999 (development version) |
| 2 | + |
| 3 | +Note that `epiprocess` uses the [Semantic Versioning |
| 4 | +("semver")](https://semver.org/) scheme for all release versions, but not for |
| 5 | +development versions. A ".9999" suffix indicates a development version. |
| 6 | + |
| 7 | +## Cleanup: |
| 8 | + |
| 9 | +* Added a `NEWS.md` file to track changes to the package. |
| 10 | + |
| 11 | +# epiprocess 0.5.0: |
| 12 | + |
| 13 | +## Potentially-breaking changes: |
| 14 | + |
| 15 | +* `epix_slide`, `<epi_archive>$slide` now feed `f` an `epi_df` rather than |
| 16 | + converting to a tibble/`tbl_df` first, allowing use of `epi_df` methods and |
| 17 | + metadata, and often yielding `epi_df`s out of the slide as a result. To obtain |
| 18 | + the old behavior, convert to a tibble within `f`. |
| 19 | + |
| 20 | +## Improvements: |
| 21 | + |
| 22 | +* Fixed `epix_merge`, `<epi_archive>$merge` always raising error on `sync="truncate"` |
| 23 | + |
| 24 | +## Cleanup: |
| 25 | + |
| 26 | +* Added `Remotes:` entry for `genlasso`, which was removed from CRAN |
| 27 | +* Added `as_epi_archive` tests |
| 28 | +* Added missing `epix_merge` test for `sync="truncate"` |
| 29 | + |
| 30 | +# epiprocess 0.4.0: |
| 31 | + |
| 32 | +## Potentially-breaking changes: |
| 33 | + |
| 34 | +* Fixed `[.epi_df` to not reorder columns, which was incompatible with |
| 35 | + downstream packages. |
| 36 | +* Changed `[.epi_df` decay-to-tibble logic to more coherent with `epi_df`s |
| 37 | + current tolerance of nonunique keys: stopped decaying to a tibble in some |
| 38 | + cases where a unique key wouldn't have been preserved, since we don't |
| 39 | + enforce a unique key elsewhere. |
| 40 | +* Fixed `[.epi_df` to adjust `"other_keys"` metadata when corresponding |
| 41 | + columns are selected out. |
| 42 | +* Fixed `[.epi_df` to raise an error if resulting column names would be |
| 43 | + nonunique. |
| 44 | +* Fixed `[.epi_df` to drop metadata if decaying to a tibble (due to removal |
| 45 | + of essential columns). |
| 46 | + |
| 47 | +## Improvements: |
| 48 | + |
| 49 | +* Added check that `epi_df` `additional_metadata` is list. |
| 50 | +* Fixed some incorrect `as_epi_df` examples. |
| 51 | + |
| 52 | +## Cleanup: |
| 53 | + |
| 54 | +* Applied rename of upstream package in examples: `delphi.epidata` -> |
| 55 | + `epidatr`. |
| 56 | +* Rounded out `[.epi_df` tests. |
| 57 | + |
| 58 | +# epiprocess 0.3.0: |
| 59 | + |
| 60 | +## Breaking changes: |
| 61 | + |
| 62 | +* `as_epi_archive`, `epi_archive$new`: |
| 63 | + * Compactification (see below) by default may change results if working |
| 64 | + directly with the `epi_archive`'s `DT` field; to disable, pass in |
| 65 | + `compactify=FALSE`. |
| 66 | +* `epi_archive`'s wrappers and R6 methods have been updated to follow these |
| 67 | + rules regarding reference semantics: |
| 68 | + * `epix_<method>` will not mutate input `epi_archive`s, but may alias them |
| 69 | + or alias their fields (which should not be a worry if a user sticks to |
| 70 | + these `epix_*` functions and "regular" R functions with |
| 71 | + copy-on-write-like behavior, avoiding mutating functions `[.data.table`) |
| 72 | + * `x$<method>` may mutate `x`; if it mutates `x`, it will return `x` |
| 73 | + invisibly (where this makes sense), and, for each of its fields, may |
| 74 | + either mutate the object to which it refers or reseat the reference (but |
| 75 | + not both); if `x$<method>` does not mutate `x`, its result may contain |
| 76 | + aliases to `x` or its fields. |
| 77 | +* `epix_merge`, `<epi_archive>$merge`: |
| 78 | + * Removed `...`, `locf`, and `nan` parameters. |
| 79 | + * Changed the default behavior, which now corresponds to using |
| 80 | + `by=key(x$DT)` (but demanding that is the same set of column names as |
| 81 | + `key(y$DT)`), `all=TRUE`, `locf=TRUE`, `nan=NaN` (but with the |
| 82 | + post-filling step fixed to only apply to gaps, and no longer fill over |
| 83 | + `NA`s originating from `x$DT` and `y$DT`). |
| 84 | + * `x` and `y` are no longer allowed to share names of non-`by` columns. |
| 85 | + * `epix_merge` no longer mutates its `x` argument (but `$merge` continues |
| 86 | + to do so). |
| 87 | + * Removed (undocumented) capability of passing a `data.table` as `y`. |
| 88 | +* `epix_slide`: |
| 89 | + * Removed inappropriate/misleading `n=7` default argument (due to |
| 90 | + reporting latency, `n=7` will *not* yield 7 days of data in a typical |
| 91 | + daily-reporting surveillance data source, as one might have assumed). |
| 92 | + |
| 93 | +## New features: |
| 94 | + |
| 95 | +* `as_epi_archive`, `epi_archive$new`: |
| 96 | + * New `compactify` parameter allows removal of rows that are redundant for the |
| 97 | + purposes of `epi_archive`'s methods, which use the last version of each |
| 98 | + observation carried forward. |
| 99 | + * New `clobberable_versions_start` field allows marking a range of versions |
| 100 | + that could be "clobbered" (rewritten without assigning new version |
| 101 | + tags); previously, this was hard-coded as `max(<epi_archive>$DT$version)`. |
| 102 | + * New `versions_end` field allows marking a range of versions beyond |
| 103 | + `max(<epi_archive>$DT$version)` that were observed, but contained no |
| 104 | + changes. |
| 105 | +* `epix_merge`, `$merge`: |
| 106 | + * New `sync` parameter controls what to do if `x` and `y` aren't equally |
| 107 | + up to date (i.e., if `x$versions_end` and `y$versions_end` are |
| 108 | + different). |
| 109 | +* New function `epix_fill_through_version`, method |
| 110 | + `<epi_archive>$fill_through_version`: non-mutating & mutating way to |
| 111 | + ensure that an archive contains versions at least through some |
| 112 | + `fill_versions_end`, extrapolating according to `how` if necessary |
| 113 | +* Example archive data object is now constructed on demand from its |
| 114 | + underlying data, so it will be based on the user's version of |
| 115 | + `epi_archive` rather than an outdated R6 implementation from whenever the |
| 116 | + data object was generated. |
| 117 | + |
| 118 | +# epiprocess 0.2.0: |
| 119 | + |
| 120 | +## Breaking changes: |
| 121 | + |
| 122 | +* Removed default `n=7` argument to `epix_slide`. |
| 123 | + |
| 124 | +## Improvements: |
| 125 | + |
| 126 | +* Ignore `NA`s when printing `time_value` range for an `epi_archive`. |
| 127 | +* Fixed misleading column naming in `epix_slide` example. |
| 128 | +* Trimmed down `epi_slide` examples. |
| 129 | +* Synced out-of-date docs. |
| 130 | + |
| 131 | +## Cleanup: |
| 132 | + |
| 133 | +* Removed dependency of some `epi_archive` tests on an example archive. |
| 134 | + object, and made them more understandable by reading without running. |
| 135 | +* Fixed `epi_df` tests relying on an S3 method for `epi_df` implemented |
| 136 | + externally to `epiprocess`. |
| 137 | +* Added tests for `epi_archive` methods and wrapper functions. |
| 138 | +* Removed some dead code. |
| 139 | +* Made `.{Rbuild,git}ignore` files more comprehensive. |
| 140 | + |
| 141 | +# epiprocess 0.1.2: |
| 142 | + |
| 143 | +## New features: |
| 144 | + |
| 145 | +* New `new_epi_df` function is similar to `as_epi_df`, but (i) recalculates, |
| 146 | + overwrites, and/or drops most metadata of `x` if it has any, (ii) may |
| 147 | + still reorder the columns of `x` even if it's already an `epi_df`, and |
| 148 | + (iii) treats `x` as optional, constructing an empty `epi_df` by default. |
| 149 | + |
| 150 | +## Improvements: |
| 151 | + |
| 152 | +* Fixed `geo_type` guessing on alphabetical strings with more than 2 |
| 153 | + characters to yield `"custom"`, not US `"nation"`. |
| 154 | +* Fixed `time_type` guessing to actually detect `Date`-class `time_value`s |
| 155 | + regularly spaced 7 days apart as `"week"`-type as intended. |
| 156 | +* Improved printing of `epi_df`s, `epi_archives`s. |
| 157 | +* Fixed `as_of` to not cut off any (forecast-like) data with `time_value > |
| 158 | + max_version`. |
| 159 | +* Expanded `epi_df` docs to include conversion from `tsibble`/`tbl_ts` objects, |
| 160 | + usage of `other_keys`, and pre-processing objects not following the |
| 161 | + `geo_value`, `time_value` naming scheme. |
| 162 | +* Expanded `epi_slide` examples to show how to use an `f` argument with |
| 163 | + named parameters. |
| 164 | +* Updated examples to print relevant columns given a common 80-column |
| 165 | + terminal width. |
| 166 | +* Added growth rate examples. |
| 167 | +* Improved `as_epi_archive` and `epi_archive$new`/`$initialize` |
| 168 | + documentation, including constructing a toy archive. |
| 169 | + |
| 170 | +## Cleanup: |
| 171 | + |
| 172 | +* Added tests for `epi_slide`, `epi_cor`, and internal utility functions. |
| 173 | +* Fixed currently-unused internal utility functions `MiddleL`, `MiddleR` to |
| 174 | + yield correct results on odd-length vectors. |
| 175 | + |
| 176 | +# epiprocess 0.1.1: |
| 177 | + |
| 178 | +## New features: |
| 179 | + |
| 180 | +* New example data objects allow one to quickly experiment with `epi_df`s |
| 181 | + and `epi_archives` without relying/waiting on an API to fetch data. |
| 182 | + |
| 183 | +## Improvements: |
| 184 | + |
| 185 | +* Improved `epi_slide` error messaging. |
| 186 | +* Fixed description of the appropriate parameters for an `f` argument to |
| 187 | + `epi_slide`; previous description would give incorrect behavior if `f` had |
| 188 | + named parameters that did not receive values from `epi_slide`'s `...`. |
| 189 | +* Added some examples throughout the package. |
| 190 | +* Using example data objects in vignettes also speeds up vignette compilation. |
| 191 | + |
| 192 | +## Cleanup: |
| 193 | + |
| 194 | +* Set up gh-actions CI. |
| 195 | +* Added tests for `epi_df`s. |
| 196 | + |
| 197 | +# epiprocess 0.1.0 |
| 198 | + |
| 199 | +## Implemented core functionality, vignettes: |
| 200 | + |
| 201 | +Classes: |
| 202 | +* `epi_df`: specialized `tbl_df` for geotemporal epidemiological time |
| 203 | + series data, with optional metadata recording other key columns (e.g., |
| 204 | + demographic breakdowns) and `as_of` what time/version this data was |
| 205 | + current/published. Associated functions: |
| 206 | + * `as_epi_df` converts to an `epi_df`, guessing the `geo_type`, |
| 207 | + `time_type`, `other_keys`, and `as_of` if not specified. |
| 208 | + * `as_epi_df.tbl_ts` and `as_tsibble.epi_df` automatically set |
| 209 | + `other_keys` and `key`&`index`, respectively. |
| 210 | + * `epi_slide` applies a user-supplied computation to a sliding/rolling |
| 211 | + time window and user-specified groups, adding the results as new |
| 212 | + columns, and recycling/broadcasting results to keep the result size |
| 213 | + stable. Allows computation to be provided as a function, `purrr`-style |
| 214 | + formula, or tidyeval dots. Uses `slider` underneath for efficiency. |
| 215 | + * `epi_cor` calculates Pearson, Kendall, or Spearman correlations |
| 216 | + between two (optionally time-shifted) variables in an `epi_df` within |
| 217 | + user-specified groups. |
| 218 | + * Convenience function: `is_epi_df` |
| 219 | +* `epi_archive`: R6 class for version (patch) data for geotemporal |
| 220 | + epidemiological time series data sets. Comes with S3 methods and regular |
| 221 | + functions that wrap around this functionality for those unfamiliar with R6 |
| 222 | + methods. Associated functions: |
| 223 | + * `as_epi_archive`: prepares an `epi_archive` object from a data frame |
| 224 | + containing snapshots and/or patch data for every available version of |
| 225 | + the data set. |
| 226 | + * `as_of`: extracts a snapshot of the data set as of some requested |
| 227 | + version, in `epi_df` format |
| 228 | + * `epix_slide`, `<epi_archive>$slide`: similar to `epi_slide`, but for |
| 229 | + `epi_archive`s; for each requested `ref_time_value` and group, applies |
| 230 | + a time window and user-specified computation to a snapshot of the data |
| 231 | + as of `ref_time_value`. |
| 232 | + * `epix_merge`, `<epi_archive>$merge`: like `merge` for `epi_archive`s, |
| 233 | + but allowing for the last version of each observation to be carried |
| 234 | + forward to fill in gaps in `x` or `y`. |
| 235 | + * Convenience function: `is_epi_archive` |
| 236 | + |
| 237 | +Additional functions: |
| 238 | +* `growth_rate`: estimates growth rate of a time series using one of a few |
| 239 | + built-in `method`s based on relative change, linear regression, |
| 240 | + smoothing splines, or trend filtering. |
| 241 | +* `detect_outlr`: applies one or more outlier detection methods to a given |
| 242 | + signal variable, and optionally aggregates the outputs to create a |
| 243 | + consensus result |
| 244 | +* `detect_outlr_rm`: outlier detection function based on a |
| 245 | + rolling-median-based outlier detection function; one of the methods |
| 246 | + included in `detect_outlr`. |
| 247 | +* `detect_outlr_stl`: outlier detection function based on a seasonal-trend |
| 248 | + decomposition using LOESS (STL); one of the methods included in |
| 249 | + `detect_outlr`. |
0 commit comments