Você está na página 1de 73

Landeiro, Zucco e Menezes, 2010

Introduo ao uso do programa R


The R Project for Statistical Computing

O R um software livre para computao estatstica e construo de grficos. Plataformas UNIX, Windows e MacOS. Para baixar o R v ao Web site do R www.r-project.org Clique em CRAN Escolha o espelho de sua preferncia (CRAN mirrors), existem 5 no Brasil Clique em Windows 95 or later

Clique em base e salve o arquivo do R para Windows. Depois s executar o arquivo.

9 de September de 2013

O criador deste material Victor Lemes Landeiro (INPA/ Coordenao de Pesquisas Ecolgicas) vllandeiro@gmail.com Esta verso foi modificada por Carlos Andr Zucco (Doutorando do PPG Ecologia da UFRJ) cazucco@hotmail.com Jorge F. S. Menezes (Graduando da Biologia da UFRJ) jorgefernandosaraiva@gmail.com 1

Landeiro, Zucco e Menezes, 2010 Dissemine e reproduza vontade

Landeiro, Zucco e Menezes, 2010

CONTEDO
Contedo........................................................................................................................................ 3 Para qu aprender a usar o R........................................................................................................ 5 Nota sobre o uso desta apostila:................................................................................................ 6 DIA 1 Primeiro contato .............................................................................................................. 8 A cara do R e algumas informaes bsicas: ..............................................................................8 A sintaxe bsica dos comandos de R......................................................................................... 9 O workspace e o working directory do R (rea de trabalho). .....................................................9 Pacotes do R............................................................................................................................ 10 Como usar um pacote do R.................................................................................................. 10 Como citar o R, ou um pacote do R em publicaes...........................................................10 Usando o R.................................................................................................................................. 11 Demonstraes ....................................................................................................................... 11 O R como calculadora (operadores matemticos simples)......................................................11 Funes matemticas do R...................................................................................................... 11 Acessar o menu de ajuda do R (HELP!!!!)................................................................................13 O help.search (para quando se est bem perdido)..............................................................13 Objetos do R (O que so?):......................................................................................................... 15 Como criar objetos................................................................................................................... 15 Criar vetores com valores numricos...................................................................................15 Criar vetores com caracteres (letras, variveis categricas). ..............................................16 Criar matrizes....................................................................................................................... 16 Operaes com objetos............................................................................................................ 16 Acessar valores dentro de um objeto [colchetes].....................................................................17 Transformar dados................................................................................................................... 17 Listar e remover objetos salvos................................................................................................ 18 Gerar seqncias (usando : ou usando seq)............................................................................18 : (dois pontos)....................................................................................................................... 18 seq(from,to,by)..................................................................................................................... 18 Gerao de dados ....................................................................................................................... 19 Repeties (rep)....................................................................................................................... 19 rep(x,vezes).......................................................................................................................... 19 Dados aleatrios...................................................................................................................... 19 runif - para distribuies uniformes.....................................................................................19 rnorm - para distribuies normais.......................................................................................19 Tirar amostras aleatrias ......................................................................................................... 20 sample.................................................................................................................................. 20 Ordenar e a atribuir postos (ranks) aos dados.............................................................................20 funes: sort, order e rank........................................................................................................ 20 sort ...................................................................................................................................... 20 order .................................................................................................................................... 21 rank ..................................................................................................................................... 21 Exerccios com operaes bsicas .............................................................................................21 Dia 2 Usando o script e aprendendo a fazer grficos................................................................23

Landeiro, Zucco e Menezes, 2010 Usar o script do R para digitar os comandos............................................................................23 Exerccios com o script do R.................................................................................................... 24 Grficos do R............................................................................................................................... 24 Grficos de barras barplot(objeto).........................................................................................24 Histogramas hist(objeto,breaks=10)......................................................................................24 Grficos de pizza pie(objeto).................................................................................................25 Grfico de pontos plot(x,y).................................................................................................... 25 Grficos com variveis numricas........................................................................................ 25 Alterando a aparncia (parmetros do grfico)........................................................................25 Adicionando linhas a um grfico de pontos..........................................................................27 Adicionar mais pontos ao grfico......................................................................................... 28 Grficos com variveis explanatrias que so categricas. ....................................................28 Inserir texto em grficos........................................................................................................... 29 Dividir a janela dos grficos...................................................................................................... 30 Salvar os grficos..................................................................................................................... 30 Resumo sobre grficos............................................................................................................. 31 Exerccios com grficos............................................................................................................... 31 DIA 3 - Importar conjunto de dados para o R...............................................................................33 Importar arquivos de outros programas....................................................................................34 Procurar os dados dentro do computador................................................................................34 Transformar vetores em matrizes e data frames .....................................................................34 Acessar partes da tabela de dados (matrizes ou dataframes).................................................35 Operaes usando dataframes................................................................................................ 36 Ordenar a tabela.................................................................................................................. 36 Calcular a mdia de uma linha ou de uma coluna................................................................36 Soma de todas as linhas ou colunas....................................................................................37 Medias de todas as linhas ou colunas.................................................................................37 Operaes em sub-conjuntos famlia de comandos apply....................................................37 Exemplo com dados reais............................................................................................................ 39 As funes aggregate e by...................................................................................................... 40 Transpor uma tabela de dados................................................................................................. 41 Comandos de lgica..................................................................................................................... 41 Opes para manipular conjunto de dados..............................................................................41 which(teste lgico)................................................................................................................ 42 Ifelse(teste lgico ,valor se TRUE, valor se FALSE)............................................................42 Exerccios com dataframes e comandos de lgica:.....................................................................43 DIA 4 Aprender a criar Funes (programao)........................................................................44 Sintaxe para escrever funes................................................................................................. 44 Comando function................................................................................................................ 44 Comando for()...................................................................................................................... 45 Exerccios ............................................................................................................................ 47 Brincando com funes............................................................................................................ 47 ndice de Diversidade de Shannon.......................................................................................47 ndice de Similaridade de Jaccard........................................................................................49 ndice de similaridade de Bray-Curtis. .................................................................................50 Exerccios de criar funes:......................................................................................................... 50 DIA 5 Diferena entre criar uma funo e escrever um cdigo.................................................51 Criar uma funo para fazer um grfico composto (genrico).....................................................52 4

Landeiro, Zucco e Menezes, 2010 Script da funco.................................................................................................................. 53 Exemplo de como usar a funo genrico...........................................................................54 Cronograma................................................................................................................................. 56 Dia 1............................................................................................................................................. 56 Teste t ..................................................................................................................................... 57 Teste t contra mdia............................................................................................................. 57 Teste t pareado.................................................................................................................... 58 Teste t unicaudal.................................................................................................................. 58 Wilcoxson-Mann-Whytney........................................................................................................ 59 Chi-quadrado............................................................................................................................ 60 Chi-quadrado de contingncia ............................................................................................. 60 Chi-quadrado esperado e observado...................................................................................61 Testes de distribuio............................................................................................................... 61 Kolmogorov-smirnov............................................................................................................ 61 Shapiro-Wilk......................................................................................................................... 62 Correlaes.............................................................................................................................. 63 Revisando a aula...................................................................................................................... 64 Dia 2............................................................................................................................................. 64 Introduo aos modelos estatsticos............................................................................................ 64 Formulas.................................................................................................................................. 65 Regresses lineares................................................................................................................. 66 DIA 3............................................................................................................................................ 68 Generalized linear models (GLM)............................................................................................. 68 Introduo............................................................................................................................ 68 Modelo geral (regresso)..................................................................................................... 68 ANOVAs glm ....................................................................................................................... 69 Exerccios............................................................................................................................. 69 O desafio final- Linear Mixed models.......................................................................................70 Base de dados utilizada....................................................................................................... 70 Introduo............................................................................................................................ 70 Como utilizar mixed models no R.........................................................................................71

PARA

QU APRENDER A USAR O

O R , segundo a definio de seus criadores, uma linguagem para programao estatstica, que aliada a um ambiente prprio permite a manipulao de dados, realizao de clculos, simulaes e procedimentos estatstica e produo de grficos. Foi desenvolvido na dcada de 90, na forma de software livre, a partir da linguagem S (S-plus nas verses mais modernas) que por ter desenvolvimento comercial no era de acesso livre e gratuito. Muitas pessoas enxergam o R como um programa estatstico, anlogo a tantas outras plataformas j conhecidas como o SPPS, Stata, Statstica ou Systat. Na verdade, o R um ambiente que abriga uma verdadeira linguagem computacional. Isso significa que sua potencialidade inteiramente flexvel, podendo o usurio desenvolver novas funes extrapolando de longe a gama de ferramentas j disponvel nos inmeros pacotes prontos. O carter flexvel da linguagem tornou o R uma das mais potentes ferramentas para anlises de dados em cincia. A compatibilidade do ambiente com outras linguagens de aplicao distintas expande as possibilidades do R exponencialmente. Dessa maneira, o R permite criar rotinas de procedimentos muito alm da anlise estatstica. 5

Landeiro, Zucco e Menezes, 2010 Um exemplo bastante ilustrativo do potencial da linguagem pode ser visualizado no site www.congressoaberto.com.br, desenvolvido pelos cientistas polticos brasileiros Eduardo Leoni e Cesar Zucco Jr. Esse portal utiliza dados oficiais providos de sites do governo para gerar um panorama da atuao de parlamentares e partidos brasileiros na legislatura. Todos os procedimentos incluindo a consulta regular das fontes de dados, a anexao das novas informaes ao banco de dados e a execuo e postagem online da anlise estatstica atualizada no site so programadas de dentro do R. Como o R dispe de um pacote que cria interface com a tradicional linguagem de programao web PERL, os autores puderam programar inclusive o design do site de dentro do ambiente R. Embora no se espera que todo mundo vire um programador avanado, o simples fato do R no impor limites ao usurio , por si s, um forte argumento em favor do seu uso. Voc no precisar recorrer a inmeros softwares diferentes para executar procedimentos novos, pois as ferramentas distribudas no portal do R-project (R Development Core Team 2010) cobrem praticamente tudo que voc pode imaginar, E se algo ainda no estiver desenvolvido, voc mesmo pode criar. Por ser software livre e gratuito o uso do R se espalhou rapidamente entre os grupos de pesquisa em todo mundo (fato facilmente verificvel atravs do nmero de artigos cientficos cujas anlises so feitas no programa). Com a crescente comunidade de usurio, o avano das tcnicas desenvolvidas para essa base ocorre numa velocidade maior do que a de qualquer outra ferramenta comercialmente desenvolvida. Alain Zuur e companheiros, autores de quatro livros populares em anlise de dados ecolgicos optaram pelo uso do R em seus livros por causa da gratuidade e da funcionalidade do programa (http://www.highstat.com/). H um comentrio de Jonathan Baron em Burns (2006) bastante interessante:
Outro ponto que eu repetidamente apresento aos meus estudantes que o R gratuito e vai continuar a existir. Nada pode faz-lo sumir. Uma vez aprendido, voc no ser mais sujeito a mudanas de preos (por exemplo de zero quanto estudante, pois voc usa a cpia de seu orientador, vrias centenas de dlares ou mais quando voc sai do laboratrio). Voc pode lev-lo com voc aonde voc v. O investimento no aprendizado, nesse sentido tem um retorno garantido no longo prazo.

Habilidades em delineamento amostral e estatstica so chave para todo eclogo. Para Nicholas J. Gotelli, famoso por seus livros em ecologia de comunidades e estatstica, aprender R ou Delphis (outra linguagem de programao estatstica) um dos principais conselhos dados aos interessados em trabalhar em seu laboratrio (http://www.uvm.edu/~ngotelli/GradAdvice.html). Tantas possibilidades e ao mesmo tempo nenhuma delas prontamente acessvel atravs de interface amigvel que caracteriza a computao moderna, torna o primeiro contato com o R s vezes traumatizante e o aprendizado inicial quase sempre penoso. Esperamos ao final deste curso, convencer a maioria dos estudantes que a necessidade de aprender programao no um preciosismo de quem tem um gosto pelo assunto e quebrar a resistncia inicial dos novos usurios ao R, fazendo-os se sentir vontade para continuar aprendendo por conta prpria.

Nota sobre o uso desta apostila:


O objetivo desta apostila fazer uma breve introduo ao uso do programa R (R Development Core Team 2010). Seu intuito no ensinar estatstica, embora apresente alguns exemplos de programao de procedimentos estatsticos. Ela tem a sua organizao planejada para um mdulo de 5 dias em linguagem e um mdulo adicional de 3 dias para procedimentos estatsticos mais usuais. O ideal para aprender a usar o R "us-lo!". Ento, a melhor forma de se familiarizar com os comandos do R ler um texto introdutrio (como esta apostila) e ao mesmo tempo ir digitando os comandos no R e observando os resultados, grficos, etc. Apenas ler esta apostila talvez no o ajude a fazer progressos no seu aprendizado do R, acompanhe-a fazendo os clculos no R. Ler os manuais disponveis na pgina do R como o "An introduction to R" (Venable et al 2010, disponvel para download) que vem com o R e o "Simple R" (Verzani 2002, disponvel para download), pode ser de grande ajuda no comeo. Outro manual bem curto (49 pginas) e fcil de entender o The 6

Landeiro, Zucco e Menezes, 2010 R Guide .(Owen, 2007, disponvel para download). Na pgina do R tambm existem 4 manuais em portugus, caso no goste de ler em ingls. Nesta apostila as notas e explicaes esto em fonte arial, os comandos do R esto em fonte Courier New. Os resultados dos comandos no aparecem na apostila, vocs devem conferir o resultado no R. Portanto, use os comandos em Courier New para ir acompanhando a apostila no R.

Landeiro, Zucco e Menezes, 2010

DIA 1 PRIMEIRO A
CARA DO

CONTATO

E ALGUMAS INFORMAES BSICAS:

Por ser software livre e no um produto comercial, o R no foi desenvolvido como uma interface amigvel com comandos prontos em menus e botes para clicar. Para usar o R necessrio conhecer e digitar comandos. Alguns usurios acostumados com outros programas carregados de opes de cliqueclique podero sentir grande dificuldade, mas na medida em que utilizam o programa, (boa parte deles) tendem a preferir o mecanismo de comandos, pois mais flexvel e com mais recursos. Usurios de outras plataformas que trabalham com programao (Systat, SAS, SPSS ou Minitab por exemplo) tendem a ficar H, de fato, alguns mdulos de interface com clique-clique para o R,, entre os quais a interface grfica para estatstica Bsica R-commander (Fox, 2005) e o Tinn-R, projeto coordenado pelo brasileiro Jos Cludio Faria. O Tinn originalmente um editor de texto destinado a substituir o Notepad do Windows. O Tinn-R uma extenso destinada a controlar o R e servir como um editor de scripts de comandos que torna a leitura de scripts mais agradvel. Ns acreditamos que a melhor maneira de aprender o R evitando as alternativas de clique-clique como o R-commander que substituem passos de programao por botes. Esse no o caso do Tinn-R que consideramos um companheiro til para programadores. Ns iremos comear a apostila apenas digitando comandos (i.e. "escrevendo cdigos"), conforme aumenta a familiaridade com a linguagem veremos, como criar e escrever nossas prprias funes. O R possui uma janela com algumas poucas opes para voc se divertir clicando (figura abaixo). As anlises feitas no R so digitadas diretamente na linha de comandos (i.e. voc tem controle total sobre o que ser feito). Na "linha de comandos" , voc ir digitar os comandos e funes que deseja usar. O sinal > (sinal de maior) indica o prompt e quer dizer que o R est pronto para receber comandos. Em alguns casos um sinal de + aparecer no lugar do prompt, isso indica que ainda esto faltando comandos para terminar (ou que voc errou alguma coisa na linha anterior). Se tiver errado pressione Esc para retornar ao prompt normal >. Note que na apostila, o comeo de cada linha com os comandos do R possui um sinal do prompt, >, e em alguns casos um sinal de +, no digite estes sinais Os comandos que voc digita aparecem em vermelho e o output do R aparece em azul (veja a figura acima). Aps digitar os comandos tecle Enter para que eles sejam executados! Fig 1. Layout da interface do R ATENO!!! O R case-sensitive (i.e. diferencia letras maisculas de minsculas), portanto A diferente de a. Use, com rarssimas excees, sempre letras minsculas. No recomendado o uso de acentos em palavras (qualquer nome que for salvar em um computador, no s no R, evite usar acentos. Acentos so comandos usados em programao e podem causar erros, por exemplo, em documentos do word e excel). No R o sinal # (jogo-da-velha) usado para inserir comentrios, o mesmo que dizer: "a partir do # existem apenas comentrios". O R no l o que vem aps o #. No decorrer desta apostila existem vrios comentrios aps um sinal #, explicando o que foi feito.

Landeiro, Zucco e Menezes, 2010

A sintaxe bsica dos comandos de R


A sintaxe se refere a estrutura da escrita dos comandos. Ela regular para todos os comandos:

> objeto <- funo(argumento1,argumento2,argumento3)


Essa comando genrico acima diz que o objeto A igual ao resultado da funo cujos argumentos so 1, 2, 3. Ao longo do curso iremos aprender inmeras funes e compreender melhor os tipos de objetos que existem, mas algumas regras de pontuao e sintaxe no podem ser esquecidas. Por isso leia o quadro abaixo e recorra a ele sempre que tiver dvida ou travar no andamento de algum no quadro abaixo:

( ) parnteses SEMPRE aparecem (1) depois de funes contendo os argumentos dela, ou (2) em expresses matemticas para definir a prioridade da ordem das operaes, como aprendemos desde cedo na escola. , virgulas so usadas para separar argumentos de uma funo. O separador de casas decimais o ponto . Palavras sem aspas ao longo de um comando so SEMPRE entendidas como um objeto ou funo. Se voc deseja inserir um nome ou valor para uma varivel ou qualquer parte de um objeto na forma de palavras ou letras, use sempre aspas. [ ] colchetes SEMPRE aparecem depois de um objeto. Servem para extrair uma parte do objeto { } chaves SEMPRE aparecem englobando o corpo de uma funo, aps o comando function ( ){ }. <- assign equivale ao sinal de igual. Ele serve para indicar que a parte inicial (esquerda) do comando dever ser igual parte final (direita). recomendvel que o = seja usado apenas para informar que os argumentos da funo so iguais um valor.

O workspace e o working directory do R (rea de trabalho).


A cada vez que voc abre o R ele inicia uma "rea de trabalho" ( workspace). Este workspace o ambiente onde voc far suas anlises, grficos, etc. Ao final de uma sesso de uso do R, voc pode salvar uma imagem do workspace atual que poder ser carregado novamente numa sesso futura. A imagem do workspace assume a forma de um arquivo .Rdata. Outro conceito importante o working directory. Nada mais do que a pasta ou diretrio onde seu workspace est salvo. Assim como em qualquer outro programa de computador, sempre importante ter em mente a pasta onde vc salvou o arquivo desejado, No entanto para R, recomendvel salvar os workspaces em pastas separadas para cada projeto. Assim, no salve mais de um workspace na mesma pasta fsica (working directory)!!. Sempre que for usar o R em um trabalho, antes de tudo, crie uma pasta para este trabalho (via Windows Explorer) e salve um workspace do R nela. Isso ir facilitar sua vida. Para este curso salve um workspace na pasta do curso, abrindo o R, clicando em "File>Save workspace" e salve-o na pasta desejada (diretrio). No nomeie o arquivo, isso dispensvel visto que sempre haver apenas um por pasta. Agora vamos verificar onde est o nosso workspace. Primeiro cheque atravs do Windows Explorer que um arquivo .Rdata est no seu diretrio de trabalho. Segundo vamos usar um comando de dentro do R para checar qual o diretrio do arquivo que est aberto. Os comandos getwd() e setwd() servem para checar e definir o working directory da sesso atual. Assim, confira digitando e veja o output que o R retorna:

Landeiro, Zucco e Menezes, 2010 > getwd() [1] "C:/Documents and Settings/Victor Landeiro/My Documents" Feche o R e abra-o novamente clicando no cone que apareceu na pasta escolhida, faa os exerccios e no final apenas feche o R, ir aparecer uma caixa perguntando se deseja salvar o workspace, diga que sim. A partir daqui, sempre abra o R a partir do workspace salvo na pasta do seu trabalho.

Pacotes do R
O R um programa leve (ocupa pouco espao e memria) e geralmente roda rpido, at em computadores no muito bons. Isso porque ao instalarmos o R apenas as configuraes mnimas para seu funcionamento bsico so instaladas (o pacote base). Para realizar tarefas mais complicadas pode ser necessrio instalar pacotes adicionais (packages). Um pacote bastante utilizado em ecologia o vegan, vegetation analysis, criado e mantido por Jari Oksanen (Oksanen et al., 2007). Para instalar um pacote v ao site do R (www.r-project.org), clique em CRAN, escolha o espelho e clique em packages, uma lista com uma grande quantidade de pacotes est disponvel. Clique no pacote que deseja e depois clique em windows binary e salve o arquivo. Abra o R e clique em Packages, depois em Install Package(s) from local zip files e selecione o arquivo do pacote que voc baixou . Baixe e instale os pacotes vegan e o pacote lattice. O R tambm pode conectar-se diretamente internet. Desta forma possvel, instalar e atualizar pacotes sem que seja necessrio acessar a pgina do R. Para instalar um pacote direto do R digite, por exemplo: > install.packages("vegan") ## necessrio estar conectado!

Durante o curso, se o seu computador no estiver ligado internet solicite a um dos monitores que o auxilie a instalar o R e os pacotes necessrios.

Como usar um pacote do R


No basta apenas instalar um pacote. Para usar o pacote instalado necessrio "rodar" o pacote sempre que voc abrir o R e quiser usar o pacote. Use a funo library para rodar um pacote. Por exemplo: Digite library(vegan) na linha de comandos do R. > library(vegan) ## carrega a biblioteca Aps isso as funcionalidades do vegan estaro prontas para serem usadas. Sempre que abrir o R ser necessrio rodar o pacote novamente.

Como citar o R, ou um pacote do R em publicaes


No R existe um comando que mostra como citar o R ou um de seus pacotes. Veja como fazer > citation() To cite R in publications use: R Development Core Team (2009). R: A language and environment for statistical computing. R Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0, URL http://www.R-project.org. Veja que na parte com o nome dos autores aparece "R Development Core Team", isso est correto, cite o R desta forma. Algumas pessoas no sabem disso e citam o R com autor Annimo, isto tira o crdito do time. Para citar um pacote, por exemplo o vegan, basta colocar o nome do pacote entre aspas. Lembre das aspas 10

Landeiro, Zucco e Menezes, 2010 > citation("vegan") To cite package vegan in publications use: Jari Oksanen, F. Guillaume Blanchet, Roeland Kindt, Pierre Legendre, R. B. O'Hara, Gavin L. Simpson, Peter Solymos, M. Henry H. Stevens and Helene Wagner (2010). vegan: Community Ecology Package. R package version 1.17-2. http://CRAN.R-project.org/package=vegan

USANDO

Demonstraes
Algumas funes do R possuem demonstraes de uso. Estas demonstraes podem ser vistas usando a funo demo(). Vamos ver algumas demonstraes de grficos que podem ser feitos no R. Digite o seguinte na linha de comandos: > demo(graphics) Aparecer uma mensagem pedindo que tecle Enter para prosseguir, depois v clicando na janela dos grficos para ver as opes. > demo(persp) > demo(image)

O R como calculadora (operadores matemticos simples)


O uso mais bsico do R us-lo como calculadora. Os operadores so: + para soma, subtrao, * multiplicao, / diviso, ^ exponenciao. Tente o seguinte na linha de comandos do R: > 2+2 > 2*2 > 2/2 > 2-2 > 2^2 Use parnteses para separar partes dos clculos, por exemplo, para fazer a conta 4+16 dividido por 4 elevado ao quadrado: > ((4+16)/4)^2 Observao! Em clculo matricial, cercar operadores matemticos por %: > matrizA %+% matrizB

Funes matemticas do R
O R tem diversas funes que podemos usar para fazer os clculos desejados. O uso bsico de uma funo, como j dito antes funo(argumentos). funo especifica a funo que iremos usar e argumentos especifica os argumentos que sero avaliados. Por exemplo: sqrt a funo para calcular raiz quadrada > sgrt(9) > sqrt(3*3^2) > sqrt((3*3)^2) # Tira a raiz quadrada dos argumentos entre parnteses, no caso 9 # raiz quadrada de 27 # raiz quadrada de 81

prod(x1,x2,x3,...,xn) a funo para multiplicao da lista de argumentos 11

Landeiro, Zucco e Menezes, 2010 # O mesmo que 2*2 # O mesmo que 2*2*3*4

> prod(2,2) > prod(2,2,3,4)

log(x,base) a funo para calcular o logaritmo do valor x na base. Por default, a base o algarismo neperiano e, portanto: > log(3) > log(3,10) # log natural de 3 # log de 3 na base 10

Logartmos em base 2 e 10 possuem atalhos log2(x) e log10(x). Veja: > log10(100) > log2(512)

abs(x) a funo para pegar os valores em mdulo de x > abs(3-9) # abs = modulo, |3-9|

Para fazer o fatorial de algum nmero use factorial() > factorial(4) #4 fatorial (4!)

12

Landeiro, Zucco e Menezes, 2010

Acessar o menu de ajuda do R (HELP!!!!)


O aprendizado mais importante do R talvez saber usar o help. Para ver os arquivos de ajuda do R use help(funo) ou ?funco. Por exemplo: a funo para fazer anova aov: > help(aov) ou simplesmente >?aov Para usar help ou ? preciso saber o nome da funo que se quer ajuda!!!!

ENTENDA O HELP!!! 1 - Description - faz um resumo geral da funo 2 - Usage - mostra como a funo deve ser utilizada e quais argumentos podem ser especificados 3 - Arguments - explica o que cada um dos argumentos 4 - Details - explica alguns detalhes que preciso estar atento ao usar a funo 5 - Value - mostra o que sai no output aps usar a funo (os resultados) 6- Note - notas sobre a funo 7 - Authors - lista os autores da funo (quem escreveu os cdigos em R) 8 - References - referncias para os mtodos usados 9 - See also - mostra outras funes relacionadas que podem ser consultadas 10 - Examples - exemplos do uso da funo. Copie e cole os exemplos no R para ver como funciona

Quando for usar uma funo que nunca utilizou no help que voc aprender a us-la. Os tpicos Usage e Arguments so os mais importantes, pois mostram como os argumentos devem ser inseridos na funo (Usage) e caso no saiba o que algum desses argumentos existe uma explicao para cada um deles (Arguments). Muitas pessoas tm dificuldade em entender o help do R e dizem que o help ruim. Pelo contrrio, ele possui tudo que voc precisa saber. Nada a mais nem nada a menos do que o necessrio. Ao longo do curso, gaste um tempo inspecionando o help das funes mais interessantes que voc for aprendendo.

O help.search (para quando se est bem perdido)


Em diversos casos ns no sabemos o nome da funo que faz a anlise que desejamos. Nestes casos possvel pesquisar usando palavras chave com a funo help.search() ou ?? > help.search("anova") Ou simplesmentes > ??anova Tambm possvel buscar ajuda na internet, no site do R, com a funo Para usar help ou ? preciso saber o nome da funo que se quer ajuda!!!!

RSiteSearch()

13

Landeiro, Zucco e Menezes, 2010 > RSiteSearch("analysis of variance") # abre uma pgina na internet, mas # s funcionar se seu computador estiver conectado internet.

14

Landeiro, Zucco e Menezes, 2010

OBJETOS

DO

R (O

QUE SO?):

O R uma linguagem baseada em objetos. Mas o que so os Objetos? So tudo? So conjuntos de dados (suas planilhas, variveis, resultados de suas estatsticas, etc. Ou so tambm Existem muitos tipos de objetos no R que s passamos a conhec-los bem com o tempo. Por enquanto vamos aprender os tipos bsicos de objetos. Para uma leitura mais aprofundada sobre os tipos de objetos e definies da linguagem R leia o manual "R language definition" disponvel no menu "HELP", "Manuais em PDF", "R language definition". A. VECTOR: uma seqncia de valores do mesmo tipo, numricos, caracteres ou lgicos. Equivale muitas vezes a uma varivel dos nossos dados. Todos os vetores tem como propriedade o comprimento (nmero de valores) e o modo (tipo dos valores). B. MATRIX: uma generalizao dos vetores, ou uma coleo de vetores em linhas e colunas, sendo que todos os vetores dever ser do mesmo tipo. Matrizes possuem as propriedades de dimenso e modo. C. LIST: um conjunto ordenado de outros objeto ( vetores, matrizes ou outros) chamados de componentes. Os componentes no precisam ter o mesmo tipo, comprimento ou dimenso e podem ter um nome associado a eles. Essa a forma que a maioria das funes estatsicas retorna os resultados. D. DATAFRAME: equivalente uma matriz em que os vetores (colunas) possuem nomes e podem ser de tipo diferentes (alguns numricos, alguns lgicos, alguns de caracteres) . Por isso o tipo de objeto mais conveniente para guardar seus dados. Contudo, em termos computacionais relevante dizer que a dataframe um tipo especial de lista. Isso explica porque algumas funes rodam em matriz mas no em dataframe e vice-versa. E. FUNCTION: as funes criadas para fazer diversos clculos tambm so objetos do R, tanto aquelas que j existem prontas nos pacotes, como aquelas que o usurio mesmo desenvolve. Em outras palavras so objetos que executam aes e podem manipular outros objetos. No decorrer do curso veremos exemplos de cada um destes objetos. Para uma leitura mais detalhada sobre os tipos de objetos, recomendamos Lam (2007), Torgo (2006) e o manual "An introduction to R" (Venables 2010). Este manual, e outros, j vem com o R, clique em help no menu do R e em Manuais (em PDF) para abrir o arquivo.

Como criar objetos


Criar vetores com valores numricos
A funo concatenar, expressa por c(x1,x2,x3,...,xn ), uma das mais bsicas e importantes. usada para combinar os valores num vetor ou lista. Vamos criar um conjunto de dados que contm o nmero de espcies de aves (riqueza) coletadas em 10 locais. As riquezas so 22, 28, 37, 34, 13, 24, 39, 5, 33, 32. > aves<-c(22,28,37,34,13,24,39,5,33,32) Relembrando: o comando <- (sinal de menor e sinal de menos) significa assinalar ( assign). Indica que tudo que vem aps este comando ser salvo com o nome que vem antes. o "agrupe os dados entre parnteses dentro do objeto que ser criado" no caso aves. Para ver os valores (o contedo de um objeto), basta digitar o nome do objeto na linha de comandos. > aves 15

Landeiro, Zucco e Menezes, 2010 A funo length fornece o nmero de observaes (n) dentro do objeto. > length(aves)

Criar vetores com caracteres (letras, variveis categricas).


Tambm podemos criar objetos que contm letras ou palavras ao invs de nmeros. Porem, as letras ou palavras devem vir entre aspas " ". > letras<-c("a","b","c","da","edw") > letras > palavras<-c("Manaus","Boa Vista","Belm","Braslia") > palavras Crie um objeto "misto", com letras e com nmeros. Funciona? Esses nmeros realmente so nmeros? J dissemos que vetores so conjuntos com elementos do mesmo tipo. Se vc criar vetores mistos o R fora a serem do mesmo tipo. possvel entender um nmero como caracter, mas no o contrrio. Note a presena de aspas, isso indica que os nmeros foram convertidos em caracteres. Evite criar vetores "mistos", a menos que tenha certeza do que est fazendo.

Criar matrizes
Para criar matrizes podemos juntar inmeros vetores que j existem, ou usar o comando matrix(sequncia,linhas,colunas) que distribui a sequncia na matriz de dimenses que voc indicou. Digamos que as riquezas de aves do exemplo anterior tivessem sido coletadas em 5 locais com duas estaes diferentes. > aves2<-matrix(c(22,28,37,34,13,24,39,5,33,32),5,2)) > aves2 Voc entendeu a sintaxe acima? Se perdeu nos parnteses e virgulas? Observe que h uma funo dentro da outra. Para entender melhor, decomponha as funes nos seus argumentos. Perceba que o c() apenas um argumento de matrix(). Em analogia ao comando length(x) de vetores, h o comando dim(x) para matrizes que retorna no nmero de linhas e colunas do objeto.

Operaes com objetos


Podemos fazer operaes aritmticas com todos os elementos dos objeto aves e aves2, criados acima. > max(aves) > min(aves) > sum(aves) > aves+2 > aves2/10 > aves^2 # valor mximo contido no objeto aves # valor mnimo # soma dos valores de aves # adiciona 2 a cada elemento # divide os elementos de aves2 por 10 # eleva elementos de aves ao quadrado

Agora vamos usar o que j sabemos para calcular a mdia dos dados das aves. 16

Landeiro, Zucco e Menezes, 2010 # nmero de observaes (n) #mdia

> n.aves<-length(aves)

> media.aves<-sum(aves)/n.aves

Para ver os resultados basta digitar o nome dos objetos que voc salvou > n.aves > media.aves # para ver o nmero de observaes (n) # para ver a mdia

Voc no ficar surpreso em saber que o R j tem uma funo pronta para calcular a mdia. > mean(aves)

Acessar valores dentro de um objeto [colchetes]


Caso queira acessar apenas um valor do conjunto de dados, use colchetes []. Isto possvel porque o R salva os objetos como vetores, ou seja, a seqncia na qual voc incluiu os dados preservada. Por exemplo, vamos acessar o quinto valor do objeto aves. > aves[5] > palavras[3] # Qual o quinto valor de aves? # Qual o terceiro elemento de palavras?

Para acessar mais de um valor use c() para concatenar dentro dos colchetes [c(1,3,...)]: > aves[c(5,8,10)] # acessa o quinto, oitavo e dcimo valores

Para excluir um valor, ex: o primeiro, use: > aves[-1] # note que o valor 22, o primeiro do objeto aves, foi excludo

Caso tenha digitado um valor errado e queira corrigir o valor, especifique a posio do valor e o novo valor. Por exemplo, o primeiro valor de aves 22, caso estivesse errado, ex: deveria ser 100, basta alterarmos o valor da seguinte maneira. > aves[1]<-100 > aves > aves[1]<-22 # Vamos voltar ao valor antigo # O primeiro valor de aves deve ser 100

Matrizes possuem duas dimenses e por isso precisamos especificar ambas dentro dos colchetes. Assim a sintaxe geral objeto[linhas,colunas]: > aves2[3,2] > aves2[3,] # Valor na linha 3 e coluna 2 # Retorna toda linha 3

Voc consegue deduzir o que aves2[,1]???

Transformar dados
Transformaes de dados so procedimentos bastante comuns antes de anlises estatsticas. As mais comumente usadas so aplicaes de funes matemticas simples sobre seus dados, como log, raiz quadradas e arco seno. > sqrt(aves) > log10(aves) 17 #Raiz quadrada dos valores de aves #log(aves) na base 10, apenas

Landeiro, Zucco e Menezes, 2010 # logaritmo natural de aves

> log(aves)

> asin(sqrt(aves)) # arco seno da raiz quadrada de aves

LEMBRE que para salvar os dados preciso abrir a funo um novo objeto (ou salv-la como um novo objeto). Por exemplo: > aves.log<-log10(aves) > aves.log # salva um objeto com os valores de aves em log # retorna o novo objeto com valores transformados

Listar e remover objetos salvos


Chegamos num ponto em que j temos um boa quantidade de objetos salvos no nosso workspace e no queremos nos confundir. Para listar os objetos que existem no workspace que est aberto use a funo listar com a sintaxe ls(),sem nenhum argumento mesmo. > ls() Para remover objetos use rm() para remover o que est entre parnteses. > rm(aves.log) > aves.log # voc ver a mensagem:

Error: object "aves.log" not found

Gerar seqncias (usando : ou usando seq)


: (dois pontos)
Dois pontos " : " usado para gerar seqncias de um em um, por exemplo a seqncia de 1 a 10: > 1:10 > 5:16 # O comando : usado para especificar seqncias. # Aqui a seqncia vai de 5 a 16

seq(from,to,by)
A funo seq(from,to,by) usada para gerar seqncias do valor from, at o valor to de acordo com o intervalo by especificado. Por exemplo, vamos criar uma seqncia de 1 a 10 pegando valores de 2 em 2: > seq(1,10,2) > seq(1,100,5) #a traduo from 1 to 10, by 2, ou de 1 a 10, de 2 em 2. #seqncia de 1 a 100 em intervalos de 5 # vc conseque deduzir como ser essa sequncia?

> seq(0.01,1,0.02)

18

Landeiro, Zucco e Menezes, 2010

GERAO

DE DADOS

Repeties (rep)
rep(x,vezes)
A funo rep(x,vezes=n) gera repetio de x,n vezes. Digamos que vc precisa criar uma varivel de 100 elementos com todos os valores iguais a 10 e no tem pacincia para digitar isso no comando c(): > rep(5,100) # repete 5 dez vezes

Voc pode gerar repetio de um valor, caracteres ou conjunto de valores e caracteres: > rep(2,5) > rep("a",5) > rep(1:4,2) # repete a letra "a" 5 vezes # repete a seqncia de 1 a 4 duas vezes

> rep(1:4,each=2) # note a diferena ao usar o comando each=2. Veja no help dessa # funo que each um argumento cujo valor default 1 > rep(c("A","B"),5) # repete A e B cinco vezes.

> rep(c("A","B"),each=5) # repete A e B cinco vezes. > rep(c("Trs","Dois","Sete","Quatro"),c(3,2,7,4)) # Veja que neste caso a # primeira parte do comando indica as palavras que devem ser repetidas e a segunda parte # indica quantas vezes cada palavra deve ser repetida. Para isso

Dados aleatrios
runif - para distribuies uniformes
Com a sintaxe runif(n, min, max), vc cria uma sequncia de n valores, com o intervalo de min a max. O programa gera nmeros reais conforme a especificaes: > runif(200,80,100) > temp<-runif(200,80,100) > hist(temp) # 200 valores com mnimo de 80 e mximo 100 #Gera novamente e agora salva no objeto temp

# Faz um histograma de freqncias dos valores.

rnorm - para distribuies normais


Diferentemente da distribuio uniforme, os parmetros que descrevem uma distribuio normal so sua mdia e seu desvio padro. Ento a rnorm(n, mean, sd) gera n valores com distribuio uniforme de m, com mean e desvio padro sd. > rnorm(200,0,1) # 200 valores com mdia 0 e desvio padro 1

> temp2<-rnorm(200,8,10) # 200 valores com mdia 8 e desvio 10 salvos em temp2 > hist(temp2) # Faz um histograma de freqncias dos valores

> hist(rnorm(200,8,10)) # Os dois comandos acima reunidos em apenas um, Repita esse # comando algumas vezes e veja se os grficos parecem com uma distribuio normal.

19

Landeiro, Zucco e Menezes, 2010

Tirar amostras aleatrias


sample

sample utilizado para realizar amostras aleatrias de um conjunto de valores predeterminados por voc. A sua sintaxe sample(x, size=y, replace = FALSE), onde x
O comando conjunto de dados do qual as amostras sero retiradas, size o nmero de amostras e replace refere-se ao uso de reposio (TRUE) ou no (FALSE). Lembre-se que o default sem reposio (replace= FALSE). > sample(1:10,5) # tira amostras com 5 elementos do conjunto de valores entre 1 e 10

> sample(1:10,15) # erro?? Porque isso acontece Como o replace FALSE, a amostra de 15 maior que o universo de 10 valores (1 a 10) portanto no possvel retirar 15 valores sem repetir nenhum! > sample(1:10,15,replace=TRUE) # agora sim!

Vamos criar uma moeda e "jog-la" para ver quantas caras e quantas coroas saem em 10 jogadas. > moeda<-c("CARA","COROA") > sample(moeda,10) > sample(moeda,10,replace=TRUE) #Ops! Esqueci de colocar replace=TRUE # agora sim

Agora queremos testar se essa funo consegue amostrar aleatriamente mesmo. Vamos jogar essa moeda 100 vezes e ver quantas vezes sai cara e quantas sai coroa: > teste<-sample(moeda,100,replace=TRUE) > table(teste) # a funo table() faz uma tabela de freqncia dos valores existentes Rode vrias vezes os dois comandos acima e veja o quanto o resultado se aproxima de 1:1.

ORDENAR

E A ATRIBUIR POSTOS

(RANKS)

AOS DADOS

funes: sort, order e rank


Vamos criar um vetor desordenado para servir de exemplo: > exemplo<-sample(1:100,10) # amostra de 10 valores entre 1 e 100 > exemplo valores estejam. # veja que os valores no esto em ordem. Talvez com muita sorte os seus

[1] 94 27 89 82 24 51 2 54 37 38 # seus valores sero diferentes

sort
A funo decrescente.

sort(obj)coloca os valores de um objeto em ordem crescente ou em ordem


# para colocar em ordem crescente

> sort(exemplo)

[1] 2 24 27 37 38 51 54 82 89 94 > sort(exemplo,decreasing=TRUE) # para colocar em ordem decrescente [1] 94 89 82 54 51 38 37 27 24 2 20 ATENO!!! fundamental entender o comando order, ele o comando que permite ordenar uma planilha de dados inteira em funo de uma das suas variveis. Veremos como fazer isso adiante

Landeiro, Zucco e Menezes, 2010

order
A funo order(objeto) retorna a posio original dos valores de um objeto em ordem crescente, i.e., a posio do menor valor, a posio do segundo menor valor, a posio do terceiro menor valor... > order(exemplo) [1] 7 5 2 9 10 6 8 4 3 1

Note que o primeiro valor acima 7, isso indica que se quisermos colocar o objeto " exemplo" em ordem crescente o primeiro valor deve ser o stimo valor do "exemplo", que o valor 2. Na seqncia devemos colocar o quinto valor do objeto "exemplo", que 24, depois o segundo, depois o nono at que objeto "exemplo" fique em ordem crescente. > order(exemplo,decreasing=TRUE) [1] 1 3 4 8 6 10 9 2 5 7

rank
A funo rank atribui postos aos valores de um objeto. > exemplo ## apenas para relembrar os valores do exemplo

[1] 94 27 89 82 24 51 2 54 37 38 Agora vamos ver o rank destes valores > rank(exemplo) # Para atribuir postos (ranks) aos valores do exemplo

[1] 10 3 9 8 2 6 1 7 4 5 Veja que 94 o maior valor do exemplo, portanto recebe o maior rank, no caso 10.

EXERCCIOS

COM OPERAES BSICAS

Suponha que voc marcou o tempo que leva para chegar a cada uma de suas parcelas no campo. Os tempos em minutos foram: 18, 14, 14, 15, 14, 34, 16, 17, 21, 26. Passe estes valores para o R, chame o objeto de tempo. Usando funes do R ache o tempo mximo, mnimo e o tempo mdio que voc levou para chegar em suas parcelas. 1.1. Ops, o valor 34 foi um erro, ele na verdade 15. Sem digitar tudo novamente, e usando colchetes [ ], mude o valor e calcule novamente o tempo mdio.

Voc consegue prever o resultado dos comandos abaixo? Caso no consiga, execute os comandos e veja o resultado: 1.2. x<-c(1,3,5,7,9) 1.3. y<-c(2,3,5,7,11,13) 1.4. x+1 1.5. b)y*2 1.6. c)length(x) e length(y) 1.7. d) x + y 1.8. e) y[3] 21

Landeiro, Zucco e Menezes, 2010 1.9. f) y[-3]

Use as funes union, intersect e setdiff para encontrar a unio, o intersecto e as diferenas entre os conjuntos A e B. Aprenda no HELP como utilizar estas funes. A (1 2 3 4 5) B (4 5 6 7)

Todos os anos, o trinta-ris-rtico (Sterna paradisuea), uma avezinha preta e branca, com pouco menos de 40 centmetros, realiza um longo vo de plo a plo. Durante nove meses, ele percorre 20 000 quilmetros, do Circulo Polar rtico at o limite da Antrtida, e retorna, ento, ao ponto de partida. Usando a calculadora do R, em apenas uma linha de comando, calcule a velocidade mdia em m/s dessa ave (assuma o ms como tendo 30 dias).

Calcule |23-32|. Mdulo de 23-32. Faa isso em apenas uma linha de comando.

Suponha que voc coletou na sua monografia 10 amostras em duas reservas, as 5 primeiras amostras foram na reserva A e as 5 ultimas na reserva B. Crie um objeto chamado "locais" que especifica as reservas onde as amostras foram coletadas.

Voc deseja jogar na mega-sena, mas no sabe que nmeros jogar, use a funo sample do R para escolher os seis nmeros para voc jogar. A mega-sena tem valores de 1 a 60.

Crie uma seqncia de valores de 1 a 30 apenas com nmeros impares. Use a funo seq().

Einstein disse que Deus no joga dados, mas o R joga! Simule o resultado de 25 jogadas de um dado. Voc precisar criar o objeto dado, e usar a funo sample().

Crie um objeto com estes dados: 9 0 10 13 15 17 18 17 22 11 15 e chame-o de temp. Calcule: 1.10. A raiz quadrada de temp 1.11. O log natural de temp. O que acontece com o segundo elemento? 1.12. O log natura de dos valores de temp+1. O problema persiste? 1.13. Eleve os valores de temp ao quadrado.

Crie um objeto chamado info que contem seu nome, idade, altura, peso, email e telefone .

Feche o R: Ao fechar aparecer um a pergunta sobre salvar ou no o Workspace, diga que sim. Abra o R novamente e confira se seus objetos ainda esto salvos usando o comando ls().

22

Landeiro, Zucco e Menezes, 2010

DIA 2 USANDO

O SCRIPT E APRENDENDO A FAZER GRFICOS

Usar o script do R para digitar os comandos


Uma maneira que otimiza o uso do R e que poupa muito tempo usar um script para digitar seus comandos. Neste caso, os comando no so digitados na linha de comandos e sim em um editor de texto (R editor). Um script um arquivo txt, onde voc digita todas as anlises e comandos. Com o script voc facilmente faz alteraes e correes, alm de salvar o script e poder refazer rapidamente suas anlises aps algum tempo. Daqui em diante use o script para fazer os clculos e exerccios da apostila. No curso de estatstica (prxima semana) ns digitaremos os comandos no script e no diretamente na linha de comandos do R. Para criar um script clique em File no menu do R e clique em New Script. Uma janela ser aberta (veja figura abaixo). O script aparece com o nome de R Editor (editor do R) e a extenso do arquivo .R.

Digite 3+3 no script e aperte Ctrl+R. O 3*3 ser enviado para a linha de comandos do R e o resultado aparecer na tela. Para fazer outro comando aperte Enter e escreva outro comando na outra linha do script (cada comando deve ser digitado em uma linha diferente). Para enviar os comandos para o R tambm existe a opo de apontar com o mouse (ou selecionar) o que deseja enviar, clicar o boto direito do mouse e clicar em Run line or selection. Daqui em diante sempre use o script do R. Com ele fcil refazer anlises ou alterar comandos! No script voc tambm pode inserir observaes sobre o que foi feito, usando # para indicar a presena de um comentrio. Por exemplo: > x<-sample(1:10,20,replace=TRUE) # criar um objeto chamado x, composto de 20 # valores amostrados ao acaso entre 1 e 10. O replace=TRUE indica que a amostragem foi feita # com reposio. 23

Landeiro, Zucco e Menezes, 2010 # uso da funo mean para calcular a mdia de x.

> mean(x)

Exerccios com o script do R


1. O seu workspace est uma baguna!!! Voc deve ter um grande nmero de objetos os quais voc nem faz idia do que contm. Trate de arrumar a casa, confira os objetos existentes com comando ls()e remova todos menos o objeto aves, moeda e dado. 2. Faa alguns comandos que voc j aprendeu usando um script. Por exemplo: crie objetos, seqncias, operaes e insira comentrios para lembrar o que foi feito. Ao terminar salve o script. Para salvar clique no "disquete" que aparece nos menus do R (veja figura acima), salve o script na pasta do curso, d o nome que quiser usando a extenso .R para salvar (ex: meuScript.R) Feche o script, mas no feche o R. Para abrir o script novamente clique em File e em Open script selecione o script salvo para abri-lo.

GRFICOS

DO

Produzir grficos de qualidade uma tima forma de apresentar e explorar dados. O R reconhecido por ter grande potencial para gerao de grficos. Voc pode fazer praticamente qualquer grfico que imaginar, mas particularmente nesse campo as coisas podem se tornar difceis. Os grficos mais comuns so os grficos de barras, pizza e de pontos (grfico de disperso).

Grficos de barras barplot(objeto)


Para fazer grficos de barras no R a funo barplot(objeto). Haver uma coluna para cada valor do objeto. > barplot(sample(10:100,10)) Se o objeto for uma matriz, pode-se fazer um grfico com blocos de barras agrupados, correspondendo a cada coluna da matriz. Para tanto use o parmetro beside=TRUE > aves2<-sort(aves) # cria aves2 com os dados de aves ordenados > barplot(matrix(c(aves,aves2),10,2),beside=TRUE) Se voc tiver dificuldade de entender o commando acima, apenas decomponha. Pea para rodar as funes da mais interna para a mais externa. Por exemplo, rode a funo c( ), depois matrix( ), depois barplot( ). O R tem uma sesso de exemplos que nos permite ter uma noo de seu potencial: > example(barplot) ## clique na janela do grfico para ir passando os exemplos.

Histogramas hist(objeto,breaks=10)
Ns j vimos este tipo de grfico, mas no custa lembra. O histograma, diferente do grfico de barras pois retorna barras com freqncia de valores dentro de intervalos. O nmero de barras depende do nmero de intervalos em que a distribuio ser dividida. O argumento breaks define o nmero de barras, que por default 10. Mas vc pode controlar. > hist(rnorm(300,100,10)) > hist(rnorm(300,100,10),breaks=20) # agora com 20 barras Veja outras aplicaes da funo com: 24

Landeiro, Zucco e Menezes, 2010 > example(hist)

Grficos de pizza pie(objeto)


Para fazer grficos de pizza a funo pie. > pie(c(1,5,7,10)) Veja os exemplos de grficos de pizza > example(pie)

Grfico de pontos plot(x,y)


Grficos com variveis numricas
Primeiro vamos inserir os dados de duas variveis numricas. Lembre que a forma mais simples de inserir dados no R usando a funo de concatenar dados "c". > y<-c(110,120,90,70,50,80,40,40,50,30) > x<-1:10 y geralmente a letra usada em livros texto para indicar a varivel resposta, a que aparece no eixo Y. Apesar de no ser uma norma, colocar a varivel resposta no eixo y (vertical) dos grficos um consenso entre a maioria dos estatsticos, da a letra y para dados resposta. x chamada de varivel independente e aparece no eixo x (horizontal). extremamente simples fazer um grfico de pontos de y contra x no R. A funo utilizada plot() e precisa de apenas dois argumentos: o primeiro o nome da varivel do eixo X, o segundo o da varivel do eixo Y. > plot(x,y) Para usurios de outros programas que usam linha de comando, comum trabalhar com a lgica plote y em funo de x de maneira que o primeiro argumento sempre a varivel resposta. Se sua cabea est acostumada com essa forma de pensar, vc pode usar: > plot (y~x) # mesmo comando da linha acima

Alterando a aparncia (parmetros do grfico)


Para a proposta de apenas explorar os dados, o grfico acima geralmente o que voc precisa. Mas em publicaes necessrio saber melhorar a aparncia do grfico. Sempre bom ter nomes informativos nos eixos (no R a opo default de nome das legendas o prprio nome das variveis). Suponha ento que queremos mudar o nome da varivel do eixo x para "Varivel explanatria". Para isso, o argumento xlab ("x label") utilizado. Use as setas do teclado para voltar ao comando anterior e coloque uma "vrgula" aps o y e depois da vrgula coloque o comando da legenda do eixo x (xlab="Varivel explanatria") > plot(x,y, xlab="Var explanatria") Voc pode alterar a legenda do eixo y da mesma forma, porem usando ylab. Use as setas e coloque o argumento da legenda do eixo y. > plot(x,y,xlab="Var explanatria",ylab="Var resposta")

25

Landeiro, Zucco e Menezes, 2010 Tambm fcil mudar os smbolos do grfico, neste momento voc est usando a opo default, que a "bolinha vazia" (pch=1). Se voc deseja que o smbolo seja um "x" use pch=4. Use a seta para cima pra inserir o argumento pch. > plot(x,y,xlab="Var explanatria",ylab="Var resposta",pch=4) Para colocar ttulo no grfico uso o argumento main: > plot(x,y,xlab="Var explanatria",ylab="Var resposta" ,pch=4, main="Ttulo do grfico") H uma infinidade de parmetros para serem alterados em grficos. Use a funo help( ) para barplot e para plot e veja quantas coisas voc pode alterar em grfico. No quadro abaixo ns relacionamos alguns parmetros relativamente importantes para o uso cotidiano

26

Landeiro, Zucco e Menezes, 2010

PARMETROS COMUNS A DIVERSOS TIPOS DE GRFICOS pch=n(1:20) define smbolo dos pontos col=n(1:8) define cor dos pontos Confira a grfico na ltima pagina para ver modelos cex=n define tamanho dos smbolos (default=1) log=x/y/xy define se um ou ambos eixos esto em escala logo main=text ttulo do grfico xlab/ylab=text define rtulo do eixo x ou y xlim/ylim=c(min,max) define intervalo do eixo x ou y xaxp/yaxp=c(min,max,n) define mnimo, mximo e nmero de tick marks do eixo. asp=y/x define o formato do grfico (o default quadrado)

Adicionando linhas a um grfico de pontos


A funo utilizada para inserir linhas abline(arg1,arg2,arg3,..).Ele usado em uma linha de comando aps aquela que cria o grfico. Vamos usar a funo abline para inserir uma linha que mostra a mdia dos dados do eixo Y: > abline(h=mean(y)) # o h indica que ser uma linha horizontal, passando pela mdia de y. Para passar uma linha que passa pela mdia de x > abline(v=mean(x)) # o v de vertical Vamos passar uma linha que passa pelo stimo valor do eixo x e mudar a cor da linha > abline(v=7,col="red") # pode escrever o nome da cor ou nmeros (abaixo) Tambm possvel inserir as duas linhas ao mesmo tempo: > plot(x,y) > abline(h=mean(y),v=mean(x),col=4) E com cores diferentes > abline(h=mean(y), v=mean(x),col=c(2,4)) Mas tem uma linha muito mais interessante que podemos inserir num grfico de pontos: aquela que expressa a relao linear entre duas variveis. No curso de estatstica, aprendemos que a equao da reta y= a + bx. Assim para produzir a linha no grfico, basta informar quais os valores das constantes a (intercepto) e b (ngulo). Para extrair rapidamente essa informao (sem entrar em detalhes sobre regresso linear) ns usamos a funo lm(y~x)que significa linear model de y em funo de x. Em seguida fazemos o grfico e inserimos a linha informando as constantes > lm(y~x) Call: lm(formula = y ~ x) Coefficients: (Intercept) 118.667 27 x -9.212 a - ngulo b - intercepto

Landeiro, Zucco e Menezes, 2010

> abline(a=-9.212,b=118.667) # a representa o intercepto e b o ngulo

Adicionar mais pontos ao grfico


Em alguns casos podemos querer inserir pontos de outro local no mesmo grfico, usando smbolos diferentes para o novo local. Suponha que temos novos valores da varivel resposta e da varivel explanatria, coletados em outro local, e queremos adicionar estes valores no grfico. Os valores so > v<- c(3,4,6,8,9) ## novos valores da varivel explanatria > w<-c(80,50,60,60,70) ## novos valores da varivel resposta Para adicionar estes pontos ao grfico, basta usar a funo points(). Assim como abline() ela tambm inserida numa linha de comando em separado. Portanto, primeiro vamos refazer o grfico com x e y e depois adicionar os novos pontos usando uma cor diferente para diferenciar > plot(x,y,pch=16, col=black) > points(v,w,pch=16, col="blue")

Grficos com variveis explanatrias que so categricas.


Variveis categricas so fatores com dois ou mais nveis (voc ver isso no curso de estatstica). Por exemplo, sexo um fator com dois nveis (macho e fmea). Podemos criar uma varivel que indica o sexo como isto: > sex<-c("macho","fmea") A varivel categrica o fator sexo e os dois nveis so "macho" e "fmea". Em princpio, os nveis do fator podem ser nomes ou nmeros (1 para macho e 2 para fmea). Use nomes aqui para facilitar. Vamos supor que estamos avaliando o peso de machos e fmeas de uma dada espcie. Digamos que na nossa amostra, os 5 primeiros elementos eram machos e os ltimos cinco eram fmeas. Vamos criar uma varivel que informa isso:. > sexo<-c("Ma","Ma","Ma","Ma","Ma","Fe","Fe","Fe","Fe","Fe") Se fossem 20 machos e 20 fmeas, ia dar um trabalho fazer esse comando ein!! Ento tente recriar a varivel sexo com 5 Ma e 5 Fe usando o comando rep(x,vezes). O peso dos animais ser dado pelos valores do objeto y que criamos h pouco. Apenas indique isso: > peso<-y > peso Agora vamos fazer o grfico: > plot(sexo,peso) Observe que o comando no funcionou, deu erro! Isso ocorreu porque no informamos que sexo um fator. Vamos verificar o que o R acha que a varivel sexo. > is(sexo) Veja que o R trata a varivel sexo como sendo um "vetor de caracteres". Mas ns sabemos que sexo o nosso fator, ento precisamos dar esta informao ao R. A funo factor(objeto), transforma o vetor de caracteres em fator. O fator um novo tipo de objeto que ainda no tnhamos visto. caracterizado por um conjunto de dados categricos ou nominais que podem assumir um nmero finito de nveis. Vrias funes do R requerem que as variveis categricas sejam apresentadas 28 # peso igual a y

Landeiro, Zucco e Menezes, 2010 na forma de fator. Talvez voc queira voltar ao tipos de objetos na pgina 15 para anotar essa nova informao l. Seguindo adiante, vamos converter sexo em fator: > factor(sexo) Veja que o R mostra os "valores" e depois mostra os nveis do fator. Agora podemos fazer o nosso grfico adequadamente: > plot(factor(sexo),peso) # produz um boxplot!!!!

Grficos do tipo boxplot so bons quando o nmero de observaes (de dados) muito grande. Neste caso, um grfico com pontos seria melhor, pois podemos ver quantas observaes foram utilizadas para produzir o grfico e comunicarmos os dados reais ao leitor. Para fazer um grfico de pontos quando uma varivel categrica precisamos usar a funo stripchart(y~x). > stripchart(peso~sexo) # faz o grfico, mas na horizontal > stripchart(peso~sexo,vertical=TRUE) # agora o grfico est na vertical, porm os # pontos aparecem nas extremidades. TRUE pode ser abreviado para apenas T. > stripchart(peso~sexo,vertical=T,at=c(1.3,1.7)) # agora os pontos esto # centralizados, pois com o argumento at, ns especificamos a localizao dos pontos no eixo X. Note que agora s h um problema. Eram cinco fmeas e no grfico aparecem apenas 4. Isso ocorreu porque duas fmeas tinham o mesmo peso. Para melhorar o grfico necessrio usar o argumento method="stack", para que os pontos no fiquem sobrepostos. > stripchart(peso~sexo,vertical=T,at=c(1.5,1.7), + method="stack") Os pontos no esto mais totalmente sobrepostos, mas um smbolo ainda est sobre o outro. # Usando o argumento offset=valor conseguimos separ-los. >_stripchart(peso~sexo,vertical=T,at=c(1.3,1.7),method="stack",offset=1)

Inserir texto em grficos


Para inserir textos em grficos a funo text. Ela funciona assim: > text(cooX,cooY,"texto") Neste caso cooX e cooY indicam as coordenadas do eixo X e do eixo Y onde o texto dever ser inserido. Vamos criar um grfico simples: > plot(1:10,1:10) Agora vamos adicionar "seu nome" no grfico nas coordenadas 6 e 7. Isso indica que seu nome ficar na posio 6 do eixo X e na posio 7 do eixo Y. > text(6,7,"Seu.Nome") Para inserir duas palavras: > text(c(2,3),c(8,6),c("nome","sobrenome")) # A primeira palavra ficar na posio # 2-8 e a segunda palavra ficar na posio 3-6. Tambm possvel adicionar texto aos grficos usando a funo locator(n). O n indica o nmero de pontos que voc deseja indicar no grfico. A funo locator(n) permite que voc clique no grfico com o mouse e adicione o texto na posio desejada. > plot(1:10,1:10)

29

Landeiro, Zucco e Menezes, 2010 > text(locator(1),"Texto") # indique com o mouse a posio no grfico Para mais de um texto: > plot(1:10,1:10) > text(locator(3),c("texto 1","texto 2","texto 3"))

Dividir a janela dos grficos


Em alguns casos em que se deseja apresentar ou comparar dois ou mais grficos possvel dividir a janela de grficos do R. A funo par(arg1,arg2,arg3,...) controla diversas caractersticas dos grficos. Sempre que quiser melhorar algum aspecto de seu grfico consulte o help da funo par (? par) e descubra o argumento necessrio. Tome um tempo agora para dar uma olhada nesse help. Vamos dividir a janela de grficos e preencher com diferentes grficos: > par(mfrow=c(nl,nc)) # nl indica o nmero de linhas e nc o nmero de colunas que a # janela dever ter. Primeiro vamos dividir a janela em duas colunas. > par(mfrow=c(1,2)) # uma linha e duas colunas, ou seja, um grfico no lado do outro

> hist(rnorm(300,0,2),breaks=20,col=1) # apenas para gerar um grfico qualquer > hist(runif(300,0,2),breaks=20,col=1) Agora vamos dividir a janela em duas linhas e uma coluna: > par(mfrow=c(2,1)) > hist(rnorm(300,0,2),breaks=20,col=1) > hist(runif(300,0,2),breaks=20,col=1) Agora vamos dividir a janela em duas linhas e duas colunas (para plotar 4 grficos) > par(mfrow=c(2,2)) > hist(rnorm(300,0,2),breaks=20,col=1) > hist(runif(300,0,2),breaks=20,col=1) > hist(rnorm(300,0,2),breaks=10) > hist(runif(300,0,2),breaks=10)

Salvar os grficos
Existem diversas opes para salvar os grficos do R. A mais simples clicar com o boto direito do mouse sobre o grfico e depois em "save as metafile". Esse formato no perde qualidade quando transferido para o Microsoft Office e continua como desenho vetorial no Corel Draw. Para quem usa o editor de texto LATEX e sabe o que um arquivo postscript tambm existe esta opo com o " save as postSscript". Tambm possvel salvar os grficos em PDF, JPEG, BMP, PNG ou outros formatos. Para salvar em pdf ou outros formatos clique sobre o grfico e depois clique em Arquivo e em salvar como. Escolha a opo que deseja salvar.

30

Landeiro, Zucco e Menezes, 2010

Resumo sobre grficos


Plot: plot(xaxis,yaxis) faz um grfico de pontos se x uma varivel contnua e um boxplot se x uma varivel categrica (se um fator). Lines: lines(x,y) traa uma linha reta de acordo com as coordenadas fornecidas. possvel mudar o tipo e a cor das linhas usando os argumentos lty para o tipo e col para a cor. Points: points(x,y) adiciona mais pontos em um grfico. possvel colocar os novos pontos com smbolo diferente, usando o argumento pch=2 ou pch="H". stripchart: uma funo que faz grficos de pontos, com a qual possvel separar pontos coincidentes. Cores: Grficos em preto e branco so bons na maioria dos casos, mas cores podem ser mudadas usando col="red" (escrevendo o nome da cor) ou col=2 (usando nmeros). O comando abaixo mostra os nmeros que especificam algumas cores > pie(rep(1,30),col=rainbow(30)) par: a funo par utilizada para alterar diversos aspectos dos grficos, dentre eles, dividir a janela para que caiba mais de um grfico.

EXERCCIOS

COM GRFICOS

1. Um bilogo foi ao campo e contou o nmero de sapos em 20 locais. Ele tambm anotou a umidade e a temperatura em cada local. Faa dois grficos de pontos para mostrar a relao do nmero de sapos com as variveis temperatura e umidade. Use a funo par() para dividir a janela em duas. Os dados so: sapos umid temp 6-5-10-11-26-16-17-37-18-21-22-15-24-25-29-31-32-13-39-40 62-24-21-30-34-36-41-48-56-74-57-46-58-61-68-76-79-33-85-86 31-23-28-30-15-16-24-27-18-10-17-13-25-22-34-12-29-35-26-19

Um bilogo interessado em saber se o nmero de aves est relacionado ao nmero de uma determinada espcie de rvore realizou amostras em 10 locais. Os valores obtidos foram: > aves<-c(22,28,37,34,13,24,39,5,33,32) > arvores<-c(25,26,40,30,10,20,35,8,35,28) Faa um grfico que mostra a relao entre o nmero de aves e o nmero de rvores.

1.1. Um colega coletou mais dados sobre aves e rvores, em outra rea, que podemos aproveitar. Os dados so: > arvores2<-c (6,17,18,11,6,15,20,16,12,15) > aves2<-c(7,15,12,14,4,14,16,60,13,16) Inclua estes novos pontos no grfico com um smbolo diferente e cor azul. 1.2. Junte o seu arquivo de aves com o arquivo de aves do seu amigo, para que fique em um arquivo completo: aves.c<-c(aves,aves2). Faa o mesmo para rvores. 31

Landeiro, Zucco e Menezes, 2010

Os dados do exerccio anterior foram coletados em regies diferentes (voc coletou no local A e seu amigo no local B).

1.3. Faa um grfico para ver qual regio tem mais aves e outro para ver qual tem mais rvores. Lembre que local deve ser um fator para fazer o grfico. Use funo stripchart. > stripchart(aves.c~locais, vertical=TRUE, pch=c(16,17))

1.4. Existem locais com o mesmo nmero de aves, e no grfico estes pontos apareceram sobrepostos. Faa o grfico sem pontos sobrepostos:

Existem milhares de outros comandos para alterar a aparncia de grficos, veja esta pgina do help (?par) para ver alguns comandos sobre como alterar a aparncia de grficos. No se preocupe se voc ficar confuso sobre as opes do help(par), apenas praticando voc ir comear a dominar estes comandos.

32

Landeiro, Zucco e Menezes, 2010

DIA 3 - IMPORTAR

CONJUNTO DE DADOS PARA O

Passe a tabela abaixo (locais, abundncia de macacos e de rvores frutificando) para o Excel e salve-a (na pasta do curso) em formato de "texto separado por tabulaes" (No Excel clique em "salvar como" e em texto (separado por tabulaes)). Salve com o nome de amostras.txt. Deixe a clula onde est escrito Amostra em branco. amostra A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 reserva A A A A A A A A A A B B B B B B B B B B macacos 22 28 37 34 13 24 39 5 33 32 7 15 12 14 4 14 16 60 13 16 frutas 25 26 40 30 10 20 35 8 35 28 6 17 18 11 6 15 20 16 12 15

Note que esta tabela contm variveis numricas e categricas, portanto este um exemplo de objeto do tipo dataframe. Para importar a tabelas em formato txt separado por tabulaes para o R a funo read.table. > read.table("amostras.txt",header=TRUE) O argumento header=TRUE informa que os dados possuem cabealho, ou seja, a primeira linha contm os nomes dos atributos (variveis) e a primeira coluna possui o nome das amostras. No se esquea de atribuir os dados um objeto, no basta importar, preciso salvar tambm. > macac<-read.table("amostras.txt",header=TRUE) O objeto macac um objeto do tipo dataframe. Isso quer dizer que macac um objeto que possui linhas e colunas (observaes nas linhas e variveis (atributos) nas colunas)Para ver os dados digite o nome do arquivo. > macac

33

Landeiro, Zucco e Menezes, 2010

Importar arquivos de outros programas


>library(foreign) Se voc possui seus dados em outros programas estatsticos, saiba que o R tem flexibilidade para importar vrios tipos de arquivos. Para isso preciso carregar o pacote foreign (estran-geiro) que possui as ferramentas para tais importaes Arquivos lidos pelo R read.systat() - Systat read.dbf() Famlia Base read.dta() Stata read.mtp() - Minitab read.spss() - SPSS read.ssd() - SAS

Procurar os dados dentro do computador


Os comando para importar dados como o read.table() sempre procurar pelos arquivos no no working directory. Caso seu arquivo esteja em outro local vc pode informar o endereo do arquivo. No entanto, voc pode chamar arquivos de outras pastas se souber indicar corretamente o endereo completo do arquivo, por exemplo: > read.table(C:\Users\Zucco\Documents\Rfiles\macac.txt,header=TRUE) No ambiente Windows, voc pode usar tanto as barras duplas // ou a barra invertida \. Caso voc no lembre o nome do arquivo de dados que deseja importar existe a opo de procurar os dados no computador com a funo file.choose(), que abre uma caixa de dilogo onde voc procura pelo arquivo como em outros programas para Windows. > macac<-read.table(file.choose(),header=T) # encontre o arquivo macac.txt Voc tambm pode conferir se um determinado arquivo de dados existe no seu diretrio: > file.exists("macac.txt")

Transformar vetores em matrizes e data frames


Alm de importar tabelas, existe opes juntar vetores em um arquivo dataframe ou matriz. Para criar uma matriz use colum bind cbind(vetor1,vetor2,...) ou o row bind rbind(vetor1, vetor2,...). Vamos ver como funciona. Vamos criar trs vetores e depois junt-los em uma matriz. > aa<-c(1,3,5,7,9) > bb<-c(5,6,3,8,9) > cc<-c("a","a","b","a","b") > cbind(aa,bb) > rbind(aa,bb) # junta os vetores em colunas # junta os vetores em linhas

Lembre que matrizes podem conter apenas valores numricos ou de caracteres. Por isso, se juntarmos o vetor cc, nossa matriz ser transformada em valores de caracteres.

> cbind(aa,bb,cc)
caracteres.

# junta os vetores em colunas, mas transforma nmeros em

Para criar uma dataframe com valores numricos e de caracteres use a funo data.frame: > data.frame(aa,bb,cc) > data.frame(aa,bb,cc) 34 # agora temos variveis numricas e categricas

Landeiro, Zucco e Menezes, 2010

Acessar partes da tabela de dados (matrizes ou dataframes)


Agora vamos aprender a selecionar (extrair) apenas partes do nosso conjunto de dados

macac

usando [] colchetes. Como j vimos, uso de colchetes para objetos em duas dimenses funciona assim: objeto[linhas,colunas], onde est escrito linhas voc especifica as linhas desejadas, na maioria dos casos cada linha indica uma unidade amostral. Onde est escrito colunas, voc pode especificar as colunas (atributos) que deseja selecionar. Veja abaixo: > macac[,1] > macac[,2] > macac[1,] # extrai a primeira coluna e todas as linhas # extrai a segunda coluna e todas as linhas # extrai a primeira linha e todas as colunas

> macac[3,3] # extrai a terceira linha e a terceira coluna, 1 valor > macac[1,3] # extrai o valor da primeira linha e terceira coluna > macac[c(1:5),c(2,3)] # extrais somente as linhas 1-5 e as colunas 2-3 Existem outras duas maneiras de extrair dados de uma dataframe. Uma usando a funo attach(objeto), que torna as variveis acessveis apenas digitando o nome delas na linha de comandos, como se elas fossem objetos tambm. Digite macacos na linha de comandos e veja o que acontece! > macacos Error: object "macacos" not found Agora use a funo attach(), digite macacos novamente e veja o que acontece. > attach(macac) #variveis de macaco esto acessveis como se fossem objetos > macacos > frutas > reserva # agora os dados macacos est disponvel # para ver o nmero de arvores frutificando # para ver as reservas

> plot(macacos,frutas) Uma IMPORTANTE!!! A funo attach apesar de parecer "uma mo na roda" pode ser problemtica. Se "atacharmos" duas dataframes, e elas tiverem variveis com o mesmo nome, "perigoso" usarmos por engano a varivel errada. Se voc usar a funo attach seguro "desatachar" o objeto imediatamente aps o seu uso. Para isso use detach(). > detach(macac) > macacos # macacos no est mais disponvel

melhor forma de acessar colunas pelo nome usar o comando cifro

$, e no usar a funo

attach(). O cifro funciona apenas com objetos do tipo lista. Como j dissemos na pgina 15 que
dataframes so um tipo especial de lista, possvel us-lo para dataframes. O uso basicamente o

35

Landeiro, Zucco e Menezes, 2010 seguinte objeto$varivel (varivel especifica a coluna que deseja extrair). Por exemplo, para extrair a coluna macacos use: > macac$macacos Ou ento usar colchetes e o nome da varivel: > macac[,"macacos"] Vamos fazer o grfico de macacos X frutas usando $. > plot(macac$frutas,macac$macacos) Faa o grfico de frutas X macacos usando colchetes ao invs de usar $.

Operaes usando dataframes


Ordenar a tabela
Os dados de macac esto dispostos na ordem em que foram coletados. Em alguns casos podemos querer coloc-los em outra ordem. Por exemplo, na ordem crescente de quantidade de rvores frutificando. Para isso use a funo order. > macac[order(macac$frutas),] # ordena os dados macac pela ordem de frutas O parmetro decreasing=TRUE/FALSE controla se o ordenamento crescente ou decrescente. O default FALSE. Por isso para fazer ordenamento decrescente necessrio informar: > macac[order(macac$frutas,decreasing=TRUE)] Tome um tempo para entender porque o ordenamento de tabelas funciona com commando order() e no com o comando sort(). Para tanto vamos decompor o comando em passo a passo. Primeiro olhamos a funo orde(). > order(macac$frutas) Veja que o output indica um sequncia de nmeros que correspondem a posio do elementos na coluna macac$frutas em ordem crescente. Ou seja, os elementos 11 e 15 so os que possuem menores valores de frutas, seguidos de 8, 5, 14. Ao colocar esse comando dentro de macac[ ,] estamos dizendo que queremos a sequncia de linhas expressas por order(maca$frutas).

Calcular a mdia de uma linha ou de uma coluna


Podemos calcular a mdia de cada coluna da dataframe usando. > mean(macac[,"macacos"]) # mdia de macacos ou use > mean(macac$macacos) > mean(macac) # mdia de cada coluna de um dataframe

Repare que resultado para reservas foi NA e em seguida apareceu uma mensagem de aviso. NA indica Non Available, pois no possvel calcular a mdia de variveis categricas. Ns calculamos a mdia de macacos por unidade amostral, mas sem considerar a reserva onde as amostras foram coletadas. O que fazer para calcular a mdia de macacos em cada reserva? Basta selecionar as linhas correspondentes a cada reserva. > mean(macac[1:10,2]) # mdia de macacos na reserva A > mean(macac[11:20,2]) # mdia de macacos na reserva B

36

Landeiro, Zucco e Menezes, 2010

Soma de todas as linhas ou colunas


Agora, vamos usar dados sobre a abundncia de moluscos que foram coletados em dez parcelas. A tabela tambm contm informaes sobre quantidade de chuva em cada parcela e em qual de duas reservas (A ou B) a parcela estava localizada. O arquivo com os dados moluscos.txt e est na pasta da disciplina, importe-o para o R. Chame os dados do arquivo de

mol para facilitar.

Desejamos somar os valores de colunas ou linhas usando as funes colSums(objeto) para somar colunas e rowSums(objeto) para somar linhas. > colSums(mol[,1:6])#Note que estamos somando apenas as informaes sobre as 3 # espcies (colunas 1 a 6) > rowSums(mol[,1:6]) Qual informao biolgica vc obteve ao usar os dois comandos acima? Discuta com seus colegas.

Medias de todas as linhas ou colunas


Calcular a mdia das colunas e linhas. Abundncia mdia por parcela e abundncia mdia por espcie. > colMeans(mol[,1:6]) > rowMeans(mol[,1:6]) E se quisermos calcular apenas a abundncia mdia de moluscos na reserva A (linhas de 1 a 5)? Voc consegue fazer este clculo? Veja as quatro opes abaixo e diga qual delas far o clculo correto. 1 - mean(mol[,1:6]) 2 - rowMeans(mol[1:5,1:6]) 3 - colMeans(mol[1:5,1:6]) 4 - mean(rowSums(mol[1:5,1:6]))

Operaes em sub-conjuntos famlia de comandos apply


Um procedimento bastante comum no processamento de dados a execuo de funes (matemticas, estatsticas ou contagem) por grupos dentro dos seus dados. Um exemplo prtico desse tipo de demanda foi posto agora h pouco quando ns quisemos calcular a mdia de macacos por unidade amostral para cada reserva em separado. Nesse caso, temos uma funo sendo executada em srie pelo sub-conjunto reserva. Nesse caso, foi fcil solucionar o problema com um comando simples como: > mean(macac[1:10,2]) # para reserva A > mean(macac[11:20,2]) # para reserva B Porm, imagine esse tipo de soluo quando os seus dados so extensos, e por exemplo, vc possui coletas em 30 reservas. Voc precisaria de um comando para cada reserva (30 linhas de comandos). Uma alternativa mais elegante e simples poder dizer ao R calcule a mdia de macacos em cada unidade amostra por reserva. O comando tapply( ) executa esse procedimento assim: > tapply(dados,grupos,funo) Segundo essa sintaxe est dito que ser calculada a funo nos dados em relao ao grupo indicado. Vamos demonstrar a aplicao do comando na base dados do arquivo deer.txt com resultados de monitoramento de GPS de 11 veados campeiros ( Ozotoceros bezoarticus) no Pantanal de

37

Landeiro, Zucco e Menezes, 2010 Mato Grosso do Sul. Durante esse estudo, os receptores GPS eram programados para obter uma localizao a cada 5 minutos. > deers<- read.table(deers.txt, header=TRUE) > dim(deers) [1] 31620 > names(deers) 8 # para ver os nomes das variveis do objeto deers

Nesse objeto h 31.620 linhas que correspondem s localizaes geogrficas obtidas durante o monitoramento. A coluna ID, identifica o indivduo qual a localizao se refere. > table(deers$ID) # retorna a quantidade de pontos de cada indivduo 2 3 5 6 9 10 12 13 14 15 20

653 1025 2049 1610 5035 3594 2231 4837 3718 3639 3229 possvel perceber que o estudo obteve 653 localizaes do veado #2, 1025 localizaes do veado #3, 2049 localizaes do veado #4, etc. A coluna deer$DIST, contm a informao de distncia que o animal se deslocou desde a ltima localizao. Se desejarmos saber quanto cada animal se deslocou durante o perodo de seu monitoramento, bastaria somar o deslocamento entre todas as localizaes. Assim queremos somar os valores de distncia deslocada (deer$DIST) por indivduo (deer$ID). Vejamos como fazer usando tapply(). > distancia<-tapply(deer$DIST,deer$ID,sum) # somar distncias por indivduo > distancia

A A famlia famlia apply, apply, possui possui outros outros trs trs tipos tipos de de aplicao aplicao alm alm do do tapply(). tapply(). Abaixo Abaixo explicamos explicamos brevemente brevemente a a aplicao aplicao de de cada cada uma: uma: apply apply (dados, (dados, MARGIN, MARGIN, funo, funo, simplify=TRUE) O O apply() apply() executa executa a a funo funo definida definida nos nos dados dados por por coluna coluna ou ou linha linha e e no no por por grupo grupo como como o o tapply() tapply().. O O argumento, argumento, MARGIN MARGIN pode pode ser ser igual igual a a1 1 para para indicar indicar linha; linha; 2 2 para para indicar indicar colunas colunas ou ou c(1,2) para indicar ambos. Se a funo desejada for somatrio, o apply() faz a mesma coisa que c(1,2) para indicar ambos. Se a funo desejada for somatrio, o apply() faz a mesma coisa que as as funes funes colSums colSums e e rowSums rowSums como como visto visto acima. acima. Se Se a a funo funo for for mdia, mdia, a a ele ele equivale equivale ao ao colMeans colMeans e e rowMeans. rowMeans. A A importncia importncia do do apply() apply() que que ele ele permite permite a a execuo execuo de de qualquer qualquer funo funo no no conjunto conjunto de de dados. dados. Veja Veja os os exemplos exemplos > > apply(mol[,1:6],MARGIN=2,sum) apply(mol[,1:6],MARGIN=2,sum) # # somar somar colunas colunas de de mol(colunas mol(colunas 11- 6) 6) > > apply(mol[,1:6],MARGIN=1,mean) apply(mol[,1:6],MARGIN=1,mean) # # mdia mdia das das linhas linhas de de mol(colunas mol(colunas 1-6) 1-6) lapply(dados,funo) lapply(dados,funo) e e sapply(dados,funo, sapply(dados,funo, simplify=TRUE) simplify=TRUE) O O lapply() lapply() executa executa a a funo funo definida definida em em cada cada elemento elemento dede dede um um objeto objeto tipo tipo lista. lista. Como Como resultado resultado lapply() apresenta uma nova lista, em que cada elemento resultado da funo que foi usada. O lapply() apresenta uma nova lista, em que sapply() faz o mesmo que lapply() mas apresenta um argumento simplify=TRUE, que tentar devolver sapply() faz o mesmo que lapply() mas apresenta um argumento simplify=TRUE, que tentar devolver o o resultado resultado em em um um forma forma mais mais simples simples que que uma uma lista, lista, isto isto , , como como um um vetor vetor ou ou se se for for o o caso, caso, uma uma matriz matriz

38

Landeiro, Zucco e Menezes, 2010

EXEMPLO

COM DADOS REAIS

Na pasta do curso existe um arquivo chamado simu.txt. Este arquivo contm amostras de Simuliidae (borrachudos - piuns) coletadas em 50 riachos da Chapada Diamantina - Bahia. Importe este arquivo e vamos ver alguns exemplos de opes que podemos fazer com este conjunto de dados. > simu<-read.table("simu.txt",header=T) Use names()para ver o nome das variveis que esto no arquivo. > names(simu) Note que as 6 primeiras variveis so ambientais e depois os dados de 20 espcies. Estes dados foram coletados em trs municpios dentro da chapada diamantina (Lenis, Mucug e Rio de Contas). Primeiro vamos separar os dados das espcies dos dados ambientais: > ambi<-simu[,1:6] > spp<-simu[,7:26] Vamos ver os grficos que mostram as relaes entre as variveis ambientais. > plot(ambi[,"temperatura"],ambi[,"altitude"]) > plot(ambi[,"altitude"],ambi[,"pH"]) > plot(ambi[,"condutividade"],ambi[,"pH"]) No R a funo pairs()faz um grfico com todas essas comparaes entre as variveis ambientais. Ele plota todas as combinaes de duas variveis. um passo inicial da explorao de dados mas deve ser usado com parcimnia. > pairs(ambi) Vamos calcular a abundncia total de borrachudos em cada riacho. > rowSums(spp) Para salvar a abundncia: > abund<-rowSums(spp) E para calcularmos a riqueza de espcies em cada riacho? Primeiro precisamos transformar os dados em presena e ausncia (0 para ausncia e 1 para presena). Primeiro vamos criar uma cpia do arquivo original. > copia<-spp # cpia igual a spp # soma das linhas (riachos)

Agora vamos criar o arquivo de presena e ausncia: > copia[copia>0]<-1 > pres.aus<-copia > pres.aus # quando copia for maior que 0 o valor ser substitudo por 1

# apenas para mudar o nome do arquivo # veja que agora os dados esto apenas como 0 e 1

Para encontrar a riqueza de espcies basta somar as linhas do arquivo de presena e ausncia. > riqueza<-rowSums(pres.aus) # nmero de espcies por riacho (riqueza) Para calcular a riqueza mdia: > riq.media<-mean(rowSums(pres.aus)) 39

Landeiro, Zucco e Menezes, 2010 Vamos calcular a riqueza mdia por municpio onde foram realizadas coletas. > riq.muni<-tapply(riqueza,ambi[,"municpio"],mean) Agora use a funo colSums() para ver em quantos riachos cada espcie ocorreu e qual a abundncia total de cada espcie. Qual a espcie que ocorreu em mais riachos? Qual era a mais abundante? Para transformar os dados de abundncia de espcies em log: > simu.log<-log(spp) Veja o resultado em log: > simu.log # Note a presena do valor -inf

O valor -inf ocorre porque no possvel calcular o log de 0. Veja: > log(0) Por isso comum voc ver em trabalhos os dados transformados em log(x+1): > spp.log<-log(spp+1) > spp.log

Agora vamos retornar ao nosso arquivo completo, simu, e ordenar a tabela de acordo com a altitude, de forma que o primeiro riacho seja o que est localizado em menor altitude. > simu[order(simu[,"altitude"]),]# tabela ordenada pela altitude Agora vamos fazer 4 grficos da riqueza de espcies em relao a altitude, pH, temperatura e condutividade. Primeiro vamos dividir a janela de grficos em 4 partes. > par(mfrow=c(2,2)) Riqueza X altitude > plot(simu[,"altitude"],rowSums(pres.aus)) EXERCCIO: Faa os outros trs grficos. Agora vamos fazer um grfico para ver a riqueza de espcies nas trs reas (Lenis, Mucug e Rio de contas). > stripchart(riqueza~factor(simu[,"municpio"])) EXERCCIO: Coloque o grfico na vertical e separe os pontos coincidentes.

As funes aggregate e by
As funes by(dados,grupo,funo) e aggregate(dados,grupo,funao) podem ser utilizadas para aplicar uma funo em todas as colunas de uma tabela, enquanto a funo tapply() faz isso apenas uma coluna por vez. As duas funes retornam os mesmos resultados, mas de formas diferentes. Para calcular a mdia de cada espcie de borrachudo em cada um dos 3 locais use: > aggregate(spp,list(simu[,1]),mean) A funo aggregate() retorna uma dataframe com os valores para cada local. > by(spp,simu[,1],mean) A funo by() retorna uma lista com os valores para cada local. Para acessar os valores de uma lista preciso usar dois colchetes: 40

Landeiro, Zucco e Menezes, 2010 > med.local<-by(spp,simu[,1],mean) > med.local > med.local[["Lenis"]] > med.local[["Mucug"]] > med.local[["R.Contas"]]

LEMBRE-SE!! Aggregate by tapply

(dados,

grupo, funo

Os trs comandos executam funes nos dados estratificadas por grupo; tapply() s roda em 1 varivel (coluna) por vez; aggregate() e by() rodam em diversas variveis(colunas) de uma s vez; aggregate() exige que o grupo seja convertido em list output de by() uma list, bom para visualizao, ruim para manipulao;

Transpor uma tabela de dados

output de aggregate() um dataframe, bom para manipulao

Em alguns casos necessrio transpor uma tabela de dados, ou seja, colocar as informaes das linhas nas colunas e as colunas nas linhas. A funo t() e indica transpose. > t(spp)

COMANDOS

DE LGICA

Opes para manipular conjunto de dados.


Primeiro vamos ver o significado dos comandos abaixo. > Maior que < Menor que == igualdade != diferena > x<-c(1,2,9,4,5) > y<-c(1,2,6,7,8) > x>y > x>=y > x<y > x==y # Retorna TRUE para os x que so iguais a y > x!=y # Retorna TRUE para os x que so diferentes de y # Retorna TRUE para os maiores e FALSE para os menores >= <= maior que ou igual a menor que ou igual a

Agora vamos selecionar partes dos dados que obedecem a algum critrio de seleo.

41

Landeiro, Zucco e Menezes, 2010

which(teste lgico)
A funo which(teste lgico) retorna a especificao lgica TRUE ou FALSE para uma dada condio lgica apresentada. Na prtica ele funciona como se fosse a pergunta: Quais? > a<-c(2,4,6,8,10,12,14,16,18,20) > a>10 # retorna um vetor contendo TRUE se for maior e FALSE se for menor > which(a>10) # Equivale a pergunta: "Quais valores de a so maiores que 10?". # Note que a resposta a posio dos valores (o sexto, o stimo) e no os valores que so # maiores que 10. > a[6] > a[c(6:10)] # selecionamos o sexto valor de a # selecionamos do sexto ao dcimo valor

Tente prever o que ocorrer usando o comando abaixo. > a[which(a>=14)] Acertou? Selecionamos os valores de a que so maiores ou igual a que 14! Tambm podemos usar a funo which() para selecionar partes de uma tabela de dados. Por exemplo, vamos selecionar apenas as parcelas dos dados de moluscos onde a chuva maior que 1650 mm. Lembre-se que para selecionarmos partes de uma tabela podemos usar colchetes [linhas,colunas] e especificar as linhas e colunas que desejamos usar. Ento vamos usar o comando which() para escolher apenas as linhas (parcelas) onde a chuva maior que 1650mm: > mol[which(mol$chuva>1650),] Poderamos alternativamente, escolher apenas a parte da tabela que corresponde s amostras da reserva A: Lembrar: mol$reserva uma varivel de > mol[which(mol$reserva=="A"),] caracteres, logo precisamos usar aspas Tambm podemos incluir um segundo critrio de escolha usando & (que significa "e"). Vamos escolher apenas as parcelas da reserva B e que tenham o valor de chuva maior que 1650mm. > mol[which(mol$reserva=="B" & mol$chuva>1650),]

Ifelse(teste lgico ,valor se TRUE, valor se FALSE)


Agora vamos aprender a usar o comando ifelse() que significa: se for isso, ento seja aquilo, se no, seja aquilo outro. O comando funciona da seguinte maneira: ifelse(teste lgico, valor caso o teste for verdade, valor caso seja falso). Complicado? Vamos ver alguns exemplos para facilitar as coisas. Primeiro crie no R um objeto com o valor do salrio de dez pessoas. Os valores so: > salarios<-c(1000, 400, 1200, 3500, 380, 3000, 855, 700, 1500, 500) As pessoas que ganham menos de 1000 ganham pouco, concorda? Ento aplicamos o teste e pedimos para retornar "pouco" para quem ganha menos de 1000 e "muito" para quem ganha mais de 1000. > ifelse(salarios<1000,"pouco","muito") # Se o salrio menor que 1000, seja # pouco, se for maior seja muito.

42

Landeiro, Zucco e Menezes, 2010 Tambm podemos usar o comando ifelse para transformar os dados em presena e ausncia. Vamos usar os dados das espcies de borrachudos (spp) da Chapada Diamantina. > ifelse(spp>=1,1,0) # se o valor de spp for maior ou igual a 1 seja 1, se no, seja 0

EXERCCIOS
1.

COM DATAFRAMES E COMANDOS DE LGICA:

Calcule a mdia de macacos e frutas dentro de cada reserva do conjunto de dados macac.

2. Quais informaes podem ser obtidas da tabela de moluscos quando usamos os quatro comandos abaixo. 2.1. mean(mol[,1:6]) 2.2. rowMeans(mol[1:5,1:6]) 2.3. colMeans(mol[1:5,1:6]) 2.4. mean(rowSums(mol[1:5,1:6]))

3.

Use a funo t para transpor os dados de moluscos (apenas as espcies).

Multiplique o valor da abundncia de cada espcie de molusco pelo valor de chuva da parcela correspondente. Por exemplo: Na parcela 1 a chuva foi de 1800 mm e nesta parcela ocorreram 10 indivduos da espcie 1, portanto o novo valor para a sp1 na parcela 1 ser de 1800 x 10 = 18000.

4. Faa um grfico de pontos para comparar o nmero de macacos na reserva A com o nmero de macacos na reserva B. Use o conjunto de dados macac. Use a funo stripchart.

5. Importe para o R o arquivo minhocas.txt que est na pasta do curso. Este arquivo possui dados sobre a densidade de minhocas em 20 fazendas. As variveis medidas so: rea, inclinao do terreno, tipo de vegetao, pH do solo, se o terreno alagado ou no e a densidade de minhocas. 5.1. Veja a tabela na forma original e depois a ordene de acordo com o tamanho da rea. 5.2. Faa um grfico para ver a relao entre minhocas e rea do terreno e outro grfico para ver a relao entre minhocas e tipo de vegetao. 5.3. Selecione a parte da tabela que contm apenas dados de locais alagados. 5.4. Calcule a densidade mdia de minhocas, e a densidade mdia em locais alagados e em locais no alagados. 5.5. Qual a rea mdia das fazendas? Podemos usar a funo ifelse() para transformar dados de abundncia em dados de presena e ausncia. Transforme os dados de abundncia de moluscos mol em dados de presena e ausncia.

Com os dados transformados em presena e ausncia, use a funo rowSums para ver quantas espcies de moluscos ocorrem em cada parcela. Use colSums para ver em quantas parcelas cada espcie estava presente.

43

Landeiro, Zucco e Menezes, 2010 Os monitoramento de veado campeiro foi planejado para avaliar padres de atividade. Um dos padres mais bsicos de se investigar o ligado ao ciclo dirio. Com os dados de veado-campeiro deers faa: 5.6. um grfico de barras que expresse o deslocamento total por hora do ciclo dirio. Para tanto, basta somar os deslocamento associado a todos os pontos obtidos dentro de cada intervalo de hora. Como a varivel hora dec fornece a hora dcima exata de cada localizao, vc pode usar o comando round() para fazer com que cada ponto seja atrelado a uma faixa de horrio e possa executar os somatrios por faixa 5.7. um grfico de barras que expresso o deslocamento total por hora do ciclo dirio apenas para o veado #5.

DIA 4 APRENDER

A CRIAR

FUNES (PROGRAMAO)

Enquanto o R muito til como uma ferramenta para anlise de dados, muitos usurios as vezes precisam crias suas prprias funes. Esta uma das maiores vantagens do R. Alm de ser um programa para anlises estatsticas, o R acima de tudo uma linguagem de programao, com a qual podemos programar nossas prprias funes.

Sintaxe para escrever funes


A sintaxe bsica :

function(lista de argumentos){corpo da funo}


A primeira parte da sintaxe (function) a hora em que voc diz para o R, "estou criando uma funo". Na sequncia so listados todos os argumentos que sero avaliados pela sua funo. O corpo da funo a parte em que voc escreve o "algoritmo" que ser utilizado para fazer os clculos que deseja. Esta parte vem entre chaves. Ao criar uma funo voc vai querer salva-la, para isso basta dar um nome minha.funo<-function(lista de argumentos){corpo da funo}

Comando function
Vamos ver como criar funes comeando por uma funo simples, que apenas simula o sorteio de objetos como moedas ou dados. Neste caso a funo ter dois argumentos (x e n). x ser o elemento a sortear e n ser o nmero de vezes que deseja jogar a moeda. Vamos dar o nome a esta funo de jogar.moeda > jogador<-function(x,n){ + + sample(x,n, replace=T) } # Fim da funo DICA DE PROGRAMAO!! Embora no seja uma obrigao, praxe entre programadores, colocar a chave de abertura da funo { no fim da primeira linha e a chave de encerramento } numa linha separada aps o fim do corpo da funo. Isso auxilia na leitura de linhas de programao quando elas so muito intensas e possuem funes dentro de funes. # No digite tudo na mesma linha

44

Landeiro, Zucco e Menezes, 2010 O comando sample(x,n) indica que desejamos amostrar x, n vezes (jogar a nosso objeto de soirteio moeda n vezes). Agora vamos usar nossa funo para jogar uma moeda. Primeiro criamos a moeda para ento jogar: > moeda<-c("Cara","Coroa") > jogador(moeda,2) > jogador(moeda,10) > jogador(moeda,1000) Veja que jogando 1000 moedas ficou difcil saber quantas caras e quantas coroas saram. Lembra como fizemos para conferir isso dois dias atrs??? Use a funo table(): > table(jogador(moeda,1000)) Agora vamos usar nosso jogador para arremessar dados: > dado<-1:6 > jogadora(dado,2) > table(jogador(dado,200)) A funo jogador muito simples e nem necessria, pois podemos jogar moedas sem ela. > sample(c("cara","coroa"),10,replace=T) Agora suponha que voc no sabe qual funo do R calcula a mdia, mas voc sabe a frmula que calcula a mdia.

Conhecendo a frmula voc pode criar sua prpria funo que calcula a mdia. Note que voc pode inserir comentrios dentro da funo para depois lembrar o que fez: > media<-function(dados){ + + + n<-length(dados) med<-sum(dados)/n # funo chamada media # n o nmero de observaes # calcula a mdia

return(med) # return determina o que deve aparecer no output da funo criada

# Fim da funo

Vamos usar a funo criada (media) para calcular a mdia dos valores abaixo: > valores<-c(21, 23, 25, 19, 10,1 ,30, 20, 14, 13) > mdia(valores) Use a funo do R mean() para verificar se o clculo foi feito corretamente.

Comando for()
O comando for usado para fazer loopings, e funciona da seguinte maneira:

for(i in 1:n){comandos}
Isso quer dizer que: para cada valor i o R vai calcular os comandos que esto entre as chaves {comandos}. O "i in 1:n" indica que os valores de i sero i = 1 at i = n. Ou seja, na primeira rodada do for o i ser igual a 1, na segunda i = 2, e assim por diante at i = n. Para salvar os resultados que 45 Nunca esquecer de criar objeto vazio para receber os resultados do for

Landeiro, Zucco e Menezes, 2010 sero calculados no for precisamos criar um objeto vazio que receber os valores calculados. Criamos este objeto vazio assim: > resu<-numeric(0) Agora vamos usar o for para elevar i valores ao quadrado: > for(i in 1:5){ + resu[i]<-i^2 ## o i ser i = 1; i = 2; i = 3; i = 4; i = 5 ## Na primeira rodada o i = 1, ento ser 12 # Fim do for (i) ## Para ver os resultados

> resu

Antes de continuar, vamos fazer uma espcie de "filminho" mostrando o que o for faz. Primeiro vamos fazer um grfico com limites xlim =0:10 e ylim=0:10. > plot(0:10,0:10, type="n") Agora vamos usar o for para inserir textos no grfico a cada passo do for: > for(i in 1:9){ + + text(i,i, paste("Passo", i)) }

Nota sobre comando for A linha de {comandos} em for s faz sentido se ela incluir o i como um dos seus elementos. O n do i in 1:n pode ser dado no corpo dos comandos ou a priori diretamente no lugar do n. O loop for executa o mesmo procedimento repetidamente para cada valor que i assume, por isso mais lento do comandos com execuo direta sobre todo o objeto.

O R fez tudo muito rpido, de forma que no conseguimos ver os passos que ele deu. Vamos fazer novamente, mas agora inserindo uma funo que retarde o R em 1 segundo. Ou seja, cada passo ir demorar 1 segundo. > plot(0:10,0:10, type="n") > for(i in 1:9){ + + + text(i,i, paste("Passo", i)) Sys.sleep(1) } ## retarda os passos em 1 segundo

Entendeu o que est sendo feito? No primeiro passo do for, o i igual a 1, portanto apareceu o texto "passo 1" na coordenada x=1, y=1 do grfico. No segundo passo o i igual a 2 e aparece o texto "passo 2" na coordenada x=2, y=2, e assim por diante.

O for um comando bastante utilizado em diversas funes e na simulao de dados. Fique atento ao uso do for nas funes seguintes e pergunte caso no tenha entendido. A seqncia de Fibonacci uma seqncia famosa na matemtica (Braun & Murdoch 2007). Os dois primeiros nmeros da seqncia so [1, 1]. Os nmeros subseqentes so compostos pela soma dos dois nmeros anteriores. Assim, o terceiro nmero da seqncia de Fibonacci 1+1=2, o quarto 1+2=3, e assim por diante. Vamos usar a funo for para descobrir os 12 primeiros nmeros da seqncia de Fibonacci (Este exemplo foi retirado e adaptado de: Braun & Murdoch 2007 pp, 48). > Fibonacci<-numeric(0) > Fibonacci[c(1,2)]<-1 # o 1 e 2 valores da seqncia devem ser = 1

46

Landeiro, Zucco e Menezes, 2010 # 3 a 12 porque j temos os dois primeiros nmeros [1,1]

> for (i in 3:12){ + +

Fibonacci[i]<-Fibonacci[i-2]+Fibonacci[i-1] }

> Fibonacci

Exerccios
Modifique o cdigo para gerar a seqncia de Fibonacci de forma que: 5.8. mude os dois primeiros elementos da seqncia para 2 e 2 5.9. mude os dois primeiros elementos da seqncia para 3 e 2 10.1. modifique o cdigo para que os valores sejam compostos pela diferena entre os dois valores anteriores. 5.10. modifique o cdigo para que os valores sejam compostos pela diferena entre os dois valores imediatamente anteriores somada ao terceiro valor imediatamente anterior. Faa inicialmente com que a seqncia Fibonacci comece com 3 valores [1,1,1].

Brincando com funes


ndice de Diversidade de Shannon
Agora vamos usar o for para fazer uma funo mais complexa e tambm mais til para nosso dia a dia. Vamos elaborar uma funo que calcula o ndice de diversidade de Shannon-Wiener. Este ndice, bastante conhecido entre ns, mede a diversidade em uma comunidade, requerindo para tanto valores de abundncia (absoluta ou relativa). O ndice tem seu valor incrementado com o aumento do nmero de espcies e com o aumento do componente conhecido como equitatividade. A frmula do ndice de Shannon :

onde Pi a freqncia relativa da espcie na comunidade ( e S a riqueza (nmero de espcies). > shannon<-function(dados){ + # Cria a funo shannon

), ln o logaritmo natural

prop<-dados/sum(dados) # calcula o pi resu<-numeric() n<-length(prop) for(i in 1:n){ resu[i]<-if(prop[i]>0){prop[i]*log(prop[i])} else{0} } H<- -sum(resu) return(H) # veja abaixo sobre o uso do if e do else # Fim do for (i) # objeto numrico vazio que receber os valores do for

+
+ + + + + + +

47

Landeiro, Zucco e Menezes, 2010 + } # Fim da funo

Nota: Durante o clculo do ndice de Shannon precisamos pular do calculo quando o valor de proporo zero, porque log(0) no existe (-inf). Por isso usamos o if e o else, ou seja, se (if) o valor for maior que zero faa o calculo, se no (else) retorne 0. > log(0) # veja o resultado do log de zero

Usando o if(condio) {comando se TRUE} else{comando se FALSE} a sintaxe fica diferente do ifelse() em que tanto condio quanto comandos so apresentados nos argumentos entre parnteses.

Agora vamos usar a funo shannon para calcular o ndice de Shannon dos dados apresentados no livro da Anne Magurran pgina 45, tabela 2.1 (Diversidad Ecolgica y su Medicin, 1988). Os dados so: > magur<-c(235,218,192,0,20,11,11,8,7,4,3,2,2,1,1) # O valor 0 foi alterado propositalmente, no livro o valor 87. > shannon(magur) Esta funo que criamos para calcular o ndice de diversidade de Shannon calcula o ndice de apenas um local por vez (roda em uma coluna ou vetor apenas). Agora vamos criar uma funo que calcula o ndice de Shannon de vrios locais ao mesmo tempo, isto , que aceita uma matriz de dados com cada coluna representando um local ou unidade amostral. Neste caso teremos que usar o comando for duas vezes. > shan<-function(dados){ + + + + + + + + + nl<-nrow(dados) nc<-ncol(dados) H<-numeric() for(i in 1:nl){ prop<-dados[i,]/sum(dados[i,]) ## dados do local i em proporo resu<-numeric() for(k in 1:nc){ resu[k]<-if(prop[1,k]>0){prop[1,k]*log(prop[1,k])} else{0} # nome de shan para diferenciar da funo acima # nmero de locais (linhas) # nmero de espcies (colunas) # varivel vazia que receber os valores H de cada local

+
+

}
H[i]<--sum(resu)

# Fim do for (k)

+
+

}
return(H)

# Fim do for (i)

# Fim da funo

Vamos calcular o ndice de Shannon dos dados de borrachudos (spp). > shan(spp)

48

Landeiro, Zucco e Menezes, 2010

ndice de Similaridade de Jaccard.


Em ecologia de comunidades, um dos ndices de similaridade (resemblance measures) mais bsicos e conhecidos o ndice de Jaccard que se aplica para comunidades amostradas por mtodos qualitativos (que registram apenas a presena e ausncia

Onde, no caso de uma matriz de espcies: a = nmero de espcies compartilhadas pelos locais 1 e 2; b = nmero de espcies presentes apenas no local 1; c = nmero de espcies presentes apenas no local 2. Vamos criar uma funo para calcular o ndice de similaridade de Jaccard: > jaccard<-function(dados.spp){

+
+ + + + + + + + +

# Vamos inserir uma mensagem de erro, caso dados no sejam de presena-ausncia if(any(dados.spp>1)) stop("Erro: preciso fornecer uma tabela com dados de presena e ausncia") n<-nrow(dados.spp) # nmero de locais jac<-matrix(NA,n,n) ## Matriz que receber os valores de similaridade colnames(jac)<-rownames(dados.spp) ## Dar os nomes dos locais rownames(jac)<-rownames(dados.spp) ## Dar os nomes dos locais for(i in 1:n){ for(j in 1:n){ # nmero de espcies presentes em ambos locais, i e j ( a ) a<-sum(dados.spp[i,]==1 & dados.spp[j,]==1) # nmero de espcies presentes apenas no local i ( b ) b<-sum(dados.spp[i,]==1 & dados.spp[j,]==0) # nmero de espcies presentes apenas no local j ( c ) c<-sum(dados.spp[j,]==1 & dados.spp[i,]==0) jac[i,j]<- a /(a+b+c) } } return(as.dist(jac)) } ## os clculos demoram um pouco ## Frmula de Jaccard

+
+

+
+

+
+ + + + + +

> jac<-jaccard(pres.aus) > jac

Para fim de comparao vamos calcular o Jaccard com o pacote vegan. O R no calcula similaridade, apenas distncias (inverso da similaridade). Portanto, usamos 1-distncia para recuperar o valor de similaridade: > jac.vegan<-1-vegdist(pres.aus,"jaccard") > jac.vegan 49

Landeiro, Zucco e Menezes, 2010 > cbind(jac,jac.vegan) # coloque os valores lado a lado e compare. Est correto?

ndice de similaridade de Bray-Curtis.


Outro ndice de similaridade muito utilizado em ecologia, mas para dados de abundncia das espcies o ndice de Bray-Curtis. Esse ndice tem como caractersticas relevante pesar diferenas nas abundncias de espcies raras tanto quanto de espcies comuns:

Onde: y1j a abundncia da espcie j no local 1 e y2j a abundncia da espcie j no local 2. Esta frmula calcula a dissimilaridade e no similaridade (diferente do exemplo anterior do Jaccard). Ento vamos criar uma funo para calcular o ndice de similaridade de Bray-Curtis. > bray<-function(dados.spp){ + + + + + + + + + + + } return(as.dist(BrayCurtis)) } n<-nrow(dados.spp) BrayCurtis<-matrix(NA,n,n) for(i in 1:n){ for(j in 1:n){ numerador<-sum(abs(dados.spp[i,]-dados.spp[j,])) denominador<-sum(dados.spp[i,]+dados.spp[j,]) BrayCurtis[i,j]<- numerador/denominador }

Vamos usar nossa funo bray para a comunidade de borrachudos e comparar com o resultado obtido usando a funo vegdist do pacote vegan. > bra<-bray(spp) > bra.vegan<-vegdist(spp,"bray") > cbind(bra,bra.vegan) > bra==bra.vegan ### veja se os resultados so TRUE

EXERCCIOS

DE CRIAR FUNES:

1. Crie uma funo para calcular o ndice de diversidade de Simpson dos dados de borrachudos da Chapada Diamantina (objeto spp). Faa com que a funo possa fazer o procedimento em vrias unidades amostrais ao mesmo tempo. onde pi a freqncia relativa de cada espcie. Confira o resultado usando a funo > library(vegan) > diversity(spp,"simpson",MARGIN=1) # O argumento MARGIN indica se # voc quer fazer os clculos por linhas ou por colunas. Use 1 para linhas e 2 para colunas. 50

diversity do pacote vegan:

Landeiro, Zucco e Menezes, 2010 2. Crie uma funo para calcular a distncia (dissimilaridade) de Hellinger dos dados de abundncia de borrachudos. A frmula :

Onde: y1j so os valores de abundncia de cada espcie j no local 1; y 2j so os valores de abundncia de cada espcie j no local 2; y1+ a soma total das abundncias do local 1; y2+ a soma total das abundncias do local 2. No se assuste com a frmula, tente dividi-la em partes dentro da funo. Para calcular a distncia de Hellinger no R e conferir com resultado da sua funo use: > hel.vegan<-vegdist(decostand(spp,"hellinger"),"euclid") 3. Desafio: Calcule o ndice de Shannon usando apenas 3 linhas de comando e o ndice de Simpson usando apenas uma linha de comandos.

DIA 5 DIFERENA
CDIGO

ENTRE CRIAR UMA FUNO E ESCREVER UM

Existem milhares de formas de se trabalhar em R. Algumas pessoas preferem escrever pedaos de cdigos e execut-lo quantas vezes seja necessrio, enquanto outras preferem criar funes mais automatizadas, mas ambas produzindo o mesmo resultado. Em alguns casos vocs iro se deparar com cdigos e em outros casos com funes. preciso saber diferenciar os dois tipos, pois seu uso levemente diferente e pode gerar confuses. Vamos gerar um cdigo que escolhe nmeros para a mega sena e depois vamos criar uma funo que faz a mesma coisa. > njogos<-20 # quantos jogos queremos produzir

> numeros<-matrix(NA,6,njogos) # arquivo que ir receber nmeros dos jogos > for(i in 1:njogos){ + + numeros[,i]<-sample(1:60,6) }

> numeros Agora, caso voc queira mudar o nmero de jogos (njogos), preciso mudar o valor e rodar o cdigo todo novamente. Crie agora 50 jogos. Vamos transformar nosso cdigo em uma funo e ver o que muda, apesar dos comandos serem quase os mesmos. > megasena<-function(njogos){ > > > > > > 51 # cria a funo com nome de megasena # cria o arquivo que recebe os jogos

numeros<-matrix(NA,6,njogos) for(i in 1:njogos){

numeros[,i]<-sample(1:60,6) } return(numeros) }

Landeiro, Zucco e Menezes, 2010 > megasena(100) O interessante em criar uma funo, que aps ela estar funcionando voc precisa mudar apenas um argumento, que nesse caso o njogos. > megasena(10) > megasena(5) Em geral, muitas pessoas criam um cdigo, conferem se ele est funcionando e depois transformam o cdigo em uma funo para facilitar o processo de repetio.

CRIAR UMA FUNO (GENRICO)

PARA FAZER UM GRFICO COMPOSTO

A funo generico foi criada para produzir um grfico que ordena espcies em relao a um gradiente ambiental. Veja a figura abaixo onde uma comunidade de aves foi ordenada em relao ao gradiente de altitude. Esta funo ser bastante utilizada no curso de comunidades e no de estatstica multivariada, portanto importante que entenda como a funo funciona. O cdigo da funo segue abaixo, bem como comentrios que explicam o que fazer para usar corretamente a funo.
114.7 0.0

Altitude
Index Ramphastos vitellinus Lanio fulvus Bucco capensis Microbates collaris Hylophilus ochraceiceps Terenotriccus erythrurus Corapipo gutturalis Lipaugus vociferans Dendrocolaptes certhia Deconychura longicauda Myrmotherula gutturalis Micrastur gilvicollis Thamnomanes caesius Dendrocincla fuliginosa Galbula albirostris Mionectes macconnelli Glyphorynchus spirurus Dixiphia pipra Tachyphonus surinamus Dendrexetastes rufigula Dendrocincla merula Phaethornis superciliosus Turdus albicollis Pithys albifrons Formicarius colma Thalurania furcata Xiphorhynchus pardalotus Geotrygon montana Hylexetastes perrotii Sclerurus mexicanus Thamnomanes ardesiacus Xenops minutus Frederickena viridis Percnostola rufifrons Cyanocompsa cyanoides Platyrinchus coronatus Momotus momota Sclerurus rufigularis Hypocnemis cantator Deconychura stictolaema Myrmotherula menetriesii Cyphorhinus arada Hylophylax poecilinotus Schiffornis turdina Myrmotherula axillaris Philydor pyrrhodes Leucopternis melanops Myiobius barbatus

Relative density of species

Sites

52

Landeiro, Zucco e Menezes, 2010 Abaixo segue o cdigo da funo genrico, voc ir copiar e colar o cdigo no R da parte indicada abaixo at a parte final indicada no fim da funo. No modifique este cdigo, uma vez que ele seja colado no R voc no precisar copiar e colar novamente, desde que salve o seu workspace.

Script da funco
#####################Copie e cole no R daqui! ################################

# Funo para GRFICO COMPOSTO (Genrico) ### Criada por Victor Lemes Landeiro ###### ### ltima atualizao em 18-07-2008 ###

generico<-function(tabela,gradiente,at,grad,eixoY,eixoX){ ## Comeo da funo onde so especificados todos os 6 argumentos: # tabela, gradiente, at, grad, eixoY, eixoX. Abaixo seguem alguns comentrios e exemplos sobre a funo e seus argumentos. ####### Argumentos ####### # generico<-function(tabela, gradiente ,at,"grad","eixoY","eixoX") # tabela a tabela de espcies, uma data frame ou matriz com os dados das espcies # gradiente arquivo com os valores do gradiente # at usado para alterar a posio do nome das espcies no grfico, comece com o valor 1 e v aumentando at os nomes ficarem na posio desejada. # grad o texto para a legenda que deseja colocar no grfico mostrando o nome do gradiente. Esta legenda no pode ser muito longa. Deve vir entre aspas. # eixoY e eixoX so as legendas que deseja colocar nos eixos x e Y. Deve vir entre aspas. ##Para colocar o nome das espcies no local desejado preciso mudar o valor do argumento at

#### Abaixo segue o cdigo da funo. tabela<-as.matrix(tabela) gradiente<-as.matrix(gradiente) media.pond<-colSums(tabela*gradiente[,1])/colSums(tabela) sub.orden<-tabela[order(gradiente[,1],decreasing=F),] # Ordenar parcelas de acordo com o gradiente sub.orde<-sub.orden[,order(media.pond,decreasing=T)] # colocar espcies ordenadas pela mdia ponderada

dados.pa<-matrix(0,nrow(tabela),ncol(tabela))

53

Landeiro, Zucco e Menezes, 2010 dados.pa[tabela>0]<-1

ordenado<-sub.orde[,which(colSums(dados.pa)>0)] ## para deletar possveis colunas vazias (espcie que no ocorreu)

par(mfrow=c(ncol(ordenado)+1,1),mar=c(0,4,0.2,10),oma=c(3,1,1,6)) layout(matrix(1:(ncol(ordenado)+1)),heights=c(3,rep(1,ncol(ordenado)))) plot(sort(gradiente[,1]),axes=F,ylab="",mfg=c(21,1),lwd=10,las=2,lend="bu tt",frame.plot=F,xaxt="n",type="h",col="black",ylim=c(min(gradiente),max(gradi ente))) axis(side=2,at=c(0,max(gradiente)),las=2) mtext(grad,4,outer=T,font=2,line=-10,padj=-18.5,las=2) for(i in 1:ncol(ordenado)){ barplot(ordenado[,i],bty="l",axisnames=F,axes=FALSE,col="black") #axis(side=2,at=max(ordenado[,i]),las=2) mtext(colnames(ordenado)[i],3,line=-1.0,adj=0,at=at,cex=.8,font=3) } mtext(eixoX,1,outer=T,font=2,line=1.2) mtext(eixoY,2,font=2,outer=T,line=-2) }

# Este grfico ser construdo atravs de uma matriz de dados de espcies (Presena e ausncia ou abundncia) que ser ordenada de acordo com a mdia ponderada, calculada a partir dos dados de um gradiente ecolgico.

############## At Aqui! ###################################

Exemplo de como usar a funo genrico


Depois de copiar e colar a funo voc precisar digitar apenas a linha abaixo para produzir seu grfico genrico. Vamos usar os dados dos borrachudos para fazer o grfico > ambi<-simu[,1:6] > spp<-simu[,7:26] > altitude<-ambi[,6] >generico(spp,altitude,1,"Altitude(m)","Densidade relativa de Simuliidae","Ordenado pela altitude") Agora basta ir mudando o valor at para que o nome saia na posio desejada. Em geral, esta funo ir servir para propostas exploratrias, caso queria usar este grfico em alguma publicao talvez seja necessrio fazer algumas modificaes no cdigo. Uma das restries ## Variveis ambientais ## Dados das espcies

54

Landeiro, Zucco e Menezes, 2010 que o R permite que sua janela grfica seja dividida em no mximo 50 linhas. Portanto, impossvel construir esse grfico para ordenar mais de 48 espcies.

55

Landeiro, Zucco e Menezes, 2010

CRONOGRAMA
1dia: estatsticas sem modelos Teste t t.test Testes no paramtricos- wilcox.test Chi-quadrado chisq.test Testes de distribuio ks.test, shapiro.test Correlao cor, cor.test, rcorr

2dia: modelos simples Uso de frmulas Regresso simples ANOVAs e ANCOVA

3dia: modelos intermedirios Generalized linear models General linear mixed models

DIA 1
Tendo aprendido como utilizar o R, agora se ver como utilizar as principais estatsticas. Comearemos pela mais simples, aquelas que relacionam duas variveis apenas.

56

Landeiro, Zucco e Menezes, 2010 Para os exemplos neste dia usaremos o data.frame snails. Este data.frame constitui-se de dados sobre a mortalidade de moluscos submetidos experimentalmente a uma substncia malacocida . As variveis podem so: sp_A- nmero de mortes da espcie A sp_B-nmeros de mortes da espcie B N_A- nmero de indivduos da espcie A N_B- nmeros de indivduos da espcie B

Teste t
A estatstica mais conhecidas por todos teste t. Ela de fcil utilizao no R, sendo expressa na funo t.test. A maneira mais comum de utilizar esse teste para comparar duas amostras, expressas como vetores. Estes so os argumentos x e y da funo. Vamos usar como exemplo um teste t entre o nmero de mortes do da espcie A com a espcie B. > t.test(snails$sp_A,snails$sp_B) Que por sua vez devolve o seguinte resultado: Welch Two Sample t-test

data:

snails$sp_A and snails$sp_B

t = -3.1487, df = 68.37, p-value = 0.002432 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -3.7779113 -0.8470887 sample estimates: mean of x mean of y 1.708333 4.020833

Como se pode notar essa estatstica devolve em uma sada rpida com todos os valores de interesse em do teste. Mas existem trs variantes do teste t que so importantes. Primeiramente, muitas vezes se testa a diferena de uma amostra contra o valor de uma mdia, em vez de outra amostra. Outra verso importante que as vezes os dados so pareados. E ainda existem os testes unicaudais. Todas essas variaes podem ser utilizadas por essa funo, sendo estes detalhes argumentos extras. No exemplo:

Teste t contra mdia


> t.test(snails$sp_A,mu=10)

One Sample t-test

57

Landeiro, Zucco e Menezes, 2010 data: snails$sp_A

t = -25.6408, df = 47, p-value < 2.2e-16 alternative hypothesis: true mean is not equal to 10 95 percent confidence interval: 1.057782 2.358885 sample estimates: mean of x 1.708333

Teste t pareado
> t.test(snails$sp_A,snails$sp_B,paired=T)

Paired t-test

data:

snails$sp_A and snails$sp_B

t = -6.3594, df = 47, p-value = 7.676e-08 alternative hypothesis: true difference in means is not equal to 0 95 percent confidence interval: -3.04404 -1.58096 sample estimates: mean of the differences -2.3125

Teste t unicaudal

>t.test(snails$sp_A,snails$sp_B,alternative="greater")

#(maior)

>

t.test(snails$sp_A,snails$sp_B,alternative="less") Welch Two Sample t-test

#(menor)

data:

snails$sp_A and snails$sp_B

t = -3.1487, df = 68.37, p-value = 0.001216 alternative hypothesis: true difference in means is less than 0 95 percent confidence interval: -Inf -1.087857 58

Landeiro, Zucco e Menezes, 2010 sample estimates: mean of x mean of y 1.708333 4.020833

Resumindo os argumentos mais importantes da funo t.test so: alternative, que diz se o teste unicaudal ou bicaudal; paired, que diz se o teste pareado ou no; e mu que determina a mdia contra qual ser testada. Note que possvel combinaes dessas caractersticas. Pode-se fazer um teste unicaudal pareado, ou unicaudal contra mdia fixa. Exemplo: >teste(dados[,1], mu= 10, alternative="greater") #dados[,1] siginificantemente maior que 0.3 #testa se a mdia de

Explorando os outputs Outro ponto importante que os outputs no apresentam todos os dados contidos neles. Alm disso podemos querer apenas um dos valores do output. Por isso interessante salv-los como objetos para explor-los mais a fundo. Uma maneira de se conhecer todos os dados fornecidos pelo output utilizar a funo names(), que, vale lembrar, mostram os nomes de todos os elementos de uma lista, que normalmente a classe a qual os outputs portencem > names(resultado) [1] "statistic" [6] "null.value" "parameter" "p.value" "conf.int" "data.name" "estimate"

"alternative" "method"

Assim podemos descobrir o que cada objeto, e cham-los especificamente. Por exemplo, se for desejado apenas o valor p, basta cham-lo como em uma lista qualquer. > resultado$p.value [1] 0.994487 Isso permite nome-lo como objeto ou fazer qualquer outro processo com a mesma facilidade com se trabalha com os seus dados originais.

Wilcoxson-Mann-Whytney
Tendo visto como usar o teste t e como explorar esse e outros testes com eficincia, outro teste importante o Wilcoxson-Mann-Whytney, a verso no paramtrica do teste t. Ele utilizvel atravs da funo wilcox.test(). Sua organizao exatamente igual ao do teste t e seu output tambm muito similar. Os argumentos alternative, paired e um esto presentes e funcionam da mesma maneira.Para demonstrar vamos usar o mesmo exemplo do teste t.

59

Landeiro, Zucco e Menezes, 2010

> wilcox.test(snails$sp_A,snails$sp_B)

Wilcoxon rank sum test with continuity correction

data:

snails$sp_A and snails$sp_B

W = 845, p-value = 0.01916 alternative hypothesis: true location shift is not equal to 0

Chi-quadrado
Tendo visto o teste t e como entender os resultados dos teste, passamos para um outro teste muito utilizado o chi-quadrado. O chi-quadrado apresenta duas formas conhecidas: testar com uma tabela de contingncia, ou testar duas listas, uma de valores esperados e outra de observados. Ambas as formas so feitas pela mesma funo chisq.test(). Sua formulao bem simples:

Para testar com tabelas de contingncia basta coloc-la como primeiro argumento da funo. Como exemplo vamos assumir que quando ocorrem mais de 5 mortes ou cinco mortes o malacocida bem sucedidose existem diferenas entre os nmeros de testes bem sucedidos(s) e mal-sucedidos (n) entre as espcies. Esses dados j foram calculados e esto no objeto contingncia

Chi-quadrado de contingncia
> contigencia n s

A B

42

30 18

> chisq.test(contigencia)

Pearson's Chi-squared test with Yates' continuity correction

data:

contigencia

X-squared = 0.2332, df = 1, p-value = 0.6291

60

Landeiro, Zucco e Menezes, 2010

Chi-quadrado esperado e observado


Quando queremos comparar duas distribuies basta us-las como os dois primeiros argumentos da funo( chamados x e y).

> chisq.test(dados[,1],dados[,2])

Pearson's Chi-squared test

data: dados[, 1] and dados[, 2] X-squared = 2450, df = 2401, p-value = 0.2382

Testes de distribuio
Kolmogorov-smirnov
Sero demonstrados os testes mais comuns, o teste de kolmogorov-smirnov e o teste se ShapiroWilk. O primeiro, utilizvel atravs da funo ks.test().

Essa funo apresenta-se com dois argumentos bsicos. O primeiro (x), um vetor com os valores a serem testados. O segundo (y) ou outro vetor de valores, para o teste comparar as duas distribuies, ou um nome de uma distribuio de probabilidade conhecida pelo R (Beta, binomial, Cauchy, chi-quadrado, exponencial, F, gamma, geomtrica, hypergeomtrica, log-normal, logstica, binomial negativa, normal, Poisson, t de student, uniforme, Weibull, Wilcoxon). Essas so entendidas pelo R segundo conforme a tabela abaixo:

Distribuio beta binomial Cauchy chi-quadrado exponencial F gamma geomtrica hypergeomatria log-normal logstica binomial negativa normal Poisson

Nome no R beta binom cauchy chisq exp f gamma geom hyper lnorm logis nbinom norm pois

61

Landeiro, Zucco e Menezes, 2010 t de Student uniforme Weibull Wilcoxon t unif weibull wilcox

Essas distribuies devem ser antecedidas de um p (punif, pweibull,pnorm) nos testes de kolmogorov para indicar que a distribuio de probabilidades.Para efeitos de teste vamos comparar se os valores de mortalidade tem distribuies semelhantes, e testar se a distribuio da mortalidade da espcie A seguem uma distribuio normal

> ks.test(snails$sp_A,snails$sp_B)

Two-sample Kolmogorov-Smirnov test

data: snails$sp_A and snails$sp_B D = 0.25, p-value = 0.09956 alternative hypothesis: two-sided

> ks.test(snails$sp_A,pnorm)

One-sample Kolmogorov-Smirnov test

data:

snails$sp_A

D = 0.5, p-value = 7.55e-11 alternative hypothesis: two-sided

Nesse teste o argumento alternative est presente e funciona da mesma maneira que no teste t.

Shapiro-Wilk
Para o teste de Shapiro-Wilk, usa-se a funo shapiro.test() que apresenta um nico argumento(x) , que o vetor verificar se estes valores so normais. Tambm vamos testar se a distribuio do nmero de mortes da espcie A segue a distribuio normal.

> shapiro.test(snails$sp_A)

Shapiro-Wilk normality test

62

Landeiro, Zucco e Menezes, 2010 data: snails$sp_A

W = 0.7653, p-value = 2.324e-07

Correlaes
Como ltimo ponto desta aula, abordaremos a correlao. Muitas funes a fazem, e cada uma mais til para determinada situao. A mais bsica cor(). Ela apresenta trs argumentos principais. Os dois primeiros( x e y) so os vetores, para testar a correlao entre eles. E um argumento method, que aceita trs textos: pearson,kendall,spearman, que o tipo de correlao. O padro para esse argumento o pearson (i.e. se nenhum valor for dado a method, ele usar o valor pearson, ou seja far uma correlao de Pearson). Para o exemplo, faremos uma correlao entre as mortalidades das duas espcies.

> cor(snails$sp_A,snails$sp_B) [1] 0.9547273

Essa funo apenas retorna o valor da correlao, sem pouco utilizado. Para o teste de correlao usa-se cor.test(). Sua construo idntica ao de cor(), com exceo de que o argumento alternative, est disponvel. Esse funciona como descrito anteriormente.

> cor.test(snails$sp_A,snails$sp_B)

Pearson's product-moment correlation

data:

snails$sp_A and snails$sp_B

t = 21.7669, df = 46, p-value < 2.2e-16 alternative hypothesis: true correlation is not equal to 0 95 percent confidence interval: 0.9202225 0.9745065 sample estimates: cor 0.9547273

Por fim para realizar rapidamente uma matriz de correlao existe a funo rcorr(). Apresenta como primeiro argumento um matriz para ser calculado a correlao entre as colunas. Est funo tambm apresenta o argumento, type, similar ao method de cor(), mas que s aceita pearson e spearman como mtodos. Para testar se usar os nmeros populacionais, de cinco populaes de lagartos distribudos em fragmentos, que esto contidos no objeto pops

63

Landeiro, Zucco e Menezes, 2010 > rcorr(as.matrix(pops))

pop1 pop2 pop3 pop4 pop5 pop1 1.00 0.19 0.14 0.31 0.55 pop2 0.19 1.00 0.86 0.75 0.81 pop3 0.14 0.86 1.00 0.83 0.76 pop4 0.31 0.75 0.83 1.00 0.85 pop5 0.55 0.81 0.76 0.85 1.00

n= 12

P pop1 pop1 pop2 0.5555 pop3 0.6642 0.0004 pop4 0.3251 0.0053 0.0008 pop5 0.0642 0.0015 0.0041 0.0005 pop2 pop3 pop4 pop5

0.5555 0.6642 0.3251 0.0642 0.0004 0.0053 0.0015 0.0008 0.0041 0.0005

Revisando a aula
Para terminar um exerccio: Estou interessado em determinar se a largura do rio est relacionada com a quantidade de localizaes de indivduos de Nectomys squamipes na gua. Para tal tenho um txt com duas colunas. A primeira representa a largura do rio, e a segunda a proporo de pontos dentro da gua. Entretanto, quero se possvel, realizar uma correlao de Pearson (que exige normalidade dos dados). Se no for possvel, pretendo utilizar correlao de Spearman. Escreva um script com que realize essas operaes automaticamente.

DIA 2 INTRODUO
AOS MODELOS ESTATSTICOS

Muito da estatstica moderna realizada atravs de modelos, que inferem a relao entre as variveis. Os mais conhecidos modelos so a regresso e a ANOVA, embora existam outros. O R apresenta um conjunto de funes bastante similares para realizar modelos, sendo a mais bsica delas a funo lm(), que realiza modelos lineares (regresses e ANOVAs). A arquitetura dessa funo bastante simples. O primeiro argumento o modelo que se quer testar, escrito como uma formula, os outros argumentos incluem vetores com pesos, especificaes para

64

Landeiro, Zucco e Menezes, 2010 realizar o modelo apenas com parte dos dados entre outros, entretanto o nico argumento necessrio a formula, explicada a seguir

Formulas
Formulas no R uma maneira de expressar relaes entre variveis. Muitas funes aceitam formulas como argumentos, desde o teste t at grficos, mas elas so principalmente usadas em modelos. A formula mais bsica : y~x onde y e x so dois objetos (geralmente vetores). Essa formula modelo de uma regresso simples onde se testa se o objeto y depende de x. Ou seja ~ denota dependncia do objeto esquerda em relao ao da direita. possvel explicitar o intercepto, ou seja, fazer com a reta obrigatoriamente passe por um valor de y. Para isso basta adicionar o nmero que se deseja usar como intercepto a formula. Ex.: Para a regresso passar pela origem: y~x+0 Para adicionar outras variveis ( e assim fazer analises mltiplas), basta som-las as dependentes y~x+z Entretanto quando h mais de uma varivel independente elas pode interagir. Para o modelo considerar a interao ela deve ser colocada, como varivel independente. Existem duas maneiras de fazer isso: y~x+z+x:z, a mais tradicional, onde x:z denota interao da varivel x com a z Ou para, tornar a escrita mais fcil, y~x*z Essa ltima notao vale inclusive para trs ou mais variveis, e especialmente quando se tem muitas variveis. Ex.: Para se fazer um modelo de 4 variveis dependentes com todas as interaes, pode-se escrever y~x*y*z*w ou y~x + y + z + w + x:y + x:z + x:w + y:z + y:w + z:w + x:y:z + x:y:w + x:z:w + y:w:z + x:y:z:w

Outra possibilidade com formulas retirar variveis implcitas. Por exemplo, supondo o caso acima com quatro variveis dependentes. Se por algum motivo o termo y:w:z no for desejado, pode-se explicitar isso rapidamente colocando y~x*y*z*w - y:w:z Sem necessitar escrever a formula com todas as interaes, exceto essa. Outra relao importante entre variveis dependentes que estas podem ser aninhadas. Isso representado no R por uma barra / ou por %in%. y~x/y ou y~x %in% y denotam que x est aninhado em y.

65

Landeiro, Zucco e Menezes, 2010 Uma ultima questo a ser abordada, que em alguns casos (especialmente em ANOVAs como ser visto adiante) possvel especificar um termo de erro, ou seja um varivel que afeta a distribuio dos erros do modelo. Isso expresso da seguinte maneira: y~x+z+ Error (w) Vale lembrar que nas formulas os smbolos *,+,- e / no esto realizando operaes matemticas como normalmente fazem, e sim representando as relaes entre variveis. Outro ponto importante que as formulas so as mesmas independente das variveis serem categricas. Entretanto algumas construes (como aninhamento ou uso de Error) s fazem sentido para variveis categricas.

Regresses lineares
Sabendo como se utiliza formulas, para expressas relaes entre as variveis, podemos agora testar regresses. Relembrando para tal usa-se a funo lm(), e necessita-se basicamente colocar a formula como argumento desta. Como exemplo vamos utilizar os dados de Viveiros de Castro & Fernandez (2004) que relacionaram atravs de regresso mltipla diversas caractersticas das espcies o numero de fragmentos ocupados por elas. Esse dado est presente no arquivo survival.txt Comearemos com uma regresso simples. Para relacionar a massa como a persistncia. > lm(survival$Persistence~survival$Weight) Call: lm(formula = survival$Persistence ~ survival$Weight)

Coefficients: (Intercept) 3.8710 survival$Weight 0.5419

Como se pode notar, a informao dada pelo teste no muito til. A melhor maneira de obter um output interessante com modelos lineares pedir um sumrio atravs da funo summary().

> resultado=lm(survival$Persistence~survival$Weight) > summary(resultado)

Call: lm(formula = survival$Persistence ~ survival$Weight)

Residuals: Min 1Q Median 0.5032 3Q 1.8161 Max 3.5871

-5.4968 -1.4339

Coefficients: Estimate Std. Error t value Pr(>|t|) 66

Landeiro, Zucco e Menezes, 2010 (Intercept) survival$Weight --Signif. codes: 0 *** 0.001 ** 0.01 * 0.05 . 0.1 1 3.8710 0.5419 1.8567 0.7978 2.085 0.679 0.0637 . 0.5124

Residual standard error: 2.867 on 10 degrees of freedom Multiple R-squared: 0.04411, Adjusted R-squared: -0.05148 p-value: 0.5124

F-statistic: 0.4615 on 1 and 10 DF,

Utilizando summary() resultado como valor p, coeficientes, R2 se revelam. Mas como importante relembrar ainda existe muito mais informao no resultado do que aquela que aparece em um sumrio ou em uma chamada tradicional. Vamos usar novamente a funo names() que aprendemos.

> names(resultado) [1] "coefficients" "residuals" "effects" "qr" "terms" "rank" "df.residual" "model"

[5] "fitted.values" "assign" [9] "xlevels" "call"

Desses elementos os interessantes so coefficients que retorna o beta das variveis, e o valor do intercepto. residuals que retorna os resduos para outras anlises, fitted.values que o valor esperado pela regresso.

Agora para realizar uma regresso mltipla basta adicionarmos outras variveis. Por exemplo vamos adicionar grau de arborealidade como uma varivel independente:

> resultado=lm(survival$Persistence~survival$Weight+survival$Arboreality) > summary(resultado)

Call: lm(formula = survival$Persistence ~ survival$Weight + survival$Arboreality)

Residuals: Min 1Q Median 0.4622 3Q 1.8376 Max 3.6295

-5.4701 -1.4462

Coefficients: Estimate Std. Error t value Pr(>|t|)

67

Landeiro, Zucco e Menezes, 2010 (Intercept) survival$Weight survival$Arboreality 3.82072 0.54980 0.02258 2.48161 0.87413 0.68556 1.540 0.629 0.033 0.158 0.545 0.974

Residual standard error: 3.022 on 9 degrees of freedom Multiple R-squared: 0.04423, Adjusted R-squared: -0.1682 p-value: 0.8158

F-statistic: 0.2082 on 2 and 9 DF,

Como se pode notar os resultados no so muito diferentes de uma regresso simples, permitindo comparar rapidamente os resultados.

Uma dos fatores essenciais quando se realiza um regresso ou uma outra analise de modelos, olhar seu grfico e plots diagnsticos. O R pode embora possa fazer um grfico de regresso este no o faz automaticamente, sendo necessrio pedir um scatterplot das variaveis, usando plot() e depois adicionar a linha de tendncia usando abline(), funes vistas no mdulo 1. Mas o R produz uma serie de plot diagnsticos uteis rapidamente, usando plot() em um resultado de lm(), por exemplo:

> plot(resultado)

Far com ele que ele inicie uma janela de grficos e cada Enter fornecido pelo usurio ele mostra outros grficos. Entretanto alguns grficos podem no ser uteis para iniciantes. Mas importante que usar a funo plot() em um resultado de lm() no resulta em um grfico da regresso.

DIA 3
Generalized linear models (GLM)
Introduo
Tendo aprendido a realizar as tcnicas mais bsicas no R, agora vamos focar em aprender modelagens mais complexas, que permitem estudar padres mais complexos. A primeira tcnica de hoje o uso de modelos lineares generalizados (GLM). Estes modelos apresentam a capacidade de trabalhar com variveis dependentes que tem distribuies diferentes da tradicional normal, necessria por modelos lineares anteriores. Esse modelos apresentam um terminologia semelhante aos modelos lineares comuns, ou seja, existem regresses, ANOVAs e ANCOVAs.

Modelo geral (regresso)


Sua arquitetura no R bastante semelhante aos modelos anteriores. Entretanto a funo base glm(), ao invs de lm(). Entretanto seus argumentos so um pouco diferentes do lm(). O primeiro argumento, a formula. Entretanto, existe um segundo argumento importante, o family. Nesse argumento se coloca qual a distribuio sua varivel resposta apresenta. O argumento aceita os nomes das distribuies compatveis (poisson, binomial, gaussian (que o nome bonito da distribuio normal), 68

Landeiro, Zucco e Menezes, 2010 Gamma, inverse.gaussian, quasi, quasibinomial e quasipoisson).Note que nesse caso espcifico o R as trata como objetos, ou seja no necessrio colocar aspas. Para exemplificar vamos utilizar os dados de predao de frutos de Attalea humilis, presente na tabela attalea.txt. Supondo que se queria relacionar porcentagem de frutos de A. humilis de predados por besouros escoltideos, com o tamanho do fragmento amostrado. Como o dado de predao porcentagem, assumu-se que ele segue uma distribuio normal. No R o comando : > glm(predao~tamanho,family=binomial) Relembrando, para ter outputs que teis devemos perdir summary() do teste. > summary(glm(predao~tamanho,family=binomial)) [colocar valores do sumrio] O output desse teste bastante semelhante ao de lm(), entretanto com mais outras informaes relevantes em testes GLM. Ainda assim os elementos mais importantes so coefficients,residuals, e fitted.values.

ANOVAs glm
Para realizar ANOVAs atravs desse modelo, existe a funo anova.glm. Entretanto, essa funo tem uma argumentao diferente da funo aov, usada com as anovas convencionais. O primeiro argumento da funo anova.glm() um modelo glm. No exemplo, vamos tratar tamanho como duas classes, pequenos e grande, e fazer o teste anterior atravs de uma ANOVA. Mas como voc pode perceber no existe nenhuma coluna em attalea com dizendo se o fragmento pequeno ou grande. Criea usando o critrio de que os fragmentos maiores que xxx, e coloque-a no data.frame attalea. Vamos cham-la aqui de tamanho. > anova.glm(glm(predao~as.factor(tamanho),family=binomial)) [colocar output] Como se pode perceber no valores referentes a teste. Para efetivamente se obter os valores de testes, temos que especificar no terceiro argumento, test. Esta aceita os valores F,Chisq e Cp (est ultima o teste Cp de Mallows, que bastante prximo ao AIC). Usaremos para a esse teste Chisq, ou seja, o teste de chi-quadrado. > anova.glm(glm(predao~tamanho,family=binomial),test=Chisq) [colocar output] Relembrando sempre importante explorar o output dos dados. Usando novamente a funo names(), vemos que o output da ANOVA bem mais simplificado do que o do modelo normal. > names(anova.glm(glm(predao~tamanho,family=binomial),test=Chisq)) [1] "Df" "Deviance" "Resid. Df" "Resid. Dev" "P(>|Chi|)"

Nesse casos os valores contidos nesses objetos so os apresentados pela ANOVA. Para obter informaes mais detalhadas,como os valores dos resduos, use somente a funo glm, e proceda normalmente como um regresso. Para treinar pea o os valores de resduo dessa ANOVA. > anova.glm(glm(predao~tamanho,family=binomial),test=Chisq)

Exerccios
1.Tendo aprendido como realizar um glm, teste a relao entre a predao o nmero de sementes amostradas ([nome da varivel nos dados do R]) com o nmero de sementes predadas por besouros e 69

Landeiro, Zucco e Menezes, 2010 com o tamanho dos fragmentos. Como os dados provvel que ela siga a distribuio binomial. Entretanto, teste antes, usando algum teste de distribuio 2.Agora realize uma ANOVA glm, com que tem como variavel dependente os valores o tamnho dos fragmentos como dados categricos. Se esta for significante, faa um novo modelo igual, porem com o nmero de amostras como outra varivel. Lembre-se: esse novo modelo no uma ANOVA. Faa um script que realize todas essas aes automaticamente.

3. Como ultimo desafio, suspeito que o nmero de frutos de Attalea humilis regulado pelo tamanho dos fragmentos, e pelo nmero de inflorescncias. A quantidade de frutos tem um distribuio de Poisson. Quero visualizar o efeito do fragmento com o efeito da inflorescncia (em um modelo com ambas as variveis) e sem esse efeito. Para visualizar sem o efeito do numero de inflorescncias, faa um modelo apenas com nmero de inflorescncia, e pegue o resduo deste modelo. Use o resduo desse modelo como varivel independente em um outro modelo com tamanho dos fragmentos como varivel independente. Plote essa a relao resduo x tamanho em um grfico de pontos. Fornea todos os comandos em um script nico, capaz de realiz-lo sozinho.

O desafio final- Linear Mixed models


Base de dados utilizada
Como bases de dados de Zuur et al. (2007), que so os dados, de riqueza de espcies, tamanho da amostra e exposio solar. Esses dados foram coletados em nove praias diferentes, o que ser considerado a varivel aleatria Esses dados j esto presentes no R, na forma de um pacote, que no est presente no CRAN. Esse pacote foi baixado na forma de zip e est na pasta do curso. Tendo instalado o pacote (chamado AED), para ler a base de dados basta usar os seguintes comandos > library(AED) > data(RIKZ) Voc receber uma mensagem de erro avisando que o pacote no foi construdo para a verso mais recente do R, mas vamos ignorar isso. Com esses comandos voc agora dispe de um data.frame chamado RIKZ, que nosso conjunto de dados. Ele composto de cinco variveis, explicadas abaixo: Sample-Nmero de identificao da amostra. RIchness- Riqueza da amostra Exposure- ndice de grau de exposio solar da amostra NAP- indice de tamanho de rea amostrada Beach- Praia amostrada

Introduo
Tendo aprendido como realizar modelos lineares generalizados, vamos abordar um estatstica mais recente. Os modelos lineares mistos. Este modelos apresentam este nome porque so capazes de apresentar variveis categricas fixas e aleatrias( por isso misto). Em uma breve definio, variveis 70

Landeiro, Zucco e Menezes, 2010 fixas so aquelas em que todos os tratamentos esto presentes no modelo. Nas variaveis aleatrias nem todos tratamentos possveis esto presentes. Em um exemplo, digamos que eu queira saber se a fase da lua (crescente,minguante, cheia e nova) afetam a capturabilidade de Micoreus paraguayanus. Se eu tiver amostras em todas as quatro fases lunares, a fase da lua uma varivel fixa. Se eu usar em minha analise apenas a lua cheia e a minguante, eu tenho uma varivel aleatria (pois no considerei dois tratamentos que podem influenciar o animal, a nova e a crescente). Normalmente, no se analisa as variveis aleatrias sozinhas, em geral sempre existe uma varivel fixa, ou uma varivel contnua, presente no modelo. Alm disso, em geral a varivel contnua ou fixa est aninhada na varivel aleatria. Um exemplo disso: digamos se queira saber como o gradiente riquezaaltitude em campos de altitude de Santa Catarina. Para tal o pesquisador coletou dados de riqueza a cada 100m de altitude em cinco montanhas. A soluo mais simples seria realizar um regresso altitude x riqueza. Mas isso seria ignorar que existem diferenas entre as montanhas. Portanto, um modelo riqueza~altitude x montanha, com altitude estando aninhada em montanha muito mais esclarecedor. Como o pesquisador no amostrou todas as montanhas possveis (que seriam todas as montanhas com campos de altitude do mundo), a varivel montanha aleatria. Esse tipo de design o mais comum em modelos lineares mistos.

Como utilizar mixed models no R


Para implementar isso no R utilizaremos a funo lme(), do pacote nlme. Ao contrario das funes lm() e glm(), essa funo apresenta um arquitetura um pouco mais complexa. O primeiro argumento fixed a formula que contem os valores fixos e contnuos. Essa formula bastante relacionada com as usadas em glm() e lm().Vale lembrar que no se deve colocar o termo aleatrio nessa formula. Alm desse primeiro argumento, temos o terceiro chamado random, no qual se coloca a formula com os efeitos aleatrios. Essa formula apresenta alguns truques: 1) devemos omitir a varivel independente, ou seja no devemos colocar nenhum fator a esquerda do tio. 2) A varivel aleatria pode entrar no modelo de duas maneiras: ela pode influenciar a varivel dependente sozinha, ou pode apresentar uma interao com as variveis fixas. Se ela influencia os valores fixos sozinha, ela atua sobre o intercepto do modelo. Isso apresentado no R pela formula ~1| var , onde var a varivel aleatria. Se voc lembra-se da aula de formulas, 1 significa que est explicitando o intercepto, e | significa aninhamento. Se as variveis fixas so aninhadas nas aleatrias, est representada como ~1+varf|vara onde varf a varivel fixa e vara a varivel aleatria. Paraexemplificar, vamos fazer um modelo que testa se a riqueza depende da tamanho da amostra, e vamos considerar que a praia afeta apenas a riqueza.

> lme(Richness~NAP,random=~1|factor(Beach)) Quando pedimos um summary() percebemos o output > summary(lme(Richness~NAP,random=~1|factor(Beach))) Linear mixed-effects model fit by REML Data: NULL AIC BIC logLik

247.4802 254.5250 -119.7401

Random effects: 71

Landeiro, Zucco e Menezes, 2010 Formula: ~1 | factor(Beach) (Intercept) Residual StdDev: 2.944065 3.05977

Fixed effects: Richness ~ NAP Value Std.Error DF (Intercept) NAP 6.581893 1.0957618 35 t-value p-value 6.006682 0 0

-2.568400 0.4947246 35 -5.191574

Correlation: (Intr) NAP -0.157

Standardized Within-Group Residuals: Min Q1 Med Q3 0.2518966 Max 3.9793918

-1.4227495 -0.4848006 -0.1576462

Number of Observations: 45 Number of Groups: 9

Como indicado pelo modelo existe efeito significante tanto da varivel aleatria (revelado pela significncia do intercepto), quanto da varivel fixa. A outra possibilidade considerar que a varivel aleatria interage com os fatores. Nesse caso teramos uma formula da seguinte maneira: > lme(Richness~NAP,random=~1+NAP|factor(Beach)) Que no summary() teria um resultado revelado da seguinte maneira > summary(lme(Richness~NAP,random=~1+NAP|factor(Beach))) Linear mixed-effects model fit by REML Data: NULL AIC BIC logLik

244.3839 254.9511 -116.1919

Random effects: Formula: ~1 + NAP | factor(Beach) Structure: General positive-definite, Log-Cholesky parametrization StdDev Corr

(Intercept) 3.549068 (Intr) NAP 72 1.714957 -0.99

Landeiro, Zucco e Menezes, 2010 Residual 2.702824

Fixed effects: Richness ~ NAP Value Std.Error DF (Intercept) NAP 6.588703 1.2647622 35 t-value p-value 5.209441 0e+00 4e-04

-2.830027 0.7229385 35 -3.914616

Correlation: (Intr) NAP -0.819

Standardized Within-Group Residuals: Min Q1 Med Q3 0.1921281 Max 3.0397126

-1.8213275 -0.3411044 -0.1674619

Number of Observations: 45 Number of Groups: 9

Entretanto esse output no revela um valor p para o efeito da interao varivel aleatria com a contnua. Para verificar se interessante inserir tal questo no modelo necessrio usar o AIC, ou uma anlise grfica. Exercicios:

Tenho dados de infestao de bactrias Paenibacillus larvae em abelhas (Apis mellifera), no objeto Bees. Quero testar a hiptese de que existem dados o nmero de esporos do patgeno est relacionado com o grau de infestao (varivel Infection, que categrica) da colmia e com o numero de abelhas presentes nesta (varivel BeesN, continua). Entretanto como eu fiz medies mais de uma vez com a mesma colmias, e ento tenho a identidade da colmia como um varivel que categrica (Hive). a. Quem a varivel aleatria? b. Faa um modelo que considere o efeito desta varivel apenas sobre a quantidade de esporos. c. Faa outro modelo com a interao dessa varrvel aleatria com as outra BeesN (nmero de abelhas

d. Utilize a funo AIC() para extrair o AIC de ambos os modelos, e eleja o melhor (ou seja quem tem menor AIC). Utilize o help para entender esta funo. e. Faa um script que faa os processos da letra b,c e d automaticamente, ou seja, faa os dois modelos, retire seus AIC e compare o AIC de um com outro

73