Calculate the p-value for an omnibus GFisher test, which combines multiple GFisher statistics using either Cauchy combination or multivariate normal distribution.

pval.oGFisher(
  p,
  DF,
  W,
  M,
  p.type = "two",
  method = "HYB",
  combine = "cct",
  nsim = NULL,
  seed = NULL
)

Arguments

p

A numeric vector of input p-values for the oGFisher test.

DF

A matrix of degrees of freedom for inverse chi-square transformation for each p-value. Each row represents a GFisher test.

W

A matrix of non-negative weights. Each row represents a GFisher test.

M

Correlation matrix of the input Z-scores from which the input p-values were obtained.

p.type

Character string: "two" for two-sided (default), "one" for one-sided input p-values.

method

Character string specifying calculation method:

  • "MR": Simulation-assisted moment ratio matching

  • "HYB": Moment ratio matching by quadratic approximation (default)

  • "GB": Brown's method with calculated variance

combine

Character string specifying combination method:

  • "cct": oGFisher using the Cauchy combination test (default)

  • "mvn": oGFisher using multivariate normal distribution (minimum p-value approach)

nsim

Number of simulations used in the "MR" method. Default is 5e4.

seed

Optional seed for random number generation. Default is NULL.

Value

A list with the following components:

stat

The test statistic: CCT statistic if combine = "cct", or minimum p-value if combine = "mvn"

pval

The p-value of the oGFisher test

pval_indi

Vector of individual p-values for each GFisher test

stat_indi

Vector of individual GFisher statistics

Details

Compute the oGFisher Test P-Value

This function performs the omnibus GFisher test by:

  1. Computing individual GFisher statistics and p-values for each test configuration

  2. Combining these p-values using either:

    • CCT (Cauchy Combination Test): Robust to dependence, analytically tractable

    • MVN (Multivariate Normal): Uses correlation structure to compute minimum p-value distribution

Cauchy Combination Method (combine = "cct"):

The CCT approach is preferred when the individual tests may be highly dependent. The p-value is calculated as \(P(\text{Cauchy} > \text{cct})\) where cct is the Cauchy combination statistic from stat.oGFisher.

Minimum P-Value Method (combine = "mvn"):

This approach accounts for the correlation among GFisher tests using their theoretical correlation matrix (computed via getGFisherCOR). The p-value is: $$P = 1 - P(\text{all normalized p-values} > \Phi^{-1}(1-\text{minp}))$$ where the probability is computed using the multivariate normal distribution.

References

Zhang, H., & Wu, Z. (2023). The generalized Fisher's combination and accurate p-value calculation under dependence. Biometrics, 79(2), 1159-1172.

Liu, Y., & Xie, J. (2020). Cauchy combination test: a powerful test with analytic p-value calculation under arbitrary dependency structures. Journal of the American Statistical Association, 115(529), 393-402.

Author

Hong Zhang, Zheyang Wu

Examples

# Example: oGFisher test with Cauchy combination
set.seed(123)
n <- 10
M <- matrix(0.3, n, n) + diag(0.7, n, n)
zscore <- matrix(rnorm(n), nrow = 1) %*% chol(M)
pval <- 2 * (1 - pnorm(abs(zscore)))

# Define multiple GFisher tests
DF <- rbind(rep(1, n), rep(2, n))
W <- rbind(rep(1, n), 1:10)

# CCT combination
result_cct <- pval.oGFisher(pval, DF, W, M, p.type = "two",
                             method = "HYB", combine = "cct")
print(result_cct)
#> $stat
#> [1] -0.9173186
#> 
#> $pval
#> [1] 0.7362819
#> 
#> $pval_indi
#> [1] 0.7410839 0.7313432
#> 
#> $stat_indi
#> [1] 0.5928568 1.3687900
#> 

# MVN combination (minimum p-value)
result_mvn <- pval.oGFisher(pval, DF, W, M, p.type = "two",
                             method = "HYB", combine = "mvn")
print(result_mvn)
#> $stat
#> [1] 0.7313432
#> 
#> $pval
#> [1] 0.7800525
#> 
#> $pval_indi
#> [1] 0.7410839 0.7313432
#> 
#> $stat_indi
#> [1] 0.5928568 1.3687900
#> 

# Alternative: single df per test
DF_short <- rbind(1, 2)
result <- pval.oGFisher(pval, DF = DF_short, W, M, p.type = "two",
                        method = "HYB", combine = "cct")