The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]dogado.de.

Costing a reuse scenario

library(ambre)
set.seed(2024)

Safety is not the only thing that decides a reuse scheme – someone has to pay for it. Alongside the health assessment, ambre estimates what a scenario costs: the up-front investment and the yearly bill of the barriers it puts in place. This vignette walks through that costing. It pairs naturally with the risk side in vignette("b-initial-vs-new-scenario", package = "ambre") – the whole point being to weigh what each strategy buys against what it costs.

The three levers

run_economic_analysis() takes your scenario plus three financial parameters and boolean to indicate to calculate cost for initial situation supplementary process:

run_economic_analysis(scenario, membership_fee, 
                      price_per_m3, grant, initialSituation = FALSE)

What the model computes

Before any cost, run_economic_analysis() calls irrigation_need_calculation() to work out how much water each row needs (from its crop and area). It then splits the bill along two axes:

The per-barrier unit prices come from config_ambre$economic$cost, each with a unit string (€/m3, €/ha, €/ml of perimeter, €/p per person…):

config_ambre$economic$cost[, c("TreatmentName", "CostType", "value", "unit")] |>
  head(8)
#> # A tibble: 8 × 4
#>   TreatmentName            CostType value unit  
#>   <chr>                    <chr>    <dbl> <chr> 
#> 1 Q.1 - Activated Sludge   capex    NA    €/m3  
#> 2 Q.1 - Activated Sludge   opex     NA    €/m3/y
#> 3 Q.2 - Maturation Pond    capex     3.5  €/m3  
#> 4 Q.2 - Maturation Pond    opex      0.07 €/m3/y
#> 5 Q.3 - UV Reactor         capex     1.8  €/m3  
#> 6 Q.3 - UV Reactor         opex      0.21 €/m3/y
#> 7 Q.4 - Sand Filter and UV capex     2.8  €/m3  
#> 8 Q.4 - Sand Filter and UV opex      0.28 €/m3/y

Run it

Use a richer example than the two-row starter – the learning case has six rows:

scenario <- create_scenario(
  system.file("input_1culture_2pop.xlsx", package = "ambre")
)
plots <- run_economic_analysis(
  scenario,
  membership_fee = 200,   # €/ha/year
  price_per_m3   = 0.1,   # €/m3
  grant          = 0.5,    # half the capital cost is subsidised,
  initialSituation = FALSE # calcul the cost of Supplementary process
)

It returns two ggplots and the allocation key table. Annual cost compares the recurring yearly bill of the situation considered (initial situation or new scenario):

plots$annual

Capex compares their up-front investment:

plots$total_investement

This graph is display only if initialSituation = FALSE, as the initial situation corresponds to the current situation and therefore does not require any investment.

plots$allocation_key
#>   grant  CropName allocation
#> 1   0.5    Tomato     0.1111
#> 2   0.5 Corn seed     0.3889

This allocation key is calculated by default in function collective_treatment_cost, but it can be customised by the user using parameter allocation_key, which is set to NULL by default. This parameter accepts a vector of percentage values of the same size as the number of simulated crops.


crop <- scenario$CropName
allocation_custom <- data.frame(CropName = crop,
                                allocation = c(0.5, 0.5))
run_economic_analysis(
  scenario,
  membership_fee = 200,   
  price_per_m3   = 0.1,   
  grant          = 0,   
  initialSituation = FALSE, 
  allocation_key = allocation_custom # No subvention, collective treatment price 50% for each crop
)
#> $annual

#> 
#> $total_investement

#> 
#> $allocation_key
#>   grant  CropName allocation
#> 1     0    Tomato        0.5
#> 2     0 Corn seed        0.5

Getting the underlying numbers

The run_ function returns only plots. To get the figures behind them, call the costing functions yourself. They expect the scenario to carry its irrigation need first, so run irrigation_need_calculation() before them:

scenario_need <- irrigation_need_calculation(scenario)

water_price <- water_price(scenario = scenario_need,
                          price_per_m3 = 0.01,
                          membership_fee = 200)
supplementary_cost <- process_cost_calculation(scenario = scenario_need,
                                              membership_fee = 200,
                                              charge = 0.1,
                                              initialSituation = FALSE)

Each returns the scenario augmented with cost columns; the added columns are the ones to inspect:

setdiff(names(water_price), names(supplementary_cost))
#> [1] "water_charge"          "annual_membership_fee"

Caveats worth flagging

Adapting the cost base

The prices are not hard-coded in the functions – they live in a CSV. To cost a scheme for your own territory, edit data-raw/ambre_barriere_cout.csv (keeping the unit convention), then rebuild the bundled dataset by sourcing data-raw/config_ambre.R. The next run_economic_analysis() will use your numbers. The database and this rebuild step are described in vignette("h-config-ambre", package = "ambre").

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.
Health stats visible at Monitor.