\SweaveOpts{prefix.string=aulaprob,width=5.5,height=5.5,pdf=F}
<<label=Rsettings,echo=FALSE,results=hide>>= 
options("width"=85)
options(SweaveHooks=list(fig=function() par(mar=c(3,3,1,0.5), mgp=c(2,0.8,0))))
@

\documentclass[a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[brazil,brazilian]{babel}
\usepackage{hyperref}
\usepackage{Rd}

\title{Exemplo de uso do \textsf{Sweave} - Uma aula sobre distribui\c{c}ões de probabilidade no \textsf{R}}
\author{Paulo Justiniano Ribeiro Jr}
\date{\today}

\begin{document}
\maketitle
\section{Distribuições de Probabilidade}\label{prob}

O programa \R{} inclui funcionalidade para operações com distribuições de probabilidades.
Para cada distribuição há 4 operações básicas indicadas pelas letras:
\begin{itemize}
\item[{\tt d}] calcula a densidade de probabilidade $f(x)$ no ponto 
\item[{\tt p}] calcula a função de probabilidade acumulada $F(x)$ no ponto 
\item[{\tt q}] calcula o quantil correspondente a uma dada probabilidade
\item[{\tt r}] retira uma amostra da distribuição
\end{itemize}

Para usar os funções deve-se combinar uma das letras acima com uma abreviatura 
do nome da distribuição, por exemplo para calcular probabilidades usamos: \verb|pnorm| para normal, \verb|pexp| para exponencial, \verb|pbinom| para binomial, \verb|ppois| para Poisson e assim por diante.

Vamos ver com mais detalhes algumas distribuições de probabilidades.

\subsection{Distribuição Normal}

A funcionalidade para distribuição normal é implementada por argumentos que combinam as letras acima com o termo {\tt norm}. 
Vamos ver alguns exemplos com a distribuição normal padrão.
Por {\it default} as funções assumem a distribuição normal padrão $N(\mu=0, \sigma^2=1)$.
<<norm>>=
dnorm(-1)
pnorm(-1)
qnorm(0.975)
rnorm(10)
@ 

O primeiro valor acima corresponde ao valor da densidade da normal
$$ f(x) = \frac{1}{\sqrt{2 \pi \sigma^2}}\exp\{-\frac{1}{2\sigma^2}(x - \mu)^2\}$$
com parâmetros $(\mu=0, \sigma^2=1)$ no ponto $-1$.
Portanto, o mesmo valor seria obtido substituindo $x$ por $-1$ na expressão da normal padrão:
<<dnorm-1>>=
(1/sqrt(2*pi)) * exp((-1/2)*(-1)^2)
@ 

A função \code{pnorm(-1)} calcula a probabilidade $P(X \leq -1)$.\\
O comando \code{qnorm(0.975)} calcula o valor de $a$ tal que $P(X \leq a)=0.975$.\\
Finalmente o comando \code{rnorm(10)} gera uma amostra de 10 elementos da normal padrão. Note que os valores que voce obtém rodando este comando podem ser diferentes dos mostrados acima.

As funções acima possuem argumentos adicionais, para os quais valores padrão ({\it default}) foram assumidos, e que podem ser modificados.
Usamos \code{args()} para ver os argumentos de uma função e \code{help()} para visualizar a documentação detalhada:
<<argsnorm>>=
args(rnorm)
@ 

As funções relacionadas à distribuição normal possuem os argumentos {\tt mean} e {\tt sd} para definir média e desvio padrão da distribuição que podem ser modificados como nos exemplos a seguir.
Note nestes exemplos que os argumentos podem ser 
passados de diferentes formas.
<<qnorm>>=
qnorm(0.975, mean = 100, sd = 8)
qnorm(0.975, m = 100, s = 8)
qnorm(0.975, 100, 8)
@ 

Para informações mais detalhadas pode-se usar a função \code{help()}.
O comando
<<helpnorm,eval=F>>=
help(rnorm)
@ 
irá exibir em uma janela a documentação da função que pode também ser chamada com \code{?rnorm}. 
Note que ao final da documentação são apresentados exemplos que podem ser rodados pelo usuário e que auxiliam na compreensão da funcionalidade.\\
Note também que as 4 funções relacionadas à distribuição normal
são documentadas conjuntamente, portanto \code{help(rnorm)}, 
\code{help(qnorm)}, \code{help(dnorm)} e \code{help(pnorm)} 
irão exibir a mesma documentação.


Cálculos de probabilidades usuais, 
para os quais utilizávamos tabelas estatísticas 
podem ser facilmente obtidos como no exemplo a seguir.

Seja $X$ uma v.a. com distribuição $N(100, 100)$. 
Calcular as probabilidades:
\begin{enumerate}
\item \mbox{} $ P[X < 95] $
\item \mbox{} $ P[90 < X < 110] $
\item \mbox{} $ P[X > 95] $
\end{enumerate} 
Calcule estas probabilidades de forma usual, usando a tabela da normal.
Depois compare com os resultados fornecidos pelo \R.
Os comandos do \R{} para obter as probabilidades pedidas são:
<<pnorm>>=
pnorm(95, 100, 10)
pnorm(110, 100, 10) - pnorm(90, 100, 10)
1 - pnorm(95, 100, 10)
pnorm(95, 100, 10, lower=F)
@ 
Note que a última probabilidade foi calculada de duas formas diferentes, a segunda usando o argumento {\tt lower} que implementa um algorítmo de cálculo de probabilidades mais estável numericamente.

A seguir vamos ver comandos para fazer gráficos de distribuições de probabilidade. Vamos fazer gráficos de funções de densidade e de probabilidade acumulada.
Estude cuidadosamente os comandos abaixo e verifique os gráficos por eles produzidos.
A \hypertarget{fig:prob01}{Figura}~\ref{fig:prob01} mostra gráficos da densidade (esquerda) e probabilidade acumulada (direita) da normal padrão, produzidos com os comandos a seguir. Para fazer o gráfico consideramos valores de $X$ entre -3 e 3 que correspondem a +/- três desvios padrões da média, faixa que concentra 99,73\% da massa de probabilidade da distribuição normal. 
<<fFnorm>>=
plot(dnorm, -3, 3)
plot(pnorm, -3, 3)
@

\setkeys{Gin}{width=0.99\textwidth}
\SweaveOpts{width=8,height=4}
\begin{figure}[tb]
  \centering
<<fFnorm,fig=T,echo=F>>=
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.8,0), mfrow=c(1,2))
<<fFnorm>>
@ 
\caption{Funções de densidade e probabilidade da distribuição normal padrão.}
\label{fig:prob01}
\end{figure}

A \hypertarget{fig:prob02}{Figura}~\ref{fig:prob02} mostra gráficos da densidade (esquerda) e probabilidade acumulada (direita) da $N(100, 64)$. Para fazer estes gráficos tomamos uma sequência de valores de $x$ entre 70 e 130 e para cada um deles calculamos o valor das funções $f(x)$ e $F(x)$. Depois unimos os pontos $(x,f(x))$ em um gráfico e $(x,F(x))$ no outro.
<<normal10064>>=
x <- seq(70, 130, len=100)
fx <- dnorm(x, 100, 8)
plot(x, fx, type='l')
Fx <- pnorm(x, 100, 8)
plot(x, Fx, type='l')
@ 
\begin{figure}[tb]
  \centering
  % \htmlimage{transparent}
<<normal10064,fig=T,echo=F>>=
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.8,0), mfrow=c(1,2))
<<normal10064>>
@ 
% \centerline{\includegraphics[width=\textwidth]{figuras/prob02.ps}}
\caption{Funções de densidade de probabilidade (esquerda) e função de distribuição acumulada (direita) da $N(100, 64)$. }
\label{fig:prob02}
\end{figure}
Note que, alternativamente, os mesmos gráficos poderiam ser produzidos com os comandos a seguir.
<<eval=F>>=
plot(function(x) dnorm(x, 100, 8), 70, 130)
plot(function(x) pnorm(x, 100, 8), 70, 130)
@
Comandos usuais do \R{} podem ser usados para modificar a aparência dos gráficos.
Por exemplo, podemos incluir títulos e mudar texto dos eixos conforme mostrado na gráfico da esquerda da 
\hypertarget{fig:prob03}{Figura}~\ref{fig:prob03} 
e nos dois primeiros comandos abaixo. Os demais comandos mostram como colocar diferentes densidades em um mesmo gráfico como ilustrado à direita da mesma Figura.
<<modnorm>>=
plot(dnorm, -3, 3, xlab='valores de X', ylab='densidade de probabilidade')
title('Distribuicão Normal\nX ~ N(100, 64)')

plot(function(x) dnorm(x, 100, 8), 60, 140, ylab='f(x)')
plot(function(x) dnorm(x, 90, 8), 60, 140, add=T, col=2)
plot(function(x) dnorm(x, 100, 15), 60, 140, add=T, col=3)
legend(110, 0.05, c("N(100,64)","N(90,64)","N(100,225)"), fill=1:3)
@ 
\begin{figure}[tb]
  \centering
<<modnorm,fig=T,echo=F>>=
par(mar=c(3,3,2.0,0.5), mgp=c(2,0.8,0), mfrow=c(1,2))
<<modnorm>>
@ 
% \centerline{\includegraphics[width=\textwidth]{figuras/prob03.ps}}
\caption{Gráfico com texto nos eixos e título (esquerda) e várias distribuições em um mesmo gráfico (direita).}
\label{fig:prob03}
\end{figure}

\subsection{Distribuição Binomial}
\indent

Cálculos para a distribuição binomial são implementados combinando as {\it letras básicas} vistas acima com o termo {\tt binom}.
Vamos primeiro investigar argumentos e documentação com \code{args()} e \code{dbinom()}. 
<<>>=
args(dbinom)
@ 
<<eval=F>>=
help(dbinom)
@ 

Seja $X$ uma v.a. com distribuição Binomial  com $n=10$ e $p=0.35$.
Vamos ver os comandos do \R{} para:
\begin{enumerate}
\item fazer o gráfico das função de densidade
\item idem para a função de probabilidade
\item calcular $P[X = 7]$
\item calcular $P[X < 8] = P[X \leq 7]$
\item calcular $P[X \geq 8] = P[X > 7]$
\item calcular $P[3 < X \leq 6]  = P[4 \leq X < 7]$
\end{enumerate}

Note que sendo uma distribuição discreta de probabilidades os gráficos são diferentes dos obtidos para distribuição normal e os cálculos de probabilidades devem considerar as probabilidades nos pontos. Os gráficos das funções de densidade e probabilidade são mostrados na 
\hypertarget{fig:prob04}{Figura}~\ref{fig:prob04}.
<<fFbinom>>=
x <- 0:10
fx <- dbinom(x, 10, 0.35)
plot(x, fx, type='h')
Fx <- pbinom(x, 10, 0.35)
plot(x, Fx, type='S')
@ 

\begin{figure}[tb]
  \centering
<<fFbinom,fig=T,echo=F>>=
par(mar=c(3,3,0.5,0.5), mgp=c(2,0.8,0), mfrow=c(1,2))
<<fFbinom>>
@ 
\caption{Funções de probabilidade (esquerda) e distribuição acumulada (direita) da $B(10, 0.35)$.}
\label{fig:prob04}
\end{figure}

As probabilidades pedidas são obtidas com os comandos a seguir.
<<>>=
dbinom(7, 10, 0.35)
pbinom(7, 10, 0.35)
sum(dbinom(0:7, 10, 0.35))

1-pbinom(7, 10, 0.35)
pbinom(7, 10, 0.35, lower=F)

pbinom(6, 10, 0.35) - pbinom(3, 10, 0.35)
sum(dbinom(4:6, 10, 0.35))
@ 

\end{document}

