Criando regiões destacadas no R
Palavras-chave: Distribuição Normal, tutorial, R-Project.
Algumas vezes, para fins didáticos ou ilustrativos, queremos destacar regiões em um gráfico de densidade, para mostrar por exemplo um p-valor ou uma região sobre a curva de uma normal.
Utilizando a função polygon() do R conseguimos produzir figuras como a abaixo:

Densidade padrão
Região destacada ilustra P(1 < X < 2).
Como fazer
Em primeiro lugar devemos fazer o gráfico da função ou densidade sob a qual queremos destacar a região. Em geral podemos fazer isso através da função curve(). Para o caso de uma normal padrão, podemos usar:
Entretanto o comando acima vai criar o gráfico num intervalo de x arbitrário. É interessante termos controle sobre esse intervalo para podermos definir a região que iremos destacar. Fazemos isso através do parâmetro xlim da função curve():
Feita a curva usaremos agora a função polygon(x,y). Os dois parâmetros principais dessa função, x e y definem o seu comportamento. Essa função desenha um polígono na tela, cujos vértices (xi,yi) são dados pelos elementos (x[i],y[i]) dos vetores x e y. O truque agora consiste em expressar a região que queremos destacar através de um polígono. A princípio a idéia parece estúpida, pois em geral nossa região vai ser sobre uma curva contínua, entretanto se tomarmos um polígono com número suficientes de lados a aproximação vai ser bem razoável.
Digamos que queiramos destacar a região compreendida por P(-3 < X < -2). O primeiro vértice do polígono que queremos usar para aproximar essa região será (-3,0). Colocamos então:
> cord.y <- c(0)
O segundo vértice deverá ficar no ponto (-3,f(-3)), onde f(-3) é o valor da densidade da normal no ponto -3. No R podemos obter esse segundo valor através da função dnorm():
> cord.y <- c(cord.y,dnorm(-3))
Numa tentativa de aproximação por um trapezóide, podemos usar como terceiro vértice o ponto (-2,f(-2)), e como último o ponto (-2,0). Temos assim:
> cord.y <- c(cord.y,dnorm(-2),0)
Obtemos então o polígono através do comando:
Se você seguiu as instruções até aqui terá obtido o gráfico abaixo:

Nada mal, mas podemos melhorar. O truque está em fazer uma seqüência de vértices entre os dois extremos na densidade (f(-3) e f(-2) no caso), de forma que o número grande de vértices nos dê uma aproximação melhor. Para isso, usamos a função seq(), para criar uma seqüencia entre -3 e -2 com intervalos de 0.01:
> cord.y <- c(0,dnorm(seq(-3,-2,0.01)),0)
> curve(dnorm(x,0,1),xlim=c(-3,3),main='Normal padrao')
> polygon(cord.x,cord.y,col='skyblue')
Que resulta na figura:

Comentários
Note que utilizamos a função de densidade da normal sem parâmetros, pois ela tem como padrão a normal padrão N(0,1). Para o caso de uma normal com outros parâmetros, ou no caso de outras distribuições de probabilidade ou funções, é necessário fornecer os parâmetros de acordo. Mais usos da função polígono assim como outras opções de configuração mais avançadas podem ser encontradas na documentação (?polygon) do R.
Páginas Relacionadas
- Aprenda a usar o R - 06/07/2008
