SAFFRONstar {onlineFDR} | R Documentation

## SAFFRONstar: Adaptive online mFDR control for asynchronous testing

### Description

Implements the SAFFRON algorithm for asynchronous online testing, as presented by Zrnic et al. (2021).

### Usage

    SAFFRONstar(
      d,
      alpha = 0.05,
      version,
      gammai,
      w0,
      lambda = 0.5,
      batch.sizes,
      discard = FALSE,
      tau.discard = 0.5,
      display_progress = FALSE
    )

### Arguments

`d` | Either a vector of p-values, or a dataframe with three columns: an identifier (‘id’), p-value (‘pval’), and either decision.times', or ‘lags’, depending on which version you're using. See version for more details.
`alpha` | Overall significance level of the procedure, the default is 0.05.
`version` | Takes values 'async', 'dep' or 'batch'. This specifies the version of SAFFRONstar to use. `version='async'` requires a column of decision times (‘decision.times’). `version='dep'` requires a column of lags (‘lags’). `version='batch'` requires a vector of batch sizes (‘batch.sizes’).
`gammai` | Optional vector of γ_i. A default is provided with γ_j proportional to 1/j^(1.6).
`w0` | Initial ‘wealth’ of the procedure, defaults to α/10.
`lambda` | Optional threshold for a ‘candidate’ hypothesis, must be between 0 and 1. Defaults to 0.5.
`batch.sizes` | A vector of batch sizes, this is required for `version='batch'`.
`discard` | Logical. If `TRUE` then runs the ADDIS algorithm with adaptive discarding of conservative nulls. The default is `FALSE`.
`tau.discard` | Optional threshold for hypotheses to be selected for testing. Must be between 0 and 1, defaults to 0.5. This is required if `discard=TRUE`.
`display_progress` | Logical. If `TRUE` prints out a progress bar for the algorithm runtime.

### Details

The function takes as its input either a vector of p-values, or a dataframe with three columns: an identifier (‘id’), p-value (‘pval’), or a column describing the conflict sets for the hypotheses. This takes the form of a vector of decision times or lags. Batch sizes can be specified as a separate argument (see below).

Zrnic et al. (2021) present explicit three versions of SAFFRONstar:

1) `version='async'` is for an asynchronous testing process, consisting of tests that start and finish at (potentially) random times. The discretised finish times of the test correspond to the decision times. These decision times are given as the input `decision.times` for this version of the SAFFRONstar algorithm. For this version of SAFFRONstar, Tian and Ramdas (2019) presented an algorithm that can improve the power of the procedure in the presence of conservative nulls by adaptively ‘discarding’ these p-values. This can be called by setting the option `discard=TRUE`.

2) `version='dep'` is for online testing under local dependence of the p-values. More precisely, for any t>0 we allow the p-value p_t to have arbitrary dependence on the previous L_t p-values. The fixed sequence L_t is referred to as ‘lags’, and is given as the input `lags` for this version of the SAFFRONstar algorithm.

3) `version='batch'` is for controlling the mFDR in mini-batch testing, where a mini-batch represents a grouping of tests run asynchronously which result in dependent p-values. Once a mini-batch of tests is fully completed, a new one can start, testing hypotheses independent of the previous batch. The batch sizes are given as the input `batch.sizes` for this version of the SAFFRONstar algorithm.

Given an overall significance level α, SAFFRONstar depends on constants w_0 and λ, where w_0 satisfies 0 ≤ w_0 ≤ (1 - λ)α and represents the intial ‘wealth’ of the procedure, and 0 < λ < 1 represents the threshold for a ‘candidate’ hypothesis. A ‘candidate’ refers to p-values smaller than λ, since SAFFRONstar will never reject a p-value larger than λ. The algorithms also require a sequence of non-negative non-increasing numbers γ_i that sum to 1.

Note that these SAFFRONstar algorithms control the modified FDR (mFDR). The ‘async’ version also controls the usual FDR if the p-values are assumed to be independent.

Further details of the SAFFRONstar algorithms can be found in Zrnic et al. (2021).

### Value

`out` | A dataframe with the original p-values `pval`, the adjusted testing levels α_i and the indicator function of discoveries `R`. Hypothesis i is rejected if the i-th p-value is less than or equal to α_i, in which case `R[i] = 1` (otherwise `R[i] = 0`).

### References

Zrnic, T., Ramdas, A. and Jordan, M.I. (2018). Asynchronous Online Testing of Multiple Hypotheses. arXiv preprint, https://arxiv.org/abs/1812.05068.

Zrnic, T., Ramdas, A. and Jordan, M.I. (2021). Asynchronous Online Testing of Multiple Hypotheses. Journal of Machine Learning Research (to appear), https://arxiv.org/abs/1812.05068.

### See Also

`SAFFRON` presents versions of SAFFRON for synchronous p-values, i.e. where each test can only start when the previous test has finished.

If `version='async'` and `discard=TRUE`, then SAFFRONstar is identical to `ADDIS` with option `async=TRUE`.

### Examples

    sample.df <- data.frame(
    id = c('A15432', 'B90969', 'C18705', 'B49731', 'E99902',
        'C38292', 'A30619', 'D46627', 'E29198', 'A41418',
        'D51456', 'C88669', 'E03673', 'A63155', 'B66033'),
    pval = c(2.90e-08, 0.06743, 0.01514, 0.08174, 0.00171,
            3.60e-05, 0.79149, 0.27201, 0.28295, 7.59e-08,
            0.69274, 0.30443, 0.00136, 0.72342, 0.54757),
    decision.times = seq_len(15) + 1)

    SAFFRONstar(sample.df, version='async')

    sample.df2 <- data.frame(
    id = c('A15432', 'B90969', 'C18705', 'B49731', 'E99902',
        'C38292', 'A30619', 'D46627', 'E29198', 'A41418',
        'D51456', 'C88669', 'E03673', 'A63155', 'B66033'),
    pval = c(2.90e-08, 0.06743, 0.01514, 0.08174, 0.00171,
            3.60e-05, 0.79149, 0.27201, 0.28295, 7.59e-08,
            0.69274, 0.30443, 0.00136, 0.72342, 0.54757),
    lags = rep(1,15))

    SAFFRONstar(sample.df2, version='dep')

[Package onlineFDR version 2.2.0 Index]