在R中模拟t检验

时间:2014-01-08 23:35:56

标签: r statistics simulation

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

  

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

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

最后,我想看看每个样本组的百分比 - 让我们称之为n10,n100,n1000,n5000,这取决于他们构成的观察数量 - 我的(假)假设被拒绝。

你能帮我写一下相应的R代码吗?我知道小命令,却无法将它们放在一起。这是一个很好的练习,希望我能够稍微修改它并将它用于不同的目的。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

这是一个内衬400 t.tes的n = 10:

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 

答案 1 :(得分:1)

我还在学习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