Criando regiões destacadas no R

See this page in English

Data de modificação: 2008-07-06.
Data de criação: 2005-05-12.

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 da normal padrão.
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:

> curve(dnorm(x,0,1))

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():

> curve(dnorm(x,0,1),xlim=c(-3,3),main='Normal padrao')

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.x <- c(-3)
> 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.x <- c(cord.x,-3)
> 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.x <- c(cord.x,-2,-2)
> cord.y <- c(cord.y,dnorm(-2),0)

Obtemos então o polígono através do comando:

> polygon(cord.x,cord.y,col='skyblue')

Se você seguiu as instruções até aqui terá obtido o gráfico abaixo:

Primeira tentativa

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.x <- c(-3,seq(-3,-2,0.01),-2)
> 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:

Gráfico final

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

Envie seus comentários a respeito


E-mail: Nome: