Pwr.chisq.test error in R

I am now trying to estimate the sample size needed to test the conversion rate of a website. pwr.chisq.test always gives me an error message when I have a low conversion rate:

# conversion rate for two groups
p1 = 0.001
p2 = 0.0011

# degree of freedom
df = 1

# effect size
w = ES.w1(p1,p2)

pwr.chisq.test(w,
               df = 1,
               power=0.8,
               sig.level=0.05)

**Error in uniroot(function(N) eval(p.body) - power, c(1 + 1e-10, 1e+05)) : 
  f() values at end points not of opposite sign**

      

However, if I have a larger value for p1 and p2, this code works fine.

# conversion rate for two groups
p1 = 0.01
p2 = 0.011

# degree of freedom
df = 1

# effect size
w = ES.w1(p1,p2)

pwr.chisq.test(w,
               df = 1,
               power=0.8,
               sig.level=0.05)

      

Calculating squared energy squared

      w = 0.01
      N = 78488.61
     df = 1   sig.level = 0.05
  power = 0.8

      

NOTE: N - number of observations

+3


source to share


1 answer


I think there is a "numerical" explanation for this. If you look at the code of the function, you can see that the number of samples is calculated using uniroot

and must belong to the interval whose boundaries are set to 1e-10

and 1e5

. The error message states that this interval does not give you a result: in your case, the upper limit is too small.

Knowing that we can just take a wider interval:



w <- 0.00316227766016838
k <- qchisq(0.05, df = 1, lower = FALSE)
p.body <- quote(pchisq(k, df = 1, ncp = N * w^2, lower = FALSE))
N <- uniroot(function(N) eval(p.body) - 0.8, c(1 + 1e-10, 1e+7))$root

      

The "solution" N=784886.1

... that's a huge number of observations.

+2


source







All Articles