Essa nota técnica tem o objetivo de resolver o exercício 16 da lista 2 de Matemática, cujo enunciado é: faça uma nota técnica usando o R Markdown, carregada no R Pubs, mostrando como calcular a integral de uma distribuição \(Normal(\mu,\sigma)\), através de uma função com o nome \(integra(a,b,mu,sigma,n)\) definida por você no R, que possibilite a obtenção da integral definida entre dois pontos quaisquer a e b, de uma distribuição Normal com esperança matemática \(\mu\) e desvio-padrão \(\sigma\), usando um método geométrico por soma de retângulos (n representa o número de retângulos na aproximação). Mostre o desempenho dessa função, comparando com o resultado obtido pelo uso da função pnorm do R, mostrando em classe, para casos diferentes, considerando uma Normal(\(\mu = 100, \sigma = 30\)), com avaliação de área embaixo da curva entre os pontos (\(a=35,b=72\)), (\(a=-\infty, b=10\)) e (\(a=200,b=\infty\)). Quais seriam os valores mínimos de \(n\) requeridos para que a aproximação seja próxima dos valores obtidos pelo pnorm em cada caso para garantir pelo menos 4 decimais corretas nos resultados.
Faremos o cálculo da integral da distribuição da normal através da Soma de Riemann, que consiste na divisão da região abaixo da função da normal em n retângulos, os quais, juntos, aproximar-se-ão dessa região.
A figura a seguir ilustra o que faremos. A função da normal (\(média = 0, desvio-padrao = 0,2\)) representada em azul no gráfico. A ideia é utilizar uma quantidade suficientemente grande de retângulos para que se atinja um valor bem próximo à área real abaixo da função.
Figura 1: Distribuição normal e aproximação da área por retângulos
Construiremos nossa própria função no R para calcular a área. Após nossos cálculos compareremos com a função que já existe no R, chamada pnorm.
Primeiramente, definiremos a função normal, que é dada por:
\[f(x, \mu, \sigma) = \frac{1}{(\sqrt{2 \pi} \sigma)} e^{-\frac{(x-\mu)^2}{2 \sigma}} \]
Dessa maneira, teremos:
Agora, programaremos uma função para a soma da área dos retângulos:
m_pnorm<- function (x0,xf,m,dp,n){
x<-seq(x0,xf,length.out=n)
x_norm<-(x-m)/dp
area_retangulo <- (xf-x0)/n*(1/(sqrt(2*pi)*dp))*exp(-0.5*(x_norm^2))
soma <- sum(area_retangulo)
int<-(soma)
int
}
Compararemos noss resultado com o do R. O nosso será:
m_pnorm(35,72,100,30,10000)
## [1] 0.1601961
O valor dado pelo R:
pnorm(72,100,30,T)-pnorm(35,100,30,T)
## [1] 0.1601938
Para (\(a=-\infty, b=10\)), faremos para a suficientemente pequeno:
m_pnorm(-10000,10,100,30,10000)
## [1] 0.001424935
O valor dado pelo R:
pnorm(10,100,30,T)-pnorm(-10000,100,30,T)
## [1] 0.001349898
Para \((a = 200, b = \infty\)), faremos para b suficientemente grande:
m_pnorm(200,10000,100,30,10000)
## [1] 0.0004546651
O valor dado pelo R:
pnorm(10000,100,30,T)-pnorm(200,100,30,T)
## [1] 0.0004290603
Para encontrarmos n que garanta um resultado correto a partir de 4 casas decimais, rodaremos algumas vezes para testar e observaremos a partir de qual n teremos tal garantia.
Para \(n = 1000000\)
m_pnorm(35,72,100,30,1000000)
## [1] 0.1601938
O valor dado pelo R:
pnorm(72,100,30,T)-pnorm(35,100,30,T)
## [1] 0.1601938
Para \(n = 100000\)
m_pnorm(35,72,100,30,100000)
## [1] 0.160194
O valor dado pelo R:
pnorm(72,100,30,T)-pnorm(35,100,30,T)
## [1] 0.1601938
Para \(n = 10000\)
m_pnorm(35,72,100,30,10000)
## [1] 0.1601961
O valor dado pelo R:
pnorm(72,100,30,T)-pnorm(35,100,30,T)
## [1] 0.1601938
Portanto, o valor de n seria 10000.