Cantinho do R

Gráficos de muito tempo atrás, vindos de uma galáxia muito distante

Média e desvio padrão usando Tie Fighters!

Já reparou que não dá pra escrever Star Wars sem R?

Por Marcos Vital, do LEQ-UFAL

Este material foi construído com a ajuda de muitas pessoas que acreditam no LEQ e em Ciência Livre. Muito obrigado!

Para mais material, visite o Cantinho do R


Se você é fã do R (e não alguém que se vê obrigado a usá-lo), há uma boa chance de também ser altamente nerd, como eu. E qual nerd não gostaria de ver um pouco de Star Wars dentro do R? :D

(certo, se você for um Trekker, talvez nem goste tanto, mas aí é a vida, não dá para agradar todos, não é?)

Aviso importante de inutilidade quase total do script

É, pois é. Acho importante esclarecer que este pequeno script é (quase) completamente inútil, e não acho que a Nature, a Science ou a Trends in Ecology and Evolution vão gostar do seu manuscrito se ele usar um gráfico assim… Quem sabe a PLOS aceita? hehehehe

Mas assim, falando sério, já mencionei antes que mesmo tarefas inúteis no R podem ser interessantes, uma vez que elas às vezes funcionam como desafios, e nos fazem aprender. No mais, acho que este script pode ser um recurso divertido para ser usado em sala de aula.

Dito isso, vamos lá?

 


Como isso começou

Não sei muito como ou por que, mas num belo dia eu esbarrei em nesta postagem do blog “The Praise of Insects”. Sendo um nerd e fã de R, é claro que adorei! Daí fui na fonte, o código lá no GitHub. Mas para minha tristeza, não funcionou…

Então fui fuçar um pouco, e percebi que a função foi construída há muito tempo atrás (hehehehehehehe), em uma versão mais antiga do R (deve ter sido a 2.algumacoisa), e possivelmente por isso a coisa não funcionava mais. Já estava quase desistindo, quando olhei para o gráfico tão bonitinho e pensei “ei, posso tentar fazer uma versão nova”! E aí nasceu este script, com a função TIEplot2.

Em essência, não estamos falando de nada demais: é apenas um gráfico de média e desvio padrão, no qual os elementos gráficos vão se parecer com Tie Figthers. ;)

 


Criando o gráfico passo a passo

A parada na verdade é bem mais simples do que vocês estão pensando, e vou bem diretão ao ponto, beleza? Mas se você quiser entender cada etapa direitinho, sugiro dar uma espiada na função que já apresentei por aqui para gráficos de média e desvio. Aqui nesta nova versão as únicas diferenças estão na forma como eu usei os símbolos, cores, tamanhos e coisas assim.

Então não irei detalhar muito as coisas. Vou criar o gráfico aqui com vocês, e lá embaixo amarramos tudo numa função que você poderá usar depois para impressionar os amigos nerds com suas habilidades incríveis de estatística! :D

 


O gráfico

Nós vamos usar aquele conjuntinho de dados, o iris. Nós já batemos um papo sobre estes dados antes, leia aqui se você não se lembra.

Uma vez com os dados nas mãos, o que vamos fazer acontece em algumas etapas simples:

  • cálculo das médias e desvios, com criação de objetos com tudo;
  • desenho da “caixinha” do gráfico, para preparar o terreno;
  • contorno das asas dos nossos gloriosos caças imperiais (ou seja, as barras de erro)
  • deseho dos cockpits, o “miolinho” dos caças (ou seja, as médias).

Lá vai:

  data(iris)
  y<-iris$Sepal.Length
  x<-iris$Species 

    means<-tapply(y, x, mean)
    s.dev<-tapply(y, x, sd)
    xlevels<-1:nlevels(x)

    plot(xlevels, means, ylim=c(min(y), max(y)), pch=16, axes=F, xlab="Espécie", ylab="Comprimento da Sépala", type="n", xlim=c(0.5, nlevels(x)+0.5))

    axis(2, las=1)
    axis(1, xlevels, levels(x))
    box()

    #As asas:
    arrows(xlevels, means-s.dev, xlevels, means+s.dev, angle=90, code=3,
    length =  0.25 , col = "grey", lwd = 7.5 )

    #Os cockpits:
    points(xlevels, means, pch = 19, col="grey", cex = 6 )
    points(xlevels, means, pch = 19, cex = 1.5 )
    points(xlevels, means, pch = 8, cex = 2.5 )
    points(xlevels, means, pch = 1, cex = 4 )

Yeahhhhhhhhhhhh!

Maneiro, né não?

Mas Marcos, comé que você fez isso?

É fácil:

  • na função arrows, usei a cor cinza e aumentei a espessura das linhas com o lwd;
  • na sequência de points adicionei cada elemento dos cockipits como se fossem camadas. O melhor jeito de entender é executar cada linha olhando para o gráfico, que vocês vão entender.

 


A função

Beleza. Como prometido, podemos amarrar tudo numa função, como fizemos antes com o gráfico de médias.

Assim:

TIEplot2 <- function(x, y, xname, yname){
    means<-tapply(y, x, mean)
    s.dev<-tapply(y, x, sd)
    xlevels<-1:nlevels(x)

    plot(xlevels, means, ylim=c(min(y), max(y)), pch=16,
    axes=F, xlab=xname, ylab=yname, type="n", xlim=c(0.5, nlevels(x)+0.5))

    axis(2, las=1)
    axis(1, xlevels, levels(x))
    box()

    arrows(xlevels, means-s.dev, xlevels, means+s.dev, angle=90, code=3,
    length =  0.25 , col = "grey", lwd = 7.5 )

    points(xlevels, means, pch = 19, col="grey", cex = 6 )
    points(xlevels, means, pch = 19, cex = 1.5 )
    points(xlevels, means, pch = 8, cex = 2.5 )
    points(xlevels, means, pch = 1, cex = 4 )

  
}

E aí, pra ver se deu certo, vou testar com os dados InsectSprays:

data(InsectSprays)

TIEplot2(InsectSprays$spray, InsectSprays$count, "spray","count")

Massa! :D

 

Antes de ir embora

Se quiser, agora pode pegar a função pronta aqui, e quando desejar basta ela estar na pasta de trabalho e ser “chamada” com um bom e velhor source. De novo, o processo é igualzinho quando fizemos o gráfico de médias, então qualquer coisa volte lá pra conferir.

E agora você pode se divertir com média e desvio padrão como nunca fez antes! :D

Um abração, e até o próximo script!

Prof Marcos

 


Este documento faz parte do material que disponibilizo no meu blog, o “Cantinho do R”, e foi foi criado utilizando o software R, o programa RStudio e a linguagem Markdown. Para saber mais sobre eles, acesse:

http://www.r-project.org/

http://www.rstudio.com

http://rmarkdown.rstudio.com/

 

Quer comentar ou perguntar? Faça isso no blog, aqui