---
title: "Zákony velkých čísel a CLV"
output:
  pdf_document: default
  html_notebook: default
  html_document:
    df_print: paged
---

# Ilustrace zákona velkých čísel

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$

```{r}
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. 

```{r}
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)
```


# Ilustrace centrální limitní věty

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$. 

```{r}
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)
```


# Vsuvka z R-kového programování

Dva způsoby jak udělat kumulovanou sumu

```{r}
X = rep(1,10); X
Y = cumsum(X); Y
Reduce("+", X, accumulate=T)
```
# Histogramy $Y_n$ pro $X_i \sim U(0,1)$

```{r}
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()}
}
```

```{r}
for (n in 1:10) { CLV1(n,T); }
```
# Histogramy $Y_n$ pro $X_i \sim U(0,1)$


```{r}
CLV2 = function (n, show=FALSE) {
  # N je počet pokusů použitých pro samplování histogramů Y_n
  # n je index Y_n, tj. kolik n.n.v. sčítám
  N = 10^6
  m = matrix(rexp(n*N, 1), nrow=N)     # matice nezávislých náhodných veličin
  Y = (rowSums(m)-n)/(1/sqrt(1)*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_exp-", toString(n), ".pdf", sep=""))
    pdf(file=paste("CLV_en_exp-", toString(n), ".pdf", sep=""))    
  }
  hist(Y, breaks=seq(-5,20,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 Exp(1), n=",n), ylim=c(0,.5), from=-3, to=3, col='red', add=T)        # pro srování hustota normálního rozdělení   
#  curve(dnorm, main=paste("X_i je Exp(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(-20,20,by=0.2), 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()}
}
```


```{r}
for (n in 1:20) { CLV2(n,T); }
```

