• Nenhum resultado encontrado

Análise de dados usando R - BE180

N/A
N/A
Protected

Academic year: 2021

Share "Análise de dados usando R - BE180"

Copied!
14
0
0

Texto

(1)

Análise de dados usando R - BE180

Mathias M Pires

Uso do ambiente R para análise de dados

Noções básicas

O uso de métodos de programação proporciona uma série de facilidades para a análise de dados. Um programa funciona a partir de uma série de comandos (algoritmo), escritos em uma determinada

linguagem, que são lidos, interpretados e executados pelo computador. A programação possui sua própria estrutura lógica e cada linguagem possui uma sintaxe própria. A linguagem R tem sido muito utilizada para análise de dados biológicos, pois é simples e intuitiva, permite a manipulação de gráficos com facilidade e possui uma comunidade de desenvolvedores e usuários dedicada que produz novas funcionalidades com frequência.

Entre os muitos benefícios do uso de programação para análise de dados destaco 3 principais: 1. O uso de scripts que armazenam o código permite que a análise de dados seja feita de forma

organizada e replicada facilmente para o mesmo estudo ou para outros estudos que usem o mesmo método.

2. A possibilidade de automatização de tarefas permite que a mesma tarefa seja replicada várias vezes sem a necessidade de repetir os mesmos passos.

3. A elaboração do código para análise favorece o aprendizado e dá maior controle ao usuário.

A principal dificuldade ao usar uma linguagem de programação é que tudo está nas mãos do usuário. Uma tarefa só será executada se for programada corretamente, o que exige treinamento. Vamos fazer algumas operações básicas em R para explorar como esse ambiente funciona.

O primeiro passo após abrir o R é criar um script (Arquivo > Novo Script) onde o código será armazenado. Os comandos podem ser inseridos diretamente no console, porém, ao usar um script, as linhas de comando podem ser armazenadas e toda a análise pode ser facilmente replicada, corrigida ou modificada. Copie e cole as linhas de código abaixo (caixas cinzas) no script, e as execute (crl+r) passo a passo. Explore variações desses comandos para criar intuição sobre como essa ferramenta funciona.

#Atribuindo valores a um objeto

x<-2 y<-4

#Executando o objeto como um comando visualizamos o conteúdo dos objetos

x

## [1] 2 y

(2)

#operações básicas em R x+y ## [1] 6 x*y ## [1] 8 y/x ## [1] 2 x-y ## [1] -2

Um objeto armazena um valor (numérico ou não) e permite que aquele mesmo valor seja utilizado em diversos tipos de operações. O símbolo # permite que façamos comentários no código que serão ignorados pelo R. Comentários são muito úteis pois nos ajudam a (1) organizar o código, (2) recordar o porquê de um determinado passo e (3) facilitam a leitura do código por outros usuários.

Inspecionando os dados

Podemos importar arquivos salvos em diferentes formatos e analisá-los com as ferramentas disponíveis em

R. Crie uma pasta no computador, faça download do arquivo de dados clicando aqui e em seguida salve a planilha em um novo formato clicando em File > Download as > Comma-separated values e copie o arquivo para a pasta que foi criada.

Agora devemos informar ao R que esse é o diretório (pasta) onde o arquivo se encontra. Tarefas são executadas em R por funções. Copie o endereço da pasta e cole como argumento da função abaixo.

#Mudando de diretório

setwd(dir="D:/Dropbox/Backup/Disciplinas/BE180/scripts")

#Conferindo o diretório

getwd()

#Investigando o conteúdo do diretório

dir()

*Note que sempre que adicionamos texto ao código, como no caso de um endereço do diretório, o texto deve vir entre aspas.

Funções são códigos pré-programados que executam uma tarefa específica. Várias funcionalidades em R

já estão implementadas na forma de funções. Abaixo usamos uma função para importar o arquivo de dados.

(3)

#importando o arquivo e atribuindo a um objeto

sementes<-read.table("Dados_sementes-BE180.csv", sep=",",header=TRUE)

#Conferindo as primeiras 5 linhas da planilha

head(sementes, 5) ## diam_semente area ## 1 10.89 d ## 2 10.17 d ## 3 11.00 d ## 4 9.23 d ## 5 10.08 d

Em seguida vamos usar a função hist para criar um histograma que permite visualizar a distribuição dos dados. Para executar uma função escrevemos seu nome seguido de parênteses e dentro dos parênteses podemos atribuir valores aos argumentos da função. O ambiente R possui uma grande biblioteca de funções para a construção de diversos tipos de gráficos.

#selecionando a coluna com os dados de diâmetro

z<- sementes$diam_semente

# O símbolo $ é usado quando desejamos usar somente uma coluna de uma planilha de d ados (data frame)

#Criando um histograma

(4)

#Alterando os argumentos da função para formatar a figura

hist(z, col="darkgrey",border="white", xlab="Valor", ylab="Frequência", main= "Hist ograma")

Quando desejamos compreender melhor o que uma função faz ou como usar seus argumentos podemos acessar a página de ajuda da função. Todas as funções possuem uma página de ajuda padronizada, o que facilita o uso de funções que não temos familiaridade.

#Acessando a ajuda da função hist

?hist

Entre as funções básicas presentes no ambiente R temos as funções que permitem calcular estatísticas descritivas para um conjunto de dados.

#Calculando estatísticas descritivas #Média mean(z,na.rm=TRUE) ## [1] 9.57 #Mediana median(z,na.rm=TRUE) ## [1] 9.545

(5)

#Variância var(z,na.rm=TRUE) ## [1] 0.9973798 #Desvio padrão sd(z,na.rm=TRUE) ## [1] 0.998689 #Mínimo min(z,na.rm=TRUE) ## [1] 6.53 #Máximo max(z,na.rm=TRUE) ## [1] 11.61 #Amplitude range(z,na.rm=TRUE) ## [1] 6.53 11.61 #Quantis de 25% e 75% quantile(z,probs=c(0.25,0.75),na.rm=TRUE) ## 25% 75% ## 9.015 10.285

*Note que quando não atribuímos o resultado de uma função a um objeto, o resultado pode ser mostrado na tela, mas não é armazenado. Se quisermos usar aquele valor, em outras operações por exemplo, devemos atribuir o resultado a um objeto.

#Armazenando o resultado

media.z<-mean(z)

Outra forma bastante útil de representar a distribuição de uma variável é usando um boxplot, que indica os valores de algumas das estatísticas que calculamos. Tente mapear as estatísticas que calculou acima no gráfico abaixo.

#Armazenando o resultado

boxplot(sementes$diam_semente~sementes$area, xlab="Área",ylab="Tamanho da semente ( mm)")

(6)

Há muitas outras funções úteis em R, tanto nos pacotes (pacotes são conjuntos de funções) básicos quanto em pacotes que podem ser obtidos na internet em um repósitório oficial.

Agora que temos uma noção dos básica sobre como usar o R, vamos utilizá-lo para continuar investigando os possíveis efeitos da defaunação.

Analisando um novo conjunto de dados

Vamos analisar um segundo conjunto de dados (adaptados de Bello et al 2015, Science Advances) que contém informações sobre atributos como o tamanho médio das sementes (diâmetro em mm) e a

densidade da madeira (em g/cm ) de diferentes espécies de plantas da Mata Atlântica. Faça download do arquivo de dados clicando aqui e copie o arquivo para a pasta que foi criada.

#Conferindo se o diretório de trabalho é o diretório correto #Caso não seja, use a função setwd() para para mudar de diretório

getwd()

#importando o arquivo e atribuindo a um objeto

dados<-read.table("plant_traits_zoo.txt", sep="\t",header=TRUE)

#Conferindo as primeiras 5 linhas da planilha

head(dados, 5)

(7)

## plant diam_semente densidade altura sindr carbono ## 1 Abarema brachystachya 6.3 0.5888182 9 zoochoric 0.2079127 ## 2 Abarema cochliacarpos 8.0 NA 30 zoochoric NA ## 3 Abarema filamentosa NA NA NA zoochoric NA ## 4 Abarema jupunba NA 0.5900000 35 zoochoric 0.2841685 ## 5 Abarema langsdorffii NA 0.5888182 5 zoochoric 0.2003962

#Conferindo o formato da planilha (str refere-se a estrutura)

str(dados)

## 'data.frame': 1914 obs. of 6 variables:

## $ plant : Factor w/ 1914 levels "Abarema brachystachya",..: 1 2 3 4 5 6 7 8 9 10 ...

## $ diam_semente: num 6.3 8 NA NA NA NA 13.2 NA 6.18 50 ... ## $ densidade : num 0.589 NA NA 0.59 0.589 ...

## $ altura : num 9 30 NA 35 5 8 4 NA NA 15 ...

## $ sindr : Factor w/ 1 level "zoochoric": 1 1 1 1 1 1 1 1 1 1 ... ## $ carbono : num 0.208 NA NA 0.284 0.2 ...

*NA é o código usado para dados faltantes. A maioria das funções irá ignorá-los

Sabemos que vários atributos de plantas estão correlacionados. Nesse sentido a hipótese de que plantas maiores e com madeira mais densa também possuem grandes sementes é plausível. A previsão dessa hipótese é que deve haver uma correlação positiva entre as duas variáveis.

Vamos testar essa hipótese com o conjunto de dados. O primeiro passo é inspecionar visualmente a relação entre variáveis. Para isso vamos criar um Gráfico de dispersão onde temos em um eixo o tamanho médio das sementes e no outro a densidade da madeira da planta.

plot(y=dados$diam_semente,x=dados$densidade,log="y",bty="l", ylab="Tamanho da semen te (mm)",xlab="Densidade da madeira (g/cm3)")

(8)

Você acha que as variáveis estão correlacionadas? Somente a inspeção visual não é suficiente para embasar a nossa conclusão. Para testar se há uma correlação entre as variáveis podemos calcular um índice de correlação. O índice r varia entre -1 (correlação negativa máxima) e 1 (correlação positiva máxima). Se r é próximo de 0 isso indica que as duas variáveis não estão correlacionadas. Portanto, quanto maior o valor de r maior a correlação entre variáveis. Veja o exemplo abaixo com dados fictícios.

(9)

Agora vamos testar a correlação entre as variáveis tamanho da semente e densidade da madeira usando a função corr.test.

cor.test(log(dados$diam_semente),dados$densidade)$estimate ## cor

## 0.2459587

Para sabermos se esse valor observado poderia ser obtido ao acaso, mesmo não havendo uma associação entre as variáveis, vamos investigar a distribuição de valores sob a hipótese nula. A hipótese nula sob teste é de que não há relação entre as variáveis: H : r = 0. Para isso observe o gráfico abaixo que mostra a distribuição da estatística de interesse (r) sob a hipótese nula gerada por aleatorização dos dados. Interprete a figura a seguir sabendo que a linha vermelha representa o índice calculado para os dados reais:

(10)

*Note que mesmo que a expectativa sob a hipótese nula seja r = 0, os valores

obtidos para o cenário simulado variam ao redor de 0.

Na verdade a função cor.test além de calcular o índice já testa sua significância estatística, ou seja, a probabilidade de obter o valor observado de r sob a hipótese nula de que não há correlação entre as variáveis.

cor.test(log(dados$diam_semente),dados$densidade) ##

## Pearson's product-moment correlation ##

## data: log(dados$diam_semente) and dados$densidade ## t = 7.4631, df = 865, p-value = 2.059e-13

## alternative hypothesis: true correlation is not equal to 0 ## 95 percent confidence interval:

## 0.1823645 0.3075037 ## sample estimates: ## cor

## 0.2459587

*O teste de correlação só é adequado aqui porque temos duas variáveis quantativas contínuas cuja distribuição é aproximadamente normal. Para outros tipos de variáveis e/ou outros tipos de distribuições subjacentes são necessários outros tipos de testes estatísticos para testar a associação entre variáveis. Veja que o valor p-value no resultado acima é um valor bem pequeno. O que isso nos permite concluir?

(11)

Regressão Linear

A correlação mede se duas variáveis estão associadas e a intensidade dessa associação, mas não implica necessariamente em uma relação de causa-e-efeito. Quando desejamos testar se uma variável varia em resposta a outra, podemos recorrer a um teste de regressão linear. Observe o gráfico abaixo que mosta a relação entre quantidade de Carbono em um certo volume de madeira e densidade da madeira.

plot(dados$carbono~dados$densidade, ylab="Conteúdo de Carbono (g/cm3)",xlab="Densid ade da madeira (g/cm3)")

O que o gráfico sugere?

Em uma regressão linear testamos se a variável dependente varia (linearmente) à medida que a variável independente varia. Portanto, a regressão testa se um modelo linear com inclinação b se ajusta melhor aos dados do que um modelo linear com inclinação igual a zero. Em outras palavras testamos a hipótese nula H : b = 0. A seguir vamos usar a função lm para inferir a inclinação da reta.

regressao<-lm(dados$carbono~dados$densidade) regressao$coefficients

## (Intercept) dados$densidade ## 0.005749331 0.388970321

Os valores dos coeficientes mostram o intercepto (a) e a inclinação (b) da reta que melhor se ajustam aos dados, ou seja essa seria uma reta descrita pela equação y = 0.005 + 0.38x. Como nossa pergunta é especificamente sobre a inclinação, é possível gerar o cenário nulo por aleatorização e recalcular a inclinação da reta várias vezes para investigar a distribuição esperada dos valores de inclinação para H .

0

(12)

Interprete a figura a seguir sabendo que a linha vermelha representa o a inclinação calculada para os dados reais:

Assim como a função cor.test a função lm já executa o teste de significância e reporta os resultados. O teste de significância acima foi realizado usando um método de aleatorização, que apesar de ser uma forma válida (e intuitiva) de fazer o teste, difere dos testes formais de regressão linear. O teste de regressão se baseia nas distâncias entre os pontos observados e a reta que descreve o modelo ajustado. Se um modelo com inclinação diferente de 0 tem bom ajuste ele reduz a distância entre os pontos observados e os pontos preditos, aumentando o valor de um índice chamado de estatística-F. Abaixo vemos o resultado da regressão de forma mais detalhada. O p-valor reportado no final do sumário indica a probabilidade de obter o valor de F observado sob a hipótese nula.

(13)

## ## Call:

## lm(formula = dados$carbono ~ dados$densidade) ##

## Residuals:

## Min 1Q Median 3Q Max ## -0.104304 -0.031422 -0.001673 0.030996 0.124806 ##

## Coefficients:

## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 0.005749 0.004569 1.258 0.208 ## dados$densidade 0.388970 0.006821 57.024 <2e-16 *** ##

---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ##

## Residual standard error: 0.03893 on 1514 degrees of freedom ## (398 observations deleted due to missingness)

## Multiple R-squared: 0.6823, Adjusted R-squared: 0.6821 ## F-statistic: 3252 on 1 and 1514 DF, p-value: < 2.2e-16

Podemos visualizar o modelo ajustado aos dados (reta vermelha) e o modelo que representa a hipótese nula (reta pontilhada azul).

par(mfrow=c(1,1),mar=c(5,5,5,3), cex.lab=1.5,cex.axis=1.3)

plot(dados$carbono~dados$densidade, ylab="Conteúdo de Carbono (g/cm3)",xlab="Densid ade da madeira (g/cm3)",pch=21, bg="darkgrey", col="white", cex=1.4)

abline(regressao, col="tomato", lwd=2)

(14)

A regressão linear é adequada quando desejamos testar a relação entre uma variável dependente e uma variável independente ambas quantitativas. Outros tipos de testes são indicados para outros tipos de variáveis.

Interpretando os resultados e suas

implicações

Considerando o que foi apresentado em aula sobre os efeitos da defaunação para a dispersão das sementes do palmito jussara (E. edulis), qual seria uma possível consequência da defaunação para a distribuição do tamanho das plantas? Como isso pode influenciar serviços ecossistêmicos como o estoque de carbono?

Referências

Documentos relacionados

Considera-se que a interdisciplinaridade contribui para uma visão mais ampla do fenômeno a ser pesquisado. Esse diálogo entre diferentes áreas do conhecimento sobre

Código Descrição Atributo Saldo Anterior D/C Débito Crédito Saldo Final D/C. Este demonstrativo apresenta os dados consolidados da(s)

Foram avaliados os frameworks SWAN e INSIGNIA, integrados com os protocolos de roteamento DSR e AODV, com base nas métricas de atraso fim-a-fim, vazão, jitter e overhead de

O termo extrusão do núcleo pulposo aguda e não compressiva (Enpanc) é usado aqui, pois descreve as principais características da doença e ajuda a

O CES é constituído por 54 itens, destinados a avaliar: (a) cinco tipos de crenças, a saber: (a1) Estatuto de Emprego - avalia até que ponto são favoráveis, as

Justificativa: toda vez que ocorrer concentração na oferta de serviços públicos, a regulação (fixação de preços máximos) se faz necessária dentro

Então quando eu quero “shape” uma estratégia de uma empresa terceirizada para ter um interesse meu implementado, eu geralmente levo um mês mais ou menos e eu começo por

O relatório que acompanha as Diretrizes apresenta o contexto histórico do caminho percorrido pela Educação do Campo, dando ênfase à dívida histórica que o país tem para com