You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: DESCRIPTION
+3-3Lines changed: 3 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -1,14 +1,14 @@
1
1
Package: dynamicpv
2
-
Title: Evaluates Present Values and Cost-Effectiveness with Dynamic Pricing and Uptake
3
-
Version: 0.4.0
2
+
Title: Evaluates Present Values and Health Economic Models with Dynamic Pricing and Uptake
3
+
Version: 0.4.1
4
4
Authors@R: c(
5
5
person("Dominic", "Muston", , "dominic.muston@msd.com", role = c("aut", "cre"),
6
6
comment = c(ORCID = "0000-0003-4876-7940")),
7
7
person("John", "Blischak", role = c("ctb"),
8
8
comment = c(ORCID = "0000-0003-2634-9879")),
9
9
person("Merck & Co., Inc., Rahway, NJ, USA and its affiliates", role = c("cph", "fnd"))
10
10
)
11
-
Description: Evaluates present values and cost-effectiveness with dynamic pricing and uptake.
11
+
Description: The goal of 'dynamicpv' is to provide a simple way to calculate (net) present values and outputs from health economic models (especially cost-effectiveness and budget impact) in discrete time that reflect dynamic pricing and dynamic uptake. Dynamic pricing is also known as life cycle pricing; dynamic uptake is also known as multiple or stacked cohorts, or dynamic disease prevalence. Shafrin (2024) <doi:10.1515/fhep-2024-0014> provides an explanation of dynamic value elements, in the context of Generalized Cost Effectiveness Analysis, and Puls (2024) <doi:10.1016/j.jval.2024.03.006> reviews challenges of incorporating such dynamic value elements. This package aims to reduce those challenges.
Copy file name to clipboardExpand all lines: README.Rmd
+16-6Lines changed: 16 additions & 6 deletions
Original file line number
Diff line number
Diff line change
@@ -21,13 +21,23 @@ knitr::opts_chunk$set(
21
21
[](https://app.codecov.io/gh/MSDLLCpapers/dynamicpv)
22
22
<!-- badges: end -->
23
23
24
-
The goal of *dynamicpv* is to evaluate present values and cost-effectiveness with dynamic pricing and uptake.
24
+
The goal of 'dynamicpv' is to provide a simple way to calculate (net) present values and outputs from health economic models (especially cost-effectiveness and budget impact) in discrete time that reflect dynamic pricing and dynamic uptake.
25
25
26
-
Through the [dynpv()](https://msdllcpapers.github.io/dynamicpv/reference/dynpv.html) function, the package provides calculations of the present values of costs, life years, QALYs or other payoffs allowing for dynamic uptake (also known as multiple cohorts) and dynamic pricing (also known as life-cycle). The starting point is a conventional cohort cost-effectiveness model, such as one computed using the [heemod](https://cran.r-project.org/package=heemod) package.
26
+
Dynamic pricing is also known as life cycle pricing; dynamic uptake is also known as multiple or stacked cohorts, or dynamic disease prevalence. [Shafrin (2024)](https://doi.org/10.1515/fhep-2024-0014) provides an explanation of dynamic value elements, in the context of Generalized Cost Effectiveness Analysis, and [Puls (2024)](https://doi.org/10.1016/j.jval.2024.03.006) reviews challenges of incorporating such dynamic value elements. This package aims to reduce those challenges.
27
+
28
+
Through the [dynpv()](https://msdllcpapers.github.io/dynamicpv/reference/dynpv.html) function, the package provides calculations of the present values of costs, life years, QALYs or other payoffs allowing for dynamic uptake and dynamic pricing. The starting point is a conventional cohort cost-effectiveness model, such as one computed using the [heemod](https://cran.r-project.org/package=heemod) package.
27
29
28
30
## Installation
29
31
30
-
You can install the development version of *dynamicpv* from [GitHub](https://github.com/) as follows. (The package was previously known as *dynacem*, but *dynamicpv* better reflects the package's intent.)
32
+
The package should shortly be available on [CRAN](https://cran.r-project.org/web/packages/index.html). Installing from here is simplest, once available.
33
+
34
+
```{r inst_cran}
35
+
#| eval: false
36
+
# CRAN installation - when available
37
+
install.packages("dynamicpv")
38
+
```
39
+
40
+
You can install the development version of *dynamicpv* from [GitHub](https://github.com/) as follows.
31
41
32
42
```{r instal1}
33
43
#| eval: false
@@ -63,11 +73,11 @@ library(tidyr)
63
73
64
74
There are four vignettes provided.
65
75
66
-
1. The [Dynamic Pricing](https://msdllcpapers.github.io/dynamicpv/articles/dynamic-pricing.html) vignette (`vignette("dynamic-pricing")`) describes how present values may be calculated in the package from a payoff vector, allowing for the prices of the resources costed to be dynamic.
76
+
1. The [Mathematical Framework](https://msdllcpapers.github.io/dynamicpv/articles/math-framework.html) vignette (`vignette("math-framework")`) describes the motivation and mathematical framework behind this package.
67
77
68
-
2. The [Dynamic Uptake](https://msdllcpapers.github.io/dynamicpv/articles/dynamic-uptake.html) vignette (`vignette("dynamic-uptake")`) explores further how present values can be derived allowing for dynamic uptake. This is in contrast to the non-dynamic approach of calculating a present value for a single cohort of patients. This is analogous to the use by general insurance actuaries of run-off triangles.
78
+
2. The [Net Present Value](https://msdllcpapers.github.io/dynamicpv/articles/net-present-value.html) vignette (`vignette("net-present-value")`) describes how the package can be used to derive Net Present Values of simple cashflows with dynamic pricing and/or dynamic uptake.
69
79
70
-
3. The [Cost-Effectiveness Applications](https://msdllcpapers.github.io/dynamicpv/articles/cost-effectiveness-applications.html) (`vignette(cost-effectiveness-applications")`) vignette describes how, given a static cost-effectiveness model (single cohort, prices constant in real terms), Incremental Cost-Effectiveness Ratios may be calculated that allow for dynamic pricing and/or dynamic uptake. This is illustrated by taking an example three-state partitioned survival model of a new intervention for an oncology indication compared to standard of care, with stated assumptions for how pricing and uptake may be dynamic. Nominal and Real ICERs are plotted over time, illustrating the impact of the loss of exclusivity points for each intervention.
80
+
3. The [Cost-Effectiveness Applications](https://msdllcpapers.github.io/dynamicpv/articles/cost-effectiveness-applications.html) (`vignette("cost-effectiveness-applications")`) vignette describes how, given a static cost-effectiveness model (single cohort, prices constant in real terms), Incremental Cost-Effectiveness Ratios may be calculated that allow for dynamic pricing and/or dynamic uptake. This is illustrated by taking an example three-state partitioned survival model of a new intervention for an oncology indication compared to standard of care, with stated assumptions for how pricing and uptake may be dynamic. Nominal and Real ICERs are plotted over time, illustrating the impact of the loss of exclusivity points for each intervention.
71
81
72
82
4. The [Budget Impact Applications](https://msdllcpapers.github.io/dynamicpv/articles/budget-impact-applications.html) (`vignette("budget-impact-applications")`) vignette describes how, given a static cost-effectiveness model (single cohort, prices constant in real terms) and dynamic uptake, a budget impact can be readily calculated. The calculations are repeated with the dynamic pricing assumptions to illustrate how easily this can be done, and examine the differences between a budget impact assessment with and without dynamic pricing.
Copy file name to clipboardExpand all lines: vignettes/budget-impact-applications.Rmd
+54-23Lines changed: 54 additions & 23 deletions
Original file line number
Diff line number
Diff line change
@@ -28,7 +28,35 @@ knitr::knit_hooks$set(
28
28
)
29
29
```
30
30
31
-
## Set-up
31
+
## Introduction
32
+
33
+
Our objective is to evaluate the budget impact of introducing a new intervention, assuming static or dynamic pricing. Uptake in budget impact models is already modeled in a dynamic fashion.
34
+
35
+
## Methods and Assumptions
36
+
37
+
### General assumptions
38
+
39
+
Budget impact models conventionally have no discounting and a shorter time horizon than cost-effectiveness models, so we will use a time horizon of 5 years here and a discount rate of 0\%. We will compute a budget impact model using current pricing (per convention) as well as by using dynamic pricing according to the assumptions previously set.
40
+
41
+
### Dynamic pricing
42
+
43
+
To recap, we had the following assumptions concerning pricing, with a date of calculation of 2025-09-01.
44
+
45
+
- Costs are assumed to increases in line with general inflation (2.5% per year), except for effects on drug acquisition costs due to LoEs.
46
+
- The LoE for the SoC is assumed to occur first, at 2028-01-01, after which there is anticipated to be a 70% reduction in prices over one year.
47
+
- The new intervention has an LoE occuring three years later, at 2031-01-01, after which there would be a 50% reduction in prices over one year.
48
+
49
+
### Dynamic uptake
50
+
51
+
We had the following assumptions concerning patient uptake.
52
+
53
+
- Only newly incident patients with the cancer being modeled would be eligible for the new treatment. Existing/prevalent patients with the condition would not be eligible.
54
+
- The disease incidence is 1 patient per week.
55
+
- Among these patients, were the new intervention to be made available, uptake of the new intervention would be expected to rise linearly from 0% to 100% after 2 years.
56
+
57
+
## Implementation
58
+
59
+
### Set-up
32
60
33
61
First we load the packages necessary for this vignette.
Then let us suppose we have the same cost-effectiveness model and variables as set-up in `vignette("cost-effectiveness-applications")`.
308
-
309
-
## Methods
310
-
311
-
The package allows us the ability to derive budget impact model calculations consistent with the cost-effectiveness model shown previously.
312
-
313
-
To recap, we had the following assumptions concerning pricing, with a date of calculation of 2025-09-01.
314
-
315
-
- Costs are assumed to increases in line with general inflation (2.5% per year), except for effects on drug acquisition costs due to LoEs.
316
-
- The LoE for the SoC is assumed to occur first, at 2028-01-01, after which there is anticipated to be a 70% reduction in prices over one year.
317
-
- The new intervention has an LoE occuring three years later, at 2031-01-01, after which there would be a 50% reduction in prices over one year.
318
-
319
-
We had the following assumptions concerning patient uptake.
320
-
321
-
- Only newly incident patients with the cancer being modeled would be eligible for the new treatment. Existing/prevalent patients with the condition would not be eligible.
322
-
- The disease incidence is 1 patient per week.
323
-
- Among these patients, were the new intervention to be made available, uptake of the new intervention would be expected to rise linearly from 0% to 100% after 2 years.
324
-
325
-
Budget impact models conventionally have no discounting and a shorter time horizon than cost-effectiveness models, so we will use a time horizon of 5 years here and a discount rate of 0\%. We will compute a budget impact model using current pricing (per convention) as well as by using dynamic pricing according to the assumptions previously set.
334
+
The underlying health economic model is built as described in `vignette("cost-effectiveness-applications")`. We require additional coding for the budget impact evaluation.
Note the warning provided by `dynamicpv`. This is because the uptake vector for SoC, when trimmed of zeroes after uptake stops, has a different (shorter) length than the uptake vector for the new intervention. The calculation is still correct. However, the function is flagging for the user the different uptake vectors being used for different present value calculations.
438
+
439
+
```{r warnlength}
440
+
# The uptake vector for the new intervention is long
441
+
length(trim_vec(uptake_new))
442
+
443
+
# The uptake vector for the SoC is short, once trimmed of excess zeros
444
+
length(trim_vec(uptake_soc))
445
+
```
446
+
447
+
The budgetary costs in the world with the new intervention are $`r total(budget_with1)`, comprising $`r total(budget_with1_soc)` in respect of the costs of `r uptake(budget_with1_soc)` patients being treated with the SoC, and $`r total(budget_with1_new)` in respect of the costs of `r uptake(budget_with1_new)` patients being treated with the SoC.
426
448
449
+
```{r bim_iwith1}
427
450
# Budget impact
428
451
bi1_soc <- budget_with1_soc - budget_wout1_soc
429
452
bi1_new <- budget_with1_new
430
453
bi1 <- budget_with1 - budget_wout1
454
+
455
+
summary(bi1)
431
456
```
432
457
433
-
The budgetary costs in the world with the new intervention are $`r total(budget_with1)`, comprising $`r total(budget_with1_soc)` in respect of the costs of `r uptake(budget_with1_soc)` patients being treated with the SoC, and $`r total(budget_with1_new)` in respect of the costs of `r uptake(budget_with1_new)` patients being treated with the SoC. The total budget impact is $`r total(bi1)`, representing an increase of `r total(bi1)/total(budget_wout1) *100`%.
458
+
The total budget impact is $`r total(bi1)`, representing an increase of `r total(bi1)/total(budget_wout1) *100`%.
Notice that there is a similar warning as earlier. The budgetary costs in the world with the new intervention are $`r total(budget_with2)`, comprising $`r total(budget_with2_soc)` in respect of the costs of `r uptake(budget_with2_soc)` patients being treated with the SoC, and $`r total(budget_with2_new)` in respect of the costs of `r uptake(budget_with2_new)` patients being treated with the new treatment.
493
521
522
+
```{r bim_iwith2}
494
523
# Budget impact
495
524
bi2_soc <- budget_with2_soc - budget_wout2_soc
496
525
bi2_new <- budget_with2_new
497
526
bi2 <- budget_with2 - budget_wout2
527
+
528
+
summary(bi2)
498
529
```
499
530
500
-
The budgetary costs in the world with the new intervention are $`r total(budget_with2)`, comprising $`r total(budget_with2_soc)` in respect of the costs of `r uptake(budget_with2_soc)` patients being treated with the SoC, and $`r total(budget_with2_new)` in respect of the costs of `r uptake(budget_with2_new)` patients being treated with the new treatment. The total budget impact is $`r total(bi2)`, representing an increase of `r total(bi2)/total(budget_wout2) *100`%.
531
+
The total budget impact is $`r total(bi2)`, representing an increase of `r total(bi2)/total(budget_wout2) *100`%.
0 commit comments