2016-10-28 71 views
3

我希望模擬中心極限定理以證明它,並且我不確定如何在R中做到這一點。我想創建10,000個採樣大小爲n的樣本(可以是數字或一個參數),從我將選擇的分佈(統​​一,指數等...)。然後,我想在一個繪圖(使用par和mfrow命令)中繪製原始分佈(直方圖),所有樣本均值的分佈,均值的QQ圖,並在第4個圖中繪製(有四個,2X2 ),我不確定要繪製什麼。你能幫我開始在R中編程嗎?我想,一旦我有了模擬數據,我應該沒問題。謝謝。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); 
+2

你能告訴我們一些你開始寫的代碼嗎?我們不是代碼寫作服務。 –

回答

1

也許這可以幫助您開始。我對正態分佈進行了硬編碼,只顯示了兩個建議的圖形:隨機選擇的樣本的直方圖和所有樣本均值的直方圖。

我想我的主要建議是使用列表來存儲樣本而不是矩陣。

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) 
+0

爲什麼使用'rnorm'生成樣本? OP想要生成i.i.d.來自具有已知均值和方差的任何分佈的樣本來證明該分佈的CLT。 – aichao

+0

好的,自從我真正想到中心極限定理已經過去幾年了。難道所需的意思和SD只是作爲額外的參數傳遞給規範?同意,我沒有做任何事情來從正常的任何分配中抽取樣本。 –

+0

此博客文章在模擬方面做得更好:https://qualityandinnovation.com/2015/03/30/sampling-distributions-and-central-limit-theorem-in-r/ –

4

CLT指出給定i.i.d.來自具有均值和方差的分佈的樣本,隨着樣本數目增加,樣本均值(作爲隨機變量)具有收斂於高斯的分佈。在這裏,我假定您要生成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)) 
} 

爲了生成圖表,我們使用ggplot2亞倫從hereqqplot.data功能。我們還使用gridExtra在一個框架中繪製多個圖。

library(ggplot2) 
library(gridExtra) 
qqplot.data <- function (vec) { 
    # following four lines from base R's qqline() 
    y <- quantile(vec[!is.na(vec)], c(0.25, 0.75)) 
    x <- qnorm(c(0.25, 0.75)) 
    slope <- diff(y)/diff(x) 
    int <- y[1L] - slope * x[1L] 

    d <- data.frame(resids = vec) 

    ggplot(d, aes(sample = resids)) + stat_qq() + geom_abline(slope = slope, intercept = int, colour="red") + ggtitle("Q-Q plot") 
} 

generate.plots <- function(samps, samp.means) { 
    p1 <- qplot(samps, geom="histogram", bins=30, main="Sample Histogram") 
    p2 <- qplot(samp.means, geom="histogram", bins=30, main="Sample Mean Histogram") 
    p3 <- qqplot.data(samp.means) 
    grid.arrange(p1,p2,p3,ncol=2) 
} 

然後我們可以使用這些功能與均勻分佈:

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) 

我們得到:

Uniform samples

或者,與泊松分佈意思= 3:

samps <- rpois(r*n,lambda=3) 
# compute sample means 
samp.means <- sample.means(samps, r, n)) 
# generate plots 
generate.plots(samps, samp.means) 

我們得到:

Poisson samples

或者,與指數分佈均值= 1/1:

samps <- rexp(r*n,rate=1) 
# compute sample means 
samp.means <- sample.means(samps, r, n)) 
# generate plots 
generate.plots(samps, samp.means) 

我們得到:

Exponential samples

注意,樣品的平均平均直方圖所有像Gaussians均值,這是非常類似於原始生成分佈的平均值,這是否是均勻的,泊松或指數,由CLT(作爲預測其方差也將是原始生成分佈的方差1 /(n = 200))。

+0

謝謝,非常有幫助。有沒有辦法給Q-Q圖添加一條線? – user2899944

+0

@ user2899944:是的,請參閱我編輯的答案。 – aichao