tidyverts / fabletools

General fable features useful for extension packages
http://fabletools.tidyverts.org/
89 stars 31 forks source link

Transformation of distributions causing errors #188

Closed robjhyndman closed 4 years ago

robjhyndman commented 4 years ago

This works fine with CRAN versions:

library(tsibble)
library(fable)
#> Loading required package: fabletools

as_tsibble(USAccDeaths) %>%
  model(
    arima = ARIMA(box_cox(value, 0.5))
  ) %>%
  forecast(h = 4)
#> # A fable: 4 x 4 [1M]
#> # Key:     .model [1]
#>   .model    index value .distribution
#>   <chr>     <mth> <dbl> <dist>       
#> 1 arima  1979 Jan 8313. t(N(180, 12))
#> 2 arima  1979 Feb 7491. t(N(171, 15))
#> 3 arima  1979 Mar 8295. t(N(180, 19))
#> 4 arima  1979 Apr 8601. t(N(183, 22))

as_tsibble(USAccDeaths) %>%
  model(
    arima = ARIMA(sqrt(value))
  ) %>%
  forecast(h = 4)
#> # A fable: 4 x 4 [1M]
#> # Key:     .model [1]
#>   .model    index value .distribution
#>   <chr>     <mth> <dbl> <dist>       
#> 1 arima  1979 Jan 8313. t(N(91, 2.9))
#> 2 arima  1979 Feb 7491. t(N(87, 3.8))
#> 3 arima  1979 Mar 8295. t(N(91, 4.7))
#> 4 arima  1979 Apr 8601. t(N(93, 5.6))

Created on 2020-04-14 by the reprex package (v0.3.0)

Session info ``` r devtools::session_info() #> ─ Session info ─────────────────────────────────────────────────────────────── #> setting value #> version R version 3.6.3 (2020-02-29) #> os Ubuntu 19.10 #> system x86_64, linux-gnu #> ui X11 #> language en_AU:en #> collate en_AU.UTF-8 #> ctype en_AU.UTF-8 #> tz Australia/Melbourne #> date 2020-04-14 #> #> ─ Packages ─────────────────────────────────────────────────────────────────── #> package * version date lib source #> anytime 0.3.7 2020-01-20 [1] CRAN (R 3.6.2) #> assertthat 0.2.1 2019-03-21 [3] CRAN (R 3.5.3) #> backports 1.1.6 2020-04-05 [1] CRAN (R 3.6.3) #> callr 3.4.3 2020-03-28 [1] CRAN (R 3.6.3) #> cli 2.0.2 2020-02-28 [1] CRAN (R 3.6.2) #> colorspace 1.4-1 2019-03-18 [3] CRAN (R 3.6.1) #> crayon 1.3.4.9000 2020-03-29 [1] Github (r-lib/crayon@e949005) #> desc 1.2.0 2018-05-01 [3] CRAN (R 3.5.0) #> devtools 2.3.0 2020-04-10 [1] CRAN (R 3.6.3) #> digest 0.6.25 2020-02-23 [1] CRAN (R 3.6.2) #> dplyr 0.8.5 2020-03-07 [1] CRAN (R 3.6.3) #> ellipsis 0.3.0 2019-09-20 [1] CRAN (R 3.6.1) #> evaluate 0.14 2019-05-28 [3] CRAN (R 3.6.0) #> fable * 0.1.2 2020-01-29 [1] CRAN (R 3.6.3) #> fabletools * 0.1.3 2020-03-24 [1] CRAN (R 3.6.3) #> fansi 0.4.1 2020-01-08 [1] CRAN (R 3.6.2) #> feasts 0.1.3 2020-03-18 [1] CRAN (R 3.6.3) #> fs 1.4.1 2020-04-04 [1] CRAN (R 3.6.3) #> generics 0.0.2 2018-11-29 [3] CRAN (R 3.5.1) #> ggplot2 3.3.0 2020-03-05 [1] CRAN (R 3.6.3) #> glue 1.4.0 2020-04-03 [1] CRAN (R 3.6.3) #> gtable 0.3.0 2019-03-25 [3] CRAN (R 3.6.1) #> highr 0.8 2019-03-20 [3] CRAN (R 3.6.1) #> htmltools 0.4.0 2019-10-04 [1] CRAN (R 3.6.1) #> knitr 1.28 2020-02-06 [1] CRAN (R 3.6.3) #> lattice 0.20-41 2020-04-02 [4] CRAN (R 3.6.3) #> lifecycle 0.2.0 2020-03-06 [1] CRAN (R 3.6.2) #> lubridate 1.7.8 2020-04-06 [3] CRAN (R 3.6.3) #> magrittr 1.5 2014-11-22 [3] CRAN (R 3.5.0) #> memoise 1.1.0 2017-04-21 [3] CRAN (R 3.5.0) #> munsell 0.5.0 2018-06-12 [3] CRAN (R 3.5.0) #> nlme 3.1-145 2020-03-04 [1] CRAN (R 3.6.2) #> pillar 1.4.3 2019-12-20 [1] CRAN (R 3.6.2) #> pkgbuild 1.0.6 2019-10-09 [1] CRAN (R 3.6.1) #> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 3.6.1) #> pkgload 1.0.2 2018-10-29 [1] CRAN (R 3.6.1) #> prettyunits 1.1.1 2020-01-24 [1] CRAN (R 3.6.2) #> processx 3.4.2 2020-02-09 [1] CRAN (R 3.6.2) #> ps 1.3.2 2020-02-13 [1] CRAN (R 3.6.2) #> purrr 0.3.3 2019-10-18 [1] CRAN (R 3.6.1) #> R6 2.4.1 2019-11-12 [1] CRAN (R 3.6.1) #> Rcpp 1.0.4.6 2020-04-09 [1] CRAN (R 3.6.3) #> remotes 2.1.1 2020-02-15 [1] CRAN (R 3.6.3) #> rlang 0.4.5 2020-03-01 [1] CRAN (R 3.6.3) #> rmarkdown 2.1 2020-01-20 [1] CRAN (R 3.6.3) #> rprojroot 1.3-2 2018-01-03 [3] CRAN (R 3.5.0) #> scales 1.1.0 2019-11-18 [1] CRAN (R 3.6.1) #> sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 3.6.1) #> stringi 1.4.6 2020-02-17 [1] CRAN (R 3.6.2) #> stringr 1.4.0 2019-02-10 [3] CRAN (R 3.5.2) #> testthat 2.3.2 2020-03-02 [1] CRAN (R 3.6.2) #> tibble 3.0.0 2020-03-30 [3] CRAN (R 3.6.3) #> tidyr 1.0.2 2020-01-24 [1] CRAN (R 3.6.2) #> tidyselect 1.0.0 2020-01-27 [3] CRAN (R 3.6.2) #> tsibble * 0.8.6 2020-01-31 [1] CRAN (R 3.6.3) #> urca 1.3-0 2016-09-06 [1] CRAN (R 3.6.1) #> usethis 1.6.0 2020-04-09 [1] CRAN (R 3.6.3) #> utf8 1.1.4 2018-05-24 [3] CRAN (R 3.5.0) #> vctrs 0.2.99.9010 2020-04-12 [1] Github (r-lib/vctrs@82920fe) #> withr 2.1.2 2018-03-15 [3] CRAN (R 3.5.0) #> xfun 0.12 2020-01-13 [1] CRAN (R 3.6.2) #> yaml 2.2.1 2020-02-01 [3] CRAN (R 3.6.2) #> #> [1] /home/robjhyndman/R/x86_64-pc-linux-gnu-library/3.6 #> [2] /usr/local/lib/R/site-library #> [3] /usr/lib/R/site-library #> [4] /usr/lib/R/library ```

But is troublesome using current github versions:

library(tsibble)
library(fable)
#> Loading required package: fabletools

as_tsibble(USAccDeaths) %>%
  model(
    arima = ARIMA(box_cox(value, 0.5))
  ) %>%
  forecast(h = 4)
#> Warning in mapply(get(op), x = x, y = y, SIMPLIFY = FALSE): Incompatible methods
#> ("Ops.dist_transformed", "*.vctrs_vctr") for "*"
#> Error: `mutate()` argument `arima` errored.
#> ℹ `arima` is `(function (object, ...) ...`.
#> x non-numeric argument to binary operator

as_tsibble(USAccDeaths) %>%
  model(
    arima = ARIMA(sqrt(value))
  ) %>%
  forecast(h = 4)
#> Error: `^` not meaningful for normal distributions

Created on 2020-04-14 by the reprex package (v0.3.0)

Session info ``` r devtools::session_info() #> ─ Session info ─────────────────────────────────────────────────────────────── #> setting value #> version R version 3.6.3 (2020-02-29) #> os Ubuntu 19.10 #> system x86_64, linux-gnu #> ui X11 #> language en_AU:en #> collate en_AU.UTF-8 #> ctype en_AU.UTF-8 #> tz Australia/Melbourne #> date 2020-04-14 #> #> ─ Packages ─────────────────────────────────────────────────────────────────── #> ! package * version date lib #> P anytime 0.3.7 2020-01-20 [?] #> P assertthat 0.2.1 2019-03-21 [?] #> P backports 1.1.6 2020-04-05 [?] #> P callr 3.4.3 2020-03-28 [?] #> P cli 2.0.2 2020-02-28 [?] #> P colorspace 1.4-1 2019-03-18 [?] #> P crayon 1.3.4 2017-09-16 [?] #> P desc 1.2.0 2018-05-01 [?] #> devtools 2.2.2 2020-02-17 [1] #> digest 0.6.25 2020-02-23 [1] #> distributional 0.0.0.9000 2020-04-12 [1] #> dplyr 0.8.99.9002 2020-04-09 [1] #> ellipsis 0.3.0 2019-09-20 [1] #> P evaluate 0.14 2019-05-28 [?] #> fable * 0.1.2.9000 2020-04-14 [1] #> fabletools * 0.1.3.9000 2020-04-14 [1] #> P fansi 0.4.1 2020-01-08 [?] #> feasts 0.1.3 2020-04-09 [1] #> P fs 1.4.1 2020-04-04 [?] #> P generics 0.0.2 2018-11-29 [?] #> P ggplot2 3.3.0 2020-03-05 [?] #> glue 1.4.0 2020-04-03 [1] #> P gtable 0.3.0 2019-03-25 [?] #> P highr 0.8 2019-03-20 [?] #> P htmltools 0.4.0 2019-10-04 [?] #> P knitr 1.28 2020-02-06 [?] #> P lattice 0.20-41 2020-04-02 [?] #> P lifecycle 0.2.0 2020-03-06 [?] #> P lubridate 1.7.8 2020-04-06 [?] #> P magrittr 1.5 2014-11-22 [?] #> memoise 1.1.0 2017-04-21 [1] #> P munsell 0.5.0 2018-06-12 [?] #> P nlme 3.1-145 2020-03-04 [?] #> P pillar 1.4.3 2019-12-20 [?] #> P pkgbuild 1.0.6 2019-10-09 [?] #> P pkgconfig 2.0.3 2019-09-22 [?] #> P pkgload 1.0.2 2018-10-29 [?] #> P prettyunits 1.1.1 2020-01-24 [?] #> P processx 3.4.2 2020-02-09 [?] #> P ps 1.3.2 2020-02-13 [?] #> P purrr 0.3.3 2019-10-18 [?] #> P R6 2.4.1 2019-11-12 [?] #> Rcpp 1.0.4.6 2020-04-09 [1] #> P remotes 2.1.1 2020-02-15 [?] #> renv 0.9.3 2020-02-10 [1] #> rlang 0.4.5.9000 2020-04-10 [1] #> P rmarkdown 2.1 2020-01-20 [?] #> P rprojroot 1.3-2 2018-01-03 [?] #> P scales 1.1.0 2019-11-18 [?] #> sessioninfo 1.1.1 2018-11-05 [1] #> P stringi 1.4.6 2020-02-17 [?] #> P stringr 1.4.0 2019-02-10 [?] #> P testthat 2.3.2 2020-03-02 [?] #> P tibble 3.0.0 2020-03-30 [?] #> P tidyr 1.0.2 2020-01-24 [?] #> P tidyselect 1.0.0 2020-01-27 [?] #> tsibble * 0.8.9.9000 2020-04-09 [1] #> urca 1.3-0 2016-09-06 [1] #> usethis 1.6.0 2020-04-09 [1] #> vctrs 0.2.99.9010 2020-04-10 [1] #> P withr 2.1.2 2018-03-15 [?] #> P xfun 0.12 2020-01-13 [?] #> P yaml 2.2.1 2020-02-01 [?] #> source #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> CRAN (R 3.6.3) #> CRAN (R 3.6.3) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> CRAN (R 3.6.3) #> CRAN (R 3.6.3) #> CRAN (R 3.6.3) #> Github (mitchelloharawild/distributional@1884a60) #> Github (tidyverse/dplyr@648064b) #> CRAN (R 3.6.3) #> CRAN (R 3.6.2) #> Github (tidyverts/fable@fc9d8af) #> Github (tidyverts/fabletools@9812804) #> CRAN (R 3.6.2) #> Github (tidyverts/feasts@f006746) #> CRAN (R 3.6.3) #> CRAN (R 3.6.2) #> CRAN (R 3.6.3) #> CRAN (R 3.6.3) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> CRAN (R 3.6.3) #> CRAN (R 3.6.3) #> CRAN (R 3.6.3) #> CRAN (R 3.6.2) #> CRAN (R 3.6.3) #> CRAN (R 3.6.2) #> CRAN (R 3.6.3) #> CRAN (R 3.6.2) #> CRAN (R 3.6.3) #> CRAN (R 3.6.2) #> CRAN (R 3.6.3) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> CRAN (R 3.6.3) #> CRAN (R 3.6.3) #> CRAN (R 3.6.3) #> Github (tidyverse/rlang@a90b04b) #> CRAN (R 3.6.2) #> CRAN (R 3.6.3) #> CRAN (R 3.6.2) #> CRAN (R 3.6.3) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> CRAN (R 3.6.3) #> CRAN (R 3.6.3) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> Github (tidyverts/tsibble@c5f1e90) #> CRAN (R 3.6.3) #> CRAN (R 3.6.3) #> Github (r-lib/vctrs@82920fe) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> CRAN (R 3.6.2) #> #> [1] /home/robjhyndman/covid19/renv/library/R-3.6/x86_64-pc-linux-gnu #> [2] /tmp/Rtmp4nWc7N/renv-system-library #> [3] /tmp/Rtmp3p3zxc/renv-system-library #> #> P ── Loaded and on-disk path mismatch. ```
mitchelloharawild commented 4 years ago

Transformed distributions is incomplete for more complex transformations (box_cox()), and the ^ operation for dist_normal is a bug.

Moved to: https://github.com/mitchelloharawild/distributional/issues/15 https://github.com/mitchelloharawild/distributional/issues/14

mitchelloharawild commented 4 years ago

dist_normal()^2 is fixed. For clarification of what 'more complex' is, it's where the distribution shows up in multiple places of the calculation: sign(x) * abs(x)^(1/lambda).

mitchelloharawild commented 4 years ago

Fixed the box_cox() case, all should work now.