【问题标题】:one sample hypothesis test for proportions比例的一个样本假设检验
【发布时间】:2018-10-16 02:30:46
【问题描述】:

我正在寻找一个内置的 R 函数,它可以计算一个样本假设检验对比例的功效。

内置函数 power.prop.test 仅对比例进行两个样本假设检验。

最初的问题是:“你必须掷硬币多少次才能确定它有偏见?

p.null <- 0.5            # null hypothesis.

如果抛正面的概率为 大于 0.51 或小于 0.49。否则我们说它“足够好”

delta <- 0.01       

这是一个抛硬币 N 次并返回正面比例的函数:

biased.coin <- function(delta, N) {
  probs <- runif(N, 0, 1) 
  heads <- probs[probs < 0.5+delta]      
  return(length(heads)/N)
}

我们始终将 alpha 和 beta 固定为标准值。我们的目标是计算 N。

alpha = 0.05        # 95% confidence interval
beta = 0.8          # Correctly reject the null hypothesis 80% of time.

第一步是使用模拟。

单个实验是抛硬币 N 次,如果正面的数量与 N/2 的期望值偏离“太远”,则拒绝原假设

然后我们重复实验 M 次并计算零假设被(正确)拒绝的次数。

M <- 1000

simulate.power <- function(delta, N, p.null, M, alpha) {
   print(paste("Calculating power for N =", N))
   reject <- c()
   se <- sqrt(p.null*(1-p.null))/sqrt(N)   
   for (i in (1:M)) {
       heads <- biased.coin(delta, N)       # perform an experiment
       z <- (heads - p.null)/se             # z-score 
       p.value <- pnorm(-abs(z))            # p-value
       reject[i] <- p.value < alpha/2       # Do we rejct the null? 
   }
   return(sum(reject)/M)        # proportion of time null was rejected.
  }

接下来我们绘制一个图表(慢,大约 5 分钟):

ns <- seq(1000, 50000, by=1000)
my.pwr <- c()
for (i in (1:length(ns))) {
  my.pwr[i] <- simulate.power(delta, ns[i], p.null, M, alpha)
}
plot(ns, my.pwr)

从图中看起来,β = 0.8 的幂所需的 N 约为 20000。

模拟速度很慢,所以最好有一个内置函数。

稍微摆弄一下给了我这个:

magic <- function(p.null, delta, alpha, N) {
  magic <-power.prop.test(p1=p.null, 
                          p2=p.null+delta,
                          sig.level=alpha,

                          ###################################
                          n=2*N,             # mysterious 2
                          ###################################

                          alternative="two.sided",
                          strict=FALSE)
  return(magic[["power"]])                 
}

让我们根据我们的模拟数据绘制它。

pwr.magic <- c()
for (i in (1:length(ns))) {
   pwr.magic[i] <- magic(p.null, delta, alpha, ns[i]) 
}
points(ns, pwr.magic, pch=20)

拟合很好,但我不知道为什么需要将 N 乘以 2, 为了从两个样本的比例检验中获得一个样本的功效。

如果有一个内置函数可以让你直接做一个样本就好了。

谢谢!

【问题讨论】:

    标签: r


    【解决方案1】:

    你可以试试

    library(pwr)
    h <- ES.h(0.51, 0.5) # Compute effect size h for two proportions
    pwr.p.test(h = h, n = NULL, sig.level = 0.05, power = 0.8, alternative = "two.sided")
    # proportion power calculation for binomial distribution (arcsine transformation) 
    
    #           h = 0.02000133
    #           n = 19619.53
    #   sig.level = 0.05
    #       power = 0.8
    # alternative = two.sided
    

    顺便说一句,显着加快模拟速度的一种方法是使用rbinom 而不是runif

    biased.coin2 <- function(delta, N) {
      rbinom(1, N, 0.5 + delta) / N
    }
    

    【讨论】:

      猜你喜欢
      • 2021-07-07
      • 1970-01-01
      • 2020-02-25
      • 2018-08-10
      • 2021-12-31
      • 2018-08-26
      • 1970-01-01
      • 2021-07-13
      • 2021-10-12
      相关资源
      最近更新 更多