Você está na página 1de 6

Tutoriais de Anlise Exploratria de Dados

Conferindo Data Frames


A primeira coisa que temos que fazer quando criamos um objeto de dados verific-lo cuidadosamente em busca de erros e incoerncias. Neste tutorial simulamos duas situaes bem comuns: variveis de fatores com cdigos errados e valores NA que na verdade so zeros. Vamos usar uma planilha com dados fictcios, que voc baixa aqui. Lendo a planilha com read.table ou read.csv2
aves.c <- read.table("aves_cerrado.csv", row.names=1, header=T, sep=";", dec=",", as.is=T) aves.c <- read.csv2("aves_cerrado.csv", row.names=1, as.is=T)

Verificao inicial do data frame


head(aves.c) tail(aves.c) str(aves.c) summary(aves.c)

Com isso j vemos um problema: os NAs so de fato observaes faltantes? Verificando a planilha descobrimos que na verdade so pontos em que no houve avistamento. Portanto, o valor correto zero Quais so os registros com este problema? Vamos verificar para os urubus
aves.c[aves.c$urubu==NA,]

Isto no funciona. O teste lgico Para NA feito pela funo is.na:


is.na(aves.c) is.na(aves.c$urubu)

Que retorna um vetor lgico que usamos para indexar o data frame ou um de seus vetores:
aves.c[is.na(aves.c$urubu)==T,] aves.c[is.na(aves.c$urubu)==T|is.na(aves.c$carcara)==T| is.na(aves.c$seriema)==T,]

Vamos guardar este pedao da planilha num objeto temporrio


temp1 <- aves.c[is.na(aves.c$urubu)==T|is.na(aves.c$carcara)==T| is.na(aves.c$seriema)==T,]

E agora vamos corrigir estes valores, que pode ser feito de trs maneiras:
aves.c$urubu[is.na(aves.c$urubu)==T] <- 0 aves.c[is.na(aves.c$urubu)==T,2] <- 0 aves.c[is.na(aves.c[,2])==T, 2] <- 0

Continuando, para as outras aves:


aves.c$carcara[is.na(aves.c$carcara)==T] <- 0 aves.c$seriema[is.na(aves.c$seriema)==T] <- 0

Deu certo? Vamos verificar, comparando linhas que agora so zero com o pedao antigo do objeto que guardamos:
aves.c[aves.c$urubu==0|aves.c$carcara==0|aves.c$seriema==0,] temp1

Agora vamos verificar os valores da coluna que ser um fator


table(aves.c$fisionomia)

H um erro de digitao no cdigo de fisionomia de uma parcela. Corrigindo:


aves.c$fisionomia[aves.c$fisionomia=="ce"] <- "Ce" table(aves.c$fisionomia)

Convertendo para fator, que ordenamos da fisionomia mais aberta para a menos:
aves.c$fisionomia <- factor(aves.c$fisionomia, levels=c("CL","CC","Ce"))

Ufa! Verificando tudo novamente:


str(aves.c) summary(aves.c)

Parece que agora est ok.

Mdia, Mediana e Quantis


Vamos usar o mesmo arquivo do tutorial anterior para explorar as estatsticas descritivas bsicas. Comeando pela mdia, e mediana:
mean(aves.c[,2:4]) median(mean(aves.c[,2:4]))

Este ltimo comando funcionou? Se no, tente calcular as medianas por coluna com a funo apply:
apply(aves.c[,2:4],2,median)

Calcule tambm a mdia truncada:


mean(aves.c[,2:4], trim=0.1)

H muita diferena entre essas trs medidas de tendncia central? Como voc as explicaria? Agora calcule os quantis para o nmero de avistamentos de urubus. O padro da funo quantile so quartis, como na funo summary:
quantile(aves.c$urubu) ## O mesmo que o retornado pelo summary summary(aves.c$urubu)

Mas voc pode mudar para qualquer quantil:


quantile(aves.c$urubu, probs= seq(from=0,to=1,by=0.1))

Por fim, obtenha quartis, mdias e medianas de uma vez para todas as variveis, com o comando:
summary(aves.c[,2:4])

Explorao de uma Varivel Categrica


Vamos usar um conjunto de dados de um inventrio de rvores, que voc baixa aqui. Leia com ateno a descrio deste conjunto de dados. Vamos explorar a varivel categrica nome da espcie, com a funo table:
caixeta <- read.csv("caixeta.csv", as.is=T) names(caixeta) table(caixeta$especie)

Qual a diferena no resultado se usamos o comando abaixo?


sort(table(caixeta$especie), decreasing=T)

O resultado da funo table pode ser fornecido funo de grficos de barras:


barplot(sort(table(caixeta$especie), decreasing=T)) barplot(table(caixeta$local))

Grficos para uma Varivel


Voltando ao objeto criado no tutorial Conferindo Data Frames, vamos criar em uma s pgina os quatro grficos bsicos de diagnstico de uma varivel numrica, para o nmero de avistamentos de urubus:
par(mfrow=c(2,2)) boxplot(aves.c$urubu)

hist(aves.c$urubu) plot(density(aves.c$urubu)) stripchart(aves.c$urubu, method="stack") par(mfrow=c(1,1))

O que acontece se voc omite a primeira linha? E a ltima?

Variaes do Histograma
Voltando ao objeto criado no tutorial Conferindo Data Frames, vamos fazer algumas variaes de histogramas do nmero de avistamentos de urubus: Voc pode acrescentar marcas (traos) indicando a posio de cada observao no eixo x.
## Histograma com os valores (funcao rug) hist(aves.c$urubu) rug(jitter(aves.c$urubu))

O que acontece se voc omite a funo jitter neste caso? Por que? Agora vamos fazer um histograma re-escalonado de modo que as reas das barras somem um. Com isto, podemos sobrepor ao histograma um ajuste no paramtrico de densidade probabilstica, que tambm mantm rea um:
hist(aves.c$urubu, prob=T) lines( density(aves.c$urubu),col="blue" )

Tambm sobre este histograma podemos sobrepor a curva normal. Para os parmetros da normal, usamos a mdia e o desvio-padro da amostra.
hist(aves.c$urubu, prob=T) curve(expr = dnorm(x,mean=mean(aves.c$urubu),sd=sd(aves.c$urubu)),add=T, col="red")

Por fim, vamos sobrepor a curva de densidade probabilstica com a curva normal:
plot(density(aves.c$urubu),col="blue", ylim=c(0,0.08)) curve(expr = dnorm(x,mean=mean(aves.c$urubu),sd=sd(aves.c$urubu)),add=T, col="red")

O que estes grficos revelam sobre a distribuio do nmero de avistamentos de urubus neste estudo fictcio?

table e aggregate
Usaremos o objeto caixeta criado no tutorial Explorao de uma Varivel Categrica. A relao entre duas ou mais variveis categricas pode ser explorada com tabelas cruzadas, por exemplo:

table(caixeta$especie,caixeta$local)

Quando temos uma variavel categrica (fator) e uma numrica, as funes aggregate e tapply so muito teis. A funo aggregate o equivalente das tabelas dinmicas das planilhas eletrnicas. Por exemplo, para obter do objeto caixeta um data frame com a altura mdia dos fustes de cada espcie de rvore por local voc executa o comando:
caixeta.alt <- aggregate(caixeta$h, by=list(local=caixeta$local,especie=caixeta$especie), FUN=mean)

Consulte a ajuda da funo aggregate e experimente outras combinaes de fatores e funes, com este conjunto de dados.

xtabs
Crie um objeto com este arquivo e faa as seguintes tabulaes:
xtabs(Freq~Sex+Survived, data=Titanic.df) prop.table(xtabs(Freq~Sex+Survived, data=Titanic.df), margin=1) xtabs(Freq~Class+Survived, data=Titanic.df) prop.table(xtabs(Freq~Class+Survived, data=Titanic.df), margin=1)

Por que usamos a funo xtabs neste caso e no a funo table? P.ex:
table(Titanic.df$Sex,Titanic.df$Survived)

Frmula Estatstica em Grficos


A funo xtabs (tutorial anterior) usa a notao de frmula estatstica do R, que : varivel dependente ~ variveis preditoras Esta notao foi criada para os modelos estatsticos, como a regresso linear, mas foi estendida para vrios grficos no R. Experimente os comandos abaixo em que esta notao usada:
boxplot(urubu~fisionomia, data=aves.c) plot(seriema~urubu, data=aves.c, subset=fisionomia=="Ce") plot(seriema~urubu, data=aves.c, subset=fisionomia=="CC") plot(seriema~urubu, data=aves.c, subset=fisionomia!="CL")

Que tipo de padro ou diferenas estes grficos podem revelar? Esta frmula pode ainda incluir um fator condicionante, que aplica a relao proposta dentro de cada nvel dos condicionais: varivel dependente ~ variveis preditoras | variveis condicionantes

O pacote lattice implementa esta idia para grficos:


library(lattice) xyplot(seriema~urubu|fisionomia, data= aves.c)

Qual a diferena entre este grfico e os trs ltimos obtidos com os comandos anteriores?

Você também pode gostar