Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bchronlogy crashes R when duplicates are involved #28

Open
GPawi opened this issue Mar 2, 2022 · 1 comment
Open

Bchronlogy crashes R when duplicates are involved #28

GPawi opened this issue Mar 2, 2022 · 1 comment

Comments

@GPawi
Copy link

GPawi commented Mar 2, 2022

Hi Andrew,

hope you're doing well. I know you've been improving Bchron over the past few months (thanks for that), but I still found some strange behavior:
When dates are at the same depths, I use the artificialThickness argument. Then I get the following message: Some positionThicknesses are zero for identical positions. artificialThickness has been added so that the model can attempt to run. If the model still fails then increase the value of artificialThickness further. Great - but what happens is that the progress bar stops at 20 - 30 percent and then nothing.

Would it be possible to add an error message, if Bchronolgy fails? I cannot try to catch an error, because stopping in the progress bar does not produce an error. I always have to shut down R, because I cannot interrupt the kernel. If I had an error message, I could use try(), catch the error and then iteratively increase the artificialThickness.

Tthese are the values that I tested for artificalThickness:

Value Sucess
.001 Failed
.01 Failed
.1 Failed
.5 Failed
1 Failed
2 Succeeded

As always for reproducibility

This is my dataset:
PG1984.txt

This my code:

library('Bchron')
clength <- 120
core_selection <- csv.read("PG1984.txt")
Bchronology(ages = core_selection$ages,
                    ageSds = core_selection$ageSds,
                    calCurves = core_selection$calCurves,
                    positions = core_selection$position,
                    positionThickness = core_selection$thickness,
                    ids = core_selection$id,
                    artificialThickness = 0.5,
                    iterations = 15000, 
                    burn = 5000,       
                    thin = 1,        
                    allowOutside = TRUE,
                    predictPositions = seq(0,clength, by = 1))

And my sessionInfo():

Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19044)

Matrix products: default

locale:
[1] LC_COLLATE=German_Germany.1252  LC_CTYPE=German_Germany.1252    LC_MONETARY=German_Germany.1252
[4] LC_NUMERIC=C                    LC_TIME=German_Germany.1252    
system code page: 65001

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] Bchron_4.7.6

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.8           tidyr_1.1.4          prettyunits_1.1.1    ps_1.6.0            
 [5] assertthat_0.2.1     utf8_1.2.2           ggforce_0.3.3        R6_2.5.1            
 [9] plyr_1.8.6           ggridges_0.5.3       R.devices_2.17.0     backports_1.4.1     
[13] stats4_4.1.2         ggplot2_3.3.5        pillar_1.6.4         rlang_0.4.12        
[17] car_3.0-12           callr_3.7.0          hamstr_0.6.1         R.utils_2.11.0      
[21] R.oo_1.24.0          checkmate_2.0.0      readr_2.1.1          stringr_1.4.0       
[25] loo_2.4.1            polyclip_1.10-0      munsell_0.5.0        broom_0.7.11        
[29] compiler_4.1.2       rstan_2.21.3         base64enc_0.1-3      pkgconfig_2.0.3     
[33] pkgbuild_1.3.1       tidyselect_1.1.1     tibble_3.1.6         gridExtra_2.3       
[37] codetools_0.2-18     matrixStats_0.61.0   fansi_0.5.0          crayon_1.4.2        
[41] dplyr_1.0.7          tzdb_0.2.0           ggpubr_0.4.0         MASS_7.3-54         
[45] R.methodsS3_1.8.1    grid_4.1.2           gtable_0.3.0         lifecycle_1.0.1     
[49] DBI_1.1.1            magrittr_2.0.1       StanHeaders_2.21.0-7 scales_1.1.1        
[53] RcppParallel_5.1.5   cli_3.1.0            stringi_1.7.6        carData_3.0-5       
[57] farver_2.1.0         ggsignif_0.6.3       ellipsis_0.3.2       generics_0.1.1      
[61] vctrs_0.3.8          tools_4.1.2          glue_1.5.0           tweenr_1.0.2        
[65] purrr_0.3.4          hms_1.1.1            processx_3.5.2       abind_1.4-5         
[69] parallel_4.1.2       inline_0.3.19        colorspace_2.0-2     rstatix_0.7.0

Thanks,
Gregor

@JianghuiDu
Copy link

I think you can also change positionEps. My iterations also got stuck and I believe it's because of the while loop in the code:

  getCurrPositions <- function(pos, posThick, posEps) {
    n <- length(pos)
    badPositions <- TRUE
    while (badPositions) {
      currPositions <- stats::runif(
        n,
        pos - 0.5 * posThick,
        pos + 0.5 * posThick
      )
      do <- order(currPositions)
      diffPosition <- diff(currPositions[do])
      if (all(diffPosition > posEps)) badPositions <- FALSE # can get stuck here
    }
    return(currPositions)
  }

It should have a break mechanism here otherwise it can become an infinite loop.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants