在 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()
我想在 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()