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:
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:
1 | curve(dnorm(x,0,1)) |
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:
1 2 | 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():
1 2 | cord.x <- c(cord.x,-3) <br /> 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:
1 2 | cord.x <- c(cord.x,-2,-2) <br /> cord.y <- c(cord.y,dnorm(-2),0) |
Obtemos então o polígono através do comando:
1 | polygon(cord.x,cord.y,col='skyblue') |
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:
1 2 3 4 | 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:
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).
Muito obrigada, estava precisando!!
Muito obrigado, eu estava com dificuldades nisso.
abraço