biomodhub / biomod2

BIOMOD is a computer platform for ensemble forecasting of species distributions, enabling the treatment of a range of methodological uncertainties in models and the examination of species-environment relationships.
85 stars 22 forks source link

Error in BIOMOD_Projection - [writeRaster error at the end of projection] #443

Closed VDjianBiogeo closed 5 months ago

VDjianBiogeo commented 6 months ago

Hi,

I'm currently working on species distribution modeling using biomod2 and I'm having an issue with the BIOMOD_Projection function. The function works for all individual models that I've made, but when it reaches the last one, I get an Erreur : [writeRaster] cannot write file message. And since I have an error message, it doesn't save the BIOMOD_Projection output in my session, meaning I'm stuck.

Here is my script:

bm_data <- BIOMOD_FormatingData(resp.var= mycto.occ[,4],
                                  expl.var= env_filtered,
                                  resp.xy = mycto.occ[,1:2], 
                                  resp.name = "Electrona_antarctica",
                                  PA.nb.rep = 3, 
                                  PA.nb.absences = as.integer(nrow(mycto.occ)), 
                                  PA.strategy = 'sre', 
                                  PA.sre.quant = 0.025, 
                                  na.rm = TRUE, 
                                  dir.name = paste("./Output/Methodo/Modelling testing/Species filtered loop/",
                                                   list_files[i], sep=""))

show(bm_data)
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= BIOMOD.formated.data -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

dir.name =  
./Output/Methodo/Modelling testing/Species filtered loop/RV after species filtering

sp.name =  Electrona.antarctica

     500 presences,  0 true absences and  1944 undefined points in dataset

     7 explanatory variables

 po4_mean_grad_clim_200 chl_range_clim_200 no3_max_clim_200   KE_sd_clim_surf    
 Min.   :0.0005139      Min.   :0.0182     Min.   : 0.00102   Min.   :6.770e-08  
 1st Qu.:0.0440042      1st Qu.:0.1681     1st Qu.: 1.47661   1st Qu.:4.628e-06  
 Median :0.0834690      Median :0.4990     Median : 8.83811   Median :1.010e-05  
 Mean   :0.1237925      Mean   :0.8352     Mean   :12.78895   Mean   :2.318e-05  
 3rd Qu.:0.1654283      3rd Qu.:1.4650     3rd Qu.:25.55889   3rd Qu.:2.658e-05  
 Max.   :1.0131292      Max.   :4.6148     Max.   :33.44164   Max.   :8.430e-04  
 po4_range_clim_200 thetao_sd_grad_clim_200 o2_range_clim_200
 Min.   :0.002386   Min.   :0.04381         Min.   :  4.122  
 1st Qu.:0.231034   1st Qu.:0.58321         1st Qu.: 21.183  
 Median :0.337555   Median :0.94273         Median : 36.594  
 Mean   :0.379189   Mean   :1.06688         Mean   : 45.137  
 3rd Qu.:0.485522   3rd Qu.:1.38255         3rd Qu.: 57.087  
 Max.   :2.095649   Max.   :6.81404         Max.   :145.079  

 3 Pseudo Absences dataset available ( PA1, PA2, PA3 ) with  649 (PA1, PA2, PA3) 
pseudo absences

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
show(env_filtered) 
class       : SpatRaster 
dimensions  : 680, 1440, 7  (nrow, ncol, nlyr)
resolution  : 0.25, 0.25  (x, y)
extent      : -180, 180, -80, 90  (xmin, xmax, ymin, ymax)
coord. ref. : lon/lat WGS 84 (EPSG:4326) 
source      : Env raster stack.tif 
names       :  po4_m~m_200, chl_r~m_200,  no3_m~m_200,  KE_sd~_surf,  po4_r~m_200, theta~m_200, ... 
min values  : 9.186091e-05,  0.01578452, 6.923963e-04, 9.847720e-10, 0.0001221998,  0.02247037, ... 
max values  : 4.720705e+00, 22.01533508, 3.355432e+02, 1.896632e-03, 4.3704843521, 10.06961441, ...

sdm_model <- BIOMOD_Modeling( bm.format = bm_data, 
                               models = c("GAM", "GBM", "RF"),
                               CV.strategy = "random", 
                               CV.nb.rep = 10, 
                               CV.perc = 0.7,
                               CV.do.full.models = F, 
                               metric.eval = c("KAPPA", "TSS", "ROC"), 
                               var.import = 10, 
                               modeling.id = "demo1")

show(sdm_model)
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= BIOMOD.models.out -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Modeling folder : 
./Output/Methodo/Modelling testing/Species filtered loop/RV after species filtering

Species modeled : Electrona.antarctica

Modeling id : demo1

Considered variables : po4_mean_grad_clim_200 chl_range_clim_200 no3_max_clim_200 
KE_sd_clim_surf po4_range_clim_200 thetao_sd_grad_clim_200 o2_range_clim_200

Computed Models :  Electrona.antarctica_PA1_RUN1_GAM 
Electrona.antarctica_PA1_RUN1_GBM Electrona.antarctica_PA1_RUN1_RF 
Electrona.antarctica_PA1_RUN2_GAM Electrona.antarctica_PA1_RUN2_GBM 
Electrona.antarctica_PA1_RUN2_RF Electrona.antarctica_PA1_RUN3_GAM 
Electrona.antarctica_PA1_RUN3_GBM Electrona.antarctica_PA1_RUN3_RF 
Electrona.antarctica_PA1_RUN4_GAM Electrona.antarctica_PA1_RUN4_GBM 
Electrona.antarctica_PA1_RUN4_RF Electrona.antarctica_PA1_RUN5_GAM 
Electrona.antarctica_PA1_RUN5_GBM Electrona.antarctica_PA1_RUN5_RF 
Electrona.antarctica_PA1_RUN6_GAM Electrona.antarctica_PA1_RUN6_GBM 
Electrona.antarctica_PA1_RUN6_RF Electrona.antarctica_PA1_RUN7_GAM 
Electrona.antarctica_PA1_RUN7_GBM Electrona.antarctica_PA1_RUN7_RF 
Electrona.antarctica_PA1_RUN8_GAM Electrona.antarctica_PA1_RUN8_GBM 
Electrona.antarctica_PA1_RUN8_RF Electrona.antarctica_PA1_RUN9_GAM 
Electrona.antarctica_PA1_RUN9_GBM Electrona.antarctica_PA1_RUN9_RF 
Electrona.antarctica_PA1_RUN10_GAM Electrona.antarctica_PA1_RUN10_GBM 
Electrona.antarctica_PA1_RUN10_RF Electrona.antarctica_PA2_RUN1_GAM 
Electrona.antarctica_PA2_RUN1_GBM Electrona.antarctica_PA2_RUN1_RF 
Electrona.antarctica_PA2_RUN2_GAM Electrona.antarctica_PA2_RUN2_GBM 
Electrona.antarctica_PA2_RUN2_RF Electrona.antarctica_PA2_RUN3_GAM 
Electrona.antarctica_PA2_RUN3_GBM Electrona.antarctica_PA2_RUN3_RF 
Electrona.antarctica_PA2_RUN4_GAM Electrona.antarctica_PA2_RUN4_GBM 
Electrona.antarctica_PA2_RUN4_RF Electrona.antarctica_PA2_RUN5_GAM 
Electrona.antarctica_PA2_RUN5_GBM Electrona.antarctica_PA2_RUN5_RF 
Electrona.antarctica_PA2_RUN6_GAM Electrona.antarctica_PA2_RUN6_GBM 
Electrona.antarctica_PA2_RUN6_RF Electrona.antarctica_PA2_RUN7_GAM 
Electrona.antarctica_PA2_RUN7_GBM Electrona.antarctica_PA2_RUN7_RF 
Electrona.antarctica_PA2_RUN8_GAM Electrona.antarctica_PA2_RUN8_GBM 
Electrona.antarctica_PA2_RUN8_RF Electrona.antarctica_PA2_RUN9_GAM 
Electrona.antarctica_PA2_RUN9_GBM Electrona.antarctica_PA2_RUN9_RF 
Electrona.antarctica_PA2_RUN10_GAM Electrona.antarctica_PA2_RUN10_GBM 
Electrona.antarctica_PA2_RUN10_RF Electrona.antarctica_PA3_RUN1_GAM 
Electrona.antarctica_PA3_RUN1_GBM Electrona.antarctica_PA3_RUN1_RF 
Electrona.antarctica_PA3_RUN2_GAM Electrona.antarctica_PA3_RUN2_GBM 
Electrona.antarctica_PA3_RUN2_RF Electrona.antarctica_PA3_RUN3_GAM 
Electrona.antarctica_PA3_RUN3_GBM Electrona.antarctica_PA3_RUN3_RF 
Electrona.antarctica_PA3_RUN4_GAM Electrona.antarctica_PA3_RUN4_GBM 
Electrona.antarctica_PA3_RUN4_RF Electrona.antarctica_PA3_RUN5_GAM 
Electrona.antarctica_PA3_RUN5_GBM Electrona.antarctica_PA3_RUN5_RF 
Electrona.antarctica_PA3_RUN6_GAM Electrona.antarctica_PA3_RUN6_GBM 
Electrona.antarctica_PA3_RUN6_RF Electrona.antarctica_PA3_RUN7_GAM 
Electrona.antarctica_PA3_RUN7_GBM Electrona.antarctica_PA3_RUN7_RF 
Electrona.antarctica_PA3_RUN8_GAM Electrona.antarctica_PA3_RUN8_GBM 
Electrona.antarctica_PA3_RUN8_RF Electrona.antarctica_PA3_RUN9_GAM 
Electrona.antarctica_PA3_RUN9_GBM Electrona.antarctica_PA3_RUN9_RF 
Electrona.antarctica_PA3_RUN10_GAM Electrona.antarctica_PA3_RUN10_GBM 
Electrona.antarctica_PA3_RUN10_RF

Failed Models :  none

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

mySDMProj <- BIOMOD_Projection( bm.mod = sdm_model,
                                 new.env = env_filtered,
                                 proj.name = 'modeles_indiv',
                                 models.chosen = 'all',
                                 compress = 'gzip',
                                 build.clamping.mask = T,
                                 output.format = '.tif',
                                 do.stack=T)

# -=-=-=-=-=-=-=-=-=-=-=-=-=-= Do Single Models Projection -=-=-=-=-=-=-=-=-=-=-=-=-=-=

    > Building clamping mask

    > Projecting Electrona.antarctica_PA1_RUN1_GAM ...
    > Projecting Electrona.antarctica_PA1_RUN1_GBM ...
    > Projecting Electrona.antarctica_PA1_RUN1_RF ...
    > Projecting Electrona.antarctica_PA1_RUN2_GAM ...
    > Projecting Electrona.antarctica_PA1_RUN2_GBM ...
    > Projecting Electrona.antarctica_PA1_RUN2_RF ...
    > Projecting Electrona.antarctica_PA1_RUN3_GAM ...
    > Projecting Electrona.antarctica_PA1_RUN3_GBM ...
    > Projecting Electrona.antarctica_PA1_RUN3_RF ...
    > Projecting Electrona.antarctica_PA1_RUN4_GAM ...
    > Projecting Electrona.antarctica_PA1_RUN4_GBM ...
    > Projecting Electrona.antarctica_PA1_RUN4_RF ...
    > Projecting Electrona.antarctica_PA1_RUN5_GAM ...
    > Projecting Electrona.antarctica_PA1_RUN5_GBM ...
    > Projecting Electrona.antarctica_PA1_RUN5_RF ...
    > Projecting Electrona.antarctica_PA1_RUN6_GAM ...
    > Projecting Electrona.antarctica_PA1_RUN6_GBM ...
    > Projecting Electrona.antarctica_PA1_RUN6_RF ...
    > Projecting Electrona.antarctica_PA1_RUN7_GAM ...
    > Projecting Electrona.antarctica_PA1_RUN7_GBM ...
    > Projecting Electrona.antarctica_PA1_RUN7_RF ...
    > Projecting Electrona.antarctica_PA1_RUN8_GAM ...
    > Projecting Electrona.antarctica_PA1_RUN8_GBM ...
    > Projecting Electrona.antarctica_PA1_RUN8_RF ...
    > Projecting Electrona.antarctica_PA1_RUN9_GAM ...
    > Projecting Electrona.antarctica_PA1_RUN9_GBM ...
    > Projecting Electrona.antarctica_PA1_RUN9_RF ...
    > Projecting Electrona.antarctica_PA1_RUN10_GAM ...
    > Projecting Electrona.antarctica_PA1_RUN10_GBM ...
    > Projecting Electrona.antarctica_PA1_RUN10_RF ...
    > Projecting Electrona.antarctica_PA2_RUN1_GAM ...
    > Projecting Electrona.antarctica_PA2_RUN1_GBM ...
    > Projecting Electrona.antarctica_PA2_RUN1_RF ...
    > Projecting Electrona.antarctica_PA2_RUN2_GAM ...
    > Projecting Electrona.antarctica_PA2_RUN2_GBM ...
    > Projecting Electrona.antarctica_PA2_RUN2_RF ...
    > Projecting Electrona.antarctica_PA2_RUN3_GAM ...
    > Projecting Electrona.antarctica_PA2_RUN3_GBM ...
    > Projecting Electrona.antarctica_PA2_RUN3_RF ...
    > Projecting Electrona.antarctica_PA2_RUN4_GAM ...
    > Projecting Electrona.antarctica_PA2_RUN4_GBM ...
    > Projecting Electrona.antarctica_PA2_RUN4_RF ...
    > Projecting Electrona.antarctica_PA2_RUN5_GAM ...
    > Projecting Electrona.antarctica_PA2_RUN5_GBM ...
    > Projecting Electrona.antarctica_PA2_RUN5_RF ...
    > Projecting Electrona.antarctica_PA2_RUN6_GAM ...
    > Projecting Electrona.antarctica_PA2_RUN6_GBM ...
    > Projecting Electrona.antarctica_PA2_RUN6_RF ...
    > Projecting Electrona.antarctica_PA2_RUN7_GAM ...
    > Projecting Electrona.antarctica_PA2_RUN7_GBM ...
    > Projecting Electrona.antarctica_PA2_RUN7_RF ...
    > Projecting Electrona.antarctica_PA2_RUN8_GAM ...
    > Projecting Electrona.antarctica_PA2_RUN8_GBM ...
    > Projecting Electrona.antarctica_PA2_RUN8_RF ...
    > Projecting Electrona.antarctica_PA2_RUN9_GAM ...
    > Projecting Electrona.antarctica_PA2_RUN9_GBM ...
    > Projecting Electrona.antarctica_PA2_RUN9_RF ...
    > Projecting Electrona.antarctica_PA2_RUN10_GAM ...
    > Projecting Electrona.antarctica_PA2_RUN10_GBM ...
    > Projecting Electrona.antarctica_PA2_RUN10_RF ...
    > Projecting Electrona.antarctica_PA3_RUN1_GAM ...
    > Projecting Electrona.antarctica_PA3_RUN1_GBM ...
    > Projecting Electrona.antarctica_PA3_RUN1_RF ...
    > Projecting Electrona.antarctica_PA3_RUN2_GAM ...
    > Projecting Electrona.antarctica_PA3_RUN2_GBM ...
    > Projecting Electrona.antarctica_PA3_RUN2_RF ...
    > Projecting Electrona.antarctica_PA3_RUN3_GAM ...
    > Projecting Electrona.antarctica_PA3_RUN3_GBM ...
    > Projecting Electrona.antarctica_PA3_RUN3_RF ...
    > Projecting Electrona.antarctica_PA3_RUN4_GAM ...
    > Projecting Electrona.antarctica_PA3_RUN4_GBM ...
    > Projecting Electrona.antarctica_PA3_RUN4_RF ...
    > Projecting Electrona.antarctica_PA3_RUN5_GAM ...
    > Projecting Electrona.antarctica_PA3_RUN5_GBM ...
    > Projecting Electrona.antarctica_PA3_RUN5_RF ...
    > Projecting Electrona.antarctica_PA3_RUN6_GAM ...
    > Projecting Electrona.antarctica_PA3_RUN6_GBM ...
    > Projecting Electrona.antarctica_PA3_RUN6_RF ...
    > Projecting Electrona.antarctica_PA3_RUN7_GAM ...
    > Projecting Electrona.antarctica_PA3_RUN7_GBM ...
    > Projecting Electrona.antarctica_PA3_RUN7_RF ...
    > Projecting Electrona.antarctica_PA3_RUN8_GAM ...
    > Projecting Electrona.antarctica_PA3_RUN8_GBM ...
    > Projecting Electrona.antarctica_PA3_RUN8_RF ...
    > Projecting Electrona.antarctica_PA3_RUN9_GAM ...
    > Projecting Electrona.antarctica_PA3_RUN9_GBM ...
    > Projecting Electrona.antarctica_PA3_RUN9_RF ...
    > Projecting Electrona.antarctica_PA3_RUN10_GAM ...
    > Projecting Electrona.antarctica_PA3_RUN10_GBM ...
    > Projecting Electrona.antarctica_PA3_RUN10_RF ...Erreur : [writeRaster] cannot write file

Here are my session info, if it helps:

R version 4.3.2 (2023-10-31 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 11 x64 (build 22631)

Matrix products: default

locale:
[1] LC_COLLATE=French_France.utf8  LC_CTYPE=French_France.utf8   
[3] LC_MONETARY=French_France.utf8 LC_NUMERIC=C                  
[5] LC_TIME=French_France.utf8    

time zone: Europe/Paris
tzcode source: internal

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

other attached packages:
 [1] patchwork_1.2.0      gbm_2.1.9            knitr_1.45          
 [4] beepr_1.3            GGally_2.2.1         sf_1.0-15           
 [7] usdm_2.1-7           terra_1.7-71         orsifronts_0.2.0    
[10] biomod2_4.2-4        RColorBrewer_1.1-3   sdmpredictors_0.2.15
[13] dismo_1.3-14         raster_3.6-26        sp_2.1-3            
[16] rasterVis_0.51.6     lattice_0.22-5       gridExtra_2.3       
[19] ggmap_4.0.0          pacman_0.5.1         lubridate_1.9.3     
[22] forcats_1.0.0        stringr_1.5.1        dplyr_1.1.4         
[25] purrr_1.0.2          readr_2.1.5          tidyr_1.3.1         
[28] tibble_3.2.1         ggplot2_3.4.4        tidyverse_2.0.0     

loaded via a namespace (and not attached):
 [1] DBI_1.2.1              bitops_1.0-7           deldir_2.0-2          
 [4] pastecs_1.4.2          pROC_1.18.5            rlang_1.1.3           
 [7] magrittr_2.0.3         e1071_1.7-14           tidyterra_0.5.2       
[10] compiler_4.3.2         mgcv_1.9-1             systemfonts_1.0.5     
[13] png_0.1-8              vctrs_0.6.5            reshape2_1.4.4        
[16] pkgconfig_2.0.3        labeling_0.4.3         utf8_1.2.4            
[19] markdown_1.12          tzdb_0.4.0             ragg_1.2.7            
[22] xfun_0.42              randomForest_4.7-1.1   jsonlite_1.8.8        
[25] PresenceAbsence_1.1.11 highr_0.10             reshape_0.8.9         
[28] jpeg_0.1-10            parallel_4.3.2         R6_2.5.1              
[31] stringi_1.8.3          boot_1.3-28.1          pkgload_1.3.4         
[34] rpart_4.1.23           maxnet_0.1.4           xgboost_1.7.7.1       
[37] Rcpp_1.0.12            iterators_1.0.14       zoo_1.8-12            
[40] audio_0.1-11           Matrix_1.6-5           splines_4.3.2         
[43] nnet_7.3-19            timechange_0.3.0       tidyselect_1.2.0      
[46] rstudioapi_0.15.0      abind_1.4-5            viridis_0.6.5         
[49] ggtext_0.1.2           codetools_0.2-19       plyr_1.8.9            
[52] withr_3.0.0            evaluate_0.23          survival_3.5-7        
[55] ggstats_0.5.1          units_0.8-5            proxy_0.4-27          
[58] xml2_1.3.6             pillar_1.9.0           TeachingDemos_2.12.1  
[61] KernSmooth_2.23-22     foreach_1.5.2          generics_0.1.3        
[64] hms_1.1.3              commonmark_1.9.1       munsell_0.5.0         
[67] scales_1.3.0           plotmo_3.6.2           class_7.3-22          
[70] glue_1.7.0             mda_0.5-4              tools_4.3.2           
[73] dendextend_1.17.1      interp_1.1-6           hexbin_1.28.3         
[76] data.table_1.15.0      grid_4.3.2             plotrix_3.8-4         
[79] latticeExtra_0.6-30    colorspace_2.1-0       nlme_3.1-164          
[82] earth_5.3.2            Formula_1.2-5          cli_3.6.2             
[85] textshaping_0.3.7      fansi_1.0.6            viridisLite_0.4.2     
[88] ggdendro_0.2.0         gtable_0.3.4           classInt_0.4-10       
[91] farver_2.1.1           lifecycle_1.0.4        httr_1.4.7            
[94] gridtext_0.1.5         MASS_7.3-60.0.1  

I don't understand why it doesn't work, I've never had this error before. Maybe you have seen this error before?

Thanks!

HeleneBlt commented 5 months ago

Hi !

Thank you for reporting this problem and for explaining it so clearly. Indeed, this is not a common issue. My first guess will be that it's a memory issue. Could you try to run BIOMOD_Projection with do.stack = FALSE or with a smaller set of models ?

It can also be a common problem with Windows when the path is too long. Usually, it doesn't return this error message but you can try to move your folder higher in the folder hierarchy to have a shorter path.

If it doesn't solve your problem, I think I will need your data to try to reproduce the problem.

Hope it helps, Hélène

VDjianBiogeo commented 5 months ago

Hi Helene! Thank you for the fast answer.

It ended up working by changing the proj.name to a shorter name. But now, when I do Proj <- biomod2::get_predictions(obj = mySDMProj), I get the error Erreur : [rast] filename is empty. Provide a valid filename. Which is weird because it did write the raster file in the repository. What do you think went wrong?

Valentin

HeleneBlt commented 5 months ago

Hi Valentin !

Glad to know it works. For this second error, you need to precise metric.filter or metric.binary for get_predictions with projections. In your case, as you didn't choose any metrics for your projections, it will be : Proj <- biomod2::get_predictions(mySDMProj, metric.filter = 'Electrona.antarctica.tif')

We probably need to change the warning :sweat_smile:

Hélène

VDjianBiogeo commented 5 months ago

Hi Hélène!

Thank you again for being so steadfast. It works now! I have other issues now on ensemble modelling, but I'll post a new thread if needed.

Thank you again for everything :)

Valentin