使用复制中心极限 t

using replicate central limit t

正在做一门课,下面就是题目。

library(downloader)
url <- "https://raw.githubusercontent.com/genomicsclass/dagdata/master/inst/extdata/femaleMiceWeights.csv"
filename <- "femaleMiceWeights.csv"
if(!file.exists("femaleMiceWeights.csv")) download(url,destfile=filename)
dat <- read.csv(filename)

假设我们对掷 n=100 骰子时看到 6 的次数的比例感兴趣。这是一个随机变量,我们可以用 x=sample(1:6, n, replace=TRUE) 模拟,我们感兴趣的比例可以表示为平均值:mean(x==6)。因为掷骰子是独立的,所以适用 CLT。

我们想掷 n 个骰子 10,000 次并保持这些比例。这个随机变量(6s 的比例)的均值 p=1/6 和方差 p*(1-p)/n。因此,根据 CLT z = (mean(x==6) - p) / sqrt(p*(1-p)/n) 应该是正常的,均值 0 和 SD 1。将种子设置为 1,然后使用复制到进行模拟,并报告z绝对值大于2的时间比例(CLT说应该是0.05左右)。

所以我写了以下内容:

    set.seed(1)
    n<-10000
    p<-1/6
    a<-replicate(n, {
      x=sample(1:6, n, replace=TRUE)
      z<-(mean(x==6) - p) / sqrt(p*(1-p)/n)

    })
> mean(abs(a)>2)
[1] 0.0472

所以它错了但非常接近,有人看到我哪里错了吗?

My answer is marked wrong :( that is why i asked.. so i must have done something wrong :(

看起来你正在做功课什么的,然后你被标记为错误,因为你的代码并没有真正按照你的问题进行:

We want to roll n dice 10,000 times and keep these proportions

这是正确的版本;不要把 n 放在 sample().

里面
set.seed(1); n <- 10000; p <- 1/6
a <- replicate(n, (mean(sample(1:6, 10000, replace=TRUE)==6) - p) / sqrt(p*(1-p)/10000))

还有,你比较的对象不对。

CLT says it should be about 0.05

没有!您需要比较的理论数量是2 * pnorm(-2),即0.045500260.05 的相应分位数是 -qnorm(0.025),它是 1.96 而不是 2

让我们看看 mean(abs(a) > 2) 给出了什么。

  • 使用n = 10000set.seed(1),得到0.0472,已经接近真实值;
  • 使用 n = 20000set.seed(1),您会得到 0.04565,甚至更近!

我刚刚用几乎相同的代码解决了它:

set.seed(1); n <- 10000; p <- 1/6
a <- replicate(n, (mean(sample(1:6, 100, replace=TRUE)==6) - p) / sqrt(p*(1-p)/100))

请注意,问题是问题的表述...您想每次取 100 个样本,但要取 10000 个。0.0424 是正确答案。