【问题标题】:Creating a loop to run a statistical test创建循环以运行统计测试
【发布时间】:2021-09-09 17:50:19
【问题描述】:

我需要运行统计测试并计算 p_hat_6,使用来自 X ∼ uniform(0, 14) 的 N = 10 个样本,每个样本大小为 n = 10。这是我在 mu=6 处计算 p_hat 的原始循环:

pvalue <- rep(0,10)
reject <- 0
alpha <- 0.05
N <- 10

for (n in seq_along(pvalue)){
  pvalue[n] <- wilcox.test(runif(10,0,14), mu=6)$p.value
  reject[n] <- ifelse(pvalue[n] > alpha,0,1)
}

p_hat_6 <- (sum(reject))/N
p_hat_6

使用相同的 N 和 n,我需要再重复 5 次,并进行以下更改:

(1) Data from X ∼ uniform(0, 16) and compute p_hat_7 (mu=7)
(2) Data from X ∼ uniform(0, 18) and compute p_hat_8 (mu=8)
(3) Data from X ∼ uniform(0, 20) and compute p_hat_9 (mu=9)
(4) Data from X ∼ uniform(0, 22) and compute p_hat_10 (mu=10)
(5) Data from X ∼ uniform(0, 24) and compute p_hat_11 (mu=11)

当间隔每次增加 2 并且 mu 每次增加 1 时,我如何循环?

【问题讨论】:

    标签: r loops statistics p-value


    【解决方案1】:

    我们可以创建一个函数

    
    fun1 <- function(N, pvalue, reject, max_val, mu_val) {
      for (n in seq_along(pvalue)){
        pvalue[n] <- wilcox.test(runif(N ,0, max_val), mu=mu_val)$p.value
         reject[n] <- ifelse(pvalue[n] > alpha,0,1)
         }
    
       p_hat_6 <- (sum(reject))/N
       return(p_hat_6)
       }
    

    并在Map中使用它

    Map(fun1, max_val = seq(14, 24, by = 2), mu_val = 6:11,
           MoreArgs = list(N = 10, pvalue = pvalue, reject = reject))   
    

    -输出

    [[1]]
    [1] 0
    
    [[2]]
    [1] 0.2
    
    [[3]]
    [1] 0.2
    
    [[4]]
    [1] 0
    
    [[5]]
    [1] 0.1
    
    [[6]]
    [1] 0.2
    

    或者在函数周围创建一个外循环

    mu_val <- 6:11
    max_val <- seq(14, 24, by = 2)
    out <- numeric(length(mu_val))
    for(i in seq_along(mu_val)) {
        out[i] <- fun1(N = 10, pvalue = pvalue, 
          reject = reject, max_val = max_val[i], mu_val = mu_val[i])
    }
    
    out
    [1] 0.1 0.1 0.1 0.1 0.3 0.0
    

    数据

    N <- 10
    pvalue <- rep(0, N)
    reject <- rep(0, N)
    alpha <- 0.05
    

    【讨论】:

    • 对于Map函数,为什么要放“MoreArgs = list(.....)”,为什么要放在列表中?
    • @JakeParker 正在改变的参数被用作输入,即max_val = seq(14, 24, by = 2), mu_val = 6:11 和那些我把它放在MoreArgs 中的常量。您也可以将其用作常规参数,如果长度为 1,则它会被回收。主要目的是区分 hte 参数的可变部分和固定参数 - 即。每个循环都不会改变
    • @JakeParker 关于为什么它需要是一个列表是因为每个list 元素都被视为一个单元,list 可以包含多种类型,就像你传递向量一样,只能有一个单一类型
    • 对于 Map 输出,如何将其转回矢量?我试过取消列出,但它似乎不起作用。
    • @JakeParker 只是unlist Map 它将是一个向量
    猜你喜欢
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2012-03-08
    • 1970-01-01
    相关资源
    最近更新 更多