Sice mluví o limitě, ale vidíme, že konvergence je tady zjevná už pro relativně malá \(n\). Černá čára znázorňuje posloupnost průměrů, tj. \(S_1, S_2, \dots\)
n = 10^4
X = runif(n)
S = cumsum(X)/(1:n)
plot(S, type='l')
curve(0.5+0*x,from=0,to=n,col='red',add=T)
Znázornění téhož pomocí histogramu – průměr je silně koncentrovaný okolo střední hodnoty.
SZVC = function (n, show) {
N = 10^4
m = matrix(runif(n*N), nrow=N) # matice nezávislých náhodných veličin
Y = (rowSums(m)-n/2)/(n) # každá položka Y vznikne sečtením a "přeškálováním" jednoho řádku m
if (!show) { pdf(file=paste("SZVC_unif-", n, ".pdf", sep="")); }
curve(dnorm, main=paste("X_i je U(0,1), n=", n), ylim=c(0,5), from=-2, to=2, col="red") # pro srování hustota normálního rozdělení
hist(Y,breaks=seq(-8,8,by=0.1), freq = FALSE, add=TRUE) # a do něj nakreslený histogram Y
legend("topright",lty=1,lwd=3,col=c('black', 'red'),
legend=c("Y_n", "N(0,1)"),bty="n")
if (!show) { dev.off(); }
}
SZVC(10,T)
SZVC(200,T)
Při přeškálování “odmocninou” dochází stále k výrazné oscilací – distribuce \(Y_n\) (na obrázku hodnota v bodě \(x=n\)) se blíží normálnímu rozdělení, tj. bude v průměru vzdálena od 0 o 1, i pro obrovská \(n\). Oproti tomu distribuce \(S_n\) ze zákona velkých čísel se blíží jednobodovému rozdělení na hodnotě \(\mu\).
n = 10^5
X = runif(n)
Y = (cumsum(X)-(1:n)/2)/(sqrt(1/12)*sqrt(1:n))
plot(Y, type='l')
curve(0+0*x,from=0,to=n,col='red',add=T)
Dva způsoby jak udělat kumulovanou sumu
X = rep(1,10); X
[1] 1 1 1 1 1 1 1 1 1 1
Y = cumsum(X); Y
[1] 1 2 3 4 5 6 7 8 9 10
Reduce("+", X, accumulate=T)
[1] 1 2 3 4 5 6 7 8 9 10
CLV1 = function (n, show=FALSE) {
N = 10^6
m = matrix(runif(n*N, 0,1), nrow=N) # matice nezávislých náhodných veličin U(0,1)
Y = (rowSums(m)-n/2)/(sqrt(1/12)*sqrt(n)) # každá položka Y vznikne sečtením a "přeškálováním" jednoho řádku m
if (!show) {
# pdf(file=paste("CLV_unif-", toString(n), ".pdf", sep=""))
pdf(file=paste("CLV_en_unif-", toString(n), ".pdf", sep=""))
}
# curve(dnorm, main=paste("X_i je U(0,1), n=",n), ylim=c(0,1), from=-3, to=3, col='red') # pro srování hustota normálního rozdělení
hist(Y, breaks=seq(-5,5,by=0.1), freq = FALSE, ylim=c(0,.5), add=FALSE) # a do něj nakreslený histogram Y
curve(dnorm, main=paste("X_i is U(0,1), n=",n), ylim=c(0,.5), from=-3, to=3, col='red', add=T) # pro srování hustota normálního rozdělení
legend("topright",lty=1,lwd=3,col=c('black', 'red'),
legend=c("Y_n", "N(0,1)"),bty="n")
if (!show) { dev.off()}
}
for (n in 1:10) { CLV1(n,T); }