From aa33bf423885ea087ec5716996df898ef707484c Mon Sep 17 00:00:00 2001
From: Walmes Zeviani <walmes@ufpr.br>
Date: Mon, 13 Aug 2018 20:36:08 -0300
Subject: [PATCH] Adiciona slides sobre GNA Uniforme.

---
 _site.yml                  |   6 +
 slides/03-gna-uniforme.Rnw | 367 +++++++++++++++++++++++++++++++++++++
 2 files changed, 373 insertions(+)
 create mode 100644 slides/03-gna-uniforme.Rnw

diff --git a/_site.yml b/_site.yml
index 68e1b10..670cd43 100644
--- a/_site.yml
+++ b/_site.yml
@@ -29,6 +29,12 @@ navbar:
         href: slides/01-revis-program.pdf
       - text: "Doc. e avaliação de código."
         href: slides/02-docum-codigo.pdf
+      - text: "GNA Uniformes"
+        href: slides/03-gna-uniforme.pdf
+      - text: "----------"
+      - text: "Arquivos complementares"
+      - text: "GNA Uniformes (2015)"
+        href: http://leg.ufpr.br/~walmes/ensino/ce089-2015-02/aula02_gna-2015-02.html
 #      - text: "Estruturas de controle"
 #        href: slides/01-estru-repet.html
 #      - text: "Teorema da Transformação da Probabilidade"
diff --git a/slides/03-gna-uniforme.Rnw b/slides/03-gna-uniforme.Rnw
new file mode 100644
index 0000000..65eb722
--- /dev/null
+++ b/slides/03-gna-uniforme.Rnw
@@ -0,0 +1,367 @@
+%-----------------------------------------------------------------------
+
+\documentclass[serif, professionalfont, usenames, dvipsnames]{beamer}
+\usepackage[T1]{fontenc}
+
+% ATTENTION: preamble.tex contains all style definitions.
+\input{config/preamble.tex}
+% \usepackage[backend=bibtex, style=authoryear]{biblatex}
+\addbibresource{config/refs.bib}
+
+<<include = FALSE>>=
+source("config/setup.R")
+@
+
+%-----------------------------------------------------------------------
+
+\title{Geração de números uniformes}
+\subtitle{Importância e principais algorítmos}
+\date{\small{ \Sexpr{sprintf('Atualizado em %s', Sys.Date())}}}
+
+%-----------------------------------------------------------------------
+
+\begin{document}
+
+{\setbeamertemplate{footline}{}
+  \frame{\titlepage} %--------------------------------------------------
+}
+
+\begin{frame}{}
+
+  {\large Justificativas}
+
+  \begin{itemize}
+  \item Simulação computacional de processos estocásticos depende da
+    geração de números aleatórios (GNA).
+  \item TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO TODO
+  \end{itemize}
+
+  {\large Objetivos}
+
+  \begin{itemize}
+  \item Discutir a importância da geração de números aleatórios em Estatística.
+  \item Descrever os principais algorítmos para GNA uniformes.
+  \end{itemize}
+\end{frame}
+
+%-----------------------------------------------------------------------
+
+\begin{frame}{A distribuição uniforme}
+
+  Se uma variável aleatória $X$ tem distribuição uniforme contínua entre
+  $a$ e $b$, denotamos $X \sim \text{U}(a, b)$, e sua função de
+  densidade é
+
+  \begin{equation}
+    f(x, a, b) = \frac{1}{b - a} \cdot I(a \leq x < b), \quad -\infty < a < b < \infty.
+  \end{equation}
+
+  A função de probabilidade é
+  \begin{equation}
+    F(x, a, b) = \Pr(X < x) = \int_{-\infty}^{x} f(x, a, b)\, \text{d}x =
+    \begin{cases}
+      0, & x < a \\
+      \dfrac{x - a}{b - a}, & a \leq x < b\\
+      1, & x \geq b.
+    \end{cases}
+  \end{equation}
+
+  A média e variância são funções dos parâmetros
+
+  \begin{equation}
+  \text{E}(X) = \frac{a + b}{2} \quad\text{e}\quad \text{V}(X) = \frac{(b - a)^2}{12}.
+  \end{equation}
+
+\end{frame}
+
+%-----------------------------------------------------------------------
+
+\begin{frame}{Importância da distribuição uniforme}
+
+  \begin{itemize}
+  \item A distribuição tem pouca importância do ponto de vista de
+    modelagem.
+  \item Porém, para simulação computacional, ela é central.
+  \item Números aleatório da Uniforme são:
+    \begin{itemize}
+    \item O principal ingrediente para GNA de outras distribuições.
+    \item Usados em várias aplicações de Monte Carlo
+      (e.g. integração MC, inf. Bayesiana por MCMC, etc.)
+    \item Utilizados em otimização estocástica.
+    \item Empregados em jogos digitais (e.g. poker online).
+    \end{itemize}
+  \end{itemize}
+
+\end{frame}
+
+%-----------------------------------------------------------------------
+
+\begin{frame}[allowframebreaks]{Geração de números aleatórios}
+
+  {\large Números aleatórios reais}
+
+  \begin{itemize}
+  \item São gerados por dispositivos via processos físicos.
+    \begin{itemize}
+    \item Globo de sorteio da Mega-Sena e bingos.
+    \item Lançamento de um dado, moeda.
+    \item Roleta de cassino.
+    \end{itemize}
+  \item Para uso em maior escala, são geralmente baseados em fenômenos
+    que geram um nível baixo de rúido.
+    \begin{itemize}
+    \item Ruído termal.
+    \item Ruído fotoelétrico.
+    \item Ruído acústico.
+    \item Movimento browniano de partículas.
+    \end{itemize}
+  \item Os sinais precisam ser traduzidos para números (intensidade).
+  \item A distribuição da v.a. pode não ter forma conhecida.
+  \item A v.a. pode ter correlação serial.
+  \item São usados em criptografia.
+  \end{itemize}
+
+  \framebreak
+
+  {\large Números pseudo-aleatórios reais}
+
+  \begin{itemize}
+  \item São gerados por programas de computador, ou seja, algorítmos.
+  \item Os número não são realmente aleatórios, pois, dado o algorítmo
+    gerador, pode-se prever os números (tem reprodutibilidade).
+  \item Do ponto de vista Estatístico, os números são imprevisíveis.
+  \item Bons GNA terão propriedades interessantes para aplicações
+    Estatística.
+  \end{itemize}
+
+\end{frame}
+
+%-----------------------------------------------------------------------
+
+\begin{frame}{Propriedades desejáveis de um GNA}
+  \begin{itemize}
+  \item Os valores gerados são completamente imprevisíveis e passam em
+    testes de detecção de não aleatoriedade.
+  \item A distribuição da v.a. é matematicamente conhecida
+    (e.g. distribuição Uniforme).
+  \item O GNA produz v.a. que não apresentarem correlação serial, ou
+    seja, as realizações são independentes umas das outras.
+  \end{itemize}
+\end{frame}
+
+%-----------------------------------------------------------------------
+
+\begin{frame}{Algorítmos para GNA Uniformes}
+
+  \begin{itemize}
+  \item Existem vários algorítmos para GNA. No R, existem 7 opções para
+    o algorítmo de GNA.
+  \item Peça \texttt{help(Random)} para consultar a respectiva documentação.
+  \end{itemize}
+
+  {\large Algorítmos disponíveis no R}
+
+  \mytwocolumns{0.49}{0.49}{
+    \begin{itemize}
+    \item Wichmann-Hill.
+    \item Marsaglia-Multicarry.
+    \item Super-Duper.
+    \item Mersenne-Twister (\textit{default}).
+    \end{itemize}
+  }{
+    \begin{itemize}
+    \item Knuth-TAOCP-2002.
+    \item Knuth-TAOCP.
+    \item L'Ecuyer-CMRG.
+    \end{itemize}
+  }
+
+\end{frame}
+
+%-----------------------------------------------------------------------
+
+\begin{frame}{GNA feito por mim}
+
+  {\large Algorítmo}
+  \begin{enumerate}
+  \item Definir um número $u_0 \in (0, 1)$ e atribuir $i = 0$.
+  \item Calcular $u_{i+1} = 0.5+0.5\sin(2\pi u_{i}).$
+  \item Incrementar $i$ fazendo $i = i+1$.
+  \item Repetir 2--3 até obter a sequência de tamanho desejado.
+  \end{enumerate}
+
+  {\large Atividades}
+  \begin{itemize}
+  \item Implemente em R o algorítmo acima.
+  \item Considere $x_0 = 0.3$ e gere 1000 números.
+  \item Inspecione a amostra de números varificar existência de
+    independência, periodicidade e forma da distribuição.
+  \end{itemize}
+\end{frame}
+
+%-----------------------------------------------------------------------
+
+\begin{frame}{GNA de von Neumann}
+
+  {\large Artigo}
+
+  von Neumann, J. (1951). Various Techniques Used in Connection with
+  Random Digits. In the Monte Carlo Method (ed. A.S. Householder et al.,
+  36-38). \textbf{Nat. Bur. Standards Appl.} Math Ser. no. 12.
+
+  {\large Algorítmo}
+
+  \begin{enumerate}
+  \item Definir um número $u_0$ de quadro digitos decimais e atribuir
+    $i = 0$.
+  \item Calcular $u_i^2$. Agregar zeros à esquerda, quando necessário,
+    para manter representação com 4 digitos:
+    $u_i^2 = d_7 d_6\ldots d_0$, onde cada $d_j$ é um inteiro entre 0 e
+    9.
+  \item Fazer $u_{i+1} = d_5 d_4 d_3 d_2$.
+  \item Incrementar $i$ fazendo $i = i+1$.
+  \item Repetir 2--4 até obter a sequência de tamanho desejado.
+  \end{enumerate}
+
+  Implemente e inspecione as propriedades deste GNA Uniformes.
+
+\end{frame}
+
+%-----------------------------------------------------------------------
+
+\begin{frame}{O método congruencial linear}
+
+  O método congruencial linear é baseado na seguinte expressão recursiva
+
+  \begin{equation}
+    u_{i + 1} = (a u_{i} + c) \!\!\mod m,
+  \end{equation}
+
+  em que
+  \begin{itemize}
+  \item $u_i \in \mathbb{N}$ no intervalo $[0, m - 1]$,
+  \item $a \in \mathbb{N}^{+}$ é chamado de multiplicador,
+  \item $c \in \mathbb{N}^{+}$ é chamado de incremento,
+  \item $m \in \mathbb{N}^{+}$ é chamado de módulo.
+  \end{itemize}
+
+  Se $a$, $c$ e $m$ forem adequadamente escolhidos, a cardinalidade do
+  conjunto de valores gerados é no máximo $m$.
+
+\end{frame}
+
+%-----------------------------------------------------------------------
+
+\begin{frame}{Implementação e avaliação}
+
+Baseado nas orientações em \cite{ferreira2013estcompjava}.
+
+  \begin{itemize}
+  \item Implemente e inspecione usando as configurações
+    \begin{itemize}
+    \item $u_0 = 7$, $a = 7$, $c = 7$ e $m = 10$.
+    \item $u_0 = 7$, $a = 7^5$, $c = 0$ e $m = 2^{31} - 1$ (Park \& Miller, 1988, apud \cite{ferreira2013estcompjava}).
+    \end{itemize}
+  \end{itemize}
+
+  \cite{ferreira2013estcompjava} citando Schrage (1979), comenta que
+  \begin{equation}
+    a u_i \!\!\mod m = \begin{cases}
+      a (u_i \!\!\mod q) - r\lfloor u_i/q \rfloor & \text{se maior que } 0, \\
+      a (u_i \!\!\mod q) - r\lfloor u_i/q \rfloor + m & \text{caso contr\'ario},
+    \end{cases}
+  \end{equation}
+  é uma implementação mais portável para linguagens de baixo nível.
+
+  Em que $q = \lfloor m/a \rfloor$ e $r = m \!\!\mod a$, que resulta em
+  $m \approx aq + r$.
+
+\end{frame}
+
+%-----------------------------------------------------------------------
+
+\begin{frame}[fragile, allowframebreaks]{Implementação em R}
+
+  {\large Método congruencial linear}
+
+<<eval = FALSE>>=
+# a = 7^5
+# m = 2^31 - 1
+rand_congr0 <- function(n = 1, x0, a = 16807, m = 2147483647) {
+    if (missing(x0)) x0 <- as.integer(Sys.time())
+    stopifnot(x0 < m)
+    n <- n + 1
+    x <- vector(mode = "integer", length = n)
+    x[1] <- x0
+    for (i in 2:n) {
+        x[i] <- (a * x[i - 1]) %% m
+    }
+    return(x[-1])
+}
+
+rand_congr0(n = 10, x0 = 321)
+@
+
+  \framebreak
+
+  {\large Método congruencial linear de Schrage}
+
+<<eval = FALSE>>=
+rand_congr1 <- function(n = 1, x0) {
+    a <- 16807; m <- 2147483647; q <- 127773; r <- 2836
+    # Verifique que: a * (321 %% q) == a * (321 - r * floor(321/q)).
+    if (missing(x0)) x0 <- as.integer(Sys.time())
+    stopifnot(x0 < m)
+    n <- n + 1
+    x <- vector(mode = "integer", length = n)
+    x[1] <- x0
+    for (i in 2:n) {
+        k <- floor(x[i - 1]/q)
+        x[i] <- a * (x[i - 1] - k * q) - k * r
+        if (x[i] < 0) {
+            x[i] <- x[i] + m
+        }
+    }
+    return(x[-1])
+}
+@
+
+\end{frame}
+
+%-----------------------------------------------------------------------
+{
+  \usebackgroundtemplate{\includegraphics[height=\paperheight, width=\paperwidth]{../img/looking-ahead.jpg}}
+  % \setbeamersize{text margin left=30mm}
+
+  \begin{frame}[b]{}
+
+    \hspace*{0.5\linewidth}
+    \begin{minipage}[t]{0.5\linewidth}
+
+      \hi{Próxima aula}
+      \begin{itemize}
+      \item Outros algorítmos para GNA Uniforme.
+      \item GNA de variáveis aleatórias discretas.
+      \item GNA de variáveis aleatórias contínuas.
+      \end{itemize}
+
+      \hi{Avisos}
+      \begin{itemize}
+      \item Sabatina no Moodle do conteúdo da semana passada.
+      \item Notas das sabatinas já estão disponíveis!
+      \end{itemize}
+
+    \end{minipage}
+
+\end{frame}
+}
+
+%-----------------------------------------------------------------------
+\begin{frame}[t, fragile, allowframebreaks]
+  \frametitle{Referências bibliográficas}
+
+  \printbibliography[heading=none]
+\end{frame}
+
+%-----------------------------------------------------------------------
+\end{document}
-- 
GitLab