Conversando Com o R Usando 57 Palavras-V13

download Conversando Com o R Usando 57 Palavras-V13

of 79

description

programação

Transcript of Conversando Com o R Usando 57 Palavras-V13

  • 1

    Verso 13: 16 setembro de 2014

    Conversando com o R usando 57 palavras: Introduo programao com exemplos em Ecologia

    Adriano S. Melo asm.adrimelo lNo gmail.com Dep. Ecologia, ICB Universidade Federal de Gois

    Sumrio 1 Introduo 1.1 O que programao? 1.2 Voc precisar de pouca matemtica, mas ter que pensar! 1.3 Programao como ferramenta de aprendizado 1.4 O ambiente R 1.5 Filosofia de programao em R: rpida e confivel 1.6 Opo do autor: simplicidade

    2 Primeiros passos no R: I 2.1 Instalao 2.2 rea de trabalho 2.3 Uso como calculadora 2.4 Uso geral: maria( ) 2.5 Ajuda 2.6 Atribuio (assign) 2.7 Meia dzia de funes bsicas 2.8 Lista de conceitos e funes usadas

    3 Primeiros passos no R: II 3.1 script (arquivo de roteiro) 3.2 Objetos: vector e duas funes relacionadas 3.3 Gerenciando objetos na rea de trabalho 3.4 Pacotes 3.5 Lista acumulada de conceitos e funes usadas 4 Seus primeiros programas no R 4.1 Uma funo para fazer funes 4.2 Ingredientes e receita de uma funo. f1.simp(): ndice diversidade de Simpson 4.3 Exerccio resolvido. f2.correl(): Coeficiente de correlao de Pearson 4.4 Erros: temos que resolv-los (ou, os sutis so os piores) 4.5 Lista acumulada de conceitos e funes usadas

  • 2

    5 Exerccios 5.1 f3.dp(): Desvio padro de uma amostra 5.2 f4.shannon(): ndice de diversidade de Shannon 5.3 f5.hill(): Srie de diversidade de Hill 5.4 f6.cole(): Modelo de amostragem passiva em Biogeografia de Ilhas 5.5 f7.F2(): Estatstica F na comparao das mdias de duas amostras (teste t) 6 Testes booleanos e avaliao de condies 6.1 Operadores relacionais, lgicos e funes relacionadas 6.2 Coero de dados booleanos 6.3 Avaliao de condies 6.4 Exerccio resolvido. f8.dissi.par.quali(): Dissimilaridade de Sorensen ou Jaccard 6.5 Exerccios 6.5.1 f9.ind.div(): ndice de diversidade de Simpson ou Shannon 6.5.2 f10.nodf.par(): ndice de aninhamento NODF 6.6 Lista acumulada de conceitos e funes usadas 7 Objetos: matrix, data.frame e list 7.1 matrix e data.frame 7.2 Extraindo e gravando elementos de vector, matrix e data.frames 7.3 list 7.4 Extraindo e gravando elementos de list 7.5 Nomes 7.6 Exerccios 7.6.1 f11.jack1(): Estimador de riqueza Jackknife 1 7.6.2 f12.chao1(): Estimador de riqueza Chao 1 7.6.3 f13.jacks(): Estimadores de riqueza Jackknife 1 e 2 7.7 Lista acumulada de conceitos e funes usadas

    8 Amostragem e lao for() 8.1 Amostragem 8.2 Lao for() 8.3 Exerccio resolvido. f14.correl.teste(): Teste de correlao por aleatorizao 8.4 Exerccios 8.4.1 f15.medias2.teste(): Teste de diferena entre duas mdias por aleatorizao. 8.4.2 f16.par.teste(): Teste de duas mdias com dependncia por aleatorizao 8.4.3 f17.coletor(): Curva do coletor 8.4.4 f18.caspp(): Curva de acumulao de espcies. 8.5 Lista acumulada de conceitos e funes usadas 9 Outras ferramentas teis para Eclogos 9.1 Importao e exportao de objetos 9.2 Grficos 9.3 Mapas

  • 3

    9.4 Arquivos shape 9.5 Trabalhando com rvores filogenticas 9.6 Lista acumulada de conceitos e funes usadas 10 Literatura citada

  • 4

    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    1 Introduo ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    1.1 O que programao?

    De forma simplificada, programao a

    redao de um programa de computador

    para automatizar tarefas. De maneira mais

    formal, 'Programao o processo de escrita,

    teste e manuteno de um programa de

    computador' (Wikipedia:

    http://pt.wikipedia.org/wiki/Programao_de_c

    omputadores). Programao isto e apenas

    isto (Fig. 1.1).

    Figura 1 .1 Cartaz eletrnico feito por Luciano F. Sgarbi e

    Carolina R.C. Gomes para disciplina oferecida

    por Adriano S. Melo em Pirenpolis em 2012.

    Quando falamos de programas de computador pensamos em algo como um navegador de

    internet (Chrome, Firefox, Internet Explorer etc), redatores de texto (MS Word, Write, Bloco de Notas

    etc) ou, mais recentemente, programas que acessamos na nuvem (Facebook, Dropbox, Google Drive

    etc). Alm destes, tambm usamos programas mais simples rotineiramente, como aqueles embutidos

    em calculadoras ou letreiros eletrnicos.

    Um programa de computador feito a partir de um texto contendo instrues de como uma

    mquina (computador, calculadora) deve se comportar. Ou seja, o que deve fazer (por ex. somar)

    quando receber uma informao (por ex. nmeros fornecidos por um usurio). Este texto escrito

    numa linguagem de programao e existem dezenas de linguagens disponveis. Estas diferentes

    linguagens geralmente possuem muitas coisas em comum, embora cada uma tenha sido criada para

    atender um determinado propsito e, portanto, tambm possuam caractersticas exclusivas. Esta

    relao (de parentesco) entre linguagens de programao no muito diferente daquela existente

    entre as lnguas (Portugus, Ingls, Espanhol etc). Aps redigir um programa, normalmente

    precisamos compilar nosso programa, ou seja, transform-lo numa linguagem que o computador

    entenda. Um programa faz isto, um compilador. Boa parte dos programas que voc conhece so

  • 5

    programas compilados.

    Alm destas linguagens compiladas, existem linguagens que funcionam dentro de um

    determinado programa ou ambiente de programao. So chamadas de linguagens de extenso ou,

    mais frequentemente, como script. Estes scripts no so to eficientes como as linguagens compiladas,

    ou seja, em geral demoram muito mais para processar uma informao. Por outro lado, em geral so

    mais fceis e rpidas de se programar. Ainda, geralmente possibilitam trabalhar de forma interativa

    com o programa ou ambiente da qual fazem parte. Esta interatividade significa que voc pode saber o

    que um determinado comando faz simplesmente mandando para o ambiente de programao (por ex.

    com um ENTER).

    Existem dezenas de linguagens do tipo script. Em estatstica e anlise de dados, a mais comum

    hoje em dia a linguagem R. Mas antes de falarmos de R, vamos falar um pouco de educao.

    1.2 Voc precisar de pouca matemtica, mas ter que pensar!

    "Eu posso at te ajudar, alis, eu vou te ajudar! Eu quero te ajudar! Mas agora voc tem que me ajudar a te ajudar."

    Sargento Rocha J ofereci muitas disciplinas na graduao e na ps-graduao envolvendo programao e anlise de

    dados em Ecologia usando R. Na ps-graduao, ofereci as disciplinas "Introduo a Programao em

    R" [assunto deste livro], "Introduo ao Uso de Modelos Lineares em Ecologia" e "Mtodos para

    Quantificar a Diversidade Biolgica" para exatamente 32 turmas em 8 Programas de Ps-Graduao

    (at agosto de 2014). A maioria destas turmas tinha entre 10 e 30 alunos e, portanto, j conheci um

    bom nmero de ps-graduandos. Na graduao, minha experincia com disciplinas deste tipo menor,

    embora seja suficiente para notar que o comportamento de graduandos e de ps-graduandos no

    muito diferente quando se fala em estatstica, anlise de dados ou programao. Eu no tenho dvida

    dos dois maiores problemas que tenho nestas disciplinas:

    i) o aluno acreditar que no capaz de aprender algo que envolva nmeros, e

    ii) o aluno esquecer que seu crebro foi feito para pensar.

    Voc pode achar que estou exagerando. Afinal de contas, se o aluno est em sala de aula

    porque deve estar querendo aprender. Mas a vida no to simples assim. Aqueles neurnios do seu

    crtex cerebral responsveis pelo seu consciente esto te impelindo a ir para sala de aula e aprender,

    pois sabem que tais ferramentas quantitativas so importantes para seu futuro profissional. O

    problema que eles no so ditadores; eles devem discutir e negociar com os neurnios do seu

  • 6

    subconsciente e a o problema geralmente aparece.

    Nossos colegas, pais e, por incrvel que parea, at mesmo nosso sistema educacional martelam

    o tempo inteiro que Matemtica algo difcil. Fazem tanto isto ao longo de nossa infncia e

    adolescncia que acabamos incorporando isto como verdade no nosso subconsciente. Para piorar,

    acabamos incluindo neste saco de coisas complicadas chamada "Matemtica" qualquer coisa que

    envolva nmeros.

    Costumo iniciar minhas disciplinas dizendo quais operaes matemticas usaremos: soma,

    substrao, multiplicao, diviso, logaritmo, exponenciao, radiciao e mdulo. Alguma dvida?

    Talvez os nomes "radiciao" e "mdulo" j estejam sumindo de sua memria. O primeiro aquele que

    envolve raiz quadrada e o segundo aquele composto por duas barras verticais que colocamos ao

    redor de um nmero para simplesmente retirar seu sinal. Assumo que voc conhece estas operaes

    matemticas e portanto possui o fundamental para conseguir seguir este livro. No estou brincando.

    S vamos precisar disto e um pouco de raciocnio, e aqui entra o segundo problema.

    Espero que esteja claro que por mais superficial que seja sua Matemtica, ela suficiente para

    seguir este texto e realizar a maioria das anlises usadas em Ecologia. Quanto ao raciocnio, vamos

    admitir, nosso treinamento escolar geralmente pssimo. Se voc fez graduao em Cincias

    Biolgicas ou algo do tipo, tenho certeza que seus professores ficaram durante quatro anos ou mais

    jogando terra sobre seu raciocnio. Tenha certeza que ele ainda est ai dentro de seu crebro, embora

    bem enterrado. No muito difcil entender como fizeram isto com voc.

    Nas Cincias Biolgicas, praticamente todas disciplinas exigiram que voc memorizasse

    palavras, imagens e historinhas de como algo biolgico funciona. Isto e apenas isto. Voc deve ter

    ficado craque nisto, mas seu raciocnio sofreu bastante. Nossos professores foram treinados desta

    forma e acabam aplicando o mesmo em suas disciplinas. Embora um absurdo na era Google, somos

    treinados a memorizar detalhes. Muitos detalhes. Veja seus livros-textos, aqueles que voc usou em

    suas disciplinas de graduao. Te exigem pensar em algo? claro que no. Alis, j notou que os

    professores sempre gostam daqueles livros mais pesados, com muitas pginas? Dizem que mais

    "completo". Completo de detalhes. Os autores de livros sabem disto e quase infalivelmente tornam

    seus livros cada vez mais volumosos em edies posteriores (pois sempre descobrem detalhes no

    includos nas edies anteriores; chegam at a agradecer aqueles que os lembram dos detalhes no

    inclusos nas edies iniciais) (Rigler & Peters 1995).

    Pode acreditar em mim quanto ao que falei acima sobre Matemtica: voc possui o

    fundamental. Por mais difcil que seja, acredite nisto. Eu quero te ajudar, mas voc tem que colaborar.

    O primeiro passo este: acredite, simples assim.

  • 7

    Sobre o raciocnio, muitos de vocs tero que fazer fora para desenterr-lo. Posso te dar

    algumas dicas:

    i) Voc ter dvidas ao longo do texto, principalmente quando estiver fazendo exerccios.

    Absolutamente normal. Alguns alunos acham isto ruim. Eu acho timo. Muitos alunos no querem

    ficar em dvida, se sentem desconfortveis. Eu adoro quando isto acontece. No sou sdico. O

    problema de voc se sentir desconfortvel nesta situao que raramente passou por isto. Voc no

    aprendeu a lidar com isto. Voc foi treinado a memorizar e no pensar. Minha sugesto: faa esquemas

    num pedao de papel, veja se j reuniu todas informaes necessrias para resolver o problema e,

    finalmente, pense! Caso esteja em sala de aula, te sugiro fortemente que jamais solicite ajuda do seu

    colega ao lado. Voc estar passando o problema para ele (ruim para voc) e ainda por cima

    distraindo-o do que estava fazendo (ruim para ele). claro que voc no vai ficar parado no problema

    eternamente. Voc deve tentar resolver o problema durante certo tempo. Procure ajuda apenas aps

    este perodo. Se estiver em sala de aula, pea ajuda ao professor ou monitor (no do seu colega) de

    forma objetiva. No adianta muito dizer: no entendi. Diga o que no entendeu, onde est o problema.

    Por fim, espero que voc perceba que a melhor coisa que pode te acontecer ganhar um pouco de

    experincia na resoluo de problemas. Qualquer problema. Todos temos problemas. A diferena

    que alguns aprenderam a resolv-los. Outros no. Escolha o seu time.

    ii) Estamos na era multitarefa, fazendo vrias coisas simultaneamente. Isto pode ser muito legal, pois

    voc pode aproveitar sua vida. Mas tambm pode ser uma desgraa, pois corre o risco de no fazer

    nada de forma correta e intensa. uma grande besteira ficar pensando em sua dissertao/tese

    quando est com sua namorada(o) no cinema ou se deliciando com uma cerveja na praia. Esquea o

    trabalho e aproveite intensamente o momento. Da mesma forma, tenha concentrao no seu trabalho.

    No fique tentando responder e-mail, facebook, skype e coisas do tipo durante a aula. Voc no

    conseguir dividir satisfatoriamente seu processador cerebral. Desligue todas brincadeiras de internet

    quando for estudar ou estiver em sala de aula. Elas podem parecer importantes, mas no so.

    iii) Cada um tem seu tempo de aprendizagem. Algumas pessoas tm maior facilidade em aprender

    determinadas coisas do que outras. No se preocupe. Isto no relevante. Relevante mesmo ter

    persistncia: "Ter s aptido no adianta; necessrio muito esforo e dedicao para transform-

    la em sucesso e realizao profissional. Isso tanto verdade para as pessoas normais como para os

    ditos 'gnios'. A diferena, talvez, seja a quantidade de esforo requerida. como se os gnios

  • 8

    tivessem um barco a motor para atravessar um rio e os normais, um barco a remo. Claro, mais

    fcil para os gnios. Mas eles precisam saber pilotar o barco e ter gasolina suficiente para chegar do

    outro lado. Os remadores tm de trabalhar mais duro, mas tambm podem chegar l. O importante

    querer atravessar o rio, ter determinao para isso, mesmo que os braos doam, a sede aperte e

    voc veja outros barcos adiante, deixando voc para trs." Marcelo Gleiser (2007).

    iv) A culpa no do professor. Temos uma cultura pedaggica extremamente perversa em que tudo

    culpa do professor. Se o aluno vai mal ou no tem interesse, a culpa do professor. Implcito nesta

    cultura est a ideia de que o aluno um ser passivo, alimentado pela regurgitao do professor. Voc

    pode continuar pensando assim. Ser mais confortvel, mas tambm ser sua desgraa. Se voc quer

    aprender, deve considerar, como dizia um professor na minha graduao, que seu professor e seu livro

    so apenas muletas. Eles te ajudam, mas quem anda voc. No h como as muletas fazerem voc

    andar. Voc tem que querer. De verdade! Neste sentido, uma das coisas mais gratificantes como

    professor quando consigo fazer o aluno ter raiva o suficiente de mim para que ele queira demonstrar

    que capaz de fazer algo bom na disciplina. Novamente, no sou sdico e no quero ficar te

    perturbando. Quero apenas que voc tome as rdeas do processo de aprendizagem. Fique com raiva

    deste livro ou do seu autor, mas use esta raiva de maneira proveitosa (no v riscar meu carro!).

    Todo livro ou apostila baseado em um monte de outros livros e apostilas. reciclagem com

    um novo tempero. Caso tenha curiosidade sobre o funcionamento do seu crebro, veja o fascinante

    livro do Nicolelis (2011). Ainda nesta linha, veja uma narrao das brigas do seu consciente com seu

    subconsciente em Eagleman (2011). Voc vai descobrir que conhece menos de voc mesmo do que (seu

    consciente) imagina. Mais do que genialidade, voc precisa ter foco e persistncia no trabalho

    cientfico. Se voc acha que seu crebro consegue fazer vrias coisas ao mesmo tempo, como ter aula e

    conversar com seu colega ao lado, veja se consegue ver o gorila de Chabris & Simons (2009). Para um

    bilogo, a autobiografia do Wilson (1994) inspiradora, enquanto o livrinho (no melhor sentido da

    palavra) do Gleiser pode te dar um norte no meio do turbilho de suas dvidas. Reconhecer o

    problema o primeiro passo para sua soluo e neste sentido o Cap. 10 de Rigler & Peters (1995)

    avassalador quanto ao nosso sistema de ensino. Fiquei um tanto deprimido quando percebi o tanto de

    inutilidades que "aprendi" na graduao. Alis, se voc est na ps-graduao e ainda no se sente um

    cientista (j deveria se sentir!), aproveite os trs captulos iniciais de Rigler & Peters (1995). uma

    maravilha de objetividade. Se gostou destes trs iniciais do Rigler & Peters, tambm vai gostar do

    livrinho (novamente, no melhor sentido da palavra) do Rubem Alves (2011).

    Finalizando, o texto desta seo pode parecer auto-ajuda. E mesmo! Aproveite!

  • 9

    1.3 Programao como ferramenta de aprendizado

    Se sempre te disseram que estatstica algo difcil e no tem experincia com programao, voc

    dever achar estranho eu afirmar que programao uma excelente ferramenta para aprender

    estatstica ou anlise de dados. Pois . Trabalho com R desde 2004 e isto foi uma das coisas mais

    bacanas que percebi ao longo desta dcada de trabalho. O motivo disto bastante simples.

    Caso no tenha um treinamento formal com cincias exatas, voc provavelmente vai olhar para

    um problema (uma anlise) e tentar resolv-lo sem qualquer estratgia. Vai ser difcil. Isto pois

    existem vrias informaes que precisam ser reunidas, passos intermedirios que precisam ser

    entendidos, resultados de passos intermedirios que no so bvios, detalhes analticos especficos que

    nunca vimos etc. Olhar para o problema (ou anlise) como um todo vai parecer Grego. Voc

    reconhecer uma letra ou outra, mas no deixar de ser Grego.

    A programao ajuda no sentido de prover mtodos para resolvermos um problema ou

    entender uma anlise: i) temos que reunir os ingredientes (ou informaes) necessrios; ii) identificar

    (dar nomes) os ingredientes necessrios; iii) decompor nosso problema em partes e iv) colocar estas

    partes em sequncia lgica. Quando fazemos nossos programas, estes passos acabam aparecendo de

    forma natural. Com o tempo, voc vai ach-los bvios.

    Linguagens tipo script, como o R, ainda proveem auxlio de outra forma. Podemos testar cada

    passo de nosso programa de forma automtica, interativa. Muitas vezes no vale a pena ficar perdendo

    tempo procurando informaes para ver se algo funciona assim ou assado. Faa e veja. muito rpido.

    Em geral basta um ENTER. Isto possibilita testar partes do seu programa e ver se esto fazendo o que

    deveriam fazer.

    Neste livro usaremos vrias anlises tradicionais em Ecologia, particularmente sobre

    Diversidade Biolgica (meu vis...). Espero que anlises aparentemente difceis se revelem triviais

    aps voc ter escrito um programa para calcul-las.

    1.4 O ambiente R

    O R tanto um programa estatstico quanto um ambiente de programao. Voc pode us-lo para

    executar uma anlise j disponvel ou programar uma. Em relao execuo de anlises, ele

    atualmente o mais completo de todos. Na maioria das vezes, a pergunta adequada no se o R faz algo

    (sim, ele faz), mas onde encontrar. Para a ltima, o Google uma grande ajuda.

    Trabalhamos no R usando linhas de comando. Para quem nasceu depois de 1975, isto um

  • 10

    tanto estranho pois "j nasceram" na era dos cliques. Os mais experientes (eufemismo para velhos)

    certamente lembram do MS-DOS e dos programas baseados em linhas de comando. Posto deste jeito,

    voc pode pensar sobre a razo de usarmos algo do passado. Na verdade, trabalhar com linhas de

    comando nunca desapareceu. Os profissionais da Cincia da Computao geralmente usam sistemas

    operacionais baseados em linhas de comando. Mas qual a razo de ns, simples mortais, usarmos

    linhas de comando? Amplitude de possibilidades e eficincia.

    Num programa com janelas temos um limite para o nmero de opes disponveis. Chega um

    ponto em que perdemos muito tempo procurando as coisas. Este problema simplesmente no existe

    com linhas de comandos. Basta dar um nome novo. Em relao eficincia, podemos executar anlises

    muito rapidamente, desde, claro, que voc conhea os comandos. Depois de apanhar um pouco no

    incio e passar a ter certa familiaridade, voc vai achar uma grande vantagem trabalhar com linhas de

    comandos. De fato, usurios de R acabam se tornando discpulos de uma religio. Eles no conseguem

    entender como algum consegue no trabalhar com R... Mais importante ainda no caso do R, voc

    poder escrever anlises ou rotinas de anlises para automatizar tarefas repetitivas. Este livro trata

    deste ltimo tipo de atividade.

    O R descende do S. A linguagem S surgiu na dcada de 1970 e tinha como objetivo principal ser

    uma linguagem para anlise de dados (Chambers 1998). A linguagem foi implementada num ambiente

    de programao chamado S+, programa comercial ainda disponvel (mas com outro nome). A

    linguagem S atraiu muitos usurios e foi fortemente ampliada com pacotes (ou bibliotecas) para

    anlises especficas de diversas reas do conhecimento. Na dcada de 1990, Ross Ihaka e Robert

    Gentleman (University of Auckland, Nova Zelndia) iniciaram o desenvolvimento de um ambiente de

    programao para ser usado em aulas. Este ambiente era baseado em S e foi chamado de R (inicial dos

    nomes dos autores). Com o passar do tempo, o projeto cresceu e foi adotado por outros pesquisadores.

    No final da dcada de 1990 os autores decidiram abrir o desenvolvimento do ambiente para um seleto

    grupo de desenvolvedores. Uma verso estvel e relativamente completa ficou disponvel em 2000. A

    partir de ento, o nmero de usurios cresceu exponencialmente. Este sucesso deve-se, em parte, pelo

    fato do R ser software livre e conter milhares de pacotes que ampliam de forma incrvel seu leque de

    opes de anlises.

    1.5 Filosofia de programao em R: rpida e confivel

    A ideia de programao no R que ela seja implementada de forma rpida, mas correta. Nas palavras

    de um dos criadores da linguagem S, basicamente a mesma usada no R, 'To turn ideas into software,

  • 11

    quickly and faithfully' (Chambers 1998). Em relao a linguagens de programao tradicionais (por ex.

    C, C++), programar no R muito fcil. Primeiro, voc no precisa se preocupar com uma srie de

    detalhes. Voc pode ir direto ao ponto sem perder muito tempo com detalhes perifricos. A segunda

    facilidade que j existem centenas de milhares de comandos (ou melhor, funes) j implementadas.

    Voc no ter que sair do zero. Voc simplesmente combinar as funes j disponveis para alcanar

    seu objetivo. Quase um quebra-cabea. Mas existem alguns porns: em relao a programas feitos com

    linguagens compiladas (por ex. C++), o R muito lento. Este 'muito lento' pode significar tempo de

    processamento 20 vezes maior em R. Esta lentido no relevante em 99% das situaes, mas acaba

    sendo um problema com conjuntos de dados muito grandes e anlises que demandam muito

    processamento.

    1.6 Opo do autor: simplicidade

    Este livro fortemente baseado na minha experincia docente. Durante muitos anos montei cursos

    com uma estrutura um tanto tradicional. Eu explicava nas primeiras aulas uma longa lista de

    comandos (ou melhor, funes) bsicos. Estas aulas refletiam bem os captulos iniciais da maioria dos

    livros de estatstica ou programao em R. O objetivo principal destas aulas iniciais era prover uma

    lista de funes (um vocabulrio) e alguma noo de como usar e combinar estas funes. Eu

    costumava dizer que esta lista compunha mais de 70% do que veramos na disciplina. O restante do

    curso, portanto, seria focado no aprofundamento do uso destas funes bsicas.

    Este formato tradicional funcionava relativamente bem para parte dos alunos, que com 2-3

    aulas j conseguiam ter domnio razovel das funes mais comuns e partir para coisas mais

    interessantes. O problema que parcela considervel da turma acabava levando mais tempo para

    absorver este novo vocabulrio. Isto gerava alguns problemas nas partes finais do curso. Enquanto

    parte dos alunos j estavam voando, outros estavam comeando a entender para que asas servem.

    Com o passar do tempo, passei a reduzir o vocabulrio. Por exemplo, deixei de falar das cinco

    ou mais formas de importar dados. Passei a falar e usar apenas uma. Outra coisa fundamental foi falar

    menos e fazer mais exerccios. Sobre os exerccios, passei a dar maior ateno ao nvel de dificuldade.

    Muito do que obvio para o professor no para o aluno. OK, sei que isto obvio, mas de vez em

    quando esquecemos isto.

    Como resultado destas experincias docentes anteriores, este livro possui formato um pouco

    distinto em relao a vrias apostilas e livros disponveis. Alguns leitores com um pouco mais de

    familiaridade com o R vo se perguntar a razo de numa determinada passagem no se usar a funo

    X que poderia substituir facilmente 3-4 linhas de cdigo. Vo notar que escrevi em cinco linhas algo

  • 12

    que poderia ter escrito em apenas uma. Ainda, vo notar que eu simplesmente no menciono algumas

    funes de uso frequente e presentes em livros introdutrios. Por outro lado, com apenas 15 funes

    bem simples faremos vrias funes para objetivos bem diversos (ver Captulo 5).

    Estas coisas estranhas foram propositais. Espero que este livro cumpra seu papel junto a

    usurios sem qualquer experincia de R ou programao. Espero que estes leitores sejam atrados e

    no repelidos.

  • 13

    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    2 Primeiros passos no R: I ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    2.1 Interface grfica

    Podemos trabalhar diretamente no R (obtenha gratuitamente em um stio espelho no Brasil, por

    exemplo, http://cran-r.c3sl.ufpr.br/) ou usando outra interface grfica (GUI, Graphical User

    Interface). Existem vrias opes para os diferentes sistemas operacionais disponveis. No momento

    em que escrevo este livro, uma das mais interessantes parece ser o RStudio, que est disponvel

    gratuitamente para Linux, Windows e Mac (http://www.rstudio.com/). O RStudio parece ser um

    pouco mais amigvel para iniciantes do que a interface bsica do R. Voc precisa instalar o R antes

    para que o RStudio funcione.

    2.2 rea de trabalho

    O R trabalha com um arquivo chamado de rea de trabalho (workspace), onde armazenamos todos

    nossos 'dados'. Coloquei a palavra entre aspas pois veremos que isto pode significar vrias coisas. O

    arquivo normalmente gravado sem nome e com extenso .RData. Um segundo arquivo gravado

    automaticamente, geralmente sem nome e com extenso .Rhistory. Este arquivo guardar tudo o que

    voc digitar (mas no os resultados) e pode ser aberto com um editor de texto simples (e.g. Bloco de

    notas no Windows, gedit no Linux). Em distribuies Linux, caso grave o arquivo .RData e no consiga

    ver na pasta, escolha no menu a opo 'ver arquivos ocultos' (ou Ctrl+h ou Alt+.).

    Quando voc abrir o R (veja instrues para RStudio abaixo) ele automaticamente carregar

    um arquivo .RData que est no diretrio onde voc instalou o R (no Windows) ou na raiz dos seus

    arquivos pessoais (Linux). No um bom lugar para guardar seus arquivos pessoais. Portanto, procure

    no menu a opo "Salvar rea de trabalho". Grave numa pasta onde pretenda arm azenar todos

    arquivos para acompanhar este livro. Aps gravar, feche o programa. Ele perguntar se quer salvar a

    rea de trabalho. Diga que no (pois acabou de salvar). V com seu gerenciador de arquivos no

    diretrio onde gravou o .RData e clique com o boto do mouse direito. Escolha opo de abrir com o R.

    O arquivo .RData em uso este que voc criou. claro que voc pode abrir um arquivo .RData pelo

    menu, mas muitas vezes esquecemos de fazer isto no incio da sesso e acabamos gerando confuso.

    Abra o R sempre pelo arquivo que quer editar. Esquea o cone na sua rea de trabalho ou menu de

    programas. O R pergunta se quer salvar quando for fechar o programa. Diga que sim e ele vai gravar

    exatamente neste arquivo que abriu.

  • 14

    Com o RStudio, escolha a opo 'Session' no menu e depois 'Save Workspace As'. Selecione o

    diretrio onde quer gravar. Feche o programa. Caso pergunte se quer gravar, diga que no (pois

    acabou de gravar). Assim como no uso do R direto, v no diretrio onde gravou o arquivo .RData e

    clique com o boto direito e escolha opo abrir com RStudio. Ele vai carregar o que existe neste

    arquivo e gravar novos 'dados' dentro deste arquivo.

    Geralmente usamos uma rea de trabalho para cada projeto que temos. Por exemplo, voc pode

    abrir um diretrio no seu computador ou num pen-drive e gravar um arquivo .RData para este livro ou

    curso (o .Rhistory gravado automaticamente). Neste diretrio, adicione arquivos de dados ou outros

    relevantes ao seu projeto. Em particular, interessante gravar um arquivo de texto contendo os

    comandos e comentrios de trabalho no R. Chamamos este arquivo de script. Vamos falar dele no

    prximo captulo.

    2.3 Uso como calculadora

    Abra o R com o arquivo .RData que vai usar para acompanhar este livro. Vamos ver como funciona.

    Caso esteja com o RStudio, clique no espao onde o R foi aberto. fundamental acompanhar os

    comandos abaixo com o programa.

    O R pode ser usado muito facilmente como uma calculadora. Digite: > 2+2

    Clique ENTER e aparecer: [1] 4

    Note que na linha em que digitou 2+2 existe um smbolo de maior '>'. o R te dizendo que voc

    pode digitar. O "[1]" simplesmente indica que o primeiro nmero da linha est na posio 1. Aqui esta

    informao no to til visto que s temos um nmero. Agora tente outras possibilidades e veja o

    resultado (o smbolo '>' ser omitido no resto do texto por simplicidade):

    2-2

    2/2

    2*2

    2^2

    3^3

    Muitas vezes esquecemos de completar um comando e apertamos Enter. Nestes casos, o R fica

    esperando informaes para completar a ao. Para mostrar isto, o smbolo de maior substitudo por

  • 15

    um smbolo de adio '+'. Por exemplo:

    > 3*

    +

    Neste caso, basta completar com um nmero e apertar Enter para efetuar a multiplicao. Isto

    tambm acontece quando abrimos e no fechamos parnteses, colchetes e chaves. Vamos ver como

    usar estes smbolos nas prximas sees e captulos.

    2.4 Uso geral: maria( )

    Cerca de 99% do uso do R feito por comandos, ou para ser mais especfico, funes. Cada funo faz

    uma determinada operao. Por exemplo:

    log(x=8, base=2)

    [1] 3

    A funo log(), como o prprio nome diz, calcula logaritmos. Cada funo obrigatoriamente

    seguida de parnteses, onde colocamos os argumentos da funo separados por vrgulas. Argumentos

    so as informaes que passamos para a funo para indicar o que queremos fazer. Cada funo pode

    ter de zero a dezenas de argumentos. No exemplo acima, temos um argumento "x" que o valor(es)

    do(s) qual(is) queremos tirar o logaritmo. O argumento "base" indica qual base do logaritmo usar.

    Portanto, podemos ter:

    log(x=100, base=10)

    [1] 2

    O R pode executar a funo mesmo que voc no escreva o nome do argumento. Neste caso, o

    R interpreta que os argumentos dados seguem a ordem utilizada na funo:

    log(100, 10)

    [1] 2

    Muitas funes possuem opes padres (default) para alguns de seus argumentos. No caso da

    funo log(), no temos como no incluir o argumento "x". Temos que tirar log de algum nmero!

    Entretanto, no precisamos incluir o argumento que indica a base do logaritmo:

    log(10)

    [1] 2.302585

    Qual base foi usada? Como saberei os argumentos disponveis para cada funo ou mesmo a

    ordem destes argumentos? Podemos obter estas informaes no arquivo de ajuda.

  • 16

    2.5 Ajuda

    Cada funo possui um arquivo de ajuda, onde podemos saber a ordem dos argumentos na funo, o

    que cada argumento e uma srie de outras informaes. Para abrir uma pgina de ajuda, basta

    digitar um ponto de interrogao antes do nome da funo:

    ?log

    Todas pginas de ajuda possuem a mesma estrutura. Examine a pgina da funo log(). Note

    que na seo "Usage" a funo log() possui como opo padro do argumento "base" a expresso

    exp(1). Ou seja, caso no inclua o argumento "base" na funo log(), exp(1) ser usada. Note que

    exp(1) parece ser uma funo e, de fato, :

    exp(1)

    [1] 2.718282

    Esta a constante de Euler. exp(x) uma funo para calcular e^x, onde e = constante de

    Euler e x = expoente da constante. No caso de exp(1), estamos elevando "e" a 1, que o prprio valor

    de "e".

    Diferente de outros programas, usamos muito as pginas de ajuda. Visto estas pginas estarem

    em formato html, voc pode navegar pelas pginas de ajuda. No menu do RStudio, use a opo de

    'Ajuda' e depois a opo 'Ajuda do R' para acessar a pgina inicial em html e vrios arquivos PDF de

    uso bsico e avanado.

    Tambm podemos procurar palavras nos ttulos das pginas de ajuda com dois pontos de

    interrogao:

    ??logarithm

    2.6 Atribuio (assign)

    Vimos acima que o resultado da funo log() apareceu na tela. Podemos guardar este resultado para

    uso posterior. Isto feito atribuindo um nome ao resultado ou, mais especificamente, ao objeto

    produzido pela funo log(). Fazemos isto com uma 'seta' (smbolos de menor e hfen; com ou sem

    espaos antes do smbolo de menor e depois do hfen). Por exemplo:

    marcos

  • 17

    Note que o resultado no sai na tela. Entretanto, voc pode obt-lo simplesmente digitando:

    marcos

    [1] 2

    Aqui criamos um objeto chamado marcos que contm o valor 2. Podemos usar este objeto em

    outras operaes:

    marcos*5

    [1] 10

    2.7 Meia dzia de funes bsicas

    Vamos praticar um pouco o uso do R com 6 funes bem bsicas. Muitas vezes precisamos juntar

    'coisas', na maioria das vezes, nmeros. A funo para isto :

    a

  • 18

    funes: uso geral uso de: parnteses argumentos, separao de argumentos com vrgula uso de ordem dos argumentos em vez dos nomes dos argumentos argumentos padro (ou default) atribuio operaes bsicas: +; -; /; *; ^ log()

    exp()

    ? ??

    c() sum()

    length()

    mean()

    sqrt()

  • 19

    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    3 Primeiros passos no R: II ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    3.1 script (arquivo de roteiro)

    Podemos trabalhar no R digitando diretamente em seu console (o espao que recebe o que voc digita).

    Entretanto, o uso de scripts muito til e ser incentivado neste livro. O script simplesmente um

    arquivo de texto simples onde escrevemos tudo o que queremos fazer. Ele pode ter comandos para

    funes, comentrios ou texto simples. O prprio R pode abrir um script e dentro deste pode-se

    mandar um comando para o console simplesmente com Ctrl+R (Ctrl+ENTER para RStudio ou

    Command+ENTER para Mac). Desta forma, podemos trabalhar apenas no script e, quando necessrio,

    mandar algo para o R executar. Outras interfaces grficas (ou GUI = Graphical User Interface), como

    o RStudio, tambm possibilitam o uso de scripts. Para abrir um script no R ou RStudio basta usar o

    menu Arquivo (ou File). comum usar a extenso .R para gravar arquivos de script do R no

    computador.

    Algumas pessoas praticamente no armazenam nada alm do conjunto de dados bsico no

    arquivo .RData. Quando precisam refazer algo, simplesmente mandam os comandos j escritos no

    script para o console e rapidamente conseguem tudo o que precisam. uma forma de ter sua rea de

    trabalho com poucos objetos.

    Quando fazemos um trabalho cientfico, muito comum fazermos uma srie de anlises,

    algumas simplesmente equivocadas, outras no importantes e outras que acabam indo para o

    manuscrito. O script um excelente local para documentar toda esta histria, tanto do que deu certo

    quanto do que deu errado. Quando o manuscrito volta da revista, aps 2-4 meses, bastante comum

    ter que refazer alguma anlise. Caso tenha feito um bom script, isto ser muito fcil. Muitas vezes,

    bastar mudar uma ou outra funo ou ainda um ou outro argumento de uma funo.

    O R interpreta sua linha de comandos at encontrar um smbolo de jogo-da-velha "#". Este

    smbolo usado para inserir comentrios:

    log(100, 10) # aqui estamos tirando o log de 100 na base 10.

    Comentrios so muito importantes para registrar o que estamos fazendo, o que deu certo, o

    motivo de fazer isto e no aquilo etc. Muito do cdigo de comandos que voc escreve hoje vai virar

    grego na semana que vem, principalmente na fase inicial de uso do R. Caso tenha colocado

    comentrios, uma reviso posterior ser grandemente facilitada. Use a vontade para acompanhar este

  • 20

    livro.

    No captulo 2 havia dito que interessante ter um arquivo de rea de trabalho (.RData) por

    projeto, e um diretrio no seu computador para este projeto. Alm disto, sugiro ter um arquivo de

    texto para o script, com extenso .R, neste mesmo diretrio. Para acompanhar este livro, sugiro que

    use apenas um arquivo de script e uma rea de trabalho. Use o arquivo de exerccios que acompanha

    esta apostila. No script, anote todos seus comentrios e dvidas. Para deixar mais organizado, voc

    pode fazer cabealhos do tipo:

    ############## Captulo 2 ##############

    Isto facilita bastante a navegao pelo arquivo e ajuda no encontro de funes ou comentrios

    feitos anteriormente. A partir do prximo captulo criaremos algumas funes. Seria bom guard-las

    num nico local (no se esquea de fazer cpias de segurana deste arquivo).

    3.2 Objetos: vector e duas funes relacionadas

    Tudo dentro do R so objetos. Precisamos conhecer estes tipos de objetos pois algumas funes so

    especficas quanto ao tipo de objeto que usam. Vamos iniciar com vector. De maneira bem simplista,

    um conjunto de nmeros ou caracteres. Quando criamos o objeto abaixo, estamos criando um vetor

    de comprimento 1.

    a

  • 21

    ls()# note que eles tambm esto listados na janela superior direita do RStudio.

    Caso queira remover algum deles:

    rm(a) # caso tenha o objeto 'a' na sua rea de trabalho.

    3.4 Pacotes

    As funes do R esto organizadas dentro de pacotes. Cada pacote pode ter de uma a centenas de

    funes. Quando instalamos o R tambm estamos instalando alguns pacotes de uso generalizado.

    Alm destes, entretanto, podemos instalar pacotes disponveis no stio eletrnico do R. Existem alguns

    milhares de pacotes, muitos para coisas que voc nem imagina. Na prtica, baixamos pacotes

    conforme nossa necessidade. Para quem trabalha com Ecologia de Comunidades, um pacote

    fundamental o "vegan". Na rea de Filogenia de Comunidades, muitas funes de interesse podem

    ser encontradas nos pacotes "ape" e "picante".

    Para instalar um pacote num computador que esteja na internet basta acessar o menu 'Pacotes'

    e escolher a opo de instalar pacotes. No Rstudio veja a aba 'Packages' na janela que normalmente

    fica no canto inferior direito. O R abrir uma janela para voc escolher o repositrio de onde quer

    baixar. Existem vrios ao redor do mundo e todos possuem exatamente os mesmos arquivos. Escolha o

    mais prximo de voc. Uma segunda janela aberta com a lista de pacotes. Basta selecionar um deles e

    o prprio R baixa e instala. Note que um pacote instalado desta forma no estar disponvel

    automaticamente. Para usar, precisamos carregar o pacote. A possibilidade mais simples clicando na

    caixinha do pacote desejado (janela a direita embaixo do RStudio).

    Voc precisar instalar um pacote apenas uma vez, mas precisar carregar o pacote cada vez

    que iniciar uma sesso do R. Os pacotes de uso generalizado do R j so carregados automaticamente

    quando voc inicia uma sesso do R. Para ver descries dos pacotes do R, acesse: http://cran.r-

    project.org/web/packages/available_packages_by_name.html. Os pacotes instalados no seu

    computador so aqueles relacionado na janela a direita embaixo do RStudio.

    Qualquer pessoa pode fazer um pacote para o R e submeter ao CRAN (o stio eletrnico onde os

    pacotes so armazenados). Isto uma das coisas que fez o R bastante popular. A comunidade de

    pesquisadores no precisa esperar que uma empresa implemente uma dada anlise em seu programa.

    A comunidade de pesquisadores pode assumir isto e fazer de maneira bem rpida. Cada pacote possui

    um ou mais pesquisadores responsveis por sua manuteno. Visto ser software livre, o uso ou mal

    uso por sua conta.

  • 22

    3.5 Lista acumulada de conceitos e funes usadas

    Conceitos e funes vistos pela primeira vez neste captulo esto em negrito.

    rea de trabalho, .RData e .Rhistory funes: uso geral uso de: parnteses argumentos, separao de argumentos com vrgula uso de ordem dos argumentos em vez dos nomes dos argumentos argumentos padro (ou default) atribuio script comentrios objetos: vector

    pacotes

    operaes bsicas: +; -; /; *; ^ log()

    exp() ?

    ??

    c() sum()

    length() mean()

    sqrt()

    ls(); rm()

  • 23

    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    4 Seus primeiros programas no R ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    4.1 Uma funo para fazer funes

    Vimos at agora uma dzia de funes e os operadores aritmticos bsicos. Pouco, mas suficiente

    para j programarmos vrias funes! Vamos ilustrar o procedimento fazendo uma funo para o

    ndice de Diversidade de Simpson. ndices de diversidade combinam informaes de riqueza de

    espcies e equabilidade. Maior o nmero de espcies, maior o valor do ndice. Maior a semelhana na

    abundncia (ou outra medida de importncia), maior o valor do ndice. A formula 1-D ou 1/D, onde

    D = pi2, onde pi a proporo da abundncia total representada por indivduos da espcie i.

    Uma funo um objeto do R. Vimos no captulo anterior o objeto vector. Funo o

    segundo tipo que vemos neste livro. Criamos uma funo com a funo function(). Vamos fazer a

    funo usando a forma 1/D:

    f1.simp

  • 24

    no se confundir, nomeie suas funes e outros objetos apenas com letras minsculas. Caso sejam

    duas palavras, una-as com ponto ou use a notacaoCamelo.

    { }: uma funo (ou programa) nada mais do que uma sequncia de instrues para o

    computador. Para que o R entenda que todas instrues fazem parte de uma mesma funo, usamos

    chaves '{ }'. Sempre feche a chave aps abri-la. Escreva entre as chaves. No deixe para fechar depois,

    pois vai esquecer. Idem para parnteses. Note que no RStudio e outros editores o fechamento

    automtico e isto evita muitos erros quando estamos iniciando no R.

    argumento: nossa funo possui um nico argumento, que chamamos de 'abund'. Um ndice

    de diversidade precisa de um vetor com abundncias das espcies. Este argumento serve para isto. a

    forma do usurio enviar uma informao para a funo. Note que esta informao usada dentro da

    funo (linhas 2 e 3). Note tambm que seu objeto com dados no precisa chamar 'abund'. Isto o

    nome do argumento (assim como 'x' e 'base' quando vimos a funo log()). No importa o nome

    que use para seus dados, ele ser passado para o interior da funo como 'abund'.

    corpo: conforme dito acima, uma funo nada mais do que uma sequncia de instrues

    para o computador. Esta sequncia segue uma lgica. Por exemplo, no podemos inverter a linha 6

    com a 2. No temos como calcular D na linha 2 pois precisamos de outras informaes que ainda no

    esto disponveis. Portanto, geralmente iniciamos obtendo os 'ingredientes' ou informaes bsicas

    necessrias para outras partes da funo.

    sada: os argumentos so formas de entrada de informaes. Servem para instruir a funo

    como se comportar. Precisamos do resultado final, a sada. Fazemos isto com a funo return().

    Voc notar que nada do que criado dentro da funo (por ex. 'total', 'prop.i', 'prop.i.2' na

    funo f1.simp()) fica disponvel para o usurio. Usamos o return() para enviar para o usurio o

    que interessa. Na funo f1.simp(), apenas um valor, chamado de 'indice' enviado para o

    usurio.

    No interessante escrever funes diretamente no R. Geralmente usamos editores de texto,

    como aquele disponvel no RStudio. Isto pois precisamos testar passos intermedirios para ver se

    fazem o que queremos. Se voc abre uma chave no R diretamente, ele s mostrar o resultado quando

    ela for fechada. Isto inviabiliza o teste de um passo em particular. Escreva a funo acima num arquivo

    (pode ser o script fornecido com esta apostila). Mande para o R com Ctrl+R (se usar no R) ou

    Ctrl+Enter (RStudio).

    Agora podemos usar ou 'rodar' a funo. Suponha que Adorinda coletou uma parcela numa

    mata no Paran e encontrou 4 espcies de serpentes com estas abundncias:

    mata.parana

  • 25

    Podemos usar nossa funo para calcular o ndice de diversidade de Simpson para a mata:

    f1.simp(abund=mata.parana)

    [1] 2.987654

    Note que nossa funo no serve apenas para a mata do Paran. Ela serve para qualquer

    conjunto de dados que atenda algumas restries. Por exemplo, os clculos da funo necessitam de

    um vetor e, portanto, nossos dados devem ser um vetor. Conseguimos fazer com que nossa funo

    possa ser usada para outros conjuntos de dados pois no inserimos no corpo do seu cdigo

    informaes especficas de um conjunto de dados. Por exemplo, precisamos da soma dos valores para

    posteriormente calcularmos as propores. No colocamos este valor de soma dentro do corpo da

    funo. Calculamos este valor dentro do corpo da funo. Colocar valores de um dado conjunto de

    dados dentro de uma funo um erro comum (no caia nele!).

    O exemplo que vimos resume muito, mas muito mesmo, da criao de funes dentro do R.

    Passe um tempo trabalhando com a funo. Tenha certeza que entendeu tudo, mas tudo mesmo.

    4.3 Exerccio resolvido. f2.correl(): Coeficiente de correlao de Pearson

    provvel que voc j tenha visto ou mesmo calculado o coeficiente de correlao de Pearson. Ele

    serve para avaliar o quanto duas variveis quantitativas esto associadas. O coeficiente varia de -1 a 1.

    Valores prximos de 1 indicam que quando uma varivel aumenta a outra tambm aumenta. Valores

    prximos de -1 indicam que quando uma varivel aumenta a outra diminui. Quanto mais prximo de 1

    ou -1, mais forte esta relao. Valores, positivos ou negativos, prximos de 0 indicam ausncia de

    associao. A frmula do coeficiente pode parecer complicada primeira vista.

    No .

    Xi e Y i = valores i das variveis X e Y .

    X e Y com barras = mdias de X e Y .

    Podemos fazer algo bastante til para iniciarmos, um pseudo-cdigo. Um cdigo em palavras e

    no em funes. Ou seja, nos preocupamos inicialmente com a lgica da resoluo. Depois nos

    preocupamos com as funes que fazem cada passo.

  • 26

    #1 dar nome e criar funo. Abrir chaves.

    #2 reunir 'ingredientes'. O primeiro poderia ser a mdia de x.

    #3 o segundo poderia ser a mdia de y.

    #4 diferenas de cada xi em relao mdia de x.

    #5 idem acima, mas para y.

    #6 multiplicar os dois termos dentro de parnteses no numerador.

    #7 somar valores obtidos no passo anterior. Isto o numerador.

    #8 j temos as diferenas de x em relao mdia (passo 4). Elevar ao quadrado.

    #9 somar valores obtidos no passo anterior.

    #10 idem passo 8, mas para y.

    #11 idem passo 9, mas para y.

    #12 multiplicar as somas obtidas em 9 e 11.

    #13 tirar raiz quadrada do passo anterior. J temos o denominador.

    #14 calcular o coeficiente r.

    #15 enviar o coeficiente para o usurio.

    Veja os passos de nosso pseudo-cdigo acima. Quais funes precisaremos? Estas:

    function(); mean(); sum(); sqrt(); return() e as operaes aritmticas bsicas: -; *; /; ^

    Vamos completar a segunda fase, fazer a funo:

    f2.correl

  • 27

    return(r) #15 enviar o coeficiente para o usurio.

    } #16 fecha funo

    Agora mandamos todo o cdigo para o R. Caso receba uma mensagem de erro, leia a prxima

    seo.

    Suponha que Albina queira avaliar a associao entre riqueza de anfbios e tamanho da

    populao humana. Ela obteve 8 quadrculas de 1o latitude x 1o longitude no Cerrado e em cada uma

    obteve a riqueza de espcies de anfbios e o tamanho da populao humana (vejo que estamos

    avaliando uma associao e no inferindo causa-e-efeito; veja Arajo [2003] para um estudo real deste

    assunto). Existe associao entre riqueza de anfbios e populao humana no Cerrado?

    riq.anfibios

  • 28

    Ingls, mas to usada que nem vou colocar aspas...) nossa funo. Se tiver, novamente, veja o erro

    mostrado e tente consertar. Erros comuns aqui so: i) uso de funes no disponveis (por ex. funes

    em pacotes no carregados), ii) grava objeto com um nome, mas usa com outro nome abaixo e iii)

    operaes no permitidas (por ex. divide Y por X, mas um elemento de X zero).

    As duas fases acima em geral so tranquilas. A terceira fase a mais complicada. quando o R

    roda sua funo e no te d nenhuma mensagem de erro. Aqui, o problema saber se fizemos a coisa

    certa. Na seo anterior, Albina obteve o valor de 0,578 com a funo f2.correl(). O fato do R no

    apontar erros indica que no existem erros na ortografia e gramtica. No quer dizer que o significado

    esteja correto. Podemos ter feito uma operao matemtica vlida, mas diferente do que deveramos

    fazer. Achar estes erros pode ser um pouco mais complicado, em particular em situaes onde a funo

    funciona corretamente (produz valor correto) com alguns conjuntos de dados, mas no com outros.

    Para erros nas duas primeiras fases, uma soluo simples mas um pouco trabalhosa rodar

    cada linha do seu cdigo separadamente e em cada uma conferir o objeto produzido. Ele est de

    acordo com o que voc espera?

    Para erros na terceira fase, quando o R no aponta erros e produz um resultado, podemos

    comparar os resultados com algum programa confivel j disponvel. Para nossa funo

    f2.correl(), podemos usar:

    cor(riq.anfibios, pop.humana)

    [1] 0.5780908

    O mesmo resultado de nossa funo. Voc no tem 100% de certeza que ela est correta, mas j

    pode ficar mais feliz. Digo que no 100% de certeza pois podem aparecer erros com outros conjuntos

    de dados. por isto que disse acima que as duas primeiras fases eram mais tranquilas. Isto pois

    sabemos que erramos e podemos consertar nossos erros. E quando no sabe que existe um erro?

    tambm por isto que desenvolvedores geralmente mandam seus programas para usurios testarem

    antes de distriburem amplamente.

    4.5 Lista acumulada de conceitos e funes usadas

    Conceitos e funes vistos pela primeira vez neste captulo esto em negrito.

    rea de trabalho, .RData e .Rhistory funes: uso geral uso de: parnteses, chaves argumentos, separao de argumentos com vrgula uso de ordem dos argumentos em vez dos nomes dos argumentos

  • 29

    argumentos padro (ou default) atribuio script comentrios objetos: vector, function

    pacotes funes: estrutura, funes: pseudo-cdigo funes: trabalhando com erros

    operaes bsicas: +; -; /; *; ^ log()

    exp()

    ?

    ??

    c()

    sum() length()

    mean() sqrt()

    rep(); seq(); : ls(); rm() function(); return() cor()

    f1.simp() f2.correl()

  • 30

    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    5 Exerccios (quase) resolvidos ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    5.1 Como aprendemos programao?

    'Misso dada, parceiro, misso cumprida! Estamos entendidos?' Coronel Nascimento

    Programando! Fazendo exerccios, praticando. No tem outra forma. Estudantes da grande rea de

    cincias biolgicas esto acostumados a ler para estudar. Com exceo de alguns raros gnios, no

    funciona quando colocamos um nmero junto com uma letra. Temos que praticar com exerccios. Isto

    no uma descoberta minha... extremamente comum disciplinas na rea de exatas terem listas de

    exerccios em quase todas aulas. Voc at pode achar que entendeu a aula expositiva do professor, mas

    no conseguir fazer a prova se no fizer as listas de exerccios.

    At este momento vimos 15 funes e os operadores aritmticos bsicos. um nmero bem

    restrito. Entretanto, isto est de acordo com o que havia dito no captulo introdutrio. Apesar disto, j

    podemos fazer funes interessantes. Este captulo fundamental. Voc deve domin-lo bem antes de

    prosseguir.

    5.2 f3.dp(): Desvio padro de uma amostra

    Faa uma funo para calcular o desvio padro de uma amostra.

    DP = desvio padro;

    xi = valor da observao i;

    x-barra = mdia das observaes;

    n = nmero de observaes.

    f3.dp

  • 31

    # soma as diferenas ao quadrado (numerador)

    # obtm nmero de observaes (n)

    # calcula o denominador

    # faz a diviso

    # tira raiz quadrada

    # retorna resultado para usurio

    }

    Calcule o desvio padro para as abundncias das espcies na parcela obtida na mata do Paran

    por Adorinda:

    mata.parana

  • 32

    # some a multiplicao anterior

    # coloque o sinal negativo e depois a soma obtida antes

    # devolva para o usurio

    }

    mata.parana

  • 33

    Ela tambm ficou curiosa para saber os valores com a=0,9999 e a=2. Poderia calcular para ela?

    Respostas: (a=0) 4, (a=0,9999) 3,361711 e (a=2) 2,987654. Alguma semelhana com isto:

    length(mata.parana)

    shannon.parana

  • 34

    S = Total de espcies na regio e que podem colonizar uma dada ilha;

    xi = rea relativa (proporo em relao a rea total do arquiplago);

    nj = Abundncia total da espcie j no arquiplago.

    A funo dever ter como argumentos:

    areas: reas das ilhas;

    abunds: abundncias totais das espcies;

    area.i: rea da ilha i, ou seja, da ilha para a qual queremos estimar a riqueza.

    Crie a funo usando este pseudo-cdigo:

    f6.cole

  • 35

    k = nmero de tratamentos (2 no teste t);

    ni = nmero de observaes no tratamento i;

    yi j = cada uma das observaes;

    y-barra = mdia geral (observaes de todos tratamentos);

    yi-barra - mdia do tratamento i.

    Fazemos uma anlise de varincia decompondo a variao total em dois componentes, uma

    devido ao modelo de regresso e outra devido ao erro: SQT = SQR + SQE. SQ significa soma de

    quadrados. Dizemos 'modelo de regresso' pois sempre temos um modelo. No caso de uma regresso

    linear, este modelo uma reta. No caso de variveis explanatrias categricas (teste t, anova) o modelo

    , simplesmente, a mdia de cada tratamento.

    Note que voc obteve uma soma de quadrado quando voc programou a f3.dp(). Visto que

    tendo 2 valores conseguimos o terceiro, vamos calcular apenas SQT e SQE. Aps calcular SQT, SQE e

    SQR (por diferena dos outros dois), precisamos calcular os quadrados mdios (que nada mais so do

    que varincias): QMR e QME, respectivamente quadrado mdio do modelo de regresso e do erro.

    Para tanto, basta dividir cada soma de quadrados por seu grau de liberdade. Na frmula da varincia

    de uma amostra, o valor n-1. No caso da SQR para um teste t, o grau de liberdade sempre ser 1 e

    para o SQE ser n-2 (Tab. 5.1).

    Tabela 5.1 Tabela de Anlise de Varincia.

    Fonte Som a de quadrados Graus de liberdade Quadrados m dios F

    Regresso SQR 1 QMR=SQR/1 QMR/QME

    Resduo (erro) SQE n-2 QME=SQE/n-2

    Total SQT=SQR+SQE n-1

    Esta sugesto de pseudo-cdigo apenas lista os blocos fundamentais. Use quantas

    linhas achar necessrio para obter cada bloco:

    f7.F2

  • 36

    # obtenha a SQT.

    # obtenha a mdia do primeiro tratamento (y1).

    # obtenha a soma de SQE parcial para y1.

    # obtenha a mdia do segundo tratamento (y2).

    # obtenha a soma de SQE parcial para y2.

    # obtenha a SQE.

    # obtenha a SQR.

    # obtenha a QMR.

    # obtenha a QME (obtenha n dentro da funo).

    # obtenha F.

    # retorne F para usurio.

    }

    A professora Assunta estava interessada em saber qual de duas estratgias era mais efetiva para

    ensinar programao no R. A primeira estratgia foi aplicada a 8 alunos de uma turma e consistia em

    explicar 40 funes na primeira aula. As aulas subsequentes eram usadas para treinar o uso das

    funes. A segunda estratgia foi aplicada a 8 alunos de outra turma (mas semelhante primeira

    turma) e consistia em expor 10 funes na primeira aula, us-las em exerccios nas aulas seguintes e s

    nas aulas finais expor gradualmente as outras 30 funes. As notas dos alunos numa prova aplicada no

    final dos dois cursos foram:

    porrada

  • 37

    uso de ordem dos argumentos em vez dos nomes dos argumentos argumentos padro (ou default) atribuio script comentrios objetos: vector, function

    pacotes funes: estrutura funes: pseudo-cdigo funes: trabalhando com erros operaes bsicas: +; -; /; *; ^ log()

    exp()

    ?

    ??

    c() sum()

    length()

    mean()

    sqrt()

    rep(); seq(); : ls(); rm() function(); return() cor()

    f1.simp()

    f2.correl()

    f3.dp()

    f4.shannon()

    f5.hill()

    f6.cole()

    f7.F2()

  • 38

    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    6 Testes booleanos e avaliao de condies ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    6.1 Operadores relacionais, lgicos e funes relacionadas

    Testes booleanos so aqueles que oferecem respostas binrias, geralmente FALSE ou TRUE. Os

    operadores mais comuns para estes testes so:

    acacia 5

    [1] FALSE

    acacia < 5

    [1] TRUE

    acacia == 2

    [1] TRUE

    acacia > 2

    [1] FALSE

    acacia >= 2 # Note que o sinal de igualdade sempre vem depois.

    [1] TRUE

    acacia != 2 # Note que o sinal de igualdade sempre vem depois.

    [1] FALSE

    Note que o sinal "=" no faz uma comparao. Ele um substituto do comando para atribuir

    um nome a um objeto:

    adosinda = 3*3

    adosinda

    [1] 9

    O uso da flechinha "

  • 39

    us-la neste livro. O R opera sobre vetores. Portanto, podemos ampliar os operadores acima para

    vetores com comprimento maior que 1:

    acacia.seq 3

    [1] FALSE FALSE FALSE TRUE TRUE

    acacia.seq >= 3 # Note que o sinal de igualdade sempre vem depois.

    [1] FALSE FALSE TRUE TRUE TRUE

    acacia.seq 14

    [1] FALSE FALSE TRUE TRUE TRUE

    Tambm podemos usar estas funes para saber se pelo menos um ou todos elementos so

  • 40

    verdadeiros:

    acacia.seq

    [1] 1 2 3 4 5

    any(acacia.seq==2)

    [1] TRUE

    all(acacia.seq==2)

    [1] FALSE

    6.2 Coero de dados booleanos

    'Pede pra sair, seno vai sair debaixo de porrada!"

    (Capito Nascimento).

    Frequentemente precisamos transformar os resultados de testes booleanos em nmeros. A funo

    as.numeric() faz uma coero. Poderamos ler como 'seja numrico'. No R, por conveno, a

    coero de FALSE produz 0 e TRUE produz 1.

    acacia.seq

    [1] 1 2 3 4 5

    acacia.seq.resu 2

    acacia.seq.resu

    [1] FALSE FALSE TRUE TRUE TRUE

    as.numeric(acacia.seq.resu)

    [1] 0 0 1 1 1

    6.3 Avaliao de condies

    Muitas vezes precisamos aplicar uma dada operao em apenas algumas situaes especiais. Por

    exemplo, para uma funo que usa como argumento de entrada um vetor contendo apenas valores

    zero e um, podemos transformar todos valores acima de zero em um:

    aldara 0, yes=1, no=0)

    [1] 0 1 0 1

    Outra possibilidade manter o valor original caso no queiramos fazer qualquer mudana. Por

  • 41

    exemplo:

    aldara 2, 100, aldara)

    [1] 0 1 2 100

    A funo ifelse() uma forma abreviada de um sistema mais amplo de avaliao de

    condies. A funo geral if() e usada assim:

    acacia

  • 42

    Note que o uso do else um pouco diferente. Ele no exatamente uma funo no sentido de

    no usarmos parnteses para ele. Ele usado para indicar o que fazer quando o teste lgico usado no

    if() FALSE.

    Note tambm que usamos chaves {} para a funo if(). J havamos usado chaves quando

    fizemos funes. De maneira geral, chaves servem para agrupar vrias linhas de comando. Uma ltima

    coisa no exemplo acima que em algumas linhas usamos espaos antes das aes. Em R, estes espaos

    no fazem diferena para o resultado das funes. Entretanto, eles so bastante teis para

    organizarmos nossas funes. No exemplo acima, sabemos que a funo print() est dentro das

    chaves do comando if(). Pode parecer um detalhe aqui, mas faz uma boa diferena quando temos

    vrias linhas de cdigo.

    6.4 Exerccio resolvido. f8.dissi.par.quali(): ndice de dissimilaridade de

    Sorensen ou Jaccard

    Nascemos com a mania de comparar. Comparamos coisas relativamente simples como preos. Neste

    caso, temos apenas uma varivel quantitativa e, portanto, as coisas so fceis. Ou os preos so iguais

    ou diferentes. Mas tambm comparamos coisas um pouco mais complexas, como dieta e aparncia das

    pessoas. Nestes ltimos, temos mais de uma varivel a comparar. Dieta no se resume a uma varivel

    (por ex. leite), mas muitas (leite, carne, cereais etc). algo multivariado. Idem para aparncia. Vrias

    reas da Cincia usam ndices de similaridade para expressar o quanto dois objetos so parecidos. Em

    nutrio, podemos comparar as dietas das pessoas e ver que par de pessoas possui dieta mais

    semelhante. Em ecologia de comunidades, podemos comparar reas em relao a espcies de plantas.

    Podemos comparar espcies de roedores em relao a fauna de parasitas.

    Antes de mais nada, fundamental ter claro o que objeto e o que so os descritores (ou

    variveis). Nos exemplos multivariados acima, os objetos eram pessoas, reas e espcies de roedores.

    Para estes objetos, usamos como descritores, respectivamente, itens da dieta, espcies de plantas e

    espcies de parasitas.

    ndices de similaridade geralmente variam entre 0 e 1. Para estes, podemos chamar seu

    complemento de dissimilaridade. Ou seja, dissimilaridade = (1 similaridade). Em ecologia de

    comunidades, as duas formas so usadas, embora anlises dentro do R geralmente usem

    dissimilaridades. Vamos usar dissimilaridades neste livro. O importante, entretanto, saber que tendo

    um temos o outro.

  • 43

    ndices de dissimilaridade podem usar dados qualitativos ou quantitativos. Dados qualitativos

    geralmente so expressos como 0 (descritor ausente) ou 1 (descritor presente). Entretanto, 0 e 1

    tambm podem ser usados para expressar dois estados diferentes de uma varivel. Em ecologia de

    comunidades, geralmente estamos querendo comparar reas em relao composio de espcies.

    Para simplificar, vamos usar apenas duas reas. Os dados geralmente tem este formato:

    reas sp1 sp2 sp3 sp4 sp5

    area.go 1 0 1 0 1

    area.rs 0 1 1 1 0

    area.go

  • 44

    feita separadamente, um argumento para cada objeto. Ainda ela ter a opo de calcular um ndice ou

    o outro.

    f8.dissi.par.quali

  • 45

    f9.ind.div

  • 46

    ??

    c() sum()

    length()

    mean() sqrt()

    rep(); seq(); : ls(); rm() function(); return() cor()

    as.numeric()

    ifelse(); if(); if() else abs()

    print()

    f7.F2()

    f8.dissi.par.quali()

    f9.ind.div()

    f10.nodf.par()

  • 47

    |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 7 Objetos: matrix, data.frame e list

    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    7.1 matrix e data.frame

    matrix: At este momento trabalhamos com dois tipos de objetos, function e vector.

    Podemos pensar em matrix como uma extenso de vector, onde temos duas dimenses. Estas

    dimenses so linhas e colunas. Podemos criar uma matrix com:

    matrix(data=1:10, nrow=2) # sequncia de 1 a 10 com 2 linhas e, portanto, 5 colunas.

    [,1] [,2] [,3] [,4] [,5]

    [1,] 1 3 5 7 9

    [2,] 2 4 6 8 10

    Note que a matrix foi preenchida 'por linhas'. Na ajuda voc pode ver que existe um argumento

    para preenchimento 'por colunas'. Note tambm que a matrix foi impressa na tela com nmeros e

    vrgulas entre colchetes. Vamos ver isto na prxima seo. Outra forma de construir uma matrix

    criar uma estrutura e depois preenche-la:

    a

  • 48

    1 1 3 5 7 9

    2 2 4 6 8 10

    Note que a forma de impresso na tela um pouco diferente de matrix. No local dos colchetes

    aparecem nomes como legendas das colunas e nmeros sem colchetes como legendas das linhas.

    A funo as.data.frame() faz uma coero. Vimos o que era coero no captulo anterior.

    No exemplo acima, o objeto a uma matrix e estamos forando-o para que se torne um data.frame.

    Em geral conseguimos. Podemos fazer o contrrio tambm:

    as.matrix(b)

    Esta ltima coero, de data.frame para matrix, em geral ser feita sem problemas se o

    data.frame possuir apenas nmeros ou caracteres. Estas funes abaixo servem tanto para matrix

    quanto para data.frame. No muito difcil entender o que fazem:

    nrow(a)

    ncol(a)

    rowSums(a)

    rowMeans(a)

    colSums(a)

    colMeans(a)

    7.2 Extraindo e gravando elementos de vector, matrix e data.frame

    Vimos no captulo 2 que podemos descobrir o comprimento (ou nmero de posies) de um vector

    com:

    a

  • 49

    [1] 10

    a[1:3] # retira elementos nas posies 1:3.

    [1] 3 10 7

    posicoes

  • 50

    [1] 1 3 5 7 9

    a[,1]

    [1] 1 2

    Nos exemplos acima, extramos uma linha e depois uma coluna. Em ambos os casos, o

    resultado um vector. Note que antes da vrgula sempre indicamos as posies das linhas. Depois da

    vrgula vm as posies das colunas. Nos exemplos acima, selecionamos uma linha OU uma coluna.

    Ou seja, indicamos apenas uma dimenso. Nestes casos, toda a linha ou coluna retirada. Podemos

    ser mais especficos:

    a[1, 3] # elemento na linha 1 e coluna 3

    [1] 5

    a[1, 2:4] # elementos na linha 1 e colunas 2 at 4.

    [1] 3 5 7

    maria

  • 51

    b

  • 52

    [1] 8

    [[2]]

    [,1] [,2] [,3] [,4] [,5]

    [1,] 1 3 5 7 9

    [2,] 2 4 6 8 10

    7.5 Nomes

    Geralmente muito til saber os nomes das colunas e linhas em um data.frame ou dos elementos de

    um list. Em menor grau, s vezes tambm precisamos disto para vector e matrix. O

    procedimento :

    a

  • 53

    a

    colnames(a)

  • 54

    riqueza de espcies observada numa amostra que este valor uma estimativa enviesada

    negativamente da comunidade. Primeiro, nunca podemos coletar mais espcies que existem. Segundo,

    qualquer pessoa com um pouco de experincia de campo sabe que quanto mais se coleta, mais espcies

    so encontradas. Com exceo de algumas comunidades muito pobres e ou com fcil deteco das

    espcies, sempre descobrimos espcies ainda no vistas (raras) conforme aumentamos nosso esforo

    amostral. Uma forma de tentar contornar este problema usar estimadores de riqueza (Colwell &

    Coddington 1994; mas veja Melo 2004). Um dos estimadores mais simples o Jackknife de primeira

    ordem. Ele calculado como Jack1 = Sobs + Q 1*((m-1)/m), onde:

    Sobs = nmero de espcies observadas na amostra;

    Q1 = nmero de espcies que apareceram em apenas 1 unidade amostral;

    m = nmero de unidades amostrais.

    Vamos fazer uma funo para calcular o Jackknife 1 a partir de uma matrix ou data.frame.

    As linhas sero unidades amostrais e as colunas sero as espcies. Por exemplo, os dados poderiam ser:

    campo[1,]

  • 55

    7.6.2 f12.chao1(): Estimador de riqueza Chao 1. O estimador Chao 1 semelhante ao

    Jackknife 1, mas com uma diferena bsica. No Jackknife, espcies raras so aquelas que apareceram

    em apenas 1 unidade amostral (Q 1). Quanto maior o Q1, maior ser a riqueza estimada. No Chao 1,

    espcies raras so aquelas que apareceram com apenas 1 ou 2 indivduos. Note que no Jackknife no

    importa com quantos indivduos uma espcie rara apareceu, desde que esteja presente em apenas 1

    unidade amostral. A formula Chao1 = Sobs + (F1 2/2*F2), onde:

    F1 = Nmero de espcies que apareceram com 1 indivduo;

    F2 = Nmero de espcies que apareceram com 2 indivduos.

    Complete:

    f12.chao1

  • 56

    #multiplique por Q2.

    # j consegue calcular o que est dentro dos colchetes.

    j2

  • 57

    cor()

    as.numeric()

    ifelse(); if(); if() else abs()

    print()

    matrix(); list() as.data.frame(); as.matrix() nrow(); ncol() rowSums(); rowMeans(); colSums(); colMeans() names(); rownames(); colnames()

  • 58

    |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 8 Amostragem e lao for()

    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    8.1 Amostragem

    Em alguns lugares do Brasil se usa a expresso 'fazer misria' para expressar algo espetacular ou

    surpreendente. Por exemplo, 'Lucrcio fez misria no jogo de futebol' significa que ele jogou muito

    bem, mais do que o esperado. Neste captulo vamos ver duas funes que 'fazem misria'. A primeira

    bastante simples e usada para amostrar elementos de um vetor de dados. O procedimento :

    avelina

  • 59

    O uso bsico do sample() simples assim. Existe um outro argumento que controla a

    probabilidade de cada elemento ser sorteado. No vamos us-lo aqui, mas pode ser interessante ver

    como funciona no arquivo de ajuda. E o 'fazer misria' que falei acima? O uso da funo simples. O

    interessante a ampla gama de situaes em que podemos us-la. Vamos ver alguns casos nas

    prximas sees. Um exemplo simples a aleatorizao de linhas de uma matrix ou data.frame:

    ana

  • 60

    for(i in maria){

    print(i)

    }

    [1] 6

    [1] 7

    [1] 1

    [1] 4

    Nos dois exemplos acima usamos o valor de i diretamente nas aes contidas dentro das

    chaves. Isto no necessrio:

    for(i in 1:10){

    print('no vou conversar sobre novelas durante aulas')

    }

    Nos trs exemplos acima usamos apenas a letra i para indicar a posio do vetor. Na verdade,

    podemos usar qualquer letra ou nome. Ainda, usamos apenas uma funo dentro das chaves, o

    print(). Entretanto, podemos usar qualquer funo ou grupo de funes:

    abunds

  • 61

    captulo, todos eles baseados nos conceitos expressos pelo cdigo acima.

    8.3 Exerccio resolvido. f14.correl.teste(): Teste de correlao por

    aleatorizao.

    Programamos no captulo 4 uma funo para calcular uma correlao de Pearson. Demos o nome de

    f2.correl(). Podemos agora testar por aleatorizao se um dado valor de correlao diferente do

    esperado ao acaso. O procedimento abaixo muito semelhante a qualquer teste por aleatorizao.

    Caso consiga entender este, saiba que j entendeu 90% de todos testes de aleatorizao!

    Todos testes de aleatorizao so compostos basicamente por 6 etapas:

    1) Escolha a estatstica do teste;

    2) Calcule a estatstica para os dados observados;

    3) Aleatorize os dados;

    4) Calcule a estatstica para os dados aleatorizados;

    5) Repita as etapas 3 e 4 muitas vezes (por exemplo, 9999 vezes);

    6) Calcule a probabilidade como a proporo de valores obtidos nas aleatorizaes que so iguais ou

    mais extremos que a estatstica observada.

    A diferena bsica entre testes de aleatorizao o passo 1. Cada teste ser baseado em uma

    estatstica diferente. Quando falamos em estatstica, pense em um nmero que resuma um conjunto

    de informaes. A mdia uma estatstica. O coeficiente de correlao de Pearson uma estatstica. A

    diferena entre duas mdias pode ser usada como uma estatstica num teste para avaliar se as mdias

    de dois grupos diferem.

    Nossa funo para testar um coeficiente de correlao pode ser:

    f14.correl.teste

  • 62

    r.obs.abs

  • 63

    Note que no especificamos o nmero de aleatorizaes e, portanto, o valor padro que

    colocamos no argumento aleats da funo foi usado (999 vezes). Note tambm que seu valor de

    probabilidade pode ser um pouco diferente. Fizemos um teste usando sorteios. Cada vez que fazemos

    sorteios obtemos valores distintos. Nossa funo tambm retorna os valores de r aleatorizados.

    Podemos ver o quanto o nosso valor observado extremo desta forma:

    hist(resu$r.aleats) #para fazer um histograma. Deixe a janela do grfico aberta.

    abline(v=c(resu$r.obs, -resu$r.obs)) #coloca linhas verticais nas posies v do eixo X.

    O valor de probabilidade nada mais do que a proporo de valores de r aleatorizados que so

    iguais ou mais extremos do que o valor observado. Ou seja, a quantidade de valores que esto antes da

    primeira linha vertical e depois da segunda linha vertical no histograma que fizemos.

    Finalmente, podemos comparar nossa probabilidade com aquela produzida por uma funo j

    disponvel no R:

    cor.test(riq.anfibios, pop.humana)

    Veja que a probabilidade foi 0,009. Parecida com a nossa. Bom indicativo (mas no certeza...)

    de que no cometemos erros.

    8.4 Exerccios

    8.4.1 f15.medias2.teste(): Teste de comparao entre duas mdias por aleatorizao.

    Programe uma funo para testar por aleatorizao se duas mdias so diferentes. Ou seja, se a

    diferena entre elas pode ser devido ao acaso simplesmente.

    f15.medias2.teste

  • 64

    #feche o for.

    #obtenha os absolutos do observado e dos aleats.

    #calcule o nmero de aleats extremos.

    #calcule o p

    #retorne para o usurio os valores da estatstica observada e a probabilidade.

    }

    8.4.2 f16.par.teste(): Teste de comparao entre duas mdias com dependncia por

    aleatorizao. No exerccio anterior vimos um teste de aleatorizao equivalente a um teste t de duas

    amostras. Agora vamos fazer um equivalente ao teste t pareado. A diferena crucial a estatstica a ser

    usada e a forma de aleatorizar. Sobre a estatstica, devemos lembrar que o teste feito 'por pares', ou

    seja, a comparao feita dentro de cada par. Portanto, podemos usar como estatstica a mdia das

    diferenas de cada par. A aleatorizao deve respeitar o esquema de par. Ou seja, deve-se fazer a

    aleatorizao dentro do par. Pense um pouco na lgica deste teste para entender a razo de fazermos

    isto.

    f16.par.teste

  • 65

    (ou blocos), onde cada par era constitudo por uma lmina de microscopia. Metade da lmina era lisa e

    a outra metade rugosa. Visto que a lmina pequena, as condies ambientais em ambas metades so

    praticamente iguais. Use estes dados fictcios para testar sua funo:

    rugosa

  • 66

    # obtenha o nmero de espcies. Chame spp.

    ordem

  • 67

    riquezas

  • 68

    operaes bsicas: +; -; /; *; ^ operadores relacionais e lgicos: >; =;

  • 69

    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    9 Outras ferramentas teis para Eclogos ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    9.1 Importao e exportao de objetos

    Em captulos anteriores digitamos nossos conjuntos de dados diretamente no R. Eram pequenos e,

    portanto, o procedimento era fcil e rpido. As coisas complicam um pouco quando usamos dados

    reais. Nestes casos, o ideal digitar os dados num programa de planilha eletrnica (MS Excel,

    LibreOffice Calc etc) e depois importar para o R. Uma sugesto digitar em sua planilha eletrnica

    apenas os dados originais ou brutos. Qualquer transformao, combinao de dados, remoo de

    amostras etc pode ser feita dentro do R. A grande vantagem disto que, caso use um script, voc ter

    um registro fcil de tudo que foi feito. Qualquer alterao poder ser repetida muito rapidamente.

    A funo mais bsica de importao de planilhas (o tipo de dados mais comum)

    read.table(). Para ilustrar o seu uso, digite na sua planilha eletrnica preferida isto:

    clima sp1 sp2 sp3

    a1 trop 1 1 3

    a2 trop 1 20 0

    b1 temp 15 0 0

    b2 temp 0 22 0

    A primeira clula (linha 1 e coluna 1) dever ficar em branco. No deve haver espao entre

    nomes ou nmeros. No dever haver clulas em branco exceto pela primeira da planilha. Evite

    acentos. Grave o arquivo como 'Texto separado por tabulaes'. Leia e procure entender as mensagens

    que sua planilha eletrnica provavelmente te mostrar. Note que perder formataes. Isto no um

    problema. Grave no mesmo diretrio que contm seu .RData. Use o nome dados.txt. Depois:

    acaros

  • 70

    acaros

  • 71

    endereo completo da pasta (conforme usamos para read.table()).

    9.2 Grficos

    O R pode fazer praticamente qualquer grfico. Alm das funes j disponveis na sua instalao

    bsica, voc pode instalar vrios pacotes especficos. O comando bsico :

    x

  • 72

    lines(c(3, 3, 5), c(2,3, 4), col='green')

    Uma funo mais simples (mas tambm mais limitada) para incluir linhas (ainda com a janela

    de grfico aberta):

    abline(v=5, col='orange')

    abline(h=4, col='yellow')

    abline(a=3, b=1, col='violet', lwd=2)

    Para saber com maior exatido as coordenadas de 1 ponto no grfico (com a janela aberta):

    locator(1)

    Note que o smbolo de maior de sua rea de seu console desapareceu. Se mover o cursor do seu

    mouse para a janela de grfico notar que ele mudar de forma. Clique em algum ponto dentro do

    grfico e voc ter as coordenadas na rea de trabalho. Voc tambm pode (com a janela do grfico

    aberta) digitar isto e depois clicar no grfico:

    text(locator(1), 'Cliquei aqui')

    Esta uma pequena demonstrao de grficos que o R pode fazer. Conforme dito acima, o R

    pode fazer praticamente qualquer grfico. Entretanto, geralmente temos que especificar muitos

    detalhes, tais como espessura de linhas, tamanho de nmeros nas legendas, cores, margens da janela

    etc. No difcil fazer isto, mas pode ser um pouco demorado no incio, pois voc ter que ver as

    pginas de ajuda para descobrir os muitos argumentos disponveis. O importante, entretanto, que

    voc faa bons grficos, por exemplo, que sejam compreensveis e com boa proporcionalidade entre

    seus elementos. Isto nem sempre produzido com poucos argumentos e, portanto, geralmente voc

    ter que estudar um pouco a ajuda das funes grficas. Voc s no pode fazer um grfico ruim e dar

    aquela desculpa esfarrapada 'o R fez assim'. Estude! Ou v procurar outro programa de grficos de sua

    preferncia.

    9.3 Mapas

    Instale o pacote 'maps' usando o menu do RStudio e em seguida carregue-o (clique na caixinha).

    Podemos fazer mapas simples com:

    map('world')

  • 73

    map('world', 'brazil')

    sa

  • 74

    arv

  • 75

    plot(bird.families)

    bastante provvel que voc no tenha que digitar sua rvore, pois geralmente vai obt-la em

    outro pacote do R ou programa externo. Um dos pacotes fundamentais para manipulao de rvores

    filogenticas o 'ape'. Este pacote acompanhado pelo excelente livro do Paradis (2012). Anlises de

    ecologia de comunidades com informao filogentica esto disponveis no 'picante'. Instale e

    carregue-o. Por exemplo, podemos calcular a diversidade filogentica bem como a distncia (soma dos

    comprimentos de ramos) entre espcies presentes numa comunidade:

    data(phylocom)

    names(phylocom)

    phylocom$sample

    phylocom$phylo

    plot(phylocom$phylo)

    pd(phylocom$sample, phylocom$phylo) # Phylogenetic Diversity

    mpd(phylocom$sample, cophenetic(phylocom$phylo))

    # Mdia das distncias entre taxa em cada uma das comunidades (linhas da matriz).

    Calculamos no captulo 6 o ndice de dissimilaridade de Sorensen baseado em presena e ausncia de

    espcies. Podemos interpret-lo como uma situao em que cada espcie igualmente original e,

    portanto, a rvore de relacionamento uma nica politomia. Mas o mundo no precisa ser preto-no-

    branco. Podemos ponderar a importncia de cada espcie para a dissimilaridade total de acordo com

    sua originalidade filogentica e calcular o phyloSor (Graham & Fine 2008) bem como seus

    componentes de substituio (turnover) e diferena de diversidade filogentica (Leprieur et al. 2012).

    Vamos usar alguns exemplos de dados disponveis no pacote 'CommEcol'. Ele no est no repositrio

    oficial do R (CRAN), mas num repositrio de desenvolvimento e, portanto, temos que especificar o

    endereo:

    install.packages("CommEcol", repos=c("http://r-forge.r-project.org",

    "http://cran-r.c3sl.ufpr.br"), dep=TRUE)

    data(sites5.6)

    sites5.6

    data(tree6)

    plot(tree6)

    phylosor(sites5.6, tree6)# no 'picante'. uma similaridade.

  • 76

    1 - phylosor(sites5.6, tree6)# para dissimilaridade.

    part.p.tree(sites5.6, tree6, index.family = "sorensen") # no 'CommEcol'.

    Para entender um pouco melhor o phylosor e anlises relacionadas (como o treeNodf; ver

    abaixo):

    poli

  • 77

    operaes bsicas: +; -; /; *; ^ operadores relacionais e lgicos: >; =;

  • 78

    ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    10 Literatura Citada ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

    Almeida-Neto, M., P. Guimares, P.R. Guimares, R.D. Loyola & W. Ulrich. 2008. A consistent metric

    for nestedness analysis in ecological systems: reconciling concept and measurement. Oikos 117:

    1227 1239.

    Alves, R. 2011. Filosofia da cincia: introduo ao jogo e a suas regras. Loyola.

    Arajo, M.B. 2003. The coincidence of people and biodiversity in Europe. Global Ecology &

    Biogeography 12: 5-12.

    Chabris, C. & D. Simons. 2009. The invisible gorilla. Broadway Paperbacks. New York.

    Chambers, J.M. 1998. Programing with data: a guide to the S language. Springer.

    Coleman, B.D., M.A. Mares, M.R. Willig & Y-H. Hsieh. 1982. Randomness, area, and species richness.

    Ecology 63: 1121-1133.

    Colwell, R.K. & J.A. Coddington. 1994. Estimating terrestrial biodiversity through extrapolation.

    Philosophical Transactions of the Royal Society B 345: 101-118.

    Eagleman, D. 2011. Incgnito: As vidas secretas do crebro. Rocco.

    Gleiser, M. 2007. Cartas a um jovem cientista: o universo, a vida e outras paixes. Campus.

    Gotelli, N.J. 2007. Ecologia. 3a edio. Planta.

    Graham, C.H. & P.V.A Fine. 2008. Phylogenetic beta diversity: linking ecological

    and evolutionary processes across space in time. Ecology Letters 11: 1265-1277.

    Leprieur, F., C. Albouy, J.D. Bortoli, P.F. Cowman, D.R. Bellwood & D. Mouillot. 2012. Quantifying

    Phylogenetic Beta Diversity: Distinguishing between 'true' turnover of lineages and

    phylogenetic diversity gradients. PlosOne 7(8) e42760.

    MacArthur, R.H. & E.O. Wilson. 1967. The theory of island biogeography. Princeton Univ. Press.

    Melo, A.S. 2004. A critique of the use of jackknife and related non-parametric techniques to estimate

    species richness. Community Ecology 5: 149-157.

    Melo, A.S. 2008. O que ganhamos 'confundindo' riqueza de espcies e equabilidade em um ndice de

    diversidade? Biota Neotropica 8: 21-27. Disponvel em:

    (http://www.biotaneotropica.org.br/v8n3/pt/fullpaper?bn00108032008+pt).

    Melo, A.S., M.V. Cianciaruso & M. Almeida-Neto. 2014. treeNODF: nestedness to phylogenetic,

    functional and other tree-based diversity metrics. Methods in Ecology and Evolution 5: 563-

    572.

    Nicolelis, M. 2011. Muito alm do nosso eu - A nova neurocincia que une crebro e mquinas e como

  • 79

    ela pode mudar nossas vidas. Cia das Letras.

    Paradis E. 2012. Analysis of phylogenetics and evolution with R. 2nd ed. Springer, New York.

    Quammen, D. O. 2008. O canto do dod: Biogeografia de ilhas numa era de extines. Cia das Letras.

    Rigler, F.H. & R.H. Peters. 1995. Science in Limnology. Ecology Institute. Oldendorf. PDF em

    http://www.int-res.com/articles/eebooks/eebook06.pdf

    Schneck, F., A. Schwarzbold & A.S. Melo. 2011. Substrate roughness affects stream benthic algal

    diversity, assemblage composition, and nestedness. Journal of the North American

    Benthological Society 30: 1049-1056.

    Tthmrsz, B. 1995. Comparison of different methods for diversity ordering. Journal of Vegetation

    Science 6: 283-290.

    Wilson, E.O. 1994. Naturalista. Nova Fronteira.