指数分布的Gamma模拟:在给定功效和信号强度的情况下查找样本大小

时间:2018-10-28 19:53:28

标签: r statistics simulation

我建立了一个函数,以基于i.d指数分布的总和模拟两个伽玛分布X和Y。假设我的代码对于此模拟是正确的,我有兴趣为X和Y寻找相等的样本大小n,以便在90%的功效和5%的显着性水平下可以确定n。

我的思维过程是,我创建一个n值序列,并使用for循环重复该序列中的每个n值,并加上一个“ if”语句,该语句称如果给定n值,则95%的时间重复该过程,如果备选方案为真,我拒绝零假设的可能性为90%。

我面临的问题是n值始终是我的n_seq中的最大值。我怀疑在生成两个伽玛分布时肯定有问题。

任何输入表示赞赏。

set.seed(3701)
n_seq = seq(from = 1, to = 200, by = 1)
Z.list = numeric(reps)
var.list = numeric(reps)

gamma.sim = function(n, mu){
  for(j in 1:5e5){
      u.list = runif(n = n)
      x.list = -mu*log(1-u.list)
      Z.list[j] = sum(x.list)
  }
  return(Z.list)
}


# Generate n generations for X.gamma and Y.gamma
gen_p_vals <- function(n = reps){
  p_vec <- numeric(reps)
  for(ii in 1:reps){
    x <- gamma.sim(n = 79, mu = 1)
    y <- gamma.sim(n = 80, mu = 1)
    t_stat_numerator <- mean(x) - mean(y) - 0 # Test Statistic under null hypothesis
    s_p <- sqrt(sum((x-mean(x))^2) + sum((y-mean(y))^2)) / (sqrt(2*reps-2))
    t_stat <- t_stat_numerator /(s_p*(sqrt((1/reps)+(1/reps))))
    p_vec[ii] <- 2* pt(-abs(t_stat), 2*reps-2)
  }
  return(p_vec)
}
power_pvals <- gen_p_vals(n = 10)
mean(power_pvals < 0.05)

for(j in 2:100){
  power_pvals = gen_p_vals(n = n_seq[j])
  if (mean(power_pvals < 0.05) == 0.90){
    print(j)
  }
}

0 个答案:

没有答案