análise de dados usando r - be180 · descritivas para um conjunto de dados. #calculando...

14
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 ## [1] 4

Upload: doandat

Post on 12-Feb-2019

214 views

Category:

Documents


0 download

TRANSCRIPT

Análise de dados usando R - BE180Mathias M Pires

Uso do ambiente R para análise de dadosNoções básicasO uso de métodos de programação proporciona uma série de facilidades para a análise de dados. Umprograma funciona a partir de uma série de comandos (algoritmo), escritos em uma determinadalinguagem, que são lidos, interpretados e executados pelo computador. A programação possui sua própriaestrutura lógica e cada linguagem possui uma sintaxe própria. A linguagem R tem sido muito utilizada paraanálise de dados biológicos, pois é simples e intuitiva, permite a manipulação de gráficos com facilidade epossui uma comunidade de desenvolvedores e usuários dedicada que produz novas funcionalidades comfrequê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 formaorganizada e replicada facilmente para o mesmo estudo ou para outros estudos que usem o mesmométodo.

2. A possibilidade de automatização de tarefas permite que a mesma tarefa seja replicada várias vezessem 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. Umatarefa só será executada se for programada corretamente, o que exige treinamento. Vamos fazer algumasoperaçõ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 comandopodem ser armazenadas e toda a análise pode ser facilmente replicada, corrigida ou modificada. Copie ecole as linhas de código abaixo (caixas cinzas) no script, e as execute (crl+r) passo a passo. Explorevariações desses comandos para criar intuição sobre como essa ferramenta funciona.

#Atribuindo valores a um objetox<-2y<-4

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

## [1] 2

y

## [1] 4

#operações básicas em Rx+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 emdiversos tipos de operações. O símbolo # permite que façamos comentários no código que serão ignoradospelo R. Comentários são muito úteis pois nos ajudam a (1) organizar o código, (2) recordar o porquê de umdeterminado passo e (3) facilitam a leitura do código por outros usuários.

Inspecionando os dadosPodemos importar arquivos salvos em diferentes formatos e analisá-los com as ferramentas disponíveis emR. Crie uma pasta no computador, faça download do arquivo de dados clicando aqui e em seguida salve aplanilha em um novo formato clicando em File > Download as > Comma-separated values e copie o arquivopara a pasta que foi criada.

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

#Mudando de diretóriosetwd(dir="D:/Dropbox/Backup/Disciplinas/BE180/scripts")

#Conferindo o diretóriogetwd()

#Investigando o conteúdo do diretóriodir()

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

Funções são códigos pré-programados que executam uma tarefa específica. Várias funcionalidades em Rjá estão implementadas na forma de funções. Abaixo usamos uma função para importar o arquivo dedados.

#importando o arquivo e atribuindo a um objetosementes<-read.table("Dados_sementes-BE180.csv", sep=",",header=TRUE)

#Conferindo as primeiras 5 linhas da planilhahead(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 dosdados. Para executar uma função escrevemos seu nome seguido de parênteses e dentro dos parêntesespodemos atribuir valores aos argumentos da função. O ambiente R possui uma grande biblioteca defunçõ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 dados (data frame)

#Criando um histogramahist(z)

#Alterando os argumentos da função para formatar a figurahist(z, col="darkgrey",border="white", xlab="Valor", ylab="Frequência", main= "Histograma")

Quando desejamos compreender melhor o que uma função faz ou como usar seus argumentos podemosacessar a página de ajuda da função. Todas as funções possuem uma página de ajuda padronizada, o quefacilita 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ísticasdescritivas para um conjunto de dados.

#Calculando estatísticas descritivas#Médiamean(z,na.rm=TRUE)

## [1] 9.57

#Medianamedian(z,na.rm=TRUE)

## [1] 9.545

#Variânciavar(z,na.rm=TRUE)

## [1] 0.9973798

#Desvio padrãosd(z,na.rm=TRUE)

## [1] 0.998689

#Mínimomin(z,na.rm=TRUE)

## [1] 6.53

#Máximomax(z,na.rm=TRUE)

## [1] 11.61

#Amplituderange(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 mostradona 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 resultadomedia.z<-mean(z)

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

#Armazenando o resultadoboxplot(sementes$diam_semente~sementes$area, xlab="Área",ylab="Tamanho da semente (mm)")

Há muitas outras funções úteis em R, tanto nos pacotes (pacotes são conjuntos de funções) básicos quantoem 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 investigandoos possíveis efeitos da defaunação.

Analisando um novo conjunto de dadosVamos analisar um segundo conjunto de dados (adaptados de Bello et al 2015, Science Advances) quecontém informações sobre atributos como o tamanho médio das sementes (diâmetro em mm) e adensidade da madeira (em g/cm ) de diferentes espécies de plantas da Mata Atlântica. Faça download doarquivo 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óriogetwd()

#importando o arquivo e atribuindo a um objetodados<-read.table("plant_traits_zoo.txt", sep="\t",header=TRUE)

#Conferindo as primeiras 5 linhas da planilhahead(dados, 5)

3

## 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 plantasmaiores e com madeira mais densa também possuem grandes sementes é plausível. A previsão dessahipó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 arelação entre variáveis. Para isso vamos criar um Gráfico de dispersão onde temos em um eixo otamanho 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 semente (mm)",xlab="Densidade da madeira (g/cm3)")

Você acha que as variáveis estão correlacionadas? Somente a inspeção visual não é suficiente paraembasar 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 positivamá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.

Agora vamos testar a correlação entre as variáveis tamanho da semente e densidade da madeira usando afunçã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çãoentre 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 adistribuiçã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 dadosreais:

0

*Note que mesmo que a expectativa sob a hipótese nula seja r = 0, os valoresobtidos 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, aprobabilidade de obter o valor observado de r sob a hipótese nula de que não há correlação entre asvariá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 cujadistribuição é aproximadamente normal. Para outros tipos de variáveis e/ou outros tipos de distribuiçõessubjacentes 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?

Regressão LinearA correlação mede se duas variáveis estão associadas e a intensidade dessa associação, mas não implicanecessariamente em uma relação de causa-e-efeito. Quando desejamos testar se uma variável varia emresposta a outra, podemos recorrer a um teste de regressão linear. Observe o gráfico abaixo que mosta arelaçã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="Densidade 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ávelindependente varia. Portanto, a regressão testa se um modelo linear com inclinação b se ajusta melhor aosdados do que um modelo linear com inclinação igual a zero. Em outras palavras testamos a hipótese nulaH : 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 aosdados, 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 ainclinação da reta várias vezes para investigar a distribuição esperada dos valores de inclinação para H .

0

0

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

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

summary(regressao)

## ## 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ótesenula (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="Densidade da madeira (g/cm3)",pch=21, bg="darkgrey", col="white", cex=1.4)abline(regressao, col="tomato", lwd=2)abline(a=0.1,b=0, col="steelblue",lty=2,lwd=2)

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

Interpretando os resultados e suasimplicaçõesConsiderando o que foi apresentado em aula sobre os efeitos da defaunação para a dispersão dassementes do palmito jussara (E. edulis), qual seria uma possível consequência da defaunação para adistribuição do tamanho das plantas? Como isso pode influenciar serviços ecossistêmicos como o estoquede carbono?

Bello et al 2015 - Science Advances