Type: Package
Title: An Empirical Bayes Method for Chi-Squared Data
Version: 0.1.1
Author: Lilun Du [aut, cre], Inchi Hu [aut]
Maintainer: Lilun Du <lilundu@cityu.edu.hk>
Description: We provide the main R functions to compute the posterior interval for the noncentrality parameter of the chi-squared distribution. The skewness estimate of the posterior distribution is also available to improve the coverage rate of posterior intervals. Details can be found in Du and Hu (2022) <doi:10.1080/01621459.2020.1777137>.
License: MIT + file LICENSE
Encoding: UTF-8
URL: https://github.com/dulilun/EBCHS
RoxygenNote: 7.3.3
Imports: stats, pracma, splines, fda
Suggests: testthat
NeedsCompilation: no
Packaged: 2026-02-13 23:48:05 UTC; dulilun
Repository: CRAN
Date/Publication: 2026-02-14 14:50:02 UTC

Main function used in the paper (Du and Hu, 2022)

Description

Give a sequence of chi-squared statistic values, the function computes the posterior mean, variance, and skewness of the non-centrality parameter given the data.

Usage

EB_CS(
  x,
  df,
  qq = c(0.2, 0.4, 0.6, 0.8),
  method = c("LS", "PLS", "g_model"),
  mixture = FALSE
)

Arguments

x

a sequence of chi-squared test statistics

df

the degrees of freedom

qq

the quantiles used in spline basis

method

LS: parametric least-squares; PLS: penalized least-squares; g-model: g-modeling

mixture

default is FALSE: there is no point mass at zero.

Value

a list: posterior mean, variance, and skewness estimates

References

Du and Hu (2022), An Empirical Bayes Method for Chi-Squared Data, Journal of American Statistical Association, forthcoming.

Examples

p = 1000
k = 7
# the prior distribution for lambda
alpha = 2
beta =  10
# lambda
lambda = rep(0, p)
pi_0 = 0.8
p_0 = floor(p*pi_0)
p_1 = p-p_0
lambda[(p_0+1):p] = rgamma(p_1, shape = alpha, rate=1/beta)
# Generate a Poisson RV
J = sapply(1:p, function(x){rpois(1, lambda[x]/2)})
X = sapply(1:p, function(x){rchisq(1, k+2*J[x])})
qq_set = seq(0.01, 0.99, 0.01)
out = EB_CS(X, k, qq=qq_set, method='LS', mixture = TRUE)
E = out$E_lambda
V = out$V_lambda
S = out$S_lambda


log-density derivatives–parametric approach

Description

Assuming the log density of the chi-squared statistics admits a parametric form, this function estimates up to the fourth order log-density derivatives.

Usage

density_LS(x)

Arguments

x

a sequence of chi-squared test statistics

Value

a list: the first-to-fourth log density derivatives

Examples

p = 1000
k = 7
# the prior distribution for lambda
alpha = 2
beta =  10
# lambda
lambda = rep(0, p)
pi_0 = 0.8
p_0 = floor(p*pi_0)
p_1 = p-p_0
lambda[(p_0+1):p] = stats::rgamma(p_1, shape = alpha, rate=1/beta)
# Generate a Poisson RV
J = sapply(1:p, function(x){rpois(1, lambda[x]/2)})
X = sapply(1:p, function(x){rchisq(1, k+2*J[x])})
out = density_LS(X)


Penalized least-squares method in Du and Hu (2022)

Description

The semiparametric model is employed to estimate the log density derivatives of the chi-squared statistics.

Usage

density_PLS(x, qq)

Arguments

x

a sequence of chi-squared test statistics

qq

the quantiles used for splines

Value

a list: the first and second density derivatives

Examples

p = 1000
k = 7
# the prior distribution for lambda
alpha = 2
beta =  10
# lambda
lambda = rep(0, p)
pi_0 = 0.5
p_0 = floor(p*pi_0)
p_1 = p-p_0
lambda[(p_0+1):p] = stats::rgamma(p_1, shape = alpha, rate=1/beta)
# Generate a Poisson RV
J = sapply(1:p, function(x){rpois(1, lambda[x]/2)})
X = sapply(1:p, function(x){rchisq(1, k+2*J[x])})
qq = c(0.2, 0.4, 0.6, 0.8)
out = density_PLS(X, qq)


The l_1 to l_4 derivative from the g-modeling method

Description

The l_1 to l_4 derivative from the g-modeling method

Usage

density_g_model(x, k, pi_0, lambda_set, g_prior)

Arguments

x

a sequence of chi-squared test statistics

k

degrees of freedom

pi_0

the proportion of the null

lambda_set

the set of noncentrality values

g_prior

the prior probability for the noncentrality values

Value

a list: the margianl density, and its first-to-fourth derivatives


Predictive recursion by Newton (2002)

Description

Predictive recursion by Newton (2002)

Usage

predictive_recursion(x, k)

Arguments

x

a sequence of chi-squared test statistics

k

degrees of freedom

Value

a list: null proportion, prior probability, and lambda-mesh values

Examples

set.seed(2021)
p = 1000
k = 7
# the prior distribution for lambda
alpha = 2
beta =  10
# lambda
lambda = rep(0, p)
pi_0 = 0
p_0 = floor(p*pi_0)
p_1 = p-p_0
lambda[(p_0+1):p] = stats::rgamma(p_1, shape = alpha, rate=1/beta)
# Generate a Poisson RV
J = sapply(1:p, function(x){rpois(1, lambda[x]/2)})
X = sapply(1:p, function(x){rchisq(1, k+2*J[x])})
out = predictive_recursion(X, k)