Início > gráficos > Média e desvio-padrão de muitas variáveis separado por grupos

Média e desvio-padrão de muitas variáveis separado por grupos

Gráfico de barras com as médias e desvios-padrões para variáveis resposta de um experimento avaliando cultivares de banana e meios de cultura em cultura de tecidos.

Em estatística descritiva é comum a síntese dos dados em medidas de posição e dispersão. As medidas mais frequentemente usadas são a média e o desvio-padrão. Não raramente, existe a necessidade de obter essas medidas separando as observações por alguma variável categórica do conjunto de dados. Nesse post apresento algumas formas de obter isso. Estou certo de que as soluções que apresento abaixo não cobrem 5% das disponíveis considerando a extensa quantidade de pacotes/funções do R ligadas à análise descritiva, portanto, considere isso apenas como um ponto de partida. Por fim, sintetizo em um gráfico os resultamos aplicados em um conjunto de dados reais. Até a próxima ridícula.

#-----------------------------------------------------------------------------
# gerando um conjunto de dados artificial

da <- expand.grid(A=1:3, B=1:2, r=1:15)
da <- cbind(da, as.data.frame(matrix(rnorm(nrow(da)*3), nrow(da))))
str(da)

#-----------------------------------------------------------------------------
# usando funções do reshape e plyr

require(reshape)
require(plyr)

ddply(da[,-c(1:3)], .(da$A, da$B), mean) # as médias
ddply(da[,-c(1:3)], .(da$A, da$B), sd)   # os desvios-padrões

db <- melt(da, id.vars=1:3, id.measures=4:6)
str(db)

#-----------------------------------------------------------------------------
# fazendo empilhamento das observações

ddply(db[,-3], .(A, B, variable), summarise, m=mean(value), sd=sd(value))

#-----------------------------------------------------------------------------
# usando funções do pacote doBy

library(doBy)

summaryBy(V1+V2+V3~A+B, data=da,
          FUN=function(x){ c(m=mean(x), sd=sd(x)) })

#-----------------------------------------------------------------------------
# usando funções do Hmisc

require(Hmisc)

with(da, bystats(cbind(V1, V2, V3), A, B,
                 fun=function(x){ c(m=colMeans(x), s=sd(x)) }))

#-----------------------------------------------------------------------------
# dados reais

bnn <- read.table("http://www.leg.ufpr.br/~walmes/cursoR/cnpaf/banana.txt",
                  header=TRUE, sep="\t")
str(bnn)
bnn <- melt(bnn, id.measures=4:12)
bnn <- ddply(bnn, .(cult, meio, variable),
             summarise, m=mean(value), sd=sd(value))
str(bnn)

#-----------------------------------------------------------------------------
# gráfico de barras com desvio-padrão

require(lattice)
require(RColorBrewer)
display.brewer.all()
cols <- brewer.pal(nlevels(bnn$meio), "Set3")

png("f028.png", 500, 500)
trellis.par.set(superpose.polygon=list(col=cols),
                strip.background=list(col="gray90"))
barchart(m~cult|variable, groups=meio, data=bnn,
         sdv=bnn$sd, scales="free", layout=c(3,3),
         xlab="Cultivar", ylab=expression(bar(x)+sd),
         key=list(title="Meio de cultura", cex.title=1.2,
           columns=3, text=list(levels(bnn$meio)),
           rectangle=list(col=trellis.par.get("superpose.polygon")$col)),
         prepanel=function(y, sdv, subscripts=subscripts, ...){
           ly <- as.numeric(y+sdv[subscripts])
           list(ylim=range(y, ly, finite=TRUE))
         },
         panel=function(x, y, subscripts, groups, sdv, box.ratio, ...){
           panel.barchart(x, y, subscripts=subscripts,
                          groups=groups, box.ratio=box.ratio, ...)
           d <- 1/(nlevels(groups)+nlevels(groups)/box.ratio)
           g <- (as.numeric(groups[subscripts])-1); g <- (g-median(g))*d
           panel.arrows(as.numeric(x)+g, y, as.numeric(x)+g, y+sdv[subscripts],
                        angle=90, length=0.025)
         })
dev.off()

#-----------------------------------------------------------------------------
About these ads
Categoriasgráficos Tags:, , ,
  1. Simoni
    18/07/2013 às 16:37 | #1

    Olá! de que pacote são essas funções “melt” e “ddply”? o que elas fazem exatamente?

    • Walmes Zeviani
      19/12/2013 às 15:38 | #2

      A melt() é do reshape ddply() é do plyr. A documentação esclarece o que fazem.

  1. No trackbacks yet.

Deixe uma resposta

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 44 outros seguidores

%d blogueiros gostam disto: