pwr.chisq.test R 中的错误
pwr.chisq.test error in R
我现在正在尝试估计 A/B 测试网站转化率所需的样本量。 pwr.chisq.test 当我的转换率值较小时,总是给我错误消息:
# 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**
但是,如果我为 p1 和 p2 设置了更大的值,则此代码可以正常工作。
# 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)
Chi squared power calculation
w = 0.01
N = 78488.61
df = 1 sig.level = 0.05
power = 0.8
NOTE: N is the number of observations
我认为对此有一个 "numerical" 的解释。如果查看函数的代码,您会发现样本数由 uniroot
计算得出,并且应该属于边界设置为 1e-10
和 1e5
的区间.错误信息指出这个区间没有给你结果:在你的情况下,上限太小了。
知道这一点,我们可以简单地取一个更宽的区间:
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
"solution" 是 N=784886.1
...这是一个 巨大的 观察数量。
我现在正在尝试估计 A/B 测试网站转化率所需的样本量。 pwr.chisq.test 当我的转换率值较小时,总是给我错误消息:
# 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**
但是,如果我为 p1 和 p2 设置了更大的值,则此代码可以正常工作。
# 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)
Chi squared power calculation
w = 0.01 N = 78488.61 df = 1 sig.level = 0.05 power = 0.8
NOTE: N is the number of observations
我认为对此有一个 "numerical" 的解释。如果查看函数的代码,您会发现样本数由 uniroot
计算得出,并且应该属于边界设置为 1e-10
和 1e5
的区间.错误信息指出这个区间没有给你结果:在你的情况下,上限太小了。
知道这一点,我们可以简单地取一个更宽的区间:
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
"solution" 是 N=784886.1
...这是一个 巨大的 观察数量。