在 R 中模拟实现真实标准偏差所需的样本数

Simulate in R the number of samples needed in order to achieve the true standard deviation

我想在 R 中重新创建上图,它模拟了实现真实标准偏差所需的样本数量。 我怎样才能在 R 中做到这一点?

我假设分布是 t 分布或正态分布。 因此,我必须从这些分布中生成数字,每次都要增加样本的大小并绘制它,以便重新创建如图所示的图。 有帮助吗?

set.seed(123)

x <- list(v1=rnorm(1,0,12),v2=rnorm(10,0,11),
          v3=rnorm(20,0,10),v4=rnorm(30,0,9),
          v5=rnorm(40,0,8),v6=rnorm(50,0,7),
          v7=rnorm(60,0,6),v8=rnorm(70,0,5),
          v9=rnorm(80,0,4),v10=rnorm(90,0,3),
          v11=rnorm(100,0,2),v12=rnorm(110,0,2))

g = lapply(x,sd)
g
g1 = unlist(g)
plot(g1,type="l")

首先,从大小合适的随机均匀分布开始,然后select您想要计算均值标准误差的样本大小。

set.seed(123)

x <- runif(1e6, 0, 1)
sample_size <- 5:120

您可以定义一个函数来计算这个 sigma_m。在这里,您从 x 中对 n 的样本进行替换采样,然后取标准差并除以 sqrt(n)

calc_sigma_m <- function(n, x) {
  sd(sample(x, n, replace = TRUE))/sqrt(n)
}

数据框可以整齐地存储样本大小和sigma_m绘图值:

df <- data.frame(sample_size, 
                 sigma_m = sapply(sample_size, calc_sigma_m, x))

您的初始情节将如下所示:

library(ggplot2)

ggplot(df, aes(sample_size, sigma_m)) +
  geom_line()

正如预期的那样,这并不顺利,尤其是在样本量较小的情况下。

如果你想要一个平滑的曲线来演示,你重复多次采样过程和sigma_m计算,然后取平均值。

calc_sigma_m_mean <- function(n, x) {
  mean(replicate(1000, sd(sample(x, n, replace = TRUE))/sqrt(n)))
}        

df <- data.frame(sample_size, sigma_m = sapply(sample_size, calc_sigma_m_mean, x))

那么你会得到一个更平滑的曲线:

ggplot(df, aes(sample_size, sigma_m)) +
  geom_line()