Skip to content

bug: prepared scenarios must have tmsr values within reasonable range #63

@jacobvjk

Description

@jacobvjk

isf_2023 has some tmsr values = Inf for nuclear power in Turkey. This will lead to errors downstream when using the prepared scenario file in r2dii.analysis::target_market_share():

library(r2dii.data)
library(r2dii.match)
library(r2dii.analysis)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

abcd <- r2dii.data::abcd_demo
lbk <- r2dii.data::loanbook_demo
scenarios_good <- dplyr::filter(r2dii.data::scenario_demo_2020, scenario == "sps", region == "global", sector == "power", dplyr::between(year, 2020, 2025))

print(scenarios_good, n = 36)
#> # A tibble: 36 × 8
#>    scenario sector technology    region  year  tmsr      smsp scenario_source
#>    <chr>    <chr>  <chr>         <chr>  <int> <dbl>     <dbl> <chr>          
#>  1 sps      power  coalcap       global  2020 1      0        demo_2020      
#>  2 sps      power  gascap        global  2020 1      0        demo_2020      
#>  3 sps      power  hydrocap      global  2020 1      0        demo_2020      
#>  4 sps      power  nuclearcap    global  2020 1      0        demo_2020      
#>  5 sps      power  oilcap        global  2020 1      0        demo_2020      
#>  6 sps      power  renewablescap global  2020 1      0        demo_2020      
#>  7 sps      power  coalcap       global  2021 0.983 -0.00307  demo_2020      
#>  8 sps      power  gascap        global  2021 1.01   0.00446  demo_2020      
#>  9 sps      power  hydrocap      global  2021 1.01   0.000883 demo_2020      
#> 10 sps      power  nuclearcap    global  2021 0.986 -0.00132  demo_2020      
#> 11 sps      power  oilcap        global  2021 0.931 -0.00315  demo_2020      
#> 12 sps      power  renewablescap global  2021 1.06   0.0145   demo_2020      
#> 13 sps      power  coalcap       global  2022 0.965 -0.00614  demo_2020      
#> 14 sps      power  gascap        global  2022 1.03   0.00892  demo_2020      
#> 15 sps      power  hydrocap      global  2022 1.01   0.00177  demo_2020      
#> 16 sps      power  nuclearcap    global  2022 0.971 -0.00263  demo_2020      
#> 17 sps      power  oilcap        global  2022 0.863 -0.00631  demo_2020      
#> 18 sps      power  renewablescap global  2022 1.13   0.0290   demo_2020      
#> 19 sps      power  coalcap       global  2023 0.948 -0.00921  demo_2020      
#> 20 sps      power  gascap        global  2023 1.04   0.0134   demo_2020      
#> 21 sps      power  hydrocap      global  2023 1.02   0.00265  demo_2020      
#> 22 sps      power  nuclearcap    global  2023 0.957 -0.00395  demo_2020      
#> 23 sps      power  oilcap        global  2023 0.794 -0.00946  demo_2020      
#> 24 sps      power  renewablescap global  2023 1.19   0.0436   demo_2020      
#> 25 sps      power  coalcap       global  2024 0.930 -0.0123   demo_2020      
#> 26 sps      power  gascap        global  2024 1.06   0.0178   demo_2020      
#> 27 sps      power  hydrocap      global  2024 1.02   0.00353  demo_2020      
#> 28 sps      power  nuclearcap    global  2024 0.943 -0.00527  demo_2020      
#> 29 sps      power  oilcap        global  2024 0.726 -0.0126   demo_2020      
#> 30 sps      power  renewablescap global  2024 1.25   0.0581   demo_2020      
#> 31 sps      power  coalcap       global  2025 0.913 -0.0153   demo_2020      
#> 32 sps      power  gascap        global  2025 1.07   0.0223   demo_2020      
#> 33 sps      power  hydrocap      global  2025 1.03   0.00442  demo_2020      
#> 34 sps      power  nuclearcap    global  2025 0.929 -0.00659  demo_2020      
#> 35 sps      power  oilcap        global  2025 0.657 -0.0158   demo_2020      
#> 36 sps      power  renewablescap global  2025 1.32   0.0726   demo_2020

matched_lbk <- r2dii.match::match_name(lbk, abcd)
matched_lbk_prio <- r2dii.match::prioritize(matched_lbk)

results_good <- r2dii.analysis::target_market_share(
  matched_lbk_prio,
  abcd,
  scenarios_good,
  region_isos = r2dii.data::region_isos_demo
)

scenarios_bad <- dplyr::mutate(scenarios_good, tmsr = dplyr::if_else(year >= 2023 & technology == "nuclearcap", NA_real_, tmsr))

print(scenarios_bad, n = 36)
#> # A tibble: 36 × 8
#>    scenario sector technology    region  year   tmsr      smsp scenario_source
#>    <chr>    <chr>  <chr>         <chr>  <int>  <dbl>     <dbl> <chr>          
#>  1 sps      power  coalcap       global  2020  1      0        demo_2020      
#>  2 sps      power  gascap        global  2020  1      0        demo_2020      
#>  3 sps      power  hydrocap      global  2020  1      0        demo_2020      
#>  4 sps      power  nuclearcap    global  2020  1      0        demo_2020      
#>  5 sps      power  oilcap        global  2020  1      0        demo_2020      
#>  6 sps      power  renewablescap global  2020  1      0        demo_2020      
#>  7 sps      power  coalcap       global  2021  0.983 -0.00307  demo_2020      
#>  8 sps      power  gascap        global  2021  1.01   0.00446  demo_2020      
#>  9 sps      power  hydrocap      global  2021  1.01   0.000883 demo_2020      
#> 10 sps      power  nuclearcap    global  2021  0.986 -0.00132  demo_2020      
#> 11 sps      power  oilcap        global  2021  0.931 -0.00315  demo_2020      
#> 12 sps      power  renewablescap global  2021  1.06   0.0145   demo_2020      
#> 13 sps      power  coalcap       global  2022  0.965 -0.00614  demo_2020      
#> 14 sps      power  gascap        global  2022  1.03   0.00892  demo_2020      
#> 15 sps      power  hydrocap      global  2022  1.01   0.00177  demo_2020      
#> 16 sps      power  nuclearcap    global  2022  0.971 -0.00263  demo_2020      
#> 17 sps      power  oilcap        global  2022  0.863 -0.00631  demo_2020      
#> 18 sps      power  renewablescap global  2022  1.13   0.0290   demo_2020      
#> 19 sps      power  coalcap       global  2023  0.948 -0.00921  demo_2020      
#> 20 sps      power  gascap        global  2023  1.04   0.0134   demo_2020      
#> 21 sps      power  hydrocap      global  2023  1.02   0.00265  demo_2020      
#> 22 sps      power  nuclearcap    global  2023 NA     -0.00395  demo_2020      
#> 23 sps      power  oilcap        global  2023  0.794 -0.00946  demo_2020      
#> 24 sps      power  renewablescap global  2023  1.19   0.0436   demo_2020      
#> 25 sps      power  coalcap       global  2024  0.930 -0.0123   demo_2020      
#> 26 sps      power  gascap        global  2024  1.06   0.0178   demo_2020      
#> 27 sps      power  hydrocap      global  2024  1.02   0.00353  demo_2020      
#> 28 sps      power  nuclearcap    global  2024 NA     -0.00527  demo_2020      
#> 29 sps      power  oilcap        global  2024  0.726 -0.0126   demo_2020      
#> 30 sps      power  renewablescap global  2024  1.25   0.0581   demo_2020      
#> 31 sps      power  coalcap       global  2025  0.913 -0.0153   demo_2020      
#> 32 sps      power  gascap        global  2025  1.07   0.0223   demo_2020      
#> 33 sps      power  hydrocap      global  2025  1.03   0.00442  demo_2020      
#> 34 sps      power  nuclearcap    global  2025 NA     -0.00659  demo_2020      
#> 35 sps      power  oilcap        global  2025  0.657 -0.0158   demo_2020      
#> 36 sps      power  renewablescap global  2025  1.32   0.0726   demo_2020

results_bad <- r2dii.analysis::target_market_share(
  matched_lbk_prio,
  abcd,
  scenarios_bad,
  region_isos = r2dii.data::region_isos_demo
)
#> Error in `check_no_value_is_missing()`:
#> ! Column `tmsr` must not contain any `NA`s.
Created on 2024-12-10 with [reprex v2.1.0](https://reprex.tidyverse.org/)

In general it is hard to see how to calculate a reasonable PACTA result with an infinite value and more practically, the Inf is read in as an NA, when reading the tmsr column as a numerical column.

I think it would be justifiable to exclude combinations of (scenario_source X scenario X sector), if any value for TMSR or SMSP within that combination is not within expected bounds. This should probably mean that at least NA and Inf are not allowed

Open to thoughts on this topic @jdhoffa @cjyetman @Antoine-Lalechere

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugan unexpected problem or unintended behaviorpriority

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions