Apostila R
Apostila R
Apostila R
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
7 - Qui-Quadrado .................................................................................................................. 38
2
1 - Introdução à linguagem R - conceitos fundamentais de
programação
1.1 – O que é o R?
R: https://www.r-project.org/
R Studio: https://www.rstudio.com/products/rstudio/download/
-R
- R studio
b) O prompt (sinal de maior (>)) indica que o R está pronto para o trabalho;
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.
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:)
- 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
2+2
15/3
10-2
2^3
5
- O R não reconhece espaços nos nomes das colunas. Use underline (“_”) ou nomes curtos
- cabeçalho e informações
- setwd(choose.dir())
- dir()
Ou
setwd("C:/R/Estatistica_PGECOL_2019/PRATICAS")
getwd()
6
# O argumento “header” informa que o arquivo tem nome nas colunas e “row.names”, que
a primeira coluna corresponde aos nomes das linhas.
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)
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
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):
mfrow=c(x , y)) #divide a janela gráfica em diferentes linhas (x) e colunas (y)
9
levels() #mostra os tipos de classe na ordem (variável qualitativa ou categórica)
mp<-dados$Ambiente[dados$Ambiente==”primário”]
ms<-dados$Ambiente[dados$Ambiente==”secundario”]
mp<- Ambiente[Ambiente==”primário”]
ms<- Ambiente[Ambiente==”secundario”]
# operadores de comparacao
foo <- 2
bar <- 5
10
foo >= bar # maior que ou igual a
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)
- 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)
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
setwd(choose.dir())
dir()
dados<-read.table("pratica1.txt", header=T)
summary(dados)
str(dados)
attach(dados)
#Cálculos simples:
mean(Riqueza)
12
mean(Area)
mean(Abund_sp1)
mean(Riqueza[Ambiente=="secundario"])
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)
3.4 - Amplitude
#Cálculos simples:
max(Riqueza)-min(Riqueza)
max(Area)-min(Area)
(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).
Abrir o R
setwd(choose.dir())
dir()
dados<-read.table("pratica1.txt", header=T)
summary(dados)
attach(dados)
mean(Abund_sp1)
15
# Esta função só gera estes valores. Se quisermos valores
intermediários teremos que informar isso na função
3.8 – boxplot
boxplot(Abund_sp1)
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
Abrir o R
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)
17
#Calculando o intervalo de confiança:
Abrir o R
setwd(choose.dir())
dir()
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)
18
#Calculando um gráfico com intervalo de confiança:
#Avisos:
log10(Riqueza)
#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
Abrir o R
setwd(choose.dir())
dir()
dados<-read.table("pratica1.txt", header=T)
summary(dados)
str(dados)
attach(dados)
#Avaliação gráfica:
hist(Riqueza)
boxplot(Riqueza~Ambiente)
plot(Riqueza~Ambiente)
20
#Identificando pontos no gráfico:
#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.
tail(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)
library(sciplot)
#Transformações:
log10(Riqueza)
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
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)
dados.novos<-cbind(dados, logRiqueza)
summary(dados.novos)
write.csv(dados.novos, "dados_novos.csv")
23
5 - Teste t e teste t pareado
Abrir o R
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)
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:
shapiro.test(Riqueza[Ambiente=="primário"])
shapiro.test(Riqueza[Ambiente=="secundário"])
boxplot(Riqueza~Ambiente)
#Teste de Levene:
#Pr = valor de p
25
library(car)
leveneTest(Riqueza~Ambiente)
#Teste t:
t.test(Riqueza~Ambiente, var.equal=T)
library(sciplot)
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).”
library(sciplot)
?Lineplot.CI
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))
*se(x)))
#Teste bicaudal:
t.test(Riqueza~Ambiente, var.equal=T)
#Teste monocaudal:
28
quem é a segunda. Mas, a classe que vem primeiro, sempre será a
primeira em ordem alfabética.
Ambiente
levels(Ambiente)
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
qqnorm(diferenças)
qqline(diferenças, lty=2)
29
shapiro.test(diferenças)
#Gráfico:
t(dados) # Transpose
30
6 - ANOVA, ANOVA Fatorial e ANOVA para medidas repetidas
Abrir o R
setwd(choose.dir())
dir()
read.table("peixes.txt", header=T)
dados<-read.table("peixes.txt", header=T)
attach(dados)
summary(dados)
library(car)
leveneTest(Densidade~Predador)
31
#Testando a normalidade dos resíduos:
#Os resíduos:
resultado$residuals
qqnorm(resultado$residuals)
qqline(resultado$residuals, lty=2)
summary(resultado)
library(sciplot)
32
#Testes a posteriori:
#Teste de Tukey:
TukeyHSD(resultado)
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)
33
qqnorm(resultado$residuals)
qqline(resultado$residuals, lty=2)
summary(resultado)
#Gráfico:
library(sciplot)
Abrir o R
setwd(choose.dir())
dir()
head(mouse)
names(mouse)
34
#Visualizacao
boxplot(mouse$tempo ~ mouse$sessao)
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))
model<-aov(tempo~sessao+Error(sujeito), data=mouse)
summary(model)
model2<-aov(tempo~sessao, data=mouse)
summary(model2)
pairwise.t.test(mouse$tempo,mouse$sessao,p.adj="BY")
??p.adj
35
#Teste equivalente não paramétrico
#Grafico
library(ggplot2)
#Exemplo 2
bebes<-read.table("newborn.txt", h=T)
head(bebes)
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))
summary(m)
#Gráfico
37
7 - Qui-Quadrado
Abrir o R
setwd(choose.dir())
dir()
read.table("sanhaços.txt", header=T)
dados<-read.table("sanhaços.txt", header=T)
attach(dados)
summary(dados)
tabela1<-table(Ave, Árvore)
tabela2<-table(Árvore, Ave)
##Gráfico de barras:
## Teste de Qui-quadrado:
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
setwd(choose.dir())
dir()
read.table("café.txt", header=T)
dados<-read.table("café.txt", header=T)
attach(dados)
summary(dados)
par(mfrow=c(1,2))
par(mfrow=c(1,2))
qqline(Escala[Formação=="Graduação"], lty=2)
qqline(Escala[Formação=="Pós-graduação"], lty=2)
40
#Explorando a dispesão dos dados:
boxplot(Escala~Formação)
kruskal.test(Escala~Formação)
#Mann-Whitney
#Outros testes:
library(devtools)
library(dunn.test)
41
9 - Regressão Linear Simples
Abrir o R
setwd(choose.dir())
dir()
dados<-read.table("pratica1.txt", header=T)
attach(dados)
summary(dados)
#Gráfico:
#Regressão linear no R:
resultado<-lm(Riqueza~Área)
#Pressupostos:
#Normalidade:
qqnorm(resultado$residuals)
qqline(resultado$residuals, lty=2)
42
#Homocedasticidade:
#plot(eixo x, eixo y)
plot(resultado$fitted, resultado$residuals)
summary(resultado)
#A equação seria:
#riqueza=B0+B1(área)+resíduos
#riqueza=15+0.14*área
#Gráfico da regressão:
#Brincando um pouquinho:
#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:
#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)
45
#E veja as regras em ?plotmath
#Um exemplo:
?plotmath
mtext(expression(x(a)), side=3)
46
10 - ANCOVA
Abrir o R
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)
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
#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
setwd(choose.dir())
dir()
dados<-read.table("frutos.txt", header=T)
summary(dados)
str(dados)
attach(dados)
hist(Frutos)
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))
49
# Exemplo 2
library(aod)
library(ggplot2)
names(cupins)
summary(mylogit)
confint(mylogit)
confint.default(mylogit)
##You can also exponentiate the coefficients and interpret them as odds-ratios.
## We can use the same logic to get odds ratios and their confidence intervals,
50
## To put it all in one table, cbind
head(newcupins)
summary(cupins)
head(newcupins2)
51
newcupins3 <- cbind(newcupins2, predict(mylogit, newdata = newcupins2, type =
"link", se = TRUE))
})
head(newcupins3)
head(new.data)
size = 1, se=TRUE)+theme_bw(base_size=11)
52
12 - Correlação e Regressão Múltipla
Abrir o R
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)
#Correlação = uma medida do quanto uma variável varia junto com a outra.
#Correlação de Pearson
#Correlação =
# = 0 (sem correlação),
#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:
#É uma correlação que faz o teste por meio de Rankings dos dados.
cor(dados[ , 2:6])
pairs(dados[ , 2:6])
?pairs
54
# put histograms on the diagonal
r <- cor(x, y)
55
#diag=diagonal
resultado<-lm(Dens_Praga~Altitude+Pluviosidade+Mata)
qqnorm(resultado$residuals)
qqline(resultado$residuals, lty=2)
plot(resultado$fitted, resultado$residuals)
abline(h=0, lty=2)
#summary do modelo:
summary(resultado)
Mata100<-Mata*100
resultado2<-lm(Dens_Praga~Altitude+Pluviosidade+Mata100)
summary(resultado2)
56