重复取样
Repeated Sampling
我有一个关于重复抽样的问题。假设我对样本均值的分布感兴趣。所以我要做的是生成 10000 次大小为 1000 的样本,然后查看每个样本的平均值。我是否可以只取一个大小为 10000*1000 的样本,然后查看前 1000 个元素的平均值,而不是从 1001 到 2000 等等?
如果您控制种子,两种方法应该产生相同的结果:
set.seed(1)
mean(sample(1:9, 3))
#[1] 5.666667
mean(sample(1:9, 3))
#[1] 4
mean(sample(1:9, 3))
# [1] 5.333333
set.seed(1)
x <- sample(1:9)
mean(x[1:3])
#[1] 5.666667
mean(x[4:6])
#[1] 4
mean(x[7:9])
# [1] 5.333333
这是一个示例,它生成从均匀分布中随机抽取的 1,000 个项目的 10,000 个样本均值。根据中心极限定理,我们期望这些均值服从均值为 0.5 的正态分布。
# set seed to make reproducible
set.seed(95014)
# generate 10,000 means of 1,000 items pulled from a uniform distribution
mean_x <- NULL
for (i in 1:10000){
mean_x <- c(mean_x,mean(runif(1000)))
}
hist(mean_x)
...输出:
@伦格雷斯基
我也可以那样做吧?
a <- runif(10000000)
j <- 1
x <- NULL
while (j <= 10000000){
x <- c(x,mean(a[j:(j+999)]))
j <- j + 1000
}
x
hist(x)
我会说是的。在获取 10,000,000 个样本时,您随机抽取了大部分实验 space。如果您 set.seed 对于您提到的两种方法都相同,您会得到完全相同的答案。如果你改变种子和 运行 一个 t 检验,结果没有显着差异。
#First Method
seed <- 5554
set.seed(seed)
group_of_means_1 <- replicate(n=10000, expr = mean(rnorm(1000)))
set.seed(seed)
mean_of_means_1 <- mean(replicate(n=10000, expr = mean(rnorm(1000))))
#Method you propose
set.seed(5554)
big_sample <- data.frame(
group=rep(1:10000, each=1000),
samples=rnorm(10000 * 1000, 0, 1)
)
group_means_2 <- aggregate(samples ~ group,
FUN = mean,
data=big_sample)
mean_of_means_2 <- mean(group_means_2$samples)
#comparison
mean_of_means_1 == mean_of_means_2
t.test(group_of_means_1, group_means_2$samples)
我有一个关于重复抽样的问题。假设我对样本均值的分布感兴趣。所以我要做的是生成 10000 次大小为 1000 的样本,然后查看每个样本的平均值。我是否可以只取一个大小为 10000*1000 的样本,然后查看前 1000 个元素的平均值,而不是从 1001 到 2000 等等?
如果您控制种子,两种方法应该产生相同的结果:
set.seed(1)
mean(sample(1:9, 3))
#[1] 5.666667
mean(sample(1:9, 3))
#[1] 4
mean(sample(1:9, 3))
# [1] 5.333333
set.seed(1)
x <- sample(1:9)
mean(x[1:3])
#[1] 5.666667
mean(x[4:6])
#[1] 4
mean(x[7:9])
# [1] 5.333333
这是一个示例,它生成从均匀分布中随机抽取的 1,000 个项目的 10,000 个样本均值。根据中心极限定理,我们期望这些均值服从均值为 0.5 的正态分布。
# set seed to make reproducible
set.seed(95014)
# generate 10,000 means of 1,000 items pulled from a uniform distribution
mean_x <- NULL
for (i in 1:10000){
mean_x <- c(mean_x,mean(runif(1000)))
}
hist(mean_x)
...输出:
@伦格雷斯基 我也可以那样做吧?
a <- runif(10000000)
j <- 1
x <- NULL
while (j <= 10000000){
x <- c(x,mean(a[j:(j+999)]))
j <- j + 1000
}
x
hist(x)
我会说是的。在获取 10,000,000 个样本时,您随机抽取了大部分实验 space。如果您 set.seed 对于您提到的两种方法都相同,您会得到完全相同的答案。如果你改变种子和 运行 一个 t 检验,结果没有显着差异。
#First Method
seed <- 5554
set.seed(seed)
group_of_means_1 <- replicate(n=10000, expr = mean(rnorm(1000)))
set.seed(seed)
mean_of_means_1 <- mean(replicate(n=10000, expr = mean(rnorm(1000))))
#Method you propose
set.seed(5554)
big_sample <- data.frame(
group=rep(1:10000, each=1000),
samples=rnorm(10000 * 1000, 0, 1)
)
group_means_2 <- aggregate(samples ~ group,
FUN = mean,
data=big_sample)
mean_of_means_2 <- mean(group_means_2$samples)
#comparison
mean_of_means_1 == mean_of_means_2
t.test(group_of_means_1, group_means_2$samples)