Você está na página 1de 56

Estatística básica aplicada à

ecologia utilizando o R
Simone Jaqueline Cardoso e Juliane Floriano Lopes Santos | PGECOL | 2019
Table of Contents
1 - Introdução à linguagem R - conceitos fundamentais de programação ................... 3

2 - Funções básicas de instalação de importação e leitura de dados no R ................... 5

3 - elementos básicos de estatística aplicada à ecologia - média, variância, desvio

padrão medianas, quartis e percentis ...............................................................................12

5 - Teste t e teste t pareado ................................................................................................. 24

6 - ANOVA, ANOVA Fatorial e ANOVA para medidas repetidas .................................... 31

7 - Qui-Quadrado .................................................................................................................. 38

8 - Testes Não Paramétricos ...............................................................................................40

9 - Regressão Linear Simples .............................................................................................. 42

11 - Regressão Logística ....................................................................................................... 49

12 - Correlação e Regressão Múltipla ................................................................................ 53

2
1 - Introdução à linguagem R - conceitos fundamentais de
programação

1.1 – O que é o R?

O R é um programa para cálculos e programações!

1.2 - Intalando o R/R Studio

R: https://www.r-project.org/

R Studio: https://www.rstudio.com/products/rstudio/download/

1.3 – Reconhecendo as funcionalidades dos programas

-R

- R studio

1.4 - Informações Gerais:

a) Tudo o que será desenvolvido no R será digitado em sua “linha de comando”;

b) O prompt (sinal de maior (>)) indica que o R está pronto para o trabalho;

c) Todos os comandos digitados aparecem em vermelho e o resultado do R (output) é


em azul;

d) O sinal hashtag (#) indica um comentários a respeito dos comandos (o R não


considera o que está escrito após o sinal #).

e) O R diferencia entre letras maiúsculas e minúsculas (chamado de case-sensitive) e


o separador decimal é ponto (.). Neste caso, sugiro que durante a nossa aula vocês
alterem a configuração regional do computador para inglês;

3
f) Evitem usar acentos nas palavras;

g) Sempre que aparecer o sinal positivo (+) na linha de comando, este sinal estará
indicando que o comando digitado está incompleto. Para retornar ao prompt (>)
pressione Esc.

1.5 – Criação de cabeçalhos e localização de diretório de trabalho

1.5.1 – Organização da “pasta de trabalho”

Dentro do disco local (C:) crie uma pasta chamada “R” #Grave dentro dela tudo o
que você faça no R!

Caso esteja utiliando um outro drive (hd externo por exemplo) e você queira gravar
seus dados dentro dele, selecione então outro drive (D:)

Dentro da sua pasta de trabalho (“R”), crie uma pasta chamada:


“Estatistica_PGECOL_2019”. Nesta pasta colocaremos todos os arquivos que vamos
utilizar na disciplina.

1.5.2 - Iniciando os trabalhos:

- Antes de iniciar os trabalhos, cole a pasta “PRATICAS” na pasta


“Estatística_PGECOL_2019”. Essa pasta contém os exemplos que serão utilizados
nas aulas práticas

- Após abrir o R, vá para o menu File e escolha “ChangeDir”, ao abrir a janela


selecione a pasta “Estatistica_PGECOL_2019”

- Para mudar o diretório digite o comando e onde deseja salvar e buscar objetos:
setwd("C:/R/Estatistica_PGECOL_2019/PRATICAS")

4
1.6 - Como utilizar o sistema de ajuda do R

help() # sistema online de ajuda – documentação do R

help.start() #busca ajuda na interface do programa

help.search(“palavra”) #busca ajuda no CRAN sobre o termo (argumento) que você


deseja

?palavra # busca a palavra na interface do programa e nos pacotes

??palavra # busca a palavra na internet (CRAN)

1.7 – O R como uma grande calculadora

2+2

15/3

10-2

2^3

2 - Funções básicas de instalação de importação e leitura de


dados no R

2.1 – Criação de arquivos

2.1.1 - Importância do gerenciados de planilhas (por exemplo Excel):

- Alinhamento de caracteres numéricos e não-numéricos, cuidado para não mexer no


alinhamento dos dados!

5
- O R não reconhece espaços nos nomes das colunas. Use underline (“_”) ou nomes curtos

- Exemplo1 – salvar como txt ou copiar e colar no bloco de notas.

- Cuidado com os separadores decimais! Recomenda-se a mudança das configurações do


seu computador para ponto como separador decimal.

2.1.2 – Console e script

- cabeçalho e informações

- setwd(choose.dir())

- dir()

#Se o comando choose.dir não funcionar (p.ex MAC) use:

- No menu arquivo selecione: mudar diretório (dir)

Ou

setwd("C:/R/Estatistica_PGECOL_2019/PRATICAS")

getwd()

2.2 – Importação de dados quantitativos e dados qualitativos

2.2.1 – Importando arquivos

- Ler o arquivo “pratica1.txt”

dados<-read.table("pratica1.txt ", header=T, row.names=1)

6
# O argumento “header” informa que o arquivo tem nome nas colunas e “row.names”, que
a primeira coluna corresponde aos nomes das linhas.

- A pasta “PRATICAS” contém um arquivo chamado “pratica1.txt”, que apresenta dados


de ambientes com matas em diferentes estágios de sucessão (primário e secundário),
riqueza e abundância da espécie 1. O arquivo de dados de trabalho pode ser feito no Excel
e deve ser salvo em .txt separado por tabulações. Há também a opção de salvar os dados
em .csv e .csv2, dentre outras possibilidades. caso você tenha problemas em ler o arquivo
em formato .txt, tente a opção .csv.

dados<-read.csv("pratica1.csv", header=T)

Caso precisem modificar algo no arquivo não é necessário importá-lo novamente. Utilizem
a função “Edit”, que abrirá uma janela e permitirá modificar os dados:

dados<-edit(dados)

2.3 - Seleção de linhas e colunas [linha,coluna]:

pratica1[1,] # todos elementos da primeira linha

pratica1[,1] # todos elementos da primeira coluna

pratica1[1,1] # o elemento situado na primeira linha e primeira coluna

pratica1[-c(1,3),] # todas as linhas com exceção das linhas 1 e 3.

pratica1[-c(1,3),-c(1,2)]# todas as linhas com exceção das linhas 1 e 3 e todas as colunas com
exceção das colunas 1 e 2.

7
2.4 - Leitura de dados

dados #"chama" o objeto; mas nem sempre é uma boa...

head(dados) #mostra as 6 primeiras linhas do conjunto de dados

tail(dados) #mostra as 6 últimas linhas do conjunto de dados

names(dados) #mostra os nomes das variáveis

summary(dados) #cria um sumário dos dados

str(dados) #mostra os atributos de cada uma das colunas

attach(dados) #faz o R "enxergar" os nomes das variáveis

ctrla #seleciona todo o script

ctrlr #executa as funções selecionadas

ctrlenter # executa as funções selecionadas

2.5 – Funções de estatística descritiva:

max() # retorna o valor máximo de um campo

min() #retorna o valor mínimo de um campo

mean() #retorna a média de um campo

median() #retorna a mediana de um campo

sd() #retorna o desvio padrão de um campo

var() #retorna a variância de um campo

sum() #retorna a soma (total) de um campo

length() #retorna a quantidade de elementos em um campo

range() #retorna os valores mínimo e máximo de um campo

table() #conta o número de classes da variável categórica

8
rm() #remove o conjunto de dados da memória. É o delete do R!

apply() #executa funções específicas. Procure a ajuda pra essa função (e suas variantes
tapply e lapply) e veja todas as possibilidades.

2.6 – Alguns argumentos gráficos (use também o help do comando para mais
exemplos):

cex= #altera o tamanho da fonte

cex.axis= #altera o tamanho da fonte dos eixos

las= #altera o alinhamento dos valores nos eixos

xlab= ” ” #adiciona um título para o eixo x

ylab=” ” #adiciona um título para o eixo y

xlim= #define o limite do eixo x

ylim= #define o limite do eixo y

main= ” ” #define o título do gráfico

col= ” ” #define a cor

lty= “ “ #valores numéricos para alterar os tipos de linha

pch= #para simbolo do plot. Bolinha cheia=16

legend() = #adiciona uma legenda em um gráfico que está aberto

2.7 – Mais alguns argumentos gráficos:

abline(v= ou h=) #adiciona uma linha no gráfico

mfrow=c(x , y)) #divide a janela gráfica em diferentes linhas (x) e colunas (y)

par(mar=c(1, 1, 1, 1)) #para alterar o tamanho das margens dos gráficos

plot(variável[fator==”nível ”]) # Os colchetes criam uma condição

9
levels() #mostra os tipos de classe na ordem (variável qualitativa ou categórica)

2.8 – Criação de objetos no R

dados<-read.table("pratica1.txt", header=T, row.names=1)

2.9 - Separação de dados em subconjuntos

mp<-dados$Ambiente[dados$Ambiente==”primário”]

ms<-dados$Ambiente[dados$Ambiente==”secundario”]

mp<- Ambiente[Ambiente==”primário”]

ms<- Ambiente[Ambiente==”secundario”]

2.10 - Funções básicas de manipulação de objetos

ma.c <- cbind(ve.1, ve.2) # Cola/combina colunas

ma.r <- rbind(ve.1, ve.2) # Cola/combina linhas

2.11 - selecao condicional

# selecionar algo da variavel com alguma condicao

# operadores de comparacao

foo <- 2

bar <- 5

foo > bar # maior que

10
foo >= bar # maior que ou igual a

foo < bar # menor que

foo <= bar # menor que ou igual a

foo == bar # igualdade

foo != bar # diferenca

2.12 - Funções básicas de instalação de pacotes

Para essa disciplina serão usados diversos pacotes. Esses pacotes poderão ser
instalados digitando o comando “install.packages”. É necessário estar conectado à
internet!

install.packages("vegan")

Para realização das análises será necessário carregar os pacotes específicos. Para
isso usa-se o comando “library()” com o nome do pacote entre os parênteses.

ATIVIDADE:

- Organize seus dados em uma planilha (ou crie uma planilha de dados qualquer ou use o
arquivo atividade1)

- Importe seus dados para o R

- Faça uma exploração dos seus dados utilizando os comandos de leitura de dados (item 3)
e funções de estatística descritiva (item 3.1)

-Salve seu script como atividade1

11
3 - Elementos básicos de estatística aplicada à ecologia - média,
variância, desvio padrão medianas, quartis e percentis

3.1 – Média

Abrir o R

Criar um novo script – média, variância e desvio padrão

setwd(choose.dir())

dir()

dados<-read.table("pratica1.txt", header=T)

summary(dados)

str(dados)

attach(dados)

mean #Calcula a média de uma variável qualquer

var #Calcula a variância de uma variável qualquer

sd #Calcula o desvio padrão (Standard Deviation) de uma variável qualquer

#Cálculos simples:

mean(Riqueza)

12
mean(Area)

mean(Abund_sp1)

#Calculando a média por ambiente:

mean(Riqueza[Ambiente=="primario"]) #O duplo igual no R (==) significa


afirmação

mean(Riqueza[Ambiente=="secundario"])

#Calculando a média por ambiente utilizando a função tapply:

tapply(Riqueza, Ambiente, mean) #O tapply faz parte de uma família de


funções (apply). Aplica funções de acordo
com as categorias.

tapply(Riqueza, Ambiente, sd)

3.2 – Variância

#Cálculo simples:

var(Riqueza)

var(Area)

var(Abund_sp1)

13
3.3 - Desvio padrão

#Cálculos simples:

sd(Riqueza)

sd(Area)

sd(Abund_sp1) #Está na mesma unidade que a média. Por exemplo, se a média é


km2, o desvio também é km2

3.4 - Amplitude

#Cálculos simples:

max(Riqueza)-min(Riqueza)

max(Area)-min(Area)

3.5 - Coeficiente de variação (CV)

(sd(Riqueza)/mean(Riqueza))*100 # Neste caso, vamos supor que tenhamos


duas medidas com unidades diferentes,
portanto seria difícil compará-las. Para
podermos descobrir qual medida é a que varia
mais precisamos de uma outra medida, neste
caso o CV, que é o desvio padrão em
porcentagem.

(sd(Area)/mean(Area))*100

3.6 – Avaliação gráfica – Será que a média e o desvio padrão serão informativos?

par(mfrow=c(2, 1))

14
hist(Riqueza, col="gray") #col=cor

hist(Abund_sp1, col="gray") # A média tem dois problemas, o primeiro é que não traz a
informação sobre a variação dos dados. O segundo é que
nem sempre consegue representar a variação dos dados,
por exemplo em distribuições assimétricas (veja
histograma acima).

3.7 – Medianas, quartis e percentis

Abrir o R

Criar um novo script – medianas, quartis e percentis

setwd(choose.dir())

dir()

dados<-read.table("pratica1.txt", header=T)

summary(dados)

attach(dados)

mean(Abund_sp1)

sd(Abund_sp1) # Neste exemplo observamos que o desvio


padrão é muito próximo da média, então
recomenda-se fazer uma melhor exploração
dos dados através das medianas.

quantile(Abund_sp1) # Gera os valores mínimo, máximo, mediana e o primeiro e o


terceiro quatis. Neste caso há discrepância nos valores
extremos.

15
# Esta função só gera estes valores. Se quisermos valores
intermediários teremos que informar isso na função

#Calculando mais valores, como alguns percentis separadamente:

quantile(Abund_sp1, 0.1) #Apenas percentil 10

quantile(Abund_sp1, 0.90) #Apenas percentil 90

#Calculando mais de um valor ao mesmo tempo, usando a função concatenar:

quantile(Abund_sp1, c(0.1, 0.5, 0.9)) #Percentis 10 e 90 e mediana

#Calculando: mínimo, percentil 10, 1º quartil, mediana, 3º quartil, percentil 90 e máximo:

quantile(Abund_sp1, c(0, 0.1, 0.25, 0.5, 0.75, 0.9, 1))

3.8 – boxplot

boxplot(Abund_sp1)

tapply(Abund_sp1, Ambiente, quantile)

#Incluindo os ambientes no boxplot:

boxplot(Abund_sp1~Ambiente) # Testando se há diferença entre os ambientes. Testa


uma hipótese. Será que Abund_sp1 é diferente nos
ambientes?

16
4 - Lógica e teoria de testes estatísticos - intervalos de confiança
e transformação de dados, outliers, variâncias
heterogêneas, graus de liberdade e caudalidade do teste

4.1 - A lógica dos testes - O valor de p:

Script modelo – Profº Marcos Vital (UFAL)

Abrir o R

Abrir o script: “Logica dos testes” na pasta “PRATICAS”

4.2 – Teste t:

Abrir o R

setwd(choose.dir())

dir()

read.table("pratica1.txt", header=T)

dados<-read.table("pratica1.txt", header=T)

attach(dados)

summary(dados)

#Executando o teste t:

t.test(Riqueza~Ambiente)

4.3 - Intervalos de confiança:

17
#Calculando o intervalo de confiança:

Abrir o R

setwd(choose.dir())

dir()

Criar um novo script – Intervalos de confiança e transformação de dados

setwd(choose.dir())

dir()

dados<-read.table("pratica1.txt", header=T)

summary(dados)

str(dados)

attach(dados)

t.test(Riqueza~Ambiente, var.equal=T)

library(sciplot)

qt(0.975, 48)

qt(0.975, 48)*se(Riqueza)#Intervalo de confiança

#Sobre graus de liberdade - O 48 é o n(número de amostras, neste caso 50)- 2. Esta é a


fórmula do teste t (n-2).

#Calculando o n-2 automaticamente:

nrow(dados) #Número de linhas de um conjunto de dados.

nrow(dados)-2 #Cálculo dos graus de liberdade.

18
#Calculando um gráfico com intervalo de confiança:

lineplot.CI(Ambiente, Riqueza, type="p",

xlab="Ambiente", ylab="Riqueza de espécies",

ci.fun= function(x) c(mean(x)-qt(0.975, nrow(dados)-2)

*se(x), mean(x)+qt(0.975, nrow(dados)-2)*se(x)))

#Avisos:

#Salve seu objeto com o nome "dados"

#Mude o nome "Ambiente" para o nome da sua variável categórica

#Mude o nome "Riqueza" para o nome da sua variável quantitative

4.4 - Transformação e ranqueamento de dados:

#Transformação por log:

#Não é a melhor opção neste exemplo

log10(Riqueza)

log10(0) #Não tem log de 0! O R dá erro!

log10(1) #O log de 1 é 0 (zero)!

#Quando existem zeros na planilha (dados) é melhor fazer o log de x+1, ou seja, log da
variável mais 1.

19
log10(Riqueza+1) #Todo mundo que era zero, quando somar 1 vira 1, e
quando fizer o log, vira 0

4.5 - Outliers, variâncias heterogêneas, graus de liberdade e caudalidade do teste

Abrir o R

Criar um novo script – outliers, variâncias heterogêneas, graus de liberdade e


caudalidade do teste

setwd(choose.dir())

dir()

dados<-read.table("pratica1.txt", header=T)

summary(dados)

str(dados)

attach(dados)

#Avaliação gráfica:

head(dados) #6 primeiras linhas

tail(dados) #6 últimas linhas

hist(Riqueza)

boxplot(Riqueza~Ambiente)

plot(Riqueza~Ambiente)

plot.default(Riqueza~Ambiente) #Para observar pontos extremos

20
#Identificando pontos no gráfico:

text(Ambiente, Riqueza, label=row.names(dados), pos=4)

#Serve para anotar alguma coisa dentro da área do gráfico. Precisamos definir a posição do
texto no x, posição do texto no y.

mtext #para anotar alguma coisa na margem do gráfico.

row.names #coluna sem dados do R.

pos #posição no gráfico. O R possui quatro posições básicas. Em baixo, à equerda,


acima, a direita.

#Retirando pontos errados de uma análise:

#Criando um novo objeto:

dados.novos<-dados[-c(51, 52),] #[linhas, colunas]

tail(dados.novos)

#Caso você fosse trabalhar com os novos dados,

#Eu faria: detach(dados), e depois attach(dados.novos)

# Verificando a normalidade:

par(mfrow=c(1, 2))

qqnorm(Riqueza[Ambiente=="primário"])

qqline(Riqueza[Ambiente=="primário"], lty=2)

21
qqnorm(Riqueza[Ambiente=="secundário"])

qqline(Riqueza[Ambiente=="secundário"], lty=2)

#Heterogeneidade de variâncias:

library(car)

leveneTest(Riqueza~Ambiente)

#Só para ver os valores:

tapply(Riqueza, Ambiente, var)

#Possibilidade ideal (teste t para variáveis heterogêneas):

t.test(Riqueza~Ambiente, var.equal=F) #Viola os pressupostos da iqualdade das


variâncias.

library(sciplot)

lineplot.CI(Ambiente, Riqueza, type="p")

#Transformações:

#Transformação por log

#Não é a melhor opção neste exemplo

log10(Riqueza)

log10(0) #Não tem log de 0! O R dá erro!

22
log10(1) #O log de 1 é 0 (zero)! #Quando existem zeros na planilha (dados) é melhor
fazer o log de x+1, ou seja, log da variável mais 1.

log10(Riqueza+1) #Todo mundo que era zero, quando somar 1 vira 1, e quando fizer o
log, vira 0

#Criando um objeto com os valores encontrados:

logRiqueza<-log10(Riqueza+1)

#Com o objeto das variáveis transformadas criado, podemos fazer o teste de Levene:

leveneTest(logRiqueza~Ambiente)

t.test(logRiqueza~Ambiente)

lineplot.CI(Ambiente, logRiqueza, type="p")

#Salvando os dados novos na planilha:

cbind(dados, logRiqueza) #Função "column bind" - remendar, colar coisas

dados.novos<-cbind(dados, logRiqueza)

summary(dados.novos)

write.table(dados.novos, "dados_novos.txt") #Leva (salva) os dados de volta para a


planilha.

write.csv(dados.novos, "dados_novos.csv")

23
5 - Teste t e teste t pareado

5.1 – Teste t (para amostras independentes):

Abrir o R

Criar um novo script – Teste t e teste t pareado

setwd(choose.dir())

dir()

dados<-read.table("pratica1.txt", header=T)

summary(dados)

str(dados)

attach(dados)

#Pressuposto da normalidade:

hist(Riqueza)

par(mfrow=c(2, 1))

hist(Riqueza [Ambiente=="primário"])

hist(Riqueza [Ambiente=="secundário"])

boxplot(Riqueza~Ambiente)

#Fazendo uma inspeção visual:

#qqnorm - Cria um gráfico de "normal probability plot"

qqnorm(Riqueza)

qqline(Riqueza, lty=2)

24
par(mfrow=c(1, 2))

qqnorm(Riqueza[Ambiente=="primário"])

qqline(Riqueza[Ambiente=="primário"], lty=2)

qqnorm(Riqueza[Ambiente=="secundário"])

qqline(Riqueza[Ambiente=="secundário"], lty=2)

#Teste de normalidade:

#Teste de Shapiro-Wilk (mais aceito atualmente)

#É preciso tomar cuidado porque neste caso a hipótese nula é que


"os dados seguem uma distribuição normal". Ou seja, um p > 0.05
significa que os dados SÃO normais, por outro lado, um p < 0.05
significa que os dados NÃO são normais.

shapiro.test(Riqueza[Ambiente=="primário"])

shapiro.test(Riqueza[Ambiente=="secundário"])

#Pressuposto da homogeneidade de variâncias:

#Quanto que os dados variam em torno da média. Pressupõe que as


variâncias dos tratamentos são homogêneas em torno da média. Se
as variâncias não forem homogêneas é preciso fazer outro teste
(teste t para variâncias heterogêneas).

boxplot(Riqueza~Ambiente)

#Teste de Levene:

#A hipótese nula no teste de Levene é de que as variâncias são


iguais.

#Para este teste é preciso carregar um pacote chamado car.

#Pr = valor de p

25
library(car)

leveneTest(Riqueza~Ambiente)

#Teste t:

#É preciso informar para o R que a igualdade das variâncias é


verdadeira. Se não informarmos isso, ele faz o cáculo para
variâncias heterogêneas (um cálculo diferente do t=DP/raiz
quadrada de n), default do R.

#Teste t para variâncias heterogêneas:

#Se você não informar que há igualdade das variâncias, o R faz o


teste para variâncias heterogêneas

t.test(Riqueza~Ambiente, var.equal=T)

#Fazendo um gráfico para inspeção visual:

library(sciplot)

lineplot.CI(Ambiente, Riqueza, type="p", xlab="Ambiente", ylab="Riqueza de


espécies")

5.2 – Relatando um teste t

Imagine que você está fazendo uma descrição dos métodos e escrevendo seus resultados:

Métodos:

“Para testar a hipótese de que o número de espécies é diferente entre os dois tipos de
ambientes estudados, realizamos um teste t para amostras independentes
(citação).”

26
Resultados:

“Em média o número de espécies encontrado nos fragmentos de mata primária foi de 31,7,
maior do que o valor médio nas matas secundárias, que foi de 27,2. Esta diferença
de aproximadamente 4,5 espécies é estatisticamente significativa pelo teste t (t =
2,01, GL = 48, p = 0,049).”

#Calculando o intervalo de confiança (IC):

library(sciplot)

lineplot.CI(Ambiente, Riqueza, var.equal=T)

?Lineplot.CI

#Primeiro usando uma fórmula aproximada:

lineplot.CI(Ambiente, Riqueza, type="p", xlab="Ambiente", ylab="Riqueza de


espécies", ci.fun= function(x) c(mean(x)-2*se(x), mean(x)+2*se(x)))

#Para calcular o intervalo de confiança (IC), usamos a distribuição


t.

#Para calcular o IC = precisamos de dois parâmetros: 1)O grau de


confiança(95%) e 2)Os graus de liberdade.

#2*se(x)=aproximação grosseira do IC.

#Uma maneira de se calcular o IC é multiplicar por 1,96 o erro


padrão (EP).

#Calculando o valor exato:

#Usaremos a função qt - t=distribuição t

27
#É preciso fornecer duas informações. Primeiro a probabilidade a
qual eu quero associar o meu intervalo; depois, os graus de
liberdade (dá para ver pelo resultado do teste t).

qt(0.975, 48)

par(mfrow=c(1, 2))

lineplot.CI(Ambiente, Riqueza, type="p", xlab="Ambiente", ylab="Riqueza de


espécies",

ci.fun= function(x) c(mean(x)-qt(0.975, 48)

*se(x), mean(x)+qt(0.975, 48)

*se(x)))

lineplot.CI(Ambiente, Riqueza, type="p", xlab="Ambiente", ylab="Riqueza de


espécies",

ci.fun= function(x) c(mean(x)-sd(x), mean(x)+sd(x)))

#Após a aula sobre caudalidade podemos refazer o teste:

#Baseado em predição lógica. Raciocínio prévio! Uma expectativa


clara, convincente de que uma média será maior do que a outra.

#Teste bicaudal:

t.test(Riqueza~Ambiente, var.equal=T)

#Teste monocaudal:

t.test(Riqueza~Ambiente, var.equal=T, alternative="greater")

#Se a gente acha que a primeira média é maior que a


segunda=greater, mas se achamos que é menor=less. Se a gente
executar o teste t, veremos no resultado quem é a primeira média e

28
quem é a segunda. Mas, a classe que vem primeiro, sempre será a
primeira em ordem alfabética.

#Para saber quem vem primeiro:

#Chamando as variáveis, o R mostra os níveis em ordem.

Ambiente

levels(Ambiente)

5.3 – Teste t pareado (para amostras dependentes):

setwd(choose.dir())

dir()

read.table("pares.txt", header=T)

dados<-read.table("pares.txt", header=T)

attach(dados)

summary(dados)

#Pressupostos:

diferenças<-Ramo_desoberto-Ramo_coberto

diferenças

#Calcular a normalidade das diferenças:

qqnorm(diferenças)

qqline(diferenças, lty=2)

29
shapiro.test(diferenças)

t.test(Ramo_desoberto, Ramo_coberto, paired=T, alternative="greater")

#Gráfico:

matplot(t(dados[ ,2:3]), type="b", pch=16, col="black", lty=3,

ylab="Número de frutos", xlab="Tratamentos")

#Função diferente, pois exige dois vetores. Transformar as colunas em


linhas.

#type=p - ponto, type=l - linhas, type=b - both (os dois)

t(dados) # Transpose

30
6 - ANOVA, ANOVA Fatorial e ANOVA para medidas repetidas

Abrir o R

Criar um novo script - ANOVA, ANOVA fatorial e ANOVA medidas repetidas

setwd(choose.dir())

dir()

read.table("peixes.txt", header=T)

dados<-read.table("peixes.txt", header=T)

attach(dados)

summary(dados)

6.1 – ANOVA simples

#Teste de homogeneidade de variâncias:

library(car)

leveneTest(Densidade~Predador)

# Aceitamos o pressuposto, vamos seguir:

#Testanto a normalidade dos resíduos (é o mesmo para todos os modelos lineares):

#aov=função para ANOVA

resultado<-aov(Densidade~Predador) #salvou o resultado em um objeto "resultado".

ls() #Lista os objetos na memória do R

ls(resultado) #Lista "as partes" de um objeto

31
#Testando a normalidade dos resíduos:

# $ = serve para indicar hieraquia no R, substitui o objeto criado


pelo attach. Se não tivesse dado o attach, a maneira de chamar uma
variável seria colocar dados$variável.

dados$Densidade #Desidade é uma coisa que faz parte do objeto dados.

#Os resíduos:

resultado$residuals

qqnorm(resultado$residuals)

qqline(resultado$residuals, lty=2)

#Se quiser use um teste de normalidade:

shapiro.test(resultado$residuals) #A hipótese nula é de que a distribuição é normal.

summary(resultado)

#E agora? Quem é diferente de quem?

#Comparação visual (pela barra de erros):

library(sciplot)

lineplot.CI(Predador, Densidade, type="p")

#Se preferir, use um teste a posteriori.

32
#Testes a posteriori:

#Teste de Tukey:

TukeyHSD(resultado)

#Se quiser olhar as médias:

tapply(Densidade, Predador, mean)

6.2 – ANOVA fatorial

read.table("atividade.txt", header=T)

dados<-read.table("atividade.txt", header=T)

attach(dados)

summary(dados)

#Testando os pressupostos:

#Homogeneidade de variâncias:

library(car)

leveneTest(atividade~Especie)

leveneTest(atividade~Sexo)

resultado<-aov(atividade~Especie*Sexo)

#Especie+Sexo = anova simples, dos dois fatores sem interação

#Especie:Sexo = anova fatorial, mas só testa a interação

#Especie*Sexo = anova simples + anova fatorial

33
qqnorm(resultado$residuals)

qqline(resultado$residuals, lty=2)

summary(resultado)

#Sempre olhamos uma tabela de ANOVA fatorial de baixo para


cima. Se a interação tem efeitos significativos, ignoramos os efeitos
individuais, porque eles não são boas representações da realidade.

#Gráfico:

library(sciplot)

lineplot.CI(Especie, atividade, Sexo)

lineplot.CI(Sexo, atividade, Especie)

6.3 – ANOVA para medidas repetidas

Abrir o R

Criar um novo script – aov medidas repetidas

setwd(choose.dir())

dir()

mouse<- read.table ("camundongo.txt", h = T)

#Para ver as 6 primeiras linhas

head(mouse)

#Para ver o nome das colunas

names(mouse)

34
#Visualizacao

boxplot(mouse$tempo ~ mouse$sessao)

#Teste de normalidade de Shapiro Wilk

lapply(split(mouse$tempo,mouse$sessao),shapiro.test)

#Teste de esfericidade

#Organização dos dados: matrix onde cada linha contem o tempo de exploracao por 1
camundongo

matrixmouse<- matrix(mouse$tempo,nrow=7,byrow=F)

matrixmouse

#Teste de Mauchly

mauchly.test(lm(matrixmouse ~ 1))

#ANOVA de medidas repetidas

model<-aov(tempo~sessao+Error(sujeito), data=mouse)

summary(model)

model2<-aov(tempo~sessao, data=mouse)

summary(model2)

#Post-hoc (teste a posteriori)

pairwise.t.test(mouse$tempo,mouse$sessao,p.adj="BY")

??p.adj

35
#Teste equivalente não paramétrico

friedman.test(tempo ~ sessao | sujeito, data=mouse)

#Grafico

boxplot(mouse$tempo ~ mouse$sessao, xlab="Sessões", ylab="Tempo de


Exploração (Min)")

# Utilizando o pacote ggplot

library(ggplot2)

qplot(mouse$sessao, mouse$tempo, geom="boxplot")

ggplot(mouse, aes(x=sessao, y=tempo)) + geom_boxplot()

#Exemplo 2

#Bebês reconhecem a lingua materna?

bebes<-read.table("newborn.txt", h=T)

head(bebes)

#Teste de normalidade de Shapiro Wilk

lapply(split(bebes$rate,bebes$language),shapiro.test)

#Teste de esfericidade

#Organização dos dados: matrix onde cada linha contem a taxa de choro de cada bebê

matrixbebes<-matrix(bebes$rate,nrow=2,byrow=F)

matrixbebes

36
#Teste de Mauchly

mauchly.test(lm(matrixbebes ~ 1))

m <- aov(rate ~ language + Error(participant), data=newborn)

summary(m)

#Gráfico

boxplot(bebes$rate ~ bebes$language, xlab="Lingua Materna", ylab="Taxa de Choro


(Min)")

#Faça você mesmo no ggplot2!

37
7 - Qui-Quadrado
Abrir o R

Criar um novo script – Qui-Quadrado

setwd(choose.dir())

dir()

read.table("sanhaços.txt", header=T)

dados<-read.table("sanhaços.txt", header=T)

attach(dados)

summary(dados)

##Transformação dos dados em uma tabela de contingência:

tabela1<-table(Ave, Árvore)

tabela1 #Tabela de contingência

tabela2<-table(Árvore, Ave)

tabela2 #Tabela de contingência

##Gráfico de barras:

barplot(tabela1, beside=T, legend=row.names(tabela1))

barplot(tabela2, beside=T, legend=row.names(tabela2))

## Teste de Qui-quadrado:

#H0 = as classes estudadas não possuem associação nenhuma.

38
resultado<-chisq.test(tabela1)

resultado

resultado$expected

resultado2<-chisq.test(tabela2)

resultado2

resultado2$expected

39
8 - Testes Não Paramétricos
Abrir o R

Criar um novo script – Testes não paramétricos

setwd(choose.dir())

dir()

read.table("café.txt", header=T)

dados<-read.table("café.txt", header=T)

attach(dados)

summary(dados)

##Começando a olhar os dados:

hist(Escala, las=1, ylab="Frequência de ocorrência")

par(mfrow=c(1,2))

hist(Escala[Formação=="Graduação"], las=1, ylab="Frequência de ocorrência")

hist(Escala[Formação=="Pós-graduação"], las=1, ylab="Frequência de ocorrência")

par(mfrow=c(1,2))

qqnorm(Escala[Formação=="Graduação"], las=1, pch=16)

qqline(Escala[Formação=="Graduação"], lty=2)

qqnorm(Escala[Formação=="Pós-graduação"], las=1, pch=16)

qqline(Escala[Formação=="Pós-graduação"], lty=2)

40
#Explorando a dispesão dos dados:

boxplot(Escala~Formação)

##Teste de Kruskal Wallis:

#Trabalha com a soma dos Rankings

kruskal.test(Escala~Formação)

##Caso particular para dois grupos

#Mann-Whitney

wilcox.test(Escala~Formação) #É o mesmo teste de Mann-Whitney

#Outros testes:

library(devtools)

posttest<-nemenyTest(a = MO, g = ambiente, dist = “Tukey”)

pairwise.wilcox.test(MO, ambiente, p.adjust.method = “none”)

library(dunn.test)

dunn.test (x, g=NA, method=p.adjustment.methods, kw=TRUE, label=TRUE,

wrap=FALSE, table=TRUE, list=FALSE, rmc=FALSE, alpha=0.05, altp=FALSE)

41
9 - Regressão Linear Simples
Abrir o R

Criar um novo script – Regressão linear simples

setwd(choose.dir())

dir()

dados<-read.table("pratica1.txt", header=T)

attach(dados)

summary(dados)

#Primeira inspesão visual:

#Gráfico:

plot(Riqueza~Área, pch=16, las=1)

#Regressão linear no R:

#Usamos a função lm = linear model.

#Também pode ser utilizada para regressão múltipla

resultado<-lm(Riqueza~Área)

#Pressupostos:

#Normalidade:

qqnorm(resultado$residuals)

qqline(resultado$residuals, lty=2)

42
#Homocedasticidade:

#fitted values=são os valores ajustados na reta

#plot(eixo x, eixo y)

#Os resíduos iguais a zero são os pontos que cairam exatamente em


cima da reta da regressão!

#h=0 (uma linha horizontal no zero)

plot(resultado$fitted, resultado$residuals)

abline(h=0, lty=2) #Em uma homocedasticidade eu espero não encontrar padrão


algum!Dados homogeneamente distribuidos acima, abaixo, a direita e
a esquerda da linha!

#Olhando o resultado do teste:

summary(resultado)

#A equação seria:

#riqueza=B0+B1(área)+resíduos

#riqueza=15+0.14*área

#Gráfico da regressão:

plot(Riqueza~Área, pch=16, las=1)

abline(resultado, lty=2, col="red")

#Brincando um pouquinho:

#Separando os resultados por ambiente(primário e secundário):

#resultado.p(primário) e resultado.s(secundário)

resultado.p<-lm(Riqueza[Ambiente=="primário"]~Área[Ambiente=="primário"])

43
resultado.s<-
lm(Riqueza[Ambiente=="secundário"]~Área[Ambiente=="secundário"])

#Testando os pressupostos:

#Mata primária:

#Normalidade:

qqnorm(resultado.p$residuals)

qqline(resultado.p$residuals, lty=2)

#Homocedasticidade:

plot(resultado.p$fitted, resultado.p$residuals)

abline(h=0, lty=2)

#Resultado:

summary(resultado.p)

#Gráfico:

plot(Riqueza[Ambiente=="primário"]~Área[Ambiente=="primário"], pch=16, las=1)

abline(resultado.p, lty=2, col="red")

#Mata secundária:

#Normalidade:

qqnorm(resultado.s$residuals)

qqline(resultado.s$residuals, lty=2)

44
#Homocedasticidade:

plot(resultado.s$fitted, resultado.s$residuals)

abline(h=0, lty=2)

#Resultado:

summary(resultado.s)

#Gráfico:

plot(Riqueza[Ambiente=="secundário"]~Área[Ambiente=="secundário"], pch=16,
las=1)

abline(resultado.s, lty=2, col="red")

plot(Riqueza~Área, las=1,pch=16, col=c("green4", "red")[Ambiente])

abline(resultado.p, lty=2, col="green4")

abline(resultado.s, lty=2, col="red")

legend("topleft", pch=16, col=c("green4", "red"), legend=levels(Ambiente))

#Anotações matemáticas em gráficos do R. Incluindo as equações nos gráficos:

#Usar a função text. Permite adicionar qualquer tipo de texto em


uma coordenada do gráfico. Use as escalas dos eixo x e y para dar as
coordenadas da função. Por exemplo: text(80(x), 47(y)).

text(90, 48, "y = 11.6+0.19x", col="green4")

text(90, 46, "y = 16.6+0.1x", col="red")

#Se quiser notações mais complexas, use a função expression()

45
#E veja as regras em ?plotmath

#Um exemplo:

?plotmath

text(85, 48, expression(x^2))

text(85, 46, expression(x[a]))

#coisas fora = mtext (m=margem)

mtext(expression(x(a)), side=3)

plot(Riqueza~Área, las=1,pch=16, col=c("green4", "red")[Ambiente],


main=expression(x[a])) #Use text para textos ou expressões dentro do gráfico

#Use mtext para anotar nas margens do gráfico

#Use main para anotar no título do gráfico

46
10 - ANCOVA

Abrir o R

Criar um novo script – ANCOVA

setwd(choose.dir())

dir()

dados<-read.table("pratica1.txt", header=T)

summary(dados)

str(dados)

attach(dados)

resultado1<-aov(Riqueza~Ambiente*Área)

summary(resultado1)

#ANCOVA:

resultado2<-lm(Riqueza~Ambiente*Área)

summary(resultado2) #Resultado detalhado

anova(resultado2) #Resultado em tabela de anova

#As regressões aqui foram feitas apenas para termos os gráficos:

resultado.p<-lm(Riqueza[Ambiente=="primário"]~Área[Ambiente=="primário"])

resultado.s<-
lm(Riqueza[Ambiente=="secundário"]~Área[Ambiente=="secundário"])

summary(resultado.p)

summary(resultado.s)

47
#Estimativa, mata primária: 0.19612

#Estimativa, mata secundária: 0.10398

##Pressupostos da ancova, como pressupostos de outros modelos lineares:

#Normalidade:

qqnorm(resultado2$residuals)

qqline(resultado2$residuals, lty=2)

#Homocedasticidade:

plot(resultado2$fitted, resultado2$residuals)

abline(h=0, lty=2)

48
11 - Regressão Logística
Abrir o R

Criar um novo script – Regressão logística

setwd(choose.dir())

dir()

dados<-read.table("frutos.txt", header=T)

summary(dados)

str(dados)

attach(dados)

hist(Frutos)

frutos.classe<-ifelse(Frutos>0, "sim", "não")

frutos.classe<-as.factor(frutos.classe)

frutos.bin<-ifelse(Frutos>0, 1, 0)

resultado<-glm(frutos.classe~Folhas, family="binomial")

summary(resultado)

exp(coef(resultado))

plot(frutos.bin~Folhas, pch=16, las=1,

xlab="Número de folhas", ylab="Presença de frutos")

curve(predict(resultado, data.frame(Folhas=x), type="response"),

add=T, col="red", lty=2)

49
# Exemplo 2

library(aod)

library(ggplot2)

setwd("C:/Documents and Settings/Usuário/Meus documentos/scripts")

cupins <- read.table ("cupins_entomologia.txt", h = T)

names(cupins)

cupins$altura <- factor(cupins$altura)

mylogit <- glm(cupim ~ diametro + altura, data = cupins, family = "binomial")

summary(mylogit)

## CIs using profiled log-likelihood

confint(mylogit)

## CIs using standard errors

confint.default(mylogit)

## odds ratios and 95% CI

##You can also exponentiate the coefficients and interpret them as odds-ratios.

##To get the exponentiated coefficients, exponentiate (exp)coefficients


(coef(mylogit))

## We can use the same logic to get odds ratios and their confidence intervals,

## by exponentiating the confidence intervals from before.

50
## To put it all in one table, cbind

exp(cbind(OR = coef(mylogit), confint(mylogit)))

##Now we can say that for a one unit increase in diametro,

## a probabilidade de ocorrencia de cupins increase by a factor of 1.0041

# calculo da predicted probability da ocorrencia de cupins

# para cada nivel de altura e a media de diametro

newcupins <- with(cupins, data.frame(diametro = mean(diametro), altura=


factor(1:3)))

head(newcupins)

summary(cupins)

# valor min e max do diametro = 50 e 370

xtabs(~cupim + altura, data = cupins)

# me fornece o numero total de dados pra eu distribuir 50% em cada nivel da


categorica

# o total foi 360, entao coloco 120 para cada

newcupins2 <- with(cupins, data.frame(diametro = rep(seq(from = 50, to = 371,


length.out = 120),

3), altura = factor(rep(1:3, each = 120))))

head(newcupins2)

51
newcupins3 <- cbind(newcupins2, predict(mylogit, newdata = newcupins2, type =
"link", se = TRUE))

newcupins3 <- within(newcupins3, {

PredictedProb <- plogis(fit)

LL <- plogis(fit - (1.96 * se.fit))

UL <- plogis(fit + (1.96 * se.fit))

})

head(newcupins3)

## esse é o gráfico que eu quero incluir os pontos observados

ggplot(newcupins3, aes(x = diametro, y = PredictedProb)) + geom_ribbon(aes(ymin


= LL, ymax = UL, fill = altura), alpha = 0.2) + geom_line(aes(colour = altura),
size = 1)+theme_bw(base_size=11)

new.data <- cbind(cupins, newcupins3)

head(new.data)

## essa é uma das tentativas em adicoonar os pontos que não funcionou

ggplot(new.data, aes(x = diametro, y = PredictedProb)) + geom_smooth(aes(colour


= altura),

size = 1, se=TRUE)+theme_bw(base_size=11)

52
12 - Correlação e Regressão Múltipla
Abrir o R

Criar um novo script – Correlação e regressão múltipla

setwd(choose.dir())

dir()

12.1 – Correlação:

read.table("DensPraga.txt", header=T)

dados<-read.table("DensPraga.txt", header=T)

attach(dados)

summary(dados)

#Explorando os dados em busca de correlações:

#Correlação = uma medida do quanto uma variável varia junto com a outra.

#Correlação de Pearson

#Correlação =

# = 0 (sem correlação),

# = 1 (Perfeitamente e positivamente proporcionais),

# = -1 (Perfeitamente e negativamente proporcionais, quando um


aumenta o outro diminui).

#Gráfico:

#Não se escreve com til(~) porque não se presume uma relação de causa e efeito.

plot(Altitude, Temperatura)

53
#Calculando a correlação de Pearson:

cor(Altitude, Temperatura, method="pearson")

#Testando a significância da correlação:

cor.test(Altitude, Temperatura, method="pearson")

#Apenas como exemplo, correlação não paramétrica de Spearman

#É uma correlação que faz o teste por meio de Rankings dos dados.

#Funciona mais ou menos como a correlação de pearson. Também varia de 0


a 1.

cor.test(Altitude, Temperatura, method="spearman")

#Testando a significância da correlação:

cor.test(Altitude, Temperatura, method="spearman")

#Olhando para todas as correlações:

#Gera uma matriz de correlação!

cor(dados[ , 2:6])

#Função pairs. Mostra uma matriz de gráficos.

pairs(dados[ , 2:6])

#Incrementando a função pairs.

#Criando uma matriz de gráficos cheia de informação:

?pairs

54
# put histograms on the diagonal

panel.hist <- function(x, ...)

usr <- par("usr"); on.exit(par(usr))

par(usr = c(usr[1:2], 0, 1.5) )

h <- hist(x, plot = FALSE)

breaks <- h$breaks; nB <- length(breaks)

y <- h$counts; y <- y/max(y)

rect(breaks[-nB], 0, breaks[-1], y, col = "grey", ...)

## put (absolute) correlations on the upper panels,

## with size proportional to the correlations.

panel.cor <- function(x, y, digits = 2, prefix = "", cex.cor, ...)

usr <- par("usr"); on.exit(par(usr))

par(usr = c(0, 1, 0, 1))

r <- cor(x, y)

txt <- format(c(r, 0.123456789), digits = digits)[1]

txt <- paste0(prefix, txt)

if(missing(cex.cor)) cex.cor <- 0.8/strwidth(txt)

text(0.5, 0.5, txt, cex = 2)

pairs(dados[ , 2:6], diag.panel=panel.hist, upper.panel=panel.cor)

55
#diag=diagonal

12.2 – Regressão linear múltipla:

#Usando a versão pragmática (mantendo altitude e mata)

resultado<-lm(Dens_Praga~Altitude+Pluviosidade+Mata)

qqnorm(resultado$residuals)

qqline(resultado$residuals, lty=2)

#Olhando para a homocedasticidade:

plot(resultado$fitted, resultado$residuals)

abline(h=0, lty=2)

#summary do modelo:

summary(resultado)

#Se quiser mais facilidade para interpretar a variável mata:

Mata100<-Mata*100

resultado2<-lm(Dens_Praga~Altitude+Pluviosidade+Mata100)

summary(resultado2)

#Olhando o efeito de cada variável individualmente:

plot(Dens_Praga~Altitude, las=1, pch=16)

56

Você também pode gostar