【问题标题】:Simlulating a t-test in R在 R 中模拟 t 检验
【发布时间】:2014-01-27 08:01:56
【问题描述】:

我正在寻找一种方法来模拟不同样本大小的简单 t 检验的功效。我的想法是生成 400 个随机正态分布样本,每个样本均值为 5,方差为 1,并对每个样本进行 t 检验,假设真实均值为 4,即 t 检验将采用以下形式:

t=(mean(x)-4)*sqrt(n)/sd(x) # 每个样本 x 由 n 个观测值组成。

为了比较,我希望前 100 个样本由 10 个观察值组成,接下来的 100 个样本包含 100 个样本,接下来的 100 个样本包含 1000 个样本,最后是 5000 个样本中的最后 100 个样本,我认为这是上限。必须对每个样本进行 t 检验。

最后,我想看看每个样本组的百分比——让我们称它们为 n10、n100、n1000、n5000,具体取决于它们包含多少观察值——我的(错误)假设被拒绝。

你能帮我写相应的R代码吗?我知道小命令,但很难把它们放在一起。这是一个很好的练习,希望我能够对其进行一些修改并将其用于不同的目的。

提前谢谢你。

【问题讨论】:

  • 没有任何示例代码的问题更有可能被关闭。您可以在这里查看示例:ats.ucla.edu/stat/r/pages/mesimulation.htm
  • @Metrics 我不知道,抱歉。我提供了这个想法,提供小命令也没问题,例如 >rnorm(10,5,1),但我担心我对 R 的了解不会更进一步。
  • 不确定这是否有帮助,但请查看 ?power.t.test。
  • @Remko 是的,我看过了。不过,我希望能够编写自己的代码。

标签: r statistics simulation


【解决方案1】:

这是一个用于 400 次 n=10 的 t.tests 的单行:

R>simulations <- replicate(400, t.test(rnorm(10, mean=5, sd=1), mu=4),
                           simplify=FALSE);

那你就可以分析了:

R>table(sapply(simulations, "[[", "p.value") < .05)
FALSE  TRUE 
   75   325 

【讨论】:

  • 谢谢。我想为不同的样本量重复该命令会给我所需的值。如果我可以问,“简化”是做什么的?
  • t.test() 返回一个列表;然后simplify 将背靠背展平所有列表,而不是具有嵌套结构。
  • 由于我在 R-help 上找不到足够的解释,您是否介意向我介绍 >sapply 的结构?具体来说,我不明白“[[”代表什么。谢谢。
  • @JohnK 看看simulations[1:5]sapply 命令从simulations 的每个元素中提取p.value 属性,就像您执行simulations[1][["p.value"]]simulations[2][["p.value"]] 等一样。等效的代码行是table(sapply(simulations, function(x) x[["p.value"]]))
  • @BlueMagister 对。非常感谢。
【解决方案2】:

我也在学习 R,所以要小心处理:

n <- 5
N <- 100
samplesizes <- as.integer(10^(1:n))
set.seed(1) 

# generate samples
samples <- replicate(N, mapply(rnorm, samplesizes, mean=4, sd=sqrt(1)))

# perform t-tests
t.tests <- lapply(samples, function(x) t.test(x, mu=5, alternative="two.sided"))

# get p-values
t.test.pvalues <- sapply(t.tests, function(x) x$p.value)

rejected <- t.test.pvalues > .05
sampleIndices <- rep(1:n, N)
res <- aggregate(rejected, list(sample=sampleIndices), FUN=function(x) sum(x)/length(x) )
names(res)[2] <- "percRejected"
print(res, row.names=F)
# sample percRejected
# 1         0.16
# 2         0.00
# 3         0.00
# 4         0.00
# 5         0.00

【讨论】:

  • 很好,谢谢!我会查找函数 mapply、lapply 和 sapply。
猜你喜欢
  • 2013-07-19
  • 2014-05-30
  • 2015-09-17
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 2015-09-17
  • 2011-02-21
  • 2017-03-21
相关资源
最近更新 更多