Prof. Maurício Garcia de Camargo
camargofurg@gmail.com
Disponível online em
http://www.rpubs.com/camargo
install.packages(c('reshape2','dplyr','knitr','ggplot2','rmarkdown','shiny'))
reshape2 e dplyr
library(reshape2)
library(dplyr)
Vamos abrir usando o pacote readxl uma planilha de peixes coletados sazonalmente na zona entremarés de 13 pontos distribuídos aos longo da margem norte da Baía da Babitonga - SC.
Parte da planilha é mostrada abaixo. Esta é a planilha longa (6138 Linhas X 12 colunas). Download aqui.
library(readxl)
plan_longa=read_excel('peixes.xls')
print(plan_longa[1:20,1:7])#Mostrando até a linha 20 e coluna 7.
Estacao Ponto Familia Especie CT PT Sexo
1 Outono 9 Achiridae Achirus lineatus 60 5.17 X
2 Verão 8 Achiridae Achirus lineatus 61 4.52 X
3 Verão 8 Achiridae Achirus lineatus 55 2.87 X
4 Inverno 11 Engraulidae Anchoa januaria 80 3.41 F
5 Inverno 11 Engraulidae Anchoa januaria 79 3.69 F
6 Inverno 11 Engraulidae Anchoa januaria 78 3.15 M
7 Primavera 13 Engraulidae Anchoa januaria 76 3.35 M
8 Primavera 13 Engraulidae Anchoa januaria 77 3.68 F
9 Primavera 13 Engraulidae Anchoa januaria 75 3.81 F
10 Inverno 11 Engraulidae Anchoa januaria 80 3.55 F
11 Inverno 11 Engraulidae Anchoa januaria 77 3.19 F
12 Verão 9 Atherinopsidae Atherinella brasiliensis 73 3.09 X
13 Verão 9 Atherinopsidae Atherinella brasiliensis 60 1.49 X
14 Inverno 11 Engraulidae Anchoa januaria 71 2.65 F
15 Inverno 11 Engraulidae Anchoa januaria 83 4.42 F
16 Inverno 11 Engraulidae Anchoa januaria 79 3.44 F
17 Inverno 11 Engraulidae Anchoa januaria 59 1.36 F
18 Inverno 11 Engraulidae Anchoa januaria 75 3.09 M
19 Inverno 11 Engraulidae Anchoa januaria 79 3.13 F
20 Inverno 11 Engraulidae Anchoa januaria 76 3.10 F
library(reshape2)
plan_larga_bio=dcast(plan_longa, Estacao + Ponto ~ Especie,
value.var = 'PT',fun.aggregate=sum)
#Soma dos pesos de todos os indivíduos
print(plan_larga_bio[1:20,1:5])
Estacao Ponto Achirus lineatus Anchoa januaria Anchoa tricolor
1 Inverno 1 0 0.00 52.48
2 Inverno 2 0 0.00 63.64
3 Inverno 3 0 0.00 12.82
4 Inverno 4 0 0.00 0.00
5 Inverno 5 0 0.00 0.00
6 Inverno 6 0 0.00 0.00
7 Inverno 7 0 0.00 1.44
8 Inverno 8 0 3.02 4.15
9 Inverno 9 0 0.00 0.00
10 Inverno 10 0 0.00 0.00
11 Inverno 11 0 75.46 76.25
12 Inverno 12 0 0.00 6.90
13 Inverno 13 0 2.54 0.63
14 Outono 1 0 0.00 61.55
15 Outono 2 0 0.00 42.63
16 Outono 3 0 0.00 3.37
17 Outono 4 0 0.00 3.25
18 Outono 5 0 0.00 0.00
19 Outono 6 0 0.00 0.56
20 Outono 7 0 0.00 0.00
temp=melt(plan_larga_bio,id=c('Estacao','Ponto'))
print(temp[1:20,])
Estacao Ponto variable value
1 Inverno 1 Achirus lineatus 0
2 Inverno 2 Achirus lineatus 0
3 Inverno 3 Achirus lineatus 0
4 Inverno 4 Achirus lineatus 0
5 Inverno 5 Achirus lineatus 0
6 Inverno 6 Achirus lineatus 0
7 Inverno 7 Achirus lineatus 0
8 Inverno 8 Achirus lineatus 0
9 Inverno 9 Achirus lineatus 0
10 Inverno 10 Achirus lineatus 0
11 Inverno 11 Achirus lineatus 0
12 Inverno 12 Achirus lineatus 0
13 Inverno 13 Achirus lineatus 0
14 Outono 1 Achirus lineatus 0
15 Outono 2 Achirus lineatus 0
16 Outono 3 Achirus lineatus 0
17 Outono 4 Achirus lineatus 0
18 Outono 5 Achirus lineatus 0
19 Outono 6 Achirus lineatus 0
20 Outono 7 Achirus lineatus 0
plan_larga_ab=dcast(plan_longa, Estacao + Ponto ~ Especie,
value.var = 'CT',fun.aggregate = length)
#Pode ser CT ou qualquer variável, pois a função irá apenas contar aquelas maiores do que zero
print(plan_larga_ab[1:20,1:5])
Estacao Ponto Achirus lineatus Anchoa januaria Anchoa tricolor
1 Inverno 1 0 0 20
2 Inverno 2 0 0 20
3 Inverno 3 0 0 3
4 Inverno 4 0 0 0
5 Inverno 5 0 0 0
6 Inverno 6 0 0 0
7 Inverno 7 0 0 2
8 Inverno 8 0 1 1
9 Inverno 9 0 0 0
10 Inverno 10 0 0 0
11 Inverno 11 0 24 30
12 Inverno 12 0 0 3
13 Inverno 13 0 1 1
14 Outono 1 0 0 60
15 Outono 2 0 0 49
16 Outono 3 0 0 12
17 Outono 4 0 0 7
18 Outono 5 0 0 0
19 Outono 6 0 0 2
20 Outono 7 0 0 0
library(dplyr)
Filtrando os dados com a função filter
temp=filter(plan_larga_ab,Estacao=='Inverno')
print(temp[,1:5])
Estacao Ponto Achirus lineatus Anchoa januaria Anchoa tricolor
1 Inverno 1 0 0 20
2 Inverno 2 0 0 20
3 Inverno 3 0 0 3
4 Inverno 4 0 0 0
5 Inverno 5 0 0 0
6 Inverno 6 0 0 0
7 Inverno 7 0 0 2
8 Inverno 8 0 1 1
9 Inverno 9 0 0 0
10 Inverno 10 0 0 0
11 Inverno 11 0 24 30
12 Inverno 12 0 0 3
13 Inverno 13 0 1 1
temp=filter(plan_larga_ab,Estacao=='Inverno' & Ponto==3)
print(temp[,1:5])
Estacao Ponto Achirus lineatus Anchoa januaria Anchoa tricolor
1 Inverno 3 0 0 3
temp=filter(plan_larga_ab,Ponto==3 | Ponto==4)
print(temp[,1:5])
Estacao Ponto Achirus lineatus Anchoa januaria Anchoa tricolor
1 Inverno 3 0 0 3
2 Inverno 4 0 0 0
3 Outono 3 0 0 12
4 Outono 4 0 0 7
5 Primavera 3 0 0 0
6 Primavera 4 0 0 0
7 Verão 3 0 38 34
8 Verão 4 0 7 0
A tabela de fatores é criada (tab_fat)
tab_fat=select(plan_larga_ab,1:2)
print(tab_fat[1:20,])
Estacao Ponto
1 Inverno 1
2 Inverno 2
3 Inverno 3
4 Inverno 4
5 Inverno 5
6 Inverno 6
7 Inverno 7
8 Inverno 8
9 Inverno 9
10 Inverno 10
11 Inverno 11
12 Inverno 12
13 Inverno 13
14 Outono 1
15 Outono 2
16 Outono 3
17 Outono 4
18 Outono 5
19 Outono 6
20 Outono 7
A tabela de abundância é criada (tab_abu).
Esta será nossa planilha de trabalho
tab_abu=select(plan_larga_ab,3:length(plan_larga_ab))
print(tab_abu[1:20,1:3])
Achirus lineatus Anchoa januaria Anchoa tricolor
1 0 0 20
2 0 0 20
3 0 0 3
4 0 0 0
5 0 0 0
6 0 0 0
7 0 0 2
8 0 1 1
9 0 0 0
10 0 0 0
11 0 24 30
12 0 0 3
13 0 1 1
14 0 0 60
15 0 0 49
16 0 0 12
17 0 0 7
18 0 0 0
19 0 0 2
20 0 0 0
library(vegan)
colnames(tab_abu)#Lista os nomes originais das colunas (espécies)
[1] "Achirus lineatus" "Anchoa januaria"
[3] "Anchoa tricolor" "Anchoviella lepidentostole"
[5] "Astrocopus y-graecum" "Atherinella brasiliensis"
[7] "Bathygobius soporator" "Caranx hippos"
[9] "Centropomus undecimalis" "Cetengraulis edentulus"
[11] "Chaetodipterus faber" "Chilomycterus spinosus"
[13] "Chloroscombrus chrysurus" "Citharichthys arenaceus"
[15] "Citharichthys spilopterus" "Cosmocampus elucens"
[17] "Ctenogobius boleosoma" "Ctenogobius stigmaticus"
[19] "Cynoscion leiarchus" "Dactylopterus volitans"
[21] "Diapterus rhombeus" "Engraulidae"
[23] "Etropus crossotus" "Eucinostomus argenteus"
[25] "Eucinostomus gula" "Eucinostomus melanopterus"
[27] "Eucinostomus sp." "Fistularia petimba"
[29] "Genidens barbus" "Genidens genidens"
[31] "Harengula clupeola" "Hyporhamphus unifasciatus"
[33] "Lagocephalus laevigatus" "Lycengraulis grossidens"
[35] "Menticirrhus americanus" "Menticirrhus littoralis"
[37] "Microgobius meeki" "Micropogonias furnieri"
[39] "Monacanthus ciliatus" "Mugil curema"
[41] "Mugil sp. 1" "Mugil spp."
make.cepnames(colnames(tab_abu))#Abrevia os nomes
[1] "Achiline" "Anchjanu" "Anchtric" "Anchlepi" "Astrgrae" "Athebras"
[7] "Bathsopo" "Carahipp" "Centunde" "Ceteeden" "Chaefabe" "Chilspin"
[13] "Chlochry" "Citharen" "Cithspil" "Cosmeluc" "Ctenbole" "Ctenstig"
[19] "Cynoleia" "Dactvoli" "Diaprhom" "Engrauld" "Etrocros" "Euciarge"
[25] "Eucigula" "Eucimela" "Eucisp" "Fistpeti" "Genibarb" "Genigeni"
[31] "Hareclup" "Hypounif" "Lagolaev" "Lycegros" "Mentamer" "Mentlitt"
[37] "Micrmeek" "Micrfurn" "Monacili" "Mugicure" "Mugi1" "Mugispp"
Atribuindo os novos nomes abreviados
colnames(tab_abu)=make.cepnames(colnames(tab_abu))
mds=metaMDS(tab_abu,autotransform = T)
Square root transformation
Wisconsin double standardization
Run 0 stress 0.2505835
Run 1 stress 0.2676047
Run 2 stress 0.2506182
... procrustes: rmse 0.002823602 max resid 0.01486818
Run 3 stress 0.2684197
Run 4 stress 0.2718905
Run 5 stress 0.2593415
Run 6 stress 0.2660068
Run 7 stress 0.2848678
Run 8 stress 0.2694131
Run 9 stress 0.2766321
Run 10 stress 0.2760403
Run 11 stress 0.2688347
Run 12 stress 0.2578929
Run 13 stress 0.257903
Run 14 stress 0.2768837
Run 15 stress 0.2672993
Run 16 stress 0.2728047
Run 17 stress 0.2682751
Run 18 stress 0.250909
... procrustes: rmse 0.01489691 max resid 0.07276389
Run 19 stress 0.2788558
Run 20 stress 0.2976966
plot(mds$points,type="n",axes=F)
points(mds$points,pch=16,col=c('blue','yellow','red','black')[factor(tab_fat$Estacao)],cex=2)
box()
legend("topleft",c("Inverno","Verão","Outono","Primavera"),
pch=16,col=c('blue','yellow','red','black'),cex=1)
Vamos criar uma tabela comos índices mais comuns.
tab_div=data.frame(cbind(tab_fat,specnumber(tab_abu),rowSums(tab_abu), diversity(tab_abu,'shannon'),diversity(tab_abu,'simpson')))
colnames(tab_div)=c('Estacao','Ponto','N','S','H','Simp')
tab_div[1:20,]
Estacao Ponto N S H Simp
1 Inverno 1 4 81 1.1353567 0.6645328
2 Inverno 2 3 40 0.8556887 0.5450000
3 Inverno 3 8 81 1.4311001 0.7020271
4 Inverno 4 3 3 1.0986123 0.6666667
5 Inverno 5 6 15 1.4878167 0.7111111
6 Inverno 6 7 10 1.8866968 0.8400000
7 Inverno 7 5 39 0.8426927 0.3931624
8 Inverno 8 9 22 1.6786315 0.7272727
9 Inverno 9 2 28 0.5982696 0.4081633
10 Inverno 10 4 27 0.6551416 0.3209877
11 Inverno 11 8 65 1.3032030 0.6442604
12 Inverno 12 6 61 0.7543888 0.3418436
13 Inverno 13 12 41 1.7900982 0.7495538
14 Outono 1 12 211 1.6575405 0.7740617
15 Outono 2 6 163 1.4134722 0.7260341
16 Outono 3 9 132 1.6972614 0.7796143
17 Outono 4 6 63 1.1935179 0.6273621
18 Outono 5 7 62 1.2203487 0.6233091
19 Outono 6 6 25 1.5092037 0.7264000
20 Outono 7 13 28 2.3759290 0.8928571
library(ggplot2)
p=ggplot(tab_div,aes(x=S,y=N))
p+geom_point()
A partir deste gráfico de dispersão, vamos colocando camadas no gráfico.
p=ggplot(tab_div,aes(x=S,y=N))
p+geom_point()
Aumentado o tamanho dos pontos
p=ggplot(tab_div,aes(x=S,y=N))
p+geom_point(size=5)
Adicionando cores correspondentes às estações do ano
p=ggplot(tab_div,
aes(x=S,y=N,color=Estacao))
p+geom_point(size=5)
Adicionando diferentes tipos de pontos correspondentes às estações do ano
p=ggplot(tab_div,aes(x=S,y=N))
p+geom_point(aes(shape=Estacao),
size=5)
p=ggplot(tab_div,aes(x=S))
p+geom_histogram()
p=ggplot(tab_div,aes(x=S))
p+geom_histogram(aes(y=..density..),binwidth=20,col='black',fill='white') +
geom_density()
p=ggplot(tab_div,aes(x=Estacao, y=S))
p+geom_boxplot()
Usando dplyr para filtrar só os dados do verão
verao=filter(tab_div,
Estacao=='Inverno')
p=ggplot(tab_div,aes(x=Ponto,y=S))
p+geom_line()
Linhas para todas as estações
p=ggplot(tab_div,aes(x=Ponto,y=S,
color=Estacao))
p+geom_line()
Faceting para plotar gráficos separados para cada estação
p=ggplot(tab_div,aes(x=Ponto,y=S,
color=Estacao))
p+geom_line()+facet_grid(Estacao~.)