R中的中心极限定理

R中的中心极限定理,r,statistics,simulation,R,Statistics,Simulation,我希望模拟中心极限定理来演示它,但我不确定如何在R中实现。我想从我将选择的分布(均匀分布、指数分布等)中创建10000个样本,样本大小为n(可以是数字或参数)。然后,我想在一个图(使用PAR和MFROW命令)的原始分布(直方图),所有样本的手段的分布,一个Q-Q图的手段,并在第四个图(有四,2x2),我不知道什么阴谋。你能帮我开始用R语言编程吗?我想一旦我有了模拟数据,我就应该没事了。多谢各位 我最初的尝试如下,它太简单了,我甚至不确定是否正确 r = 10000; n = 20; M = m

我希望模拟中心极限定理来演示它,但我不确定如何在R中实现。我想从我将选择的分布(均匀分布、指数分布等)中创建10000个样本,样本大小为n(可以是数字或参数)。然后,我想在一个图(使用PAR和MFROW命令)的原始分布(直方图),所有样本的手段的分布,一个Q-Q图的手段,并在第四个图(有四,2x2),我不知道什么阴谋。你能帮我开始用R语言编程吗?我想一旦我有了模拟数据,我就应该没事了。多谢各位

我最初的尝试如下,它太简单了,我甚至不确定是否正确

r = 10000;
n = 20;

M = matrix(0,n,r);
Xbar = rep(0,r);

for (i in 1:r)
{
  M[,i] = runif(n,0,1);
}

for (i in 1:r)
{
  Xbar[i] = mean(M[,i]);
}

hist(Xbar);

也许这可以帮助你开始。我已经对正态分布进行了硬编码,只显示了您建议的两个图:一个是随机选择样本的直方图,另一个是所有样本均值的直方图

我想我的主要建议是使用列表而不是矩阵来存储样本。

r <- 10000
my.n <- 20

simulation <- list()

for (i in 1:r) {
  simulation[[i]] <- rnorm(my.n)
}

sample.means <- sapply(simulation, mean)

selected.sample <- runif(1, min = 1, max = r)

dev.off()
par(mfrow = c(1, 2))
hist(simulation[[selected.sample]])
hist(sample.means)

rCLT指出,给定来自均值和方差分布的i.i.d.样本,样本均值(作为随机变量)的分布随着样本数
n
的增加收敛到高斯分布。这里,我假设您想要生成
r
样本集,每个样本集包含
n
样本,以创建样本均值的
r
样本。一些代码如下所示:

set.seed(123) ## set the seed for reproducibility
r <- 10000
n <- 200      ## I use 200 instead of 20 to enhance convergence to Gaussian

## this function computes the r samples of the sample mean from the 
## r*n original samples
sample.means <- function(samps, r, n) {
  rowMeans(matrix(samps,nrow=r,ncol=n))
}
然后我们可以将这些函数与均匀分布一起使用:

samps <- runif(r*n)  ## uniform distribution [0,1]
# compute sample means
samp.means <- sample.means(samps, r, n))
# generate plots
generate.plots(samps, samp.means)

samps您能给我们看一些您开始编写的代码吗?我们不是代码编写服务。为什么要使用
rnorm
生成示例?OP想从任何具有已知均值和方差的分布中生成i.i.d.样本,以证明该分布的CLT。好的,自从我真正思考中心极限定理以来,已经有几年了。所需的mean和sd不能作为附加参数传递给rnorm吗?同意,除了正态分布,我没有做任何事情从任何分布中提取样本。这篇博客文章在模拟方面做得更好:CLT声明给定具有均值和方差的I.I.d.样本,样本均值(作为随机变量)当样本数
n
增加时,其分布收敛为高斯分布。关于CLT,值得注意的是,除了具有均值和方差之外,对生成样本的原始分布没有任何假设。OP希望模拟包含每个
n
样本的
r
样本集的数量。每个样本集将计算样本平均数的一个样本,其中有
r
,以表明结果样本平均数分布接近高斯分布。谢谢,非常有用。有没有办法在Q-Q图上加一条线?
samps <- runif(r*n)  ## uniform distribution [0,1]
# compute sample means
samp.means <- sample.means(samps, r, n))
# generate plots
generate.plots(samps, samp.means)
samps <- rpois(r*n,lambda=3)
# compute sample means
samp.means <- sample.means(samps, r, n))
# generate plots
generate.plots(samps, samp.means)
samps <- rexp(r*n,rate=1)
# compute sample means
samp.means <- sample.means(samps, r, n))
# generate plots
generate.plots(samps, samp.means)