p_chisq.test: p-value from chi-squared test simulation

View source: R/p_chisq.test.R

p_chisq.testR Documentation

p-value from chi-squared test simulation

Description

Generates multinomial data suitable for analysis with chisq.test.

Usage

p_chisq.test(
  n,
  w,
  df,
  correct = TRUE,
  P0 = NULL,
  P = NULL,
  gen_fun = gen_chisq.test,
  ...
)

gen_chisq.test(n, P, ...)

Arguments

n

sample size per group

w

Cohen's w effect size

df

degrees of freedom

correct

logical; apply continuity correction?

P0

specific null pattern, specified as a numeric vector or matrix

P

specific power configuration, specified as a numeric vector or matrix

gen_fun

function used to generate the required discrete data. Object returned must be a matrix with k rows and k columns of counts. Default uses gen_chisq.test. User defined version of this function must include the argument ...

...

additional arguments to be passed to gen_fun. Not used unless a customized gen_fun is defined

Value

a single p-value

Author(s)

Phil Chalmers rphilip.chalmers@gmail.com

See Also

gen_chisq.test

Examples


# effect size w + df
p_chisq.test(100, w=.2, df=3)

# vector of explicit probabilities (goodness of fit test)
p_chisq.test(100, P0 = c(.25, .25, .25, .25),
                   P = c(.6, .2, .1, .1))

# matrix of explicit probabilities (two-dimensional test of independence)
p_chisq.test(100, P0 = matrix(c(.25, .25, .25, .25), 2, 2),
                   P = matrix(c(.6, .2, .1, .1),2,2))


    # compare simulated results to pwr package

    P0 <- c(1/3, 1/3, 1/3)
    P <- c(.5, .25, .25)
    w <- pwr::ES.w1(P0, P)
    df <- 3-1
    pwr::pwr.chisq.test(w=w, df=df, N=100, sig.level=0.05)

    # slightly less power when evaluated empirically
    p_chisq.test(n=100, w=w, df=df) |> Spower(replications=100000)
    p_chisq.test(n=100, P0=P0, P=P) |> Spower(replications=100000)

    # slightly differ (latter more conservative due to finite sampling behaviour)
    pwr::pwr.chisq.test(w=w, df=df, power=.8, sig.level=0.05)
    p_chisq.test(n=NA, w=w, df=df) |>
           Spower(power=.80, interval=c(50, 200))
    p_chisq.test(n=NA, w=w, df=df, correct=FALSE) |>
           Spower(power=.80, interval=c(50, 200))

    # Spower slightly more conservative even with larger N
    pwr::pwr.chisq.test(w=.1, df=df, power=.95, sig.level=0.05)
    p_chisq.test(n=NA, w=.1, df=df) |>
           Spower(power=.95, interval=c(1000, 2000))
    p_chisq.test(n=NA, w=.1, df=df, correct=FALSE) |>
           Spower(power=.95, interval=c(1000, 2000))




Spower documentation built on April 4, 2025, 5:11 a.m.