从 R 中的 T 检验中查找 P 值分数

Finding P-value Fraction from T-test in R

给定来自完全相同正态分布的 500 个值的 2 个样本(均值为 10,标准差为 2),我 运行 t 检验 100,000 次:

replicate(100,000, (t.test(rnorm(500,10,5), rnorm(500,10,5))))

输出是这样的:

    [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    [50] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    [99] 0 0

[edit] 如果我删除逗号到 运行 它 100000 因为显然它不是以前, 结果是

        [,98011]                                  [,98012]                                 
        [,98013]                                  [,98014]                                 
        [,98015]                                  [,98016]                                 
        [,98017]                                  [,98018]                                 
        [,98019]                                  [,98020]                                 
        [,98021]                                  [,98022]                                 
        [,98023]                                  [,98024]                                 
        [,98025]                                  [,98026]         

我对这些输出有点困惑...

我现在如何找到 P 值低于 0.05 的情况的分数,当它只显示零时?

请原谅我早些时候的脑力失误(漫长的一天)。试试这个。

x <- replicate(100000, {
  sample1 <- rnorm(500,10,5);
  sample2 <- rnorm(500,10,5);
  test <- t.test(sample1, sample2);
  test$p.value
})
hist(x)

length(x[x < 0.05])/length(x)
[1] 0.04936

当您有逗号时,您将“000”复制 100 次(IE-t 测试上的额外代码将被忽略)。由于 000 == 0,return 是一个零向量。

当你复制t.test(...) 100000次时,你得到t.test()的return,这是一个列表。您似乎想要 t 检验的 p 值,而不是完整的对象...请参阅 ?t.test

sum(replicate(10^5, t.test(rnorm(500,10,5), rnorm(500,10,5))$p.value) < 0.05)
# or for the fraction
sum(replicate(10^5, t.test(rnorm(500,10,5), rnorm(500,10,5))$p.value) < 0.05) / 10^5