aggrecat
Methods for mathematically aggregating expert judgements
Science Score: 49.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
✓DOI references
Found 8 DOI reference(s) in README -
✓Academic publication links
Links to: zenodo.org -
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (12.9%) to scientific vocabulary
Keywords
Repository
Methods for mathematically aggregating expert judgements
Basic Info
- Host: GitHub
- Owner: metamelb-repliCATS
- License: other
- Language: R
- Default Branch: master
- Homepage: https://replicats.research.unimelb.edu.au
- Size: 10 MB
Statistics
- Stars: 6
- Watchers: 3
- Forks: 2
- Open Issues: 17
- Releases: 1
Topics
Metadata Files
README.md
README
aggreCAT: methods for mathematically aggregating expert judgements
Problem Context
The use of structured elicitation to inform decision making has grown dramatically across fields like ecology and environmental science over the last decade, as researchers and managers are faced with the need to act rapidly in the face of uncertainty and absent, uninformative data. However, judgements from multiple experts must be aggregated into a single estimate or distribution, and empirical evidence suggests that mathematical aggregation provides more reliable estimates than behavioural consensus models.
Unfortunately, there is a dearth of accessible tools for implementing more complex aggregation methods other than linear averages, which are arguably the most commonly used aggregation method, but may not be the best approach for yielding robust estimates. The lack of readily available aggregation methods severely limits users who may want to utilise alternative aggregation methods more suitable for the task at hand, but who do not have the time or technical capacity to implement.
The availability of methods implemented in R is even more limited, with
the most fully-fledged package
expert being archived from
CRAN in 2022, the SHELF
package implementing only a
single aggregation method (weighted linear pool / arithmetic mean), and
the opera package
aggregating non-point-estimate judgements only (time-series
predictions).
An archived version of expert is still available, however, the package
provides only three aggregation methods, and stipulates a structured
elicitation protocol that ‘calibrates’ experts through the use of seed
questions, which are required as additional input data to the
aggregation functions.
The aggreCAT Package
The aggreCAT package aims to fill this void, implementing 22 unique
state-of-the-art and readily deployable methods for mathematically
aggregating expert judgements, described in Hanea et al. (2021).
Aggregation methods comprise unweighted linear combinations of judgements, weighted linear combinations of judgements where weights are proxies of forecasting performance constructed from characteristics of participants and/or their judgements, and, and Bayesian methods that use expert judgement to update uninformative and informative priors.
Aside from prescribing elicited judgements be derived from any structured elicitation method that does not force behavioural consensus, the aggreCAT package does not force users into adhering to one particular approach to structured expert elicitation. However, some methods are more prescriptive about input data types and the elicitation method used to derive them than others. At minimum, a single point-estimate is required for aggregation, and for some methods, repliCATS IDEA protocol, is required to generate the necessary data as inputs to the aggregation function. The IDEA (Investigate, Discuss, Estimate, Aggregate) protocol generates robust estimates by leveraging the wisdom-of-the-crowd, and is more onerous than collecting only single point-estimates, but generates more robust and reliable estimates.
Installation
You can install:
- the latest development version of
aggreCATpackage:
r
install.packages("devtools")
devtools::install_github("metamelb-repliCATS/aggreCAT")
the most recent official version of
aggreCATfrom CRAN:- TBC! We will upload to CRAN once our manuscript (Gould et al. in prep.) has been submitted.
Then load the package:
r
library(aggreCAT)
Getting Started with aggreCAT
Below we provide a brief summary of the package, for a detailed overview, please consult the manuscript (Gould et al. in prep.).
Core Functionality and Design
Aggregation Functions
Aggregation methods are grouped based on their mathematical properties
into eight ‘wrapper’ functions, denoted by the suffix WAgg, the
abbreviation of “weighted aggregation”: LinearWAgg(), AverageWAgg(),
BayesianWAgg(), IntervalWAgg(), ShiftingWAgg(), ReasoningWAgg(),
DistributionWAgg(), and ExtremisationWAgg().
All wrapper functions adhere to the following basic argument structure:
``` r args(AverageWAgg)
> function (expert_judgements, type = "ArMean", name = NULL, placeholder = FALSE,
> percenttoggle = FALSE, round2_filter = TRUE)
> NULL
```
- expert judgements are contained a dataframe parsed to
expert_judgements, - the
typeargument specifies the specific flavour of the wrapper aggregation function to be executed on theexpert_judgementsdata, with the available aggregation methods detailed in each wrapper function’s help page, e.g.?AverageWAgg, nameallows a user-specified name with which to label the method in the results,- toggling the
placeholderargument toTRUEreturns ‘placeholder’ values, set to $0.65$, - toggling
percent_toggletoTRUEfacilitates aggregating quantities rather than probabilities.
Each aggregation wrapper function returns a dataframe / tibble of
results, with one row or observation per unique judgement task.
Elicitation Data
aggreCAT includes datasets with judgements about the likely
replicability of research claims, collected by the repliCATS
project team as a pilot
study for the DARPA SCORE
program.
Data were elicited using a modified version of the IDEA protocol
(Hemming et al. 2017, Figure 1), whereby participants Investigate,
Discuss, Estimate, and finally Aggregate their judgements using
methods from the aggreCAT package (Fraser et al. 2021). Following the
IDEA protocol, best estimates, and upper and lower bounds are elicited
from each participant, over two rounds. The judgement data is contained
in the object data_ratings, described at ?data_ratings.
A minimal working example with AverageWAgg()
Below we demonstrate how to use the most simple commonly implemented
aggregation method ArMean, which takes the arithmetic mean of
participant Best Estimates. We first use a small subset of 5
participants for a single claim, 28, which is represented visually in
Figure 1.
``` r library(dplyr) data(data_ratings) set.seed(1234)
participantsubset <- dataratings %>% distinct(username) %>% samplen(5) %>% mutate(participant_name = paste("participant", rep(1:n())))
singleclaim <- dataratings %>% filter(paperid == "28") %>% rightjoin(participantsubset, by = "username")
AverageWAgg(expertjudgements = singleclaim, type = "ArMean")
>
> ── AverageWAgg: ArMean ─────────────────────────────────────────────────────────
>
> ── Pre-Processing Options ──
>
> ℹ Round Filter: TRUE
> ℹ Three Point Filter: TRUE
> ℹ Percent Toggle: FALSE
> # A tibble: 1 × 4
> method paperid cs nexperts
>
> 1 ArMean 28 70.8 5
```
Often times during expert elicitation multiple quantities or measures are put to experts to provide judgements for, and so we might want to batch aggregation over more than a single judgement at a time (this time called without explicitly specifying arguments):
``` r data_ratings %>% AverageWAgg()
>
> ── AverageWAgg: ArMean ─────────────────────────────────────────────────────────
>
> ── Pre-Processing Options ──
>
> ℹ Round Filter: TRUE
> ℹ Three Point Filter: TRUE
> ℹ Percent Toggle: FALSE
> # A tibble: 25 × 4
> method paperid cs nexperts
>
> 1 ArMean 100 70.6 25
> 2 ArMean 102 30.8 25
> 3 ArMean 103 62.5 25
> 4 ArMean 104 47.1 25
> 5 ArMean 106 36.5 25
> 6 ArMean 108 71.8 25
> 7 ArMean 109 72.5 25
> 8 ArMean 116 62.6 25
> 9 ArMean 118 54.8 25
> 10 ArMean 133 59.9 25
> # … with 15 more rows
```
And other times, we might want to trial different aggregation methods over those judgements, examining how their mathematical properties might change the results, for example:
r
purrr::map_dfr(.x = list(AverageWAgg, IntervalWAgg, ShiftingWAgg),
.f = ~ .x(data_ratings))
Attribution
This research was conducted as a part of the repliCATS project, funded by the DARPA SCORE programme
The aggreCAT package is the culmination of the hard work and
persistence of a small team of researchers. Use of this package shall be
appropriately attributed and cited accordingly:
``` r citation("aggreCAT")
>
> To cite package 'aggreCAT' in publications use:
>
> Willcox A, Gray C, Gould E, Wilkinson D, Hanea A, Wintle B, E. O'Dea
> R (????). aggreCAT: Mathematically Aggregating Expert Judgments. R
> package version 0.0.0.9002,
> https://replicats.research.unimelb.edu.au/.
>
> A BibTeX entry for LaTeX users is
>
> @Manual{,
> title = {aggreCAT: Mathematically Aggregating Expert Judgments},
> author = {Aaron Willcox and Charles T. Gray and Elliot Gould and David Wilkinson and Anca Hanea and Bonnie Wintle and Rose {E. O'Dea}},
> note = {R package version 0.0.0.9002},
> url = {https://replicats.research.unimelb.edu.au/},
> }
```
References
CodeMeta (codemeta.json)
{
"@context": [
"https://doi.org/10.5063/schema/codemeta-2.0",
"http://schema.org"
],
"@type": "SoftwareSourceCode",
"identifier": "aggreCAT",
"description": "Aggregator methods for confidence scores.",
"name": "aggreCAT: Mathematically Aggregating Expert Judgments",
"license": "https://spdx.org/licenses/MIT",
"version": "0.0.0.9000",
"programmingLanguage": {
"@type": "ComputerLanguage",
"name": "R",
"url": "https://r-project.org"
},
"runtimePlatform": "R version 4.0.3 (2020-10-10)",
"author": [
{
"@type": "Person",
"givenName": "Aaron",
"familyName": "Willcox",
"email": " aaron@willcox.io",
"@id": "https://orcid.org/0000-0003-2536-2596"
},
{
"@type": "Person",
"givenName": "Charles",
"familyName": "Gray",
"@id": "https://orcid.org/00000-0002-9978-011X"
},
{
"@type": "Person",
"givenName": "Elliot",
"familyName": "Gould",
"@id": "https://orcid.org/0000-0002-6585-538X"
},
{
"@type": "Person",
"givenName": "David",
"familyName": "Wilkinson",
"email": "david.wilkinson.research@gmail.com",
"@id": "https://orcid.org/0000-0002-9560-6499"
},
{
"@type": "Person",
"givenName": "Anca",
"familyName": "Hanea",
"@id": "https://orcid.org/0000-0003-3870-5949"
},
{
"@type": "Person",
"givenName": "Bonnie",
"familyName": "Wintle",
"@id": "https://orcid.org/0000-0003-0236-6906"
}
],
"contributor": {},
"copyrightHolder": {},
"funder": {},
"maintainer": [
{
"@type": "Person",
"givenName": "David",
"familyName": "Wilkinson",
"email": "david.wilkinson.research@gmail.com",
"@id": "https://orcid.org/0000-0002-9560-6499"
}
],
"softwareSuggestions": [
{
"@type": "SoftwareApplication",
"identifier": "testthat",
"name": "testthat",
"version": ">= 2.1.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": "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": "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"
}
],
"softwareRequirements": [
{
"@type": "SoftwareApplication",
"identifier": "R",
"name": "R",
"version": ">= 2.10"
},
{
"@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"
},
{
"@type": "SoftwareApplication",
"identifier": "lubridate",
"name": "lubridate",
"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=lubridate"
},
{
"@type": "SoftwareApplication",
"identifier": "neet",
"name": "neet",
"version": ">= 0.0.0.9000",
"sameAs": "https://github.com/softloud/neet"
},
{
"@type": "SoftwareApplication",
"identifier": "nlme",
"name": "nlme",
"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=nlme"
},
{
"@type": "SoftwareApplication",
"identifier": "GoFKernel",
"name": "GoFKernel",
"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=GoFKernel"
},
{
"@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"
},
{
"@type": "SoftwareApplication",
"identifier": "here",
"name": "here",
"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=here"
},
{
"@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"
},
{
"@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"
},
{
"@type": "SoftwareApplication",
"identifier": "readr",
"name": "readr",
"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=readr"
},
{
"@type": "SoftwareApplication",
"identifier": "stringr",
"name": "stringr",
"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=stringr"
},
{
"@type": "SoftwareApplication",
"identifier": "usethis",
"name": "usethis",
"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=usethis"
},
{
"@type": "SoftwareApplication",
"identifier": "purrr",
"name": "purrr",
"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=purrr"
},
{
"@type": "SoftwareApplication",
"identifier": "readxl",
"name": "readxl",
"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=readxl"
},
{
"@type": "SoftwareApplication",
"identifier": "tidyverse",
"name": "tidyverse",
"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=tidyverse"
},
{
"@type": "SoftwareApplication",
"identifier": "huxtable",
"name": "huxtable",
"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=huxtable"
},
{
"@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"
},
{
"@type": "SoftwareApplication",
"identifier": "patchwork",
"name": "patchwork",
"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=patchwork"
},
{
"@type": "SoftwareApplication",
"identifier": "rjags",
"name": "rjags",
"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=rjags"
},
{
"@type": "SoftwareApplication",
"identifier": "tidyverse",
"name": "tidyverse",
"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=tidyverse"
},
{
"@type": "SoftwareApplication",
"identifier": "tidybayes",
"name": "tidybayes",
"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=tidybayes"
},
{
"@type": "SoftwareApplication",
"identifier": "boot",
"name": "boot",
"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=boot"
},
{
"@type": "SoftwareApplication",
"identifier": "R2jags",
"name": "R2jags",
"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=R2jags"
},
{
"@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"
},
{
"@type": "SoftwareApplication",
"identifier": "coda",
"name": "coda",
"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=coda"
},
{
"@type": "SoftwareApplication",
"identifier": "KernSmooth",
"name": "KernSmooth",
"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=KernSmooth"
},
{
"@type": "SoftwareApplication",
"identifier": "stats",
"name": "stats"
},
{
"@type": "SoftwareApplication",
"identifier": "janitor",
"name": "janitor",
"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=janitor"
},
{
"@type": "SoftwareApplication",
"identifier": "mathjaxr",
"name": "mathjaxr",
"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=mathjaxr"
}
],
"codeRepository": "https://github.com/metamelb-repliCATS/aggreCAT",
"readme": "https://github.com/metamelb-repliCATS/aggreCAT/blob/master/README.md",
"fileSize": "203638.969KB",
"contIntegration": "https://travis-ci.com/softloud/aggreCAT"
}
GitHub Events
Total
- Watch event: 1
- Delete event: 3
- Push event: 13
- Pull request event: 7
- Create event: 6
Last Year
- Watch event: 1
- Delete event: 3
- Push event: 13
- Pull request event: 7
- Create event: 6
Dependencies
- R >= 2.10 depends
- GoFKernel * imports
- R2jags * imports
- VGAM * imports
- cli * imports
- coda * imports
- crayon * imports
- dplyr * imports
- ggplot2 * imports
- insight * imports
- magrittr * imports
- mathjaxr * imports
- precrec * imports
- purrr * imports
- rfUtilities * imports
- stringr * imports
- tibble * imports
- tidyr * imports
- BiocStyle * suggests
- DescTools * suggests
- R.rsp * suggests
- covr * suggests
- forcats * suggests
- ggforce * suggests
- ggpubr * suggests
- ggridges * suggests
- gt * suggests
- gtExtras * suggests
- here * suggests
- janitor * suggests
- knitr * suggests
- lubridate * suggests
- nlme * suggests
- pointblank * suggests
- qualtRics * suggests
- readr * suggests
- readxl * suggests
- rjags * suggests
- rmarkdown * suggests
- stats * suggests
- testthat >= 2.1.0 suggests
- tidybayes * suggests
- tidyverse * suggests
- usethis * suggests
- actions/checkout v3 composite
- actions/checkout v3 composite
- quarto-dev/quarto-actions/render v2 composite
- quarto-dev/quarto-actions/setup v2 composite
- actions/checkout v3 composite
- r-lib/actions/setup-r v2 composite
- r-lib/actions/setup-r-dependencies v2 composite