Início > gráficos > Procedimento gráfico interativo para densidade com rpanel

Procedimento gráfico interativo para densidade com rpanel

Printscreen da janela gráfica e janela de controle do painel para o gráfico de densidade kernel usando funções disponíveis no pacote rpanel.

Alguns posts atrás eu apresentei procedimentos gráficos para obtenção de valores iniciais em regressão não linear. Dessa vez eu mudei o foco. Vou apresentar os procedimentos gŕaficos interativos disponíveis no pacote rpanel ilustrando o procedimento de estimação kernel de densidade.

O pacote rpanel possui funções para alterar componentes do gráfico. Os mais úteis são: deslizadores, caixas de seleção e caixas de texto. Exemplos de uso dessas funções você encontra na documentação do pacote e na página do pacote mantida pelo autor do mesmo, Adrian Bowman. Para ver o rpanel funcionando, assista o vídeo abaixo.

No CMR abaixo eu preparei um painel para controlar os argumentos kernel= e width= da função density(). Além disso, outro painel controla a posição do centro da banda. Ao alterar a opção de kernel, muda-se a função usada na estimação. Ao alterar o valor da largura de banda, muda-se a zona de influência ao redor do centro. Por último, movendo o centro sobre as observações, você verifica como a função se comporta em cada região.

No final, tem uma pequena porção de código que ilustra como obter probabilidades a partir de uma função de densidade kernel. O procedimento consiste em aproximar a função kernel e depois fazer uma integração numérica.

Para usar o rpanel, basta instalar da forma usual o pacote e suas dependências. Verifique a documentação do pacote para mais opções. Até a próxima ridícula.

#-----------------------------------------------------------------------------
# dados de redimento de grãos de 32 híbridos de milho

rend <- c(6388, 6166, 6047, 5889, 5823, 5513, 5202, 5172, 5166, 4975, 4778,
          4680, 4660, 5403, 5117, 5063, 4993, 4980, 4770, 4685, 4614, 4552,
          3973, 4550, 5056, 4500, 4760, 5110, 4960, 4769, 4849, 5230)

#-----------------------------------------------------------------------------
# tipos de kernel, tirado da documentação da função density()

kernels <- eval(formals(density.default)$kernel) # extrai os tipos de kernel
kernels
plot(density(0, from=-1.2, to=1.2, width=1, kernel="gaussian"), type="l",
     ylim=c(0, 2), xlab="rendimento de grãos", main="kernels")
for(i in 2:length(kernels))
  lines(density(0, width=1, kernel=kernels[i]), col=i)
legend(0.5, 2.0, legend=kernels, col=seq(kernels), lty=1, bty="n")

#-----------------------------------------------------------------------------
# painel para gráfico de densidade: largura de banda e tipo de função kernel

require(rpanel)

density.panel <- function(panel){
  ## argumento panel é uma lista, cada slot é um argumento
  ## x: vetor métrico de observações
  ## width: escalar métrico da largura de banda
  ## kernel: scalar string que informa o tipo de função kernel
  ## c0: escalar métrico que é a coodenada do centro da banda
  ## n: tamanho da amostra
  ##------------------------------------------------------------------
  ## gráfico de densidade e rug
  aux <- density(panel$x, width=panel$width, kernel=panel$kernel)
  plot(aux, main=NA)
  rug(panel$x)
  ##------------------------------------------------------------------
  ## faz o intervalo com o comprimento da banda
  arrows(panel$c0-0.5*panel$width, 0, panel$c0+0.5*panel$width, 0,
         length=0.1, code=3, angle=90, col=2)
  ##------------------------------------------------------------------
  ## faz uma seta que aponta para o valor da função
  y0 <- approx(aux$x, aux$y, xout=panel$c0)
  arrows(panel$c0, 0, panel$c0, y0$y, length=0.1, col=2)
  ##------------------------------------------------------------------
  ## desenha a função kernel acima do intevalo
  d <- density(panel$c0, width=panel$width, kernel=panel$kernel)
  lines(d$x, d$y/panel$n, col=2)
  ##------------------------------------------------------------------
  ## deve retornar a lista como última linha
  panel
  ##------------------------------------------------------------------
}

#-----------------------------------------------------------------------------
# alimenta os controladores, depois de rodar todos o painel gráfico está
# criado e então é só usar o mouse para alterar os componentes

# passar os argumentos que serão fixos, abre a janelinha
panel <- rp.control(x=rend, n=length(rend))

# controla a largura da banda
rp.slider(panel, width, 10, 1000, initval=150,
          showvalue=TRUE, action=density.panel)

# controla a coordenada do centro da banda
rp.slider(panel, c0, 3500, 6500, initval=5000,
          showvalue=TRUE, action=density.panel)

# controla o tipo de função kernel
rp.radiogroup(panel, kernel, 
              c("gaussian","epanechnikov","rectangular",
                "triangular","biweight","cosine","optcosine"),
              action=density.panel)

#-----------------------------------------------------------------------------
# obtendo valores de área abaixo da curva de densidade via aproximação da
# função densidade e integração numérica

dens <- density(rend, bw=150)
plot(dens)
rug(rend)
fdens <- approxfun(dens$x, dens$y) # cria uma função que é interpolação linear
i <- 4500; s <- 5500               # limites inferior e superior
integrate(fdens, i, s)             # faz uma integração numérica
polygon(c(i,dens$x[dens$x>i & dens$x<s],s),
        c(0,dens$y[dens$x>i & dens$x<s],0), col="gray90")
i <- 3600; s <- 6800               # limites inferior e superior
integrate(fdens, i, s)             # faz uma integração numérica
polygon(c(i,dens$x[dens$x>i & dens$x<s],s),
        c(0,dens$y[dens$x>i & dens$x<s],0), col="gray90")

#-----------------------------------------------------------------------------
About these ads
Categoriasgráficos Tags:, , ,
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 52 outros seguidores

%d blogueiros gostam disto: