mitchelloharawild / distributional

Vectorised distributions for R
https://pkg.mitchelloharawild.com/distributional
GNU General Public License v3.0
94 stars 15 forks source link

parameters doesn't work for inflated distributions #68

Closed njtierney closed 2 years ago

njtierney commented 2 years ago

👋

I've found that when I use parameters on a distribution that is inflated, I don't get the parameters out, I was wondering if you have thoughts on how to get out the parameters?

library(distributional)
library(tidyverse)
vec_probs <- hist(mtcars$cyl, plot = FALSE)$density
dist_cyl <- dist_categorical(list(vec_probs))
dist_cyl
#> <distribution[1]>
#> [1] Categorical[8]
generate(dist_cyl, 10)
#> [[1]]
#>  [1] 8 4 8 4 8 1 4 8 8 8
parameters(dist_cyl)
#>                                                                        p
#> 1 0.34375, 0.00000, 0.00000, 0.21875, 0.00000, 0.00000, 0.00000, 0.43750

dist_cyl_infl <- dist_inflated(dist_cyl, 0.2)
generate(dist_cyl_infl, 10)
#> [[1]]
#>  [1] 4 8 0 8 4 8 8 0 8 8
parameters(dist_cyl_infl)
#> Error: Input must be a vector, not a <dist_categorical/dist_default> object.

unlist(dist_cyl)
#>      p1      p2      p3      p4      p5      p6      p7      p8 
#> 0.34375 0.00000 0.00000 0.21875 0.00000 0.00000 0.00000 0.43750
unlist(dist_cyl_infl)
#> dist.p1 dist.p2 dist.p3 dist.p4 dist.p5 dist.p6 dist.p7 dist.p8       x       p 
#> 0.34375 0.00000 0.00000 0.21875 0.00000 0.00000 0.00000 0.43750 0.00000 0.20000

Created on 2021-10-19 by the reprex package (v2.0.1)

Session info ``` r sessioninfo::session_info() #> ─ Session info ─────────────────────────────────────────────────────────────── #> setting value #> version R version 4.1.1 (2021-08-10) #> os macOS Big Sur 10.16 #> system x86_64, darwin17.0 #> ui X11 #> language (EN) #> collate en_AU.UTF-8 #> ctype en_AU.UTF-8 #> tz Australia/Perth #> date 2021-10-19 #> #> ─ Packages ─────────────────────────────────────────────────────────────────── #> package * version date lib #> assertthat 0.2.1 2019-03-21 [1] #> backports 1.2.1 2020-12-09 [1] #> broom 0.7.9 2021-07-27 [1] #> cellranger 1.1.0 2016-07-27 [1] #> cli 3.0.1 2021-07-17 [1] #> colorspace 2.0-2 2021-06-24 [1] #> crayon 1.4.1 2021-02-08 [1] #> DBI 1.1.1 2021-01-15 [1] #> dbplyr 2.1.1 2021-04-06 [1] #> digest 0.6.28 2021-09-23 [1] #> distributional * 0.2.2.9000 2021-10-11 [1] #> dplyr * 1.0.7 2021-06-18 [1] #> ellipsis 0.3.2 2021-04-29 [1] #> evaluate 0.14 2019-05-28 [1] #> fansi 0.5.0 2021-05-25 [1] #> farver 2.1.0 2021-02-28 [1] #> fastmap 1.1.0 2021-01-25 [1] #> forcats * 0.5.1 2021-01-27 [1] #> fs 1.5.0 2020-07-31 [1] #> generics 0.1.0 2020-10-31 [1] #> ggplot2 * 3.3.5 2021-06-25 [1] #> glue 1.4.2 2020-08-27 [1] #> gtable 0.3.0 2019-03-25 [1] #> haven 2.4.3 2021-08-04 [1] #> highr 0.9 2021-04-16 [1] #> hms 1.1.1 2021-09-26 [1] #> htmltools 0.5.2 2021-08-25 [1] #> httr 1.4.2 2020-07-20 [1] #> jsonlite 1.7.2 2020-12-09 [1] #> knitr 1.36 2021-09-29 [1] #> lifecycle 1.0.1 2021-09-24 [1] #> lubridate 1.7.10 2021-02-26 [1] #> magrittr 2.0.1 2020-11-17 [1] #> modelr 0.1.8 2020-05-19 [1] #> munsell 0.5.0 2018-06-12 [1] #> pillar 1.6.3 2021-09-26 [1] #> pkgconfig 2.0.3 2019-09-22 [1] #> purrr * 0.3.4 2020-04-17 [1] #> R.cache 0.15.0 2021-04-30 [1] #> R.methodsS3 1.8.1 2020-08-26 [1] #> R.oo 1.24.0 2020-08-26 [1] #> R.utils 2.11.0 2021-09-26 [1] #> R6 2.5.1 2021-08-19 [1] #> Rcpp 1.0.7 2021-07-07 [1] #> readr * 2.0.2 2021-09-27 [1] #> readxl 1.3.1 2019-03-13 [1] #> reprex 2.0.1 2021-08-05 [1] #> rlang 0.4.11 2021-04-30 [1] #> rmarkdown 2.11 2021-09-14 [1] #> rstudioapi 0.13 2020-11-12 [1] #> rvest 1.0.1 2021-07-26 [1] #> scales 1.1.1 2020-05-11 [1] #> sessioninfo 1.1.1 2018-11-05 [1] #> stringi 1.7.4 2021-08-25 [1] #> stringr * 1.4.0 2019-02-10 [1] #> styler 1.6.2 2021-09-23 [1] #> tibble * 3.1.5 2021-09-30 [1] #> tidyr * 1.1.4 2021-09-27 [1] #> tidyselect 1.1.1 2021-04-30 [1] #> tidyverse * 1.3.1 2021-04-15 [1] #> tzdb 0.1.2 2021-07-20 [1] #> utf8 1.2.2 2021-07-24 [1] #> vctrs 0.3.8 2021-04-29 [1] #> withr 2.4.2 2021-04-18 [1] #> xfun 0.26 2021-09-14 [1] #> xml2 1.3.2 2020-04-23 [1] #> yaml 2.2.1 2020-02-01 [1] #> source #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> Github (mitchelloharawild/distributional@82e2919) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> CRAN (R 4.1.0) #> #> [1] /Library/Frameworks/R.framework/Versions/4.1/Resources/library ```
mitchelloharawild commented 2 years ago

Should be fixed now, this is due to the internals of dist_inflated(), and others using unclassed distributions rather than the distribution vector type.

library(distributional)
library(tidyverse)
vec_probs <- hist(mtcars$cyl, plot = FALSE)$density
dist_cyl <- dist_categorical(list(vec_probs))
dist_cyl
#> <distribution[1]>
#> [1] Categorical[8]
generate(dist_cyl, 10)
#> [[1]]
#>  [1] 4 1 4 8 8 8 4 1 1 4
parameters(dist_cyl)
#>                                                                        p
#> 1 0.34375, 0.00000, 0.00000, 0.21875, 0.00000, 0.00000, 0.00000, 0.43750

dist_cyl_infl <- dist_inflated(dist_cyl, 0.2)
generate(dist_cyl_infl, 10)
#> [[1]]
#>  [1] 8 1 1 1 8 8 8 8 8 0
parameters(dist_cyl_infl)
#>             dist x   p
#> 1 Categorical[8] 0 0.2

unlist(dist_cyl)
#>      p1      p2      p3      p4      p5      p6      p7      p8 
#> 0.34375 0.00000 0.00000 0.21875 0.00000 0.00000 0.00000 0.43750
unlist(dist_cyl_infl)
#> dist.p1 dist.p2 dist.p3 dist.p4 dist.p5 dist.p6 dist.p7 dist.p8       x       p 
#> 0.34375 0.00000 0.00000 0.21875 0.00000 0.00000 0.00000 0.43750 0.00000 0.20000

Created on 2021-10-19 by the reprex package (v2.0.0)

njtierney commented 2 years ago

Thanks, Mitch! You made fast work of that 🏃‍♂️ - much appreciated.