=====ANÁLISES EXPLORATÓRIAS DE DADOS===== /* Para esconder partes do texto*/ Neste tutorial, pretendemos instrumentalizar os(as) usuários(as) a realizar várias técnicas de Análise Exploratória de Dados (AED). Apesar de existirem questionamentos estatísticos e filosóficos sobre a realização da AED antes das análises de dados previstas em um projeto de pesquisa, o contato prévio com os dados pode, no mínimo, auxiliar a detectar anomalias nos dados e buscar suas causas. ====Objetivos da Análise Exploratória de Dados (AED)==== A AED teve origem a partir da expansão das análises frequentistas, porém, também pode ser utilizada no contexto de outras abordagens analíticas. As **premissas** que são avaliadas (quantitativamente ou graficamente) pela AED possuem ampla aplicação, são elas: * A amostra foi obtida seguindo o princípio da aleatoriedade * A amostra é proveniente de uma distribuição fixa (normal, binomial, etc) * A distribuição tem uma "localização" fixa (média, lambda, etc) * A distribuição tem variação fixa (variância, desvio, etc) Dentre os principais **objetivos** de uma AED podemos listar os seguintes: * Procurar variáveis mais importantes dentro de um conjunto abrangente; * Compreender a estrutura implícita dos dados; * Detectar pontos extremos (//outliers//) e anomalias; * Testar premissas; * Avaliar se os dados se ajustam aos modelos que serão utilizados nas análises; * Determinar ajustes ótimos; Alguns entusiastas da AED acreditam que muitas vezes é possível discutir os resultados obtidos a partir apenas da AED, sem precisar de testes de inferência estatística Na página virtual [[http://www.itl.nist.gov/div898/handbook/eda/section3/eda32.htm|NIST - Engineering Statistics Handbook]], são apresentadas várias questões que poderiam ser analisadas diretamente pela AED. Algumas são listadas abaixo: * O que é um valor típico (p. ex., média, mediana, etc)? * Qual é a incerteza para um valor típico (variância, desvio, etc)? * Qual seria um bom ajuste (em relação às distribuições) para um dado conjunto de números? * Quais são os valores de determinados percentis? * Um determinado fator tem algum efeito? * As medidas provenientes de diferentes fontes são equivalentes? * Qual pode ser a melhor função para relacionar uma variável resposta a um conjunto de fatores? * Podemos separar //sinal// de //ruído// em dados temporalmente dependentes? * Os dados têm valores extremos (//outliers//)? Ao final deste tutorial esperamos que você consiga responder algumas dessas questões. ====Copiando os arquivos de dados e instalando pacotes==== As análises serão realizadas em ambiente R e para isso teremos que instalar alguns pacotes, mas não será necessário ter conhecimento prévio sobre o R, pois forneceremos todos os comandos necessários para a realização da atividade. 1) Crie um diretório (pasta), copie os arquivos de dados abaixo para esse diretório e faça a descompactação no mesmo diretório: * {{ :planeco:roteiro:univar1.csv.zip |univar.zip}} * {{ :planeco:roteiro:autocorr.csv.zip|autocorr.zip}} /* * bivar * transf */ 2) Abra o R no seu computador e mude o diretório de trabalho para o diretório (//i.e.// a pasta) que você criou, usando o menu **//Arquivo//** > **//mudar dir...//**. 3) Instale os pacotes //car// e //lattice//. Para isso, basta copiar e colar os comandos que estão nas caixas de cor cinza: install.packages("car") Espere finalizar todo o processo de instalação desse pacote para iniciar o próximo: install.packages("lattice") 4) Agora carregue os pacotes: library(car) library(lattice) library (graphics) ==== ANALISANDO DADOS UNIVARIADOS ==== === Conhecendo os dados: === 1) importe o conjunto de dados para o R univar1<-read.csv("univar1.csv") 2) Use a função //head// para visualizar as 5 primeiras linhas do conjunto de dados head(univar1) 3) Inspecione o resumo dos dados summary(univar1) Note que para variáveis numéricas (contínuas ou discretas) são apresentados os valores Mínimo, Máximo, Média, Mediana, Primeiro quartil, Terceiro quartil, e, no caso de haver dados faltantes, será apresentado o número de dados faltantes (linhas não preenchidas com valores), representados como "NA's". Para variáveis categóricas são apresentados os níveis existentes e quantas observações cada um dos níveis possui. Se houver dados faltantes, será apresentado o número de "NA's" **Veja se você entendeu o conjunto de dados. Você consegue pensar em como esses dados podem estar distribuídos? Qualquer dúvida, pergunte!** 4) Se quiser, visualize o conjunto de dados como uma planilha convencional edit(univar1) ===ANÁLISES GRÁFICAS=== **Salve todos os gráficos que você criar a partir de agora** 1) Vamos olhar como os dados das quatro variáveis numéricas estão distribuídos graficamente. **1.a) Histograma de frequência:** par(mfrow = c(2,2)) ##Aqui estamos criando um layout para colocar os quatro gráficos juntos hist(univar1$COMPRIMENTO_BICO) hist(univar1$BIOMASSA_AVE) hist(univar1$BIOMASSA_INSETOS) hist(univar1$TAMANHO_SEMENTES) par(mfrow=c(1,1)) ## voltando ao padrão de apresentar apenas 1 gráfico por página **O que está representado no eixo X e no eixo Y de cada um desses gráficos? Quais são os valores que definem as classes usadas no eixo X desse histograma? São os mesmos valores para todos os gráficos? Poderiam ser usados diferentes valores para essas mesmas variáveis? Qual a melhor forma de definir as classes de um histograma? ** E se mudássemos para 20 classes no eixo X, como ficariam os gráficos? par(mfrow = c(2,2)) hist(univar1$COMPRIMENTO_BICO, breaks = 20) hist(univar1$BIOMASSA_AVE, breaks = 20) hist(univar1$BIOMASSA_INSETOS, breaks = 20) hist(univar1$TAMANHO_SEMENTES, breaks = 20) par(mfrow=c(1,1)) E se mudássemos para 10 classes no eixo X, como ficariam os gráficos? par(mfrow = c(2,2)) hist(univar1$COMPRIMENTO_BICO, breaks = 10) hist(univar1$BIOMASSA_AVE, breaks = 10) hist(univar1$BIOMASSA_INSETOS, breaks = 10) hist(univar1$TAMANHO_SEMENTES, breaks = 10) par(mfrow=c(1,1)) /* Existem também os gráficos stem-and-leaf (ramos e folhas), que são uma outra forma de representar a distribuição dos dados brutos Vantagens: **Dentro** de uma determinada classe (por exemplo, dentre os valores que estào entre 10 e 20) é possível visualizar se tem algum valor predominante (agregação) entre os valores à direita do "|" ou se os valores estão distribuídos mais homogeneamente Desvantagens: Visualização um pouco mais confusa e maior dificuldade para representar valores contínuos, além de ser pouco utilizado em geral. MOSTRAR ALGUMA FIGURA COM DOIS STEM-AND-LEAF, UM PARA DADOS CONTÍNUOS E OUTRO PARA DADOS DISCRETOS*/ **1.b) Gráfico de densidade** Ao invés de usarmos classes, podemos representar a distribuição por meio de uma linha, que é obtida usando a densidade estimada (por uma função conhecida como //kernel//) de valores para "janelas" (//bandwidth//) muito pequenas. Vamos ver como ficam as distribuições das nossas quatro variáveis numéricas: par(mfrow = c(2,2)) plot(density(univar1$COMPRIMENTO_BICO)) plot(density(univar1$BIOMASSA_AVE)) plot(density(univar1$BIOMASSA_INSETOS)) plot(density(univar1$TAMANHO_SEMENTES)) par(mfrow=c(1,1)) Podemos juntar esses dois gráficos em um só. Para isso, use o código abaixo: par(mfrow = c(2,2)) hist(univar1$COMPRIMENTO_BICO, prob=T ) lines(density(univar1$COMPRIMENTO_BICO)) hist(univar1$BIOMASSA_AVE, prob=T) lines(density(univar1$BIOMASSA_AVE)) hist(univar1$BIOMASSA_INSETOS, prob=T) lines(density(univar1$BIOMASSA_INSETOS)) hist(univar1$TAMANHO_SEMENTES, prob=T) lines(density(univar1$TAMANHO_SEMENTES)) par(mfrow=c(1,1)) Podemos também mostrar, na parte inferior do gráfico de densidade, o número de observações em cada faixa do gráfico. Para isso vamos usar a função //rug()// par(mfrow = c(2,2)) plot(density(univar1$COMPRIMENTO_BICO)) rug(univar1$COMPRIMENTO_BICO, side=1) plot(density(univar1$BIOMASSA_AVE)) rug(univar1$BIOMASSA_AVE, side=1) plot(density(univar1$BIOMASSA_INSETOS)) rug(univar1$BIOMASSA_INSETOS, side=1) plot(density(univar1$TAMANHO_SEMENTES)) rug(univar1$TAMANHO_SEMENTES, side=1) par(mfrow=c(1,1)) Todas essas informações nos auxiliam para identificarmos a quais distribuições teóricas nossos dados se ajustam. **1.c) Box-plot ou Box-whiskers plot ou Five-numbers-summary** Um box-plot clássico utiliza os seguintes valores: * - Mínimo * - Primeiro quartil * - Mediana * - Terceiro quartil * - Máximo - Ordene a variável COMPRIMENTO_BICO do menor para o maior valor: (sort(univar1$COMPRIMENTO_BICO)) * - Anote quantos dados existem (i.e. qual é o //n// da amostra)? * - Anote os valores mínimo e o máximo * - Anote o valor que separa os dados ordenados em duas metades (i.e. o valor que representa 50% dos dados). * - Anote o valor que separa os primeiros 25% valores dos restantes 75% * - Anote o valor que separa os primeiros 75% valores dos restantes 25% Quando o quartil desejado (primeiro, segundo [= mediana] ou terceiro) se posicionar exatamente sobre um dado valor, use esse valor. Quando o quartil desejado se localizar entre dois valores, retire a média desses dois valores. Com esses dados você poderia construir um box-plot manualmente, conforme a figura abaixo: {{ :planeco:roteiro:boxplot.png |}} Mas temos uma função que faz isso por nós: boxplot(univar1$COMPRIMENTO_BICO, range=0) Confira se os valores utilizados pela função //boxplot// são iguais aos que você calculou Muitas vezes, o //default// de um programa estatístico faz um gráfico chamado **boxplot modificado**. Esse **boxplot modificado** nos ajuda a identificar os pontos extremos que comumente chamamos de **//outliers//**. Ao invés de usarmos os valores de **máximo** e **mínimo** nas pontas das linhas verticais (tanto para cima quanto para baixo), usamos a seguinte equação //1.5*IQ// para definirmos o comprimento da linha vertical. //IQ// é a distância entre o primeiro e o terceiro quartil (ou distância interquartis ou ainda a amplitude da caixa central do boxplot). //IQ = Q3 - Q1//, onde Q3 é o valor do terceiro quartil e Q1 é o valor do primeiro quartil. Suponha uma situação em que sua variável resposta é medida em ml. Se Q3=30ml e Q1=20ml, então, IQ =10ml e a linha vertical deve ter 15ml (IQ = 1.5*10). Como a linha vertical é plotada a partir das bordas das caixas (quartis) para se obter o valor superior da linha vertical é preciso somar Q3+IQ (30 + 15 = 45ml) e para se obter o valor inferior da linha vertical é preciso subtrair Q1 - IQ (20-15 = 5 ml). Os valores que estiverem abaixo de 5ml e acima de 45 ml serão considerados //outliers//. Um boxplot modificado fica assim: {{ :planeco:roteiro:box-plot-2-fig-1.png?300 |}} O valor a ser multiplicado por IQ pode variar de um autor para outro e de um programa computacional para outro, então é muito importante que as legendas dos gráficos tragam essa informação. Infelizmente, essa não é uma prática comum. Vamos fazer um boxplot modificado com os nossos dados de COMPRIMENTO_BICO boxplot(univar1$COMPRIMENTO_BICO) ** Várias informações podem ser obtidas a partir de um boxplot. - Existem //outliers// no conjunto de dados? Eles estão entre os valores mais altos ou mais baixos? - A distribuição dos dados é simétrica ou assimétrica? - Se for assimétrica, os dados estão concentrados em valores mais altos (assimetria com cauda grande para a esquerda) ou mais baixos (assimetria com cauda grande para a direita)? \ * PARA PENSAR: É possível construir um box-plot com menos de 5 dados? ** **1.d) Comparando Boxplots (e usando o argumento //notched//)** Podemos comparar visualmente as respostas de organismos a dois níveis de um determinado tratamento, ou de uma determinada condição (variáveis categóricas), analisando os boxplots de cada conjunto de dados. No nosso conjunto de dados, podemos avaliar se a biomassa de insetos apresenta diferentes distribuições em locais com diferentes níveis de distúrbio: boxplot(univar1$BIOMASSA_INSETOS ~ univar1$NIVEL_DISTURBIO) **Avalie a posição das medianas, a distribuição dos valores entre os quartis, os valores máximos e mínimos, a simetria da distribuição, os //outliers// e indique se, a partir desses gráficos, você se sente confiante em afirmar se a biomassa de insetos difere ou não entre os dois níveis de distúrbio.** Existe uma forma bastante simples de calcular **"intervalos de confiança da mediana"** e que podem nos ajudar a tomar decisões a respeito da similaridade ou diferença de respostas. Esse método é baseado em técnicas de Monte Carlo((ver tópico de randomização e permutação)) e produz os valores limites para os intervalos de confiança da mediana. Existe um argumento (//notched//) que podemos inserir na função //boxplot()//, que permite que esses intervalos de confiança da mediana sejam visualizados como um estreitamento da caixa central do boxplot na região que estiver dentro do intervalo de confiança da mediana. Se esses estreitamentos não se sobrepuserem podemos admitir que os dois conjuntos de dados são diferentes. boxplot(univar1$BIOMASSA_INSETOS ~ univar1$NIVEL_DISTURBIO, notch=TRUE) **E agora, você está mais seguro(a) para afirmar se a biomassa de insetos difere ou não entre os dois níveis de distúrbio?** ===CHECANDO O AJUSTE DOS DADOS A UMA DISTRIBUIÇÃO=== Agora vamos avaliar visualmente se as variáveis se distribuem de acordo com uma distribuição conhecida. Por simplicidade, vamos fazer isso com a **distribuição normal**, porém, o mesmo pode ser feito com outros tipos de distribuição. IMPORTANTE: Vários tipos de análises têm a normalidade como premissa. Porém, é importante não confundir a normalidade dos dados brutos, com a normalidade dos erros, da variância ou dos resíduos das relações. No tópico **Testes clássicos frequentistas** vamos entender o que significa analisar a normalidade dos resíduos. Nesse momento, em que estamos analisando a normalidade de uma variável isoladamente, estamos apenas compreendendo e descrevendo o tipo de dado que coletamos. **Gráfico quantil-quantil** A ideia de um gráfico quantil-quantil é expressar visualmente o quanto seus dados se aproximam de uma determinada distribuição. Eles podem ser usados para comparar as distribuições de dois conjuntos de dados diferentes (para saber se ambos vêm de uma mesma população) ou para comparar a distribuição de um conjunto de dados coletados com uma distribuição de probabilidade teórica (normal, binomial, etc). Nesse segundo caso, eles são também chamados de Gráficos de Probabilidade (//Probability Plots//). No exemplo abaixo, vamos comparar dados coletados e uma distribuição normal. Um quantil((Os **quartis** calculados anteriormente, são casos especiais de quantis. São chamados de quartis, pois dividem os dados em 4 grupos com a mesma proporção.)) representa a porcentagem de dados (ordenados) que estão abaixo de um dado valor. Por exemplo, um quantil de 0.4 (ou 40%) é o ponto no qual 40% dos dados ocorrem abaixo do valor correspondente e 60% dos dados ocorrem acima desse valor. **Relembrando: em uma distribuição normal, qual o valor que limita os dados abaixo de 2.5%? Expresse em termos de desvio-padrão para facilitar** Para facilitar a comparação do valor que representa, por exemplo, 10% de uma distribuição normal e comparar com o valor que representa 10% dos seus dados, tanto a distribuição normal quanto seus dados precisam estar na mesma escala. Então, para que os dois eixos do gráfico estejam exatamente na mesma escala, os quantis esperados para uma distribuição normal são distribuídos ao longo da amplitude (mínimo e máximo) dos dados coletados. No eixo X serão projetados os valores esperados pela distribuição normal para cada quantil e no eixo Y serão projetados os valores dos dados coletados, também para cada quantil. A maior parte dos programas traça uma linha diagonal em 45 graus, para auxiliar a visualização. /* ATENÇÃO: Outra forma de representar os dados esperados para a distribuição normal é usar a distribuição normal padronizada, que tem média zero e desvio padrão = 1. Da mesma forma que descrito anteriormente, os valores de mínimo e de máximo dos dados coletados serão utilizados para padronizar a escala do gráfico no eixo x. */ Vamos então aplicar as funções abaixo aos nossos dados: par(mfrow = c(2,2)) qqnorm(univar1$COMPRIMENTO_BICO) qqline(univar1$COMPRIMENTO_BICO) qqnorm(univar1$BIOMASSA_AVE) qqline(univar1$BIOMASSA_AVE) qqnorm(univar1$BIOMASSA_INSETOS) qqline(univar1$BIOMASSA_INSETOS) qqnorm(univar1$TAMANHO_SEMENTES) qqline(univar1$TAMANHO_SEMENTES) par(mfrow=c(1,1)) ** Uma vez compreendida a forma como esse gráfico foi construído, como os resultados devem ser interpretados? Para cada uma das variáveis avalie: - É possível visualizar //outliers// nas variáveis? - A distribuição dos dados é simétrica ou assimétrica? Se for assimétrica, os dados estão concentrados em valores mais altos (assimetria com cauda grande para a esquerda) ou mais baixos (assimetria com cauda grande para a direita)? - Os dados se ajustam bem à distribuição normal? ** ===AVALIANDO AUTOCORRELAÇÃO=== Para essa parte do tutorial, importe o conjunto de dados "autocorr.csv" para o R e inspecione os dados: autocorr<-read.csv("autocorr.csv") head(autocorr) summary(autocorr) Dentre as premissas mais importantes dos testes estatísticos está a **independência** (espacial e/ou temporal) dos dados coletados. Existem diversas formas de avaliar o nível de autocorrelação(("//Note that uncorrelated does not necessarily mean random. Data that has significant autocorrelation is not random. However, data that does not show significant autocorrelation can still exhibit non-randomness in other ways. Autocorrelation is just one measure of randomness.//")) entre os dados. Quando estamos lidando com dados distribuídos em apenas uma dimensão (transectos lineares ou series temporais direcionais), esse processo é mais simples. Porém, quando os dados estão distribuídos em duas (p.ex. posições x e y em uma parcela) ou em três (posições x e y e mais a profundidade, no caso de medidas em sistemas aquáticos) dimensões os métodos são mais complexos e fogem ao escopo desse tutorial. Se tiver interesse em entender alguns desses métodos para duas dimensões visite [[http://ecologia.ib.usp.br/bie320/doku.php?id=2016:roteiros:ep2|Padrões Multiescala]] Porém, existe uma forma simples de visualizar os dados e obter uma primeira impressão sobre possíveis autocorrelações para dados coletados em transectos lineares e também para dados de séries temporais. Imagine o transecto abaixo: {{ :planeco:roteiro:transecto2.jpg|}} Você poderia se perguntar se os dados mais próximos espacialmente são mais parecidos entre si (i.e. positivamente autocorrelacionados). Uma forma de avaliar isso é plotar o valor de um dado em relação ao seu antecessor, então, no eixo X teríamos os valores do segundo dado em diante e no eixo Y teríamos, correspondendo a cada valor do eixo X, o valor do dado anterior. Esse tipo de gráfico é chamado de **lag plot** O gráfico do tipo //lag-plot// apresenta a relação entre um determinado dado e o seu antecessor (temporal ou espacial) **quando os dados são tomados em uma sequência unidimensional**. O que você esperaria que acontecesse em um gráfico desse tipo, caso os valores estejam autocorrelacionados? E se não estiverem? Vejamos como ficam esses gráficos para os dados do conjunto **autocorr** que temos disponível para essa análise. Nesse arquivo temos os dados de dois transectos (x1 e x2) com 100 pontos cada. lag.plot(autocorr$x1, do.lines = FALSE, diag=FALSE) lag.plot(autocorr$x2, do.lines = FALSE, diag=FALSE) **Olhando para esses resultados, qual a sua conclusão?** Entretanto, é importante entender que no gráfico padrão (//default//) produzido por essa função //lag.plot()// estamos relacionando um determinado dado com o seu antecessor **imediato**, ou seja, o antecessor está a 1 unidade de distância em relação ao dado que colocamos no eixo X. Porém, alguns processos podem ocorrer em escalas diferentes de 1 unidade de distância e podemos querer checar se existe autocorrelação em outras escalas. Para isso, usamos o argumentos "//lags//" e "//set.lags//" dentro da função //lag.plot()//. Vamos ver como ficam os gráficos com lags=2 lag.plot(autocorr$x1, do.lines = FALSE, lags=2, set.lags=2, diag=FALSE) lag.plot(autocorr$x2, do.lines = FALSE, lags=2, set.lags=2, diag=FALSE) **E então, as conclusões se mantém?** ====ANALISANDO DADOS BIVARIADOS==== Muitas vezes não estamos interessados em analisar a distribuição de uma variável //per se//, mas sim em analisar se existe alguma relação entre duas variáveis numéricas ordenadas. Alguns pontos que queremos analisar quando testamos uma relação entre variáveis são: * 1 - Qual a direção da relação (positiva ou negativa)? * 2 - A relação é linear (i.e. para cada aumento na variável X, a variável Y aumenta a uma taxa constante)? * 3 - Como os valores da variável do eixo Y variam em relação aos valores da variável do eixo X (muita ou pouca variação nos valores de Y para valores similares de X)? * 4 - A variação de Y é similar ao longo de todo o eixo X? Para analisarmos isso visualmente, vamos construir um **gráfico de dispersão**. Usaremos um conjunto de dados diferente para essas análises. - Copie e descompacte o arquivo abaixo no seu diretório * {{ :planeco:roteiro:bivar.csv.zip|bivar.zip}} -Importe o arquivo para o R bivar<-read.csv("bivar.csv") head(bivar) summary (bivar) Faça um gráfico de dispersão (ou //Gráfico XY//) e descreva sua primeira impressão sobre a relação entre as variáveis. plot(bivar$y.l ~ bivar$x.l) **Analisando esses gráficos, você conseguiria responderia às 4 questões colocadas no início dessa seção para cada um deles?** Para tentar captar a tendência da relação, você poderia ir traçando pequenas linhas que buscassem a melhor relação entre os dados da variável y.l e da variável x.l ao longo de pequenos trechos da variável x.l, como se estivesse desenhando "à mão". Existe uma função que faz isso. Ela se chama //lowess// e pode ser aplicada da seguinte forma: plot(bivar$y.l ~ bivar$x.l) lines(lowess(bivar$y.l ~ bivar$x.l)) **E agora, suas respostas às 4 questões colocadas no início dessa seção mudariam?** Agora vamos fazer o gráfico de dispersão para outras duas variáveis y.n (resposta) e x.n (preditora): plot(bivar$y.n ~ bivar$x.n) lines(lowess(bivar$y.n ~ bivar$x.n)) **Analisando esse gráfico, como você responderia às 4 questões colocadas no início dessa seção?** Existe um gráfico no pacote //car// que nos mostra várias informações de uma relação entre duas variáveis e pode ajudar bastante no entendimento da relação. scatterplot (bivar$y.l ~ bivar$x.l) scatterplot (bivar$y.n ~ bivar$x.n) ====Transformando os dados:==== Algumas vezes, a relação que observamos entre duas variáveis não é linear, mas gostaríamos de analisar essa relação dentro do escopo de uma Análise de Regressão Linear, em função das facilidades de trabalhar com esse tipo de análise. Para isso, precisamos recorrer aos recursos de **transformação dos dados**. Esses recursos podem ser utilizados para fazer com que a distribuição dos dados de uma variável (ou de ambas) seja mais similar a uma distribuição normal. ATENÇÃO: Atualmente, existem muitas formas alternativas de realizar as análises sem que haja necessidade de transformação dos dados (ver o tópico //Modelos Lineares Generalizados//). Porém, para esse tutorial, vamos analisar o que acontece quando usamos algumas transformações básicas. ==Logaritmo natural (ln)== Vamos analisar a relação entre as variáveis COMPRIMENTO_BICO e BIOMASSA_AVE e verificar se a relação parece linear. Para isso vamos utilizar o gráfico síntese produzido pelo pacote //car//: scatterplot(univar1$COMPRIMENTO_BICO ~ univar1$BIOMASSA_AVE) Como podemos observar pelos boxplots laterais, nesse caso, aparentemente são os dados da variável Y que parecem estar afetando a linearidade da relação. Então, vamos transformar os dados de Y pelo logaritmo natural e ver se o ajuste melhora. scatterplot (log(univar1$COMPRIMENTO_BICO) ~ univar1$BIOMASSA_AVE) **E agora, a relação parece mais linear? E os dados de log(univar1$COMPRIMENTO_BICO), estão distribuídos de forma mais similar a uma distribuição normal? ** **Cuidado! Agora a relação linear é entre "log(Comprimento de bico)" e a "Biomassa das aves", então é o "Logaritmo do Comprimento de bico" que aumenta a uma taxa constante em relação à "Biomassa das aves" e não mais o "Comprimento de bico". ** Outras transformações que podem ser utilizadas: ) logaritmo base 10 (também para variáveis contínuas) ) logaritmo natural de x+1 (quando a variável tem muitos zeros) ) raiz quadrada (para variáveis que representam contagens, p.ex.: número de indivíduos) ) arco seno (para variáveis que representam proporções/porcentagens) /* ====ANALISANDO DADOS BIVARIADOS==== Muitas vezes não estamos interessados em analisar a distribuição de uma variável //per se//, mas sim em analisar se existe alguma relação entre duas variáveis numéricas ordenadas. Alguns pontos que queremos analisar quando testamos uma relação entre variáveis são: * 1 - Qual a direção da relação (positiva ou negativa)? * 2 - A relação é linear (i.e. para cada aumento na variável X, a variável Y aumenta a uma taxa constante)? * 3 - Como os valores da variável do eixo Y variam em relação aos valores da variável do eixo X (muita ou pouca variação nos valores de Y para valores similares de X)? * 4 - A variação de Y é similar ao longo de todo o eixo X? Para analisarmos isso visualmente, vamos construir um **gráfico de dispersão**. Por meio deste gráfico de dispersão (ou //Gráfico XY//), é possível obter uma primeira impressão sobre a relação entre as variáveis. */ /* TUDO ABAIXO DAQUI ESTÁ OCULTO!!!!!!!!!!!!!! plot(univar1$COMPRIMENTO_BICO ~ univar1$TAMANHO_SEMENTES) plot(univar1$BIOMASSA_AVE ~ univar1$BIOMASSA_INSETOS) Analisando esses gráficos, você conseguiria responderia às 4 questões colocadas no início dessa seção para cada um deles? Se você pudesse ir traçando linhas buscando entender a tendência dos dados da variável Y ao longo da variação de X ajudaria na compreensão dos resultados? Existe uma função que faz isso. Ela se chama //lowess// e pode ser aplicada da seguinte forma: lines(lowess(bivar$yyyyy ~ bivar$xxxxx)) E agora, como você responderia às 4 questões colocadas no início dessa seção? Agora vamos fazer o gráfico de dispersão para outras duas variáveis z (resposta) e w (preditora): plot (bivar$zzzzzz ~ bivar$wwwww) lines(lowess(bivar$zzzzzz ~ bivar$wwwww)) Analisando esse gráfico, como você responderia às 4 questões colocadas no início dessa seção? Existe um gráfico no pacote //car// que nos mostra várias informações de uma relação entre duas variáveis e pode ajudar bastante no entendimento da relação. scatterplot (bivar$yyyyy ~ bivar$xxxxx) scatterplot (bivar$zzzzzz ~ bivar$wwwww) ====Transformando os dados:==== Algumas vezes, a relação que observamos entre duas variáveis não é linear, mas gostaríamos de analisar essa relação dentro do escopo de uma Análise de Regressão Linear, em função das facilidades de trabalhar com esse tipo de análise. Para isso, precisamos recorrer aos recursos de **transformação dos dados**. Esses recursos podem ser utilizados para fazer com que a distribuição dos dados de uma variável (ou de ambas) seja mais similar a uma distribuição normal. ATENÇÃO: Atualmente, existem muitas formas alternativas de realizar as análises sem que haja necessidade de transformação dos dados (ver tópico XXXX). Porém, para esse tutorial, vamos analisar o que acontece quando usamos algumas transformações básicas. ) logaritmo natural Vamos analisar a relação entre essas duas variáveis BLA e BLE e verificar se a relação parece linear. Para isso vamos utilizar o gráfico síntese produzido pelo pacote //car//: scatterplot (bivar$BLA ~bivar$BLE) Como podemos observar pelos boxplots laterais, nesse caso, aparentemente são os dados da variável Y que parecem estar afetando a linearidade da relação. Então, vamos transformar os dados de Y pelo ln e ver se o ajuste melhora. scatterplot (ln(bivar$BLA) ~bivar$BLE) E agora, a relação parece mais linear? E os dados de ln(BLA), estão distribuídos de forma mais similar a uma distribuição normal? ATENÇÃO: Cuidado! Agora a relação linear é entre ln(BLA) e BLE, então é ln(BLA) que aumenta a uma taxa constante em relação a BLE e não mais BLA. Outras transformações que podem ser utilizadas: ) logaritmo base 10 (também para variáveis contínuas) ) logaritmo natural de x+1 (quando a variável tem muitos zeros) ) raiz quadrada (para variáveis que representam contagens, p.ex.: número de indivíduos) ) arco seno (para variáveis que representam proporções/porcentagens) Existe uma forma genérica de transformar os dados denominada **Transformação Box-Cox** Essa transformação segue a seguinte equação: COLAR EQUAÇÃO BOX-COX Onde y é um valor da variável resposta, e lambda é o parâmetro de transformação. Quando lambda é igual a zero, usa-se ln(y). Como é calculado o lambda? Considerando-se que o objetivo é conseguir uma transformação que melhor ajuste os dados a uma distribuição normal, podemos seguir os seguintes passos: 1) Comparar, por meio de um gráfico quantil-quantil (colocar link para gráfico acima) os dados reais com os valores esperados para uma distribuição normal. É possível obter um valor do ajuste dessas distribuições, chamado coeficiente de correlação. Maiores valores do coeficiente de correlação indicam melhor ajuste a uma distribuição normal. 2) Transformar os dados para um determinado valor de lambda (por exemplo lambda = -3); comparar esses dados transformados, por meio de um gráfico quantil-quantil, com os valores esperados para uma distribuição normal. Calcula o coeficiente de correlação e compara com o coeficiente de correlação dos dados reais; 3) Transformar os dados para um determinado valor de lambda (por exemplo lambda = +2); comparar esses dados transformados, por meio de um gráfico quantil-quantil, com os valores esperados para uma distribuição normal. Calcula o coeficiente de correlação e compara com o coeficiente de correlação dos dados reais. Também compara com o coeficiente de correlação dos valores transformados por lambda = -3; 4) Repetir o mesmo procedimento (2 e 3) para muitos valores de lambda (negativos e positivos) 5) Elabora um gráfico que tenha no eixo X os valores de lambda pelos quais os dados foram transformados e no eixo Y o valor do coeficiente de correlação obtido na relação dos dados transformados com a distribuição normal. 6) encontra o maior coeficiente de correlação observado e usa na Análise de Regressão Linear a variável y transformada pelo valor de lambda correspondente. Veja abaixo um exemplo de aplicação da transformação de Box-Cox. Nesse exemplo, o maior coeficiente de correlação observado foi quando os dados foram transformados por **lambda=-0,3**. Quando o histograma dos dados transformados é plotado, é possível observar que realmente eles apresentam uma distribuição mais simétrica quando comparados aos dados reais. FIGURINHA DE MÁGICA Parece mágica, não? Mas novamente cuidado com a interpretação dos resultados, pois ao analisar a relação entre Y transformada e X, a taxa de mudança no valor de Y não é mais sobre os dados reais, e muitas vezes é difícil interpretar biologicamente o que significa Y transformado por lambda= -0,3 ATÉ AQUI!!!!!!!!!!! */ /* Se houver tempo: **Analise as outras variáveis numéricas (tanto preditoras quanto resposta) do outro conjunto de dados (univar2)** Para isso, basta usar os mesmos comandos, mas precisa substituir o nome do conjunto de dados, que vem imediatamente antes do símbolo '$" e o nome da variável, que vem depois do símbolo "$". Obs.: Coloque os nomes das variáveis exatamente como eles aparecem na planilha. CHECAR NOMES Exemplo: ao invés de hist(univar$biomass) use hist(univar$nitrogen) ou hist(bivar$hormonio) ------------- Por fim, podemos analisar visualmente a relação entre todas as variáveis que foram coletadas em um determinado estudo. ) matrizes de correlação Se eu conseguir, pretendo incluir a Power Analysis nessa aula, como uma forma de checar se as amostras são suficientes. Mas não sei se vai dar tempo, principalmente de estudar isso. */