predictNMB

predictNMB: An R package to estimate if or when a clinical prediction model is worthwhile - Published in JOSS (2023)

https://github.com/ropensci/predictnmb

Science Score: 100.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 4 DOI reference(s) in README and JOSS metadata
  • Academic publication links
    Links to: joss.theoj.org
  • Committers with academic emails
    2 of 6 committers (33.3%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
    Published in Journal of Open Source Software
Last synced: 4 months ago · JSON representation ·

Repository

Basic Info
Statistics
  • Stars: 10
  • Watchers: 2
  • Forks: 2
  • Open Issues: 0
  • Releases: 3
Created over 3 years ago · Last pushed over 1 year ago
Metadata Files
Readme Changelog Contributing License Citation Codemeta

README.Rmd

---
output: github_document
---



```{r, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-",
  out.width = "100%"
)
set.seed(42)
```

```{r srr, eval = FALSE, echo = FALSE}
#' @srrstats {G1.2}
#' @srrstats {EA1.0} Model developers and decision support implementers
#' @srrstats {EA1.1}
#' @srrstats {EA1.2}
```


# predictNMB 


[![R-CMD-check](https://github.com/ropensci/predictNMB/workflows/R-CMD-check/badge.svg)](https://github.com/ropensci/predictNMB/actions)
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0)
[![Codecov test coverage](https://codecov.io/gh/ropensci/predictNMB/branch/master/graph/badge.svg)](https://app.codecov.io/gh/ropensci/predictNMB?branch=master)
[![Project Status: Active – The project has reached a stable, usable state and is being actively developed.](https://www.repostatus.org/badges/latest/active.svg)](https://www.repostatus.org/#active)
[![Status at rOpenSci Software Peer Review](https://badges.ropensci.org/566_status.svg)](https://github.com/ropensci/software-review/issues/566)
[![DOI](https://joss.theoj.org/papers/10.21105/joss.05328/status.svg)](https://doi.org/10.21105/joss.05328)
[![CRAN status](https://www.r-pkg.org/badges/version/predictNMB)](https://CRAN.R-project.org/package=predictNMB)
[![CRAN downloads](https://cranlogs.r-pkg.org/badges/last-month/predictNMB)](https://www.r-pkg.org/pkg/predictNMB)


## Overview

predictNMB is a tool to evaluate (hypothetical) clinical prediction models based on their estimated Net Monetary Benefit (NMB). It may be used by prediction model developers who intend to find out how performant their model needs to be clinically useful or by those in health services deciding whether or not to implement an existing model.

`{predictNMB}` has two main functions: 

- `do_nmb_sim()`: takes user-defined inputs for a given prediction model and population, then evaluates the NMB by performing simulations.
- `screen_simulation_inputs()`: calls `do_nmb_sim()` many times, using a range of values for any of its inputs. This is useful for sensitivity analysis.

## Installation

You can install the stable version from CRAN with:

``` r
install.packages("predictNMB")
```

You can install the development version from [GitHub](https://github.com/) with:

``` r
# install.packages("remotes")
remotes::install_github("ropensci/predictNMB")

# or, equivalently:
install.packages("predictNMB", repos = "https://ropensci.r-universe.dev")
```

## Estimating model performance

We must first define a hypothetical NMB associated with each square of a confusion matrix (2$\times$2 table). To do this, we create an R function which, when run, returns a named vector representing the four NMB values that we need. Since we are using Quality-adjusted life years lost (`qalys_lost`) due to the event and a willingness to pay (`wtp`) value of \$28,000, this will function will also store some other details so that we can create a cost-effectiveness plot later.

`get_nmb_sampler()` is a `predictNMB` function that makes creating the function easier! If you create these functions without `get_nmb_sampler()`, you can't make the cost-effectiveness plot but can still evaluate in terms of NMB.

Here, we make `NMBsampler` functions for cutpoint selection and evaluation separately. These incorporate uncertainty by passing in functions that sample values from their underlying distributions. The healthcare event leads to about 1 QALY lost, the cost of the treatment is about \$800 and the treatment reduces the rate of the event by about 18%.

```{r}
library(predictNMB)

fx_nmb_training <- get_nmb_sampler(
  wtp = 28033,
  qalys_lost = function() rnorm(n = 1, 1, 0.05), # about 1
  high_risk_group_treatment_effect = function() rbeta(n = 1, 200, 900), # about 0.11
  high_risk_group_treatment_cost = function() rgamma(n = 1, 2400, 3),   # about $800
  use_expected_values = TRUE
)


fx_nmb_evaluation <- get_nmb_sampler(
  wtp = 28033,
  qalys_lost = function() rnorm(n = 1, 1, 0.05),
  high_risk_group_treatment_effect = function() rbeta(n = 1, 200, 900),
  high_risk_group_treatment_cost = function() rgamma(n = 1, 2400, 3)
)
```

We can then pass this to the simulation function.
Required arguments:

- `n_sims`: number of simulations to run. More simulations take longer but are more stable.
- `event_rate`: event incidence rate, or the proportion of patients experiencing the event.
- `sim_auc`: vector of hypothetical AUCs; e.g. `seq(0.7, 0.95, 0.05)` or `c(0.75, 0.80, 0.85)`.
- `n_valid`: number of samples the validation set draws within each simulation (evaluating the NMB under each cutpoint).
- `fx_nmb_training`: function that returns a named vector used to get cutpoints on the training set. Recommended to use constant values.
- `fx_nmb_evaluation`: function that returns a named vector used to get cutpoints on the evaluation set. Recommended to use sampled values.
- `cl`: (Optional) users can pass a cluster made using `parallel::makeCluster()`. If it is given, the simulations are run in parallel (faster).

```{r, eval=FALSE}
library(parallel)
cl <- makeCluster(detectCores())
```

```{r, include=FALSE}
library(parallel)
chk <- Sys.getenv("_R_CHECK_LIMIT_CORES_", "")
if (nzchar(chk) && chk == TRUE) {
  ncores <- 2
} else {
  ncores <- detectCores()
}
cl <- makeCluster(ncores)
```

```{r warning=FALSE}
sim_screen_obj <- screen_simulation_inputs(
  n_sims = 500, n_valid = 10000, sim_auc = seq(0.7, 0.95, 0.05), event_rate = 0.05,
  fx_nmb_training = fx_nmb_training, fx_nmb_evaluation = fx_nmb_evaluation,
  cutpoint_methods = c("all", "none", "youden"), cl = cl
)
```

These simulations can be interpreted as a range of hypothetical situations under different levels of model performance within our specific healthcare setting. We can visualise how this change may affect preferences between the model-guided strategy versus a treat-all or treat-none strategy — in other words, using the model to determine who should get treatment, rather than everyone or no one.

`autoplot()` can be used on the object returned from this function to quickly inspect these trends:

```{r, message=FALSE}
autoplot(sim_screen_obj)
```

Here, we are visualising many simulations under different inputs. If we just want to inspect a single set of inputs, say when the model AUC is 0.9, we can run that simulation alone using `do_nmb_sim()`, or access it from our existing screen.

```{r, eval=F}
single_sim_obj <- do_nmb_sim(
  n_sims = 1000, n_valid = 10000, sim_auc = 0.9, event_rate = 0.1,
  fx_nmb_training = fx_nmb, fx_nmb_evaluation = fx_nmb,
  cutpoint_methods = c("all", "none", "youden"), cl = cl
)
```

```{r}
single_sim_obj <- sim_screen_obj$simulations[[5]]
```

When plotting a single set of simulation inputs, we see the distributions of the NMB across all simulations under each strategy. Note that we have added some tasteful themes using `theme_sim()` that help reduce clutter on these types of plots.

```{r}
autoplot(single_sim_obj) + theme_sim()
```

For this scenario, when the model has an AUC of 0.9, we can see that the NMB is best when using the model-guided decisions. However, decision-makers may want to visualise these on a cost-effectiveness plot which shows the health benefit versus the costs. We can do this using the `ce_plot()` function, specifying the treat-none option as the reference strategy.

```{r}
ce_plot(single_sim_obj, ref_col = "none")
```

From this plot, we can see that both the treat-all and model-guided decision lead to more QALYs than treating nobody (because more patients are receiving an effective treatment) but that the treat-all strategy is not cost-effective according to our cost-effectiveness plane (based on a willingness to pay of \$28,033). Based on this, we would conclude that the hypothetical model-guided decision support system would be likely to be cost-effective should we be able to develop a model with this level of discrimination for this specific healthcare problem/context.

## Citation

```{r}
citation("predictNMB")
```


## Further reading

The [`predictNMB` website](https://docs.ropensci.org/predictNMB/) and its vignettes:

- [Getting started with `predictNMB`](https://docs.ropensci.org/predictNMB/articles/predictNMB.html)
- [Summarising results from `predictNMB`](https://docs.ropensci.org/predictNMB/articles/summarising-results-with-predictNMB.html)
- [Detailed example: pressure injury model](https://docs.ropensci.org/predictNMB/articles/detailed-example.html)
- [Creating NMB functions](https://docs.ropensci.org/predictNMB/articles/creating-nmb-functions.html)

## Contributing

Please note that this package is released with a [Contributor Code of
Conduct](https://ropensci.org/code-of-conduct/). By contributing to this
project, you agree to abide by its terms.

- If you think you have encountered a bug, please [submit an
  issue](https://github.com/ropensci/predictNMB).

- Please include a
  [reprex](https://reprex.tidyverse.org/articles/articles/learn-reprex.html)
  (a minimal, reproducible example) to clearly communicate about your
  code.

Owner

  • Name: rOpenSci
  • Login: ropensci
  • Kind: organization
  • Email: info@ropensci.org
  • Location: Berkeley, CA

JOSS Publication

predictNMB: An R package to estimate if or when a clinical prediction model is worthwhile
Published
April 05, 2023
Volume 8, Issue 84, Page 5328
Authors
Rex Parsons ORCID
Australian Centre for Health Services Innovation and Centre for Healthcare Transformation, School of Public Health and Social Work, Faculty of Health, Queensland University of Technology, Kelvin Grove, Australia
Robin D. Blythe ORCID
Australian Centre for Health Services Innovation and Centre for Healthcare Transformation, School of Public Health and Social Work, Faculty of Health, Queensland University of Technology, Kelvin Grove, Australia
Adrian G. Barnett ORCID
Australian Centre for Health Services Innovation and Centre for Healthcare Transformation, School of Public Health and Social Work, Faculty of Health, Queensland University of Technology, Kelvin Grove, Australia
Susanna M. Cramb ORCID
Australian Centre for Health Services Innovation and Centre for Healthcare Transformation, School of Public Health and Social Work, Faculty of Health, Queensland University of Technology, Kelvin Grove, Australia, Jamieson Trauma Institute, Royal Brisbane and Women’s Hospital, Metro North Health, Herston, Australia
Steven M. McPhail ORCID
Australian Centre for Health Services Innovation and Centre for Healthcare Transformation, School of Public Health and Social Work, Faculty of Health, Queensland University of Technology, Kelvin Grove, Australia, Clinical Informatics Directorate, Metro South Health, Woolloongabba, Australia
Editor
Kevin M. Moerman ORCID
Tags
R package clinical prediction model net monetary benefit cutpoint clinical decision making

Citation (CITATION.cff)

cff-version: "1.2.0"
authors:
- family-names: Parsons
  given-names: Rex
  orcid: "https://orcid.org/0000-0002-6053-8174"
- family-names: Blythe
  given-names: Robin D.
  orcid: "https://orcid.org/0000-0002-3643-4332"
- family-names: Barnett
  given-names: Adrian G.
  orcid: "https://orcid.org/0000-0001-6339-0374"
- family-names: Cramb
  given-names: Susanna M.
  orcid: "https://orcid.org/0000-0001-9041-9531"
- family-names: McPhail
  given-names: Steven M.
  orcid: "https://orcid.org/0000-0002-1463-662X"
doi: 10.5281/zenodo.7793463
message: If you use this software, please cite our article in the
  Journal of Open Source Software.
preferred-citation:
  authors:
  - family-names: Parsons
    given-names: Rex
    orcid: "https://orcid.org/0000-0002-6053-8174"
  - family-names: Blythe
    given-names: Robin D.
    orcid: "https://orcid.org/0000-0002-3643-4332"
  - family-names: Barnett
    given-names: Adrian G.
    orcid: "https://orcid.org/0000-0001-6339-0374"
  - family-names: Cramb
    given-names: Susanna M.
    orcid: "https://orcid.org/0000-0001-9041-9531"
  - family-names: McPhail
    given-names: Steven M.
    orcid: "https://orcid.org/0000-0002-1463-662X"
  date-published: 2023-04-05
  doi: 10.21105/joss.05328
  issn: 2475-9066
  issue: 84
  journal: Journal of Open Source Software
  publisher:
    name: Open Journals
  start: 5328
  title: "predictNMB: An R package to estimate if or when a clinical
    prediction model is worthwhile"
  type: article
  url: "https://joss.theoj.org/papers/10.21105/joss.05328"
  volume: 8
title: "predictNMB: An R package to estimate if or when a clinical
  prediction model is worthwhile"

CodeMeta (codemeta.json)

{
  "@context": "https://doi.org/10.5063/schema/codemeta-2.0",
  "@type": "SoftwareSourceCode",
  "identifier": "predictNMB",
  "description": "Estimates when and where a model-guided treatment strategy may outperform a treat-all or treat-none approach by Monte Carlo simulation and evaluation of the Net Monetary Benefit. Details can be viewed in Parsons et al. (2023) <doi:10.21105/joss.05328>.",
  "name": "predictNMB: Evaluate Clinical Prediction Models by Net Monetary Benefit",
  "codeRepository": "https://github.com/ropensci/predictNMB",
  "issueTracker": "https://github.com/ropensci/predictNMB/issues",
  "license": "https://spdx.org/licenses/GPL-3.0",
  "version": "0.2.1.9000",
  "programmingLanguage": {
    "@type": "ComputerLanguage",
    "name": "R",
    "url": "https://r-project.org"
  },
  "runtimePlatform": "R version 4.3.0 (2023-04-21 ucrt)",
  "provider": {
    "@id": "https://cran.r-project.org",
    "@type": "Organization",
    "name": "Comprehensive R Archive Network (CRAN)",
    "url": "https://cran.r-project.org"
  },
  "author": [
    {
      "@type": "Person",
      "givenName": "Rex",
      "familyName": "Parsons",
      "email": "rex.parsons94@gmail.com",
      "@id": "https://orcid.org/0000-0002-6053-8174"
    },
    {
      "@type": "Person",
      "givenName": "Robin",
      "familyName": "Blythe",
      "@id": "https://orcid.org/0000-0002-3643-4332"
    },
    {
      "@type": "Person",
      "givenName": "Adrian",
      "familyName": "Barnett",
      "@id": "https://orcid.org/0000-0001-6339-0374"
    }
  ],
  "contributor": [
    {
      "@type": "Person",
      "givenName": "Susanna",
      "familyName": "Cramb",
      "@id": "https://orcid.org/0000-0001-9041-9531"
    },
    {
      "@type": "Person",
      "givenName": "Steven",
      "familyName": "McPhail",
      "@id": "https://orcid.org/0000-0002-1463-662X"
    }
  ],
  "maintainer": [
    {
      "@type": "Person",
      "givenName": "Rex",
      "familyName": "Parsons",
      "email": "rex.parsons94@gmail.com",
      "@id": "https://orcid.org/0000-0002-6053-8174"
    }
  ],
  "softwareSuggestions": [
    {
      "@type": "SoftwareApplication",
      "identifier": "spelling",
      "name": "spelling",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=spelling"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "covr",
      "name": "covr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=covr"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "flextable",
      "name": "flextable",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=flextable"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "knitr",
      "name": "knitr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=knitr"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "parallel",
      "name": "parallel"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "pbapply",
      "name": "pbapply",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=pbapply"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "rmarkdown",
      "name": "rmarkdown",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=rmarkdown"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "testthat",
      "name": "testthat",
      "version": ">= 3.0.0",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=testthat"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "vdiffr",
      "name": "vdiffr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=vdiffr"
    },
    {
      "@type": "SoftwareApplication",
      "identifier": "withr",
      "name": "withr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=withr"
    }
  ],
  "softwareRequirements": {
    "1": {
      "@type": "SoftwareApplication",
      "identifier": "assertthat",
      "name": "assertthat",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=assertthat"
    },
    "2": {
      "@type": "SoftwareApplication",
      "identifier": "cutpointr",
      "name": "cutpointr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=cutpointr"
    },
    "3": {
      "@type": "SoftwareApplication",
      "identifier": "dplyr",
      "name": "dplyr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=dplyr"
    },
    "4": {
      "@type": "SoftwareApplication",
      "identifier": "ggplot2",
      "name": "ggplot2",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=ggplot2"
    },
    "5": {
      "@type": "SoftwareApplication",
      "identifier": "magrittr",
      "name": "magrittr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=magrittr"
    },
    "6": {
      "@type": "SoftwareApplication",
      "identifier": "pmsampsize",
      "name": "pmsampsize",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=pmsampsize"
    },
    "7": {
      "@type": "SoftwareApplication",
      "identifier": "rlang",
      "name": "rlang",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=rlang"
    },
    "8": {
      "@type": "SoftwareApplication",
      "identifier": "scales",
      "name": "scales",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=scales"
    },
    "9": {
      "@type": "SoftwareApplication",
      "identifier": "stats",
      "name": "stats"
    },
    "10": {
      "@type": "SoftwareApplication",
      "identifier": "tibble",
      "name": "tibble",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=tibble"
    },
    "11": {
      "@type": "SoftwareApplication",
      "identifier": "tidyr",
      "name": "tidyr",
      "provider": {
        "@id": "https://cran.r-project.org",
        "@type": "Organization",
        "name": "Comprehensive R Archive Network (CRAN)",
        "url": "https://cran.r-project.org"
      },
      "sameAs": "https://CRAN.R-project.org/package=tidyr"
    },
    "12": {
      "@type": "SoftwareApplication",
      "identifier": "R",
      "name": "R",
      "version": ">= 3.5.0"
    },
    "SystemRequirements": null
  },
  "fileSize": "6476.101KB",
  "citation": [
    {
      "@type": "ScholarlyArticle",
      "datePublished": "2023",
      "author": [
        {
          "@type": "Person",
          "givenName": "Rex",
          "familyName": "Parsons"
        },
        {
          "@type": "Person",
          "givenName": [
            "Robin",
            "D"
          ],
          "familyName": "Blythe"
        },
        {
          "@type": "Person",
          "givenName": [
            "Adrian",
            "G"
          ],
          "familyName": "Barnett"
        },
        {
          "@type": "Person",
          "givenName": [
            "Susanna",
            "M"
          ],
          "familyName": "Cramb"
        },
        {
          "@type": "Person",
          "givenName": [
            "Steven",
            "M"
          ],
          "familyName": "McPhail"
        }
      ],
      "name": "predictNMB: An R package to estimate if or when a clinical prediction model is worthwhile",
      "identifier": "10.21105/joss.05328",
      "url": "https://doi.org/10.21105/joss.05328",
      "pagination": "5328",
      "@id": "https://doi.org/10.21105/joss.05328",
      "sameAs": "https://doi.org/10.21105/joss.05328",
      "isPartOf": {
        "@type": "PublicationIssue",
        "issueNumber": "84",
        "datePublished": "2023",
        "isPartOf": {
          "@type": [
            "PublicationVolume",
            "Periodical"
          ],
          "volumeNumber": "8",
          "name": "Journal of Open Source Software"
        }
      }
    }
  ],
  "relatedLink": [
    "https://docs.ropensci.org/predictNMB/",
    "https://CRAN.R-project.org/package=predictNMB"
  ],
  "releaseNotes": "https://github.com/ropensci/predictNMB/blob/master/NEWS.md",
  "readme": "https://github.com/ropensci/predictNMB/blob/master/README.md",
  "contIntegration": [
    "https://github.com/ropensci/predictNMB/actions",
    "https://app.codecov.io/gh/ropensci/predictNMB?branch=master"
  ],
  "developmentStatus": "https://www.repostatus.org/#active",
  "review": {
    "@type": "Review",
    "url": "https://github.com/ropensci/software-review/issues/566",
    "provider": "https://ropensci.org"
  }
}

GitHub Events

Total
Last Year

Committers

Last synced: 5 months ago

All Time
  • Total Commits: 308
  • Total Committers: 6
  • Avg Commits per committer: 51.333
  • Development Distribution Score (DDS): 0.078
Past Year
  • Commits: 0
  • Committers: 0
  • Avg Commits per committer: 0.0
  • Development Distribution Score (DDS): 0.0
Top Committers
Name Email Commits
Rex Parsons 4****s 284
robinblythe r****e@q****u 11
Emi Tanaka d****a@g****m 6
stevenmcphail 1****l 3
Adrian Barnett a****t@q****u 3
Maëlle Salmon m****n@y****e 1
Committer Domains (Top 20 + Academic)

Issues and Pull Requests

Last synced: 4 months ago

All Time
  • Total issues: 3
  • Total pull requests: 5
  • Average time to close issues: 19 days
  • Average time to close pull requests: about 16 hours
  • Total issue authors: 2
  • Total pull request authors: 3
  • Average comments per issue: 2.0
  • Average comments per pull request: 0.2
  • Merged pull requests: 4
  • Bot issues: 1
  • Bot pull requests: 0
Past Year
  • Issues: 0
  • Pull requests: 1
  • Average time to close issues: N/A
  • Average time to close pull requests: 3 days
  • Issue authors: 0
  • Pull request authors: 1
  • Average comments per issue: 0
  • Average comments per pull request: 1.0
  • Merged pull requests: 1
  • Bot issues: 0
  • Bot pull requests: 0
Top Authors
Issue Authors
  • RWParsons (2)
  • github-actions[bot] (1)
Pull Request Authors
  • emitanaka (2)
  • maelle (2)
  • RWParsons (2)
Top Labels
Issue Labels
Pull Request Labels

Dependencies

DESCRIPTION cran
  • cutpointr * imports
  • dplyr * imports
  • ggplot2 * imports
  • magrittr * imports
  • pmsampsize * imports
  • rlang * imports
  • stats * imports
  • tibble * imports
  • tidyr * imports
  • knitr * suggests
  • parallel * suggests
  • rmarkdown * suggests
  • testthat >= 3.0.0 suggests
.github/workflows/R-CMD-check.yaml actions
  • actions/checkout v2 composite
  • r-lib/actions/check-r-package v2 composite
  • r-lib/actions/setup-pandoc v2 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite
.github/workflows/test-coverage.yaml actions
  • actions/checkout v3 composite
  • actions/upload-artifact v3 composite
  • r-lib/actions/setup-r v2 composite
  • r-lib/actions/setup-r-dependencies v2 composite