Passo 1: Instalar e carregar o pacote ade4

# install.packages("ade4")
library(ade4)
## Warning: package 'ade4' was built under R version 4.3.3

Passo 2: Criar as matrizes de dados simulados (R, L, Q)

# Matriz R (Ambiente): 15 sítios x 4 variáveis
set.seed(42) # Para reprodutibilidade
temperatura <- seq(15, 25, length.out = 15) + rnorm(15, 0, 1)
oxigenio <- seq(10, 5, length.out = 15) + rnorm(15, 0, 0.5)
turbidez <- cut(temperatura, breaks = c(14, 18, 22, 26), labels = c("Baixa", "Media", "Alta"))
classificacao_site <- c(rep("Cabeceira", 5), rep("Medio", 5), rep("Baixo_Curso", 5))
# Criar o dataframe R
tabR <- data.frame(
  Temperatura_Agua = round(temperatura, 2),
  Oxigenio_Dissolvido = round(oxigenio, 2),
  Turbidez = as.factor(turbidez),
  Classificacao_Site = as.factor(classificacao_site)
)
row.names(tabR) <- paste0("Sitio_", 1:15)
# Matriz Q (Atributos): 10 espécies x 4 atributos
especies <- paste0("Especie_", 1:10)
tabQ <- data.frame(
  Comprimento_Medio_cm = c(20, 15, 30, 10, 45, 25, 12, 35, 18, 50),
  Dieta = as.factor(c("Carnivora", "Onivora", "Herbivora", "Onivora", "Carnivora", "Onivora", "Herbivora", "Carnivora", "Herbivora", "Onivora")),
  Tolerancia_Oxigenio = as.factor(c("Alta", "Media", "Baixa", "Media", "Baixa", "Alta", "Alta", "Baixa", "Media", "Media")),
  Indice_Forma_Corpo = c(1.5, 1.2, 2.0, 1.0, 2.5, 1.8, 1.3, 2.2, 1.1, 1.9)
)
row.names(tabQ) <- especies
# Matriz L (Abundância): 15 sítios x 10 espécies
# Distribuição baseada em tolerância e comprimento (maior comprimento em águas mais quentes)
# Especie_1 (Tol. Alta, Comp. Medio): mais abundante em sitios de baixo oxigênio
# Especie_2 (Tol. Media, Comp. Medio)
# Especie_3 (Tol. Baixa, Comp. Alto): mais abundante em sitios de alto oxigênio
tabL <- matrix(0, nrow = 15, ncol = 10)
colnames(tabL) <- especies
set.seed(123)
for (i in 1:15) {
  # Sítios 1-5 (cabeceira) - preferência por Tolerancia_Baixa
  if (i <= 5) {
    tabL[i, c(3, 5, 8)] <- rpois(3, lambda = 10)
    tabL[i, c(1, 2, 4, 6, 7, 9, 10)] <- rpois(7, lambda = 2)
  }
  # Sítios 6-10 (medio) - preferência por Tolerancia_Media
  else if (i > 5 && i <= 10) {
    tabL[i, c(2, 4, 9, 10)] <- rpois(4, lambda = 10)
    tabL[i, c(1, 3, 5, 6, 7, 8)] <- rpois(6, lambda = 2)
  }
  # Sítios 11-15 (baixo curso) - preferência por Tolerancia_Alta
  else {
    tabL[i, c(1, 6, 7)] <- rpois(3, lambda = 10)
    tabL[i, c(2, 3, 4, 5, 8, 9, 10)] <- rpois(7, lambda = 2)
  }
  # Ajustar a abundância com base na dieta e turbidez (e.g., Herbívoros em turbidez alta)
  if (tabR$Turbidez[i] == "Alta") {
    tabL <- tabL + rpois(2, 5)
  }
}
tabL <- as.data.frame(tabL)

Passo 3: A Análise de RLQ (Passo a Passo)

A análise de RLQ no R é realizada em três etapas: pré-análises das matrizes R, L e Q, e então a execução da função rlq(), que sintetiza os resultados.[16]

Passo 3.1: Pré-análises das matrizes R, L e Q

# L (abundância): Análise de Correspondência (CA)
dudi_L <- dudi.coa(tabL, scannf = FALSE)
summary(dudi_L)
## Class: coa dudi
## Call: dudi.coa(df = tabL, scannf = FALSE)
## 
## Total inertia: 0.02211
## 
## Eigenvalues:
##       Ax1       Ax2       Ax3       Ax4       Ax5 
## 0.0101071 0.0072080 0.0028818 0.0008441 0.0004016 
## 
## Projected inertia (%):
##     Ax1     Ax2     Ax3     Ax4     Ax5 
##  45.704  32.594  13.031   3.817   1.816 
## 
## Cumulative projected inertia (%):
##     Ax1   Ax1:2   Ax1:3   Ax1:4   Ax1:5 
##   45.70   78.30   91.33   95.15   96.96 
## 
## (Only 5 dimensions (out of 9) are shown)
# R (ambiente): PCA 'dudi.coa' para as variáveis quantitativas e Hill-Smith para dados mistos
dudi_R <- dudi.hillsmith(tabR, scannf = FALSE, row.w = dudi_L$lw)
summary(dudi_R)
## Class: mix dudi
## Call: dudi.hillsmith(df = tabR, row.w = dudi_L$lw, scannf = FALSE)
## 
## Total inertia: 6
## 
## Eigenvalues:
##     Ax1     Ax2     Ax3     Ax4     Ax5 
## 3.57573 1.69358 0.33333 0.25938 0.08556 
## 
## Projected inertia (%):
##     Ax1     Ax2     Ax3     Ax4     Ax5 
##  59.596  28.226   5.556   4.323   1.426 
## 
## Cumulative projected inertia (%):
##     Ax1   Ax1:2   Ax1:3   Ax1:4   Ax1:5 
##   59.60   87.82   93.38   97.70   99.13 
## 
## (Only 5 dimensions (out of 6) are shown)
# Q (atributos): PCA para as variáveis quantitativas e Hill-Smith para dados mistos
dudi_Q <- dudi.pca(tabQ[, c("Comprimento_Medio_cm", "Indice_Forma_Corpo")], scannf = FALSE, row.w = dudi_L$cw)
summary(dudi_Q)
## Class: pca dudi
## Call: dudi.pca(df = tabQ[, c("Comprimento_Medio_cm", "Indice_Forma_Corpo")], 
##     row.w = dudi_L$cw, scannf = FALSE)
## 
## Total inertia: 2
## 
## Eigenvalues:
##     Ax1     Ax2 
##  1.8609  0.1391 
## 
## Projected inertia (%):
##     Ax1     Ax2 
##  93.043   6.957 
## 
## Cumulative projected inertia (%):
##     Ax1   Ax1:2 
##   93.04  100.00

Passo 4: Executar a análise RLQ

# rlq() usa os objetos dudi das pré-análises.
rlq_result <- rlq(dudi_R, dudi_L, dudi_Q, scannf = FALSE)
summary(rlq_result)
## RLQ analysis
## 
## Class: rlq dudi
## Call: rlq(dudiR = dudi_R, dudiL = dudi_L, dudiQ = dudi_Q, scannf = FALSE)
## 
## Total inertia: 0.02007
## 
## Eigenvalues:
##       Ax1       Ax2 
## 0.0193234 0.0007452 
## 
## Projected inertia (%):
##     Ax1     Ax2 
##  96.287   3.713 
## 
## Cumulative projected inertia (%):
##     Ax1   Ax1:2 
##   96.29  100.00 
## 
## 
## Eigenvalues decomposition:
##           eig      covar      sdR       sdQ       corr
## 1 0.019323435 0.13900876 1.842425 1.3586948 0.05553034
## 2 0.000745214 0.02729861 1.354044 0.3923625 0.05138307
## 
## Inertia & coinertia R (dudi_R):
##     inertia      max     ratio
## 1  3.394531 3.575733 0.9493244
## 12 5.227967 5.269312 0.9921537
## 
## Inertia & coinertia Q (dudi_Q):
##     inertia      max     ratio
## 1  1.846052 1.860857 0.9920438
## 12 2.000000 2.000000 1.0000000
## 
## Correlation L (dudi_L):
##         corr        max     ratio
## 1 0.05553034 0.10053414 0.5523531
## 2 0.05138307 0.08489973 0.6052207

Passo 5: Teste de significância global da RLQ

# Usa permutações para testar a hipótese nula de ausência de ligação entre as matrizes
randtest_rlq <- randtest(rlq_result, nrepet = 999)
print(randtest_rlq)
## class: krandtest lightkrandtest 
## Monte-Carlo tests
## Call: randtest.rlq(xtest = rlq_result, nrepet = 999)
## 
## Number of tests:   2 
## 
## Adjustment method for multiple comparisons:   none 
## Permutation number:   999 
##      Test        Obs  Std.Obs   Alter Pvalue
## 1 Model 2 0.02006865 5.703285 greater  0.002
## 2 Model 4 0.02006865 2.127222 greater  0.048

Passo 6: Visualização do biplot

plot(rlq_result, sub = "Biplot RLQ (Ambiente e Atributos de Peixes)")

Passo 7: Executar a análise Fourth-corner

fc_result <- fourthcorner(tabR, tabL, tabQ, modeltype = 6, p.adjust.method.G = "fdr", nrepet = 999)
print(fc_result)
## Fourth-corner Statistics
## ------------------------
## Permutation method  Comb. 2 and 4  ( 999  permutations)
## 
## Adjustment method for multiple comparisons:   holm 
## call:  fourthcorner(tabR = tabR, tabL = tabL, tabQ = tabQ, modeltype = 6,      nrepet = 999, p.adjust.method.G = "fdr") 
## 
## ---
## 
##                                          Test   Stat          Obs    Std.Obs
## 1     Temperatura_Agua / Comprimento_Medio_cm      r  -0.04440247 -1.9426698
## 2  Oxigenio_Dissolvido / Comprimento_Medio_cm      r   0.04471202  1.9404340
## 3          Turbi.Baixa / Comprimento_Medio_cm Homog.   0.31141819  1.2078542
## 4          Turbi.Media / Comprimento_Medio_cm Homog.   0.40363513  1.7545995
## 5           Turbi.Alta / Comprimento_Medio_cm Homog.   0.28306313 -0.9370109
## 6    Class.Baixo_Curso / Comprimento_Medio_cm Homog.   0.20166157 -1.0063336
## 7      Class.Cabeceira / Comprimento_Medio_cm Homog.   0.39107307  1.4553607
## 8          Class.Medio / Comprimento_Medio_cm Homog.   0.40480070  1.7737715
## 9          Temperatura_Agua / Dieta.Carnivora Homog.   0.30324423  1.0912466
## 10      Oxigenio_Dissolvido / Dieta.Carnivora Homog.   0.31019406  1.8045140
## 11              Turbi.Baixa / Dieta.Carnivora      N 463.00000000  1.9278416
## 12              Turbi.Media / Dieta.Carnivora      N 511.00000000  1.0072798
## 13               Turbi.Alta / Dieta.Carnivora      N 397.00000000 -0.3939084
## 14        Class.Baixo_Curso / Dieta.Carnivora      N 293.00000000 -0.1107866
## 15          Class.Cabeceira / Dieta.Carnivora      N 586.00000000  1.5125267
## 16              Class.Medio / Dieta.Carnivora      N 492.00000000  0.6575492
## 17         Temperatura_Agua / Dieta.Herbivora Homog.   0.29963585 -0.7210291
## 18      Oxigenio_Dissolvido / Dieta.Herbivora Homog.   0.31367074  1.7540750
## 19              Turbi.Baixa / Dieta.Herbivora      N 438.00000000  1.3741230
## 20              Turbi.Media / Dieta.Herbivora      N 537.00000000  1.3708695
## 21               Turbi.Alta / Dieta.Herbivora      N 423.00000000  0.6022647
## 22        Class.Baixo_Curso / Dieta.Herbivora      N 311.00000000  0.5133120
## 23          Class.Cabeceira / Dieta.Herbivora      N 553.00000000  1.7320655
## 24              Class.Medio / Dieta.Herbivora      N 534.00000000  1.3209826
## 25           Temperatura_Agua / Dieta.Onivora Homog.   0.39633716 -0.3833203
## 26        Oxigenio_Dissolvido / Dieta.Onivora Homog.   0.37555733 -1.6307643
## 27                Turbi.Baixa / Dieta.Onivora      N 551.00000000  0.8688691
## 28                Turbi.Media / Dieta.Onivora      N 757.00000000  1.9341753
## 29                 Turbi.Alta / Dieta.Onivora      N 538.00000000 -0.2193541
## 30          Class.Baixo_Curso / Dieta.Onivora      N 386.00000000 -0.3909042
## 31            Class.Cabeceira / Dieta.Onivora      N 680.00000000  0.8949033
## 32                Class.Medio / Dieta.Onivora      N 780.00000000  1.6526447
## 33              Temperatura_Agua / Toler.Alta Homog.   0.31984024  2.5264620
## 34           Oxigenio_Dissolvido / Toler.Alta Homog.   0.33147048  2.9255534
## 35                   Turbi.Baixa / Toler.Alta      N 413.00000000  1.4019389
## 36                   Turbi.Media / Toler.Alta      N 486.00000000  0.7937188
## 37                    Turbi.Alta / Toler.Alta      N 473.00000000 -2.0301146
## 38             Class.Baixo_Curso / Toler.Alta      N 369.00000000  2.9470527
## 39               Class.Cabeceira / Toler.Alta      N 517.00000000  1.6591622
## 40                   Class.Medio / Toler.Alta      N 486.00000000  0.8034640
## 41             Temperatura_Agua / Toler.Baixa Homog.   0.29461130 -0.4220723
## 42          Oxigenio_Dissolvido / Toler.Baixa Homog.   0.29943999  0.1214719
## 43                  Turbi.Baixa / Toler.Baixa      N 493.00000000  2.1150142
## 44                  Turbi.Media / Toler.Baixa      N 524.00000000  1.0165203
## 45                   Turbi.Alta / Toler.Baixa      N 365.00000000 -1.8206199
## 46            Class.Baixo_Curso / Toler.Baixa      N 262.00000000 -1.4277952
## 47              Class.Cabeceira / Toler.Baixa      N 622.00000000  2.9204081
## 48                  Class.Medio / Toler.Baixa      N 498.00000000  0.6006748
## 49             Temperatura_Agua / Toler.Media Homog.   0.38055238 -2.0539360
## 50          Oxigenio_Dissolvido / Toler.Media Homog.   0.36404288 -2.3811259
## 51                  Turbi.Baixa / Toler.Media      N 546.00000000  0.6605033
## 52                  Turbi.Media / Toler.Media      N 795.00000000  2.1197912
## 53                   Turbi.Alta / Toler.Media      N 520.00000000 -0.9727624
## 54            Class.Baixo_Curso / Toler.Media      N 359.00000000 -1.4611227
## 55              Class.Cabeceira / Toler.Media      N 680.00000000  0.7467240
## 56                  Class.Medio / Toler.Media      N 822.00000000  2.4443194
## 57      Temperatura_Agua / Indice_Forma_Corpo      r  -0.05006364 -2.1673177
## 58   Oxigenio_Dissolvido / Indice_Forma_Corpo      r   0.04440899  1.9044006
## 59           Turbi.Baixa / Indice_Forma_Corpo Homog.   0.32215237  1.4653629
## 60           Turbi.Media / Indice_Forma_Corpo Homog.   0.39774319  1.5761539
## 61            Turbi.Alta / Indice_Forma_Corpo Homog.   0.27728494 -1.6145531
## 62     Class.Baixo_Curso / Indice_Forma_Corpo Homog.   0.19707910 -1.5641589
## 63       Class.Cabeceira / Indice_Forma_Corpo Homog.   0.40643019  1.8022931
## 64           Class.Medio / Indice_Forma_Corpo Homog.   0.39203903  1.4304252
##        Alter Pvalue Pvalue.adj  
## 1  two-sided  0.038          1  
## 2  two-sided  0.039          1  
## 3       less  0.864          1  
## 4       less  0.976          1  
## 5       less  0.196          1  
## 6       less  0.185          1  
## 7       less  0.919          1  
## 8       less   0.98          1  
## 9       less  0.848          1  
## 10      less   0.96          1  
## 11 two-sided  0.039          1  
## 12 two-sided  0.338          1  
## 13 two-sided  0.661          1  
## 14 two-sided  0.835          1  
## 15 two-sided  0.133          1  
## 16 two-sided  0.524          1  
## 17      less  0.257          1  
## 18      less  0.953          1  
## 19 two-sided  0.157          1  
## 20 two-sided  0.169          1  
## 21 two-sided  0.568          1  
## 22 two-sided  0.547          1  
## 23 two-sided  0.074          1  
## 24 two-sided   0.19          1  
## 25      less   0.36          1  
## 26      less  0.052          1  
## 27 two-sided  0.422          1  
## 28 two-sided  0.045          1  
## 29 two-sided    0.8          1  
## 30 two-sided  0.675          1  
## 31 two-sided   0.39          1  
## 32 two-sided  0.142          1  
## 33      less   0.99          1  
## 34      less  0.993          1  
## 35 two-sided  0.148          1  
## 36 two-sided   0.47          1  
## 37 two-sided  0.017      0.697  
## 38 two-sided   0.01        0.6  
## 39 two-sided  0.083          1  
## 40 two-sided   0.46          1  
## 41      less  0.339          1  
## 42      less  0.553          1  
## 43 two-sided  0.028          1  
## 44 two-sided  0.332          1  
## 45 two-sided  0.065          1  
## 46 two-sided  0.185          1  
## 47 two-sided   0.01        0.6  
## 48 two-sided  0.565          1  
## 49      less  0.019       0.76  
## 50      less  0.006      0.384  
## 51 two-sided  0.528          1  
## 52 two-sided  0.033          1  
## 53 two-sided  0.361          1  
## 54 two-sided  0.181          1  
## 55 two-sided  0.471          1  
## 56 two-sided  0.009      0.414  
## 57 two-sided  0.027          1  
## 58 two-sided  0.055          1  
## 59      less  0.925          1  
## 60      less  0.954          1  
## 61      less  0.018          1  
## 62      less  0.026          1  
## 63      less  0.974          1  
## 64      less  0.925          1  
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# A função fourthcorner2() oferece uma estatística multivariada e estatísticas de correlação.[10]
fc2_result <- fourthcorner2(tabR, tabL, tabQ, modeltype = 6, p.adjust.method.G = "fdr", nrepet = 999)
print(fc2_result)
## Fourth-corner Statistics
## ------------------------
## Permutation method  Comb. 2 and 4  ( 999  permutations)
## 
## Adjustment method for multiple comparisons:   fdr 
## call:  fourthcorner2(tabR = tabR, tabL = tabL, tabQ = tabQ, modeltype = 6,      nrepet = 999, p.adjust.method.G = "fdr") 
## 
## ---
## 
##                                          Test        Stat          Obs
## 1     Temperatura_Agua / Comprimento_Medio_cm         r^2 0.0019715797
## 2  Oxigenio_Dissolvido / Comprimento_Medio_cm         r^2 0.0019991651
## 3             Turbidez / Comprimento_Medio_cm       Eta^2 0.0018835541
## 4   Classificacao_Site / Comprimento_Medio_cm       Eta^2 0.0024646522
## 5                    Temperatura_Agua / Dieta       Eta^2 0.0007827563
## 6                 Oxigenio_Dissolvido / Dieta       Eta^2 0.0005778756
## 7                            Turbidez / Dieta Chi2/sum(L) 0.0016028764
## 8                  Classificacao_Site / Dieta Chi2/sum(L) 0.0035189092
## 9      Temperatura_Agua / Tolerancia_Oxigenio       Eta^2 0.0049960848
## 10  Oxigenio_Dissolvido / Tolerancia_Oxigenio       Eta^2 0.0050466488
## 11             Turbidez / Tolerancia_Oxigenio Chi2/sum(L) 0.0087282044
## 12   Classificacao_Site / Tolerancia_Oxigenio Chi2/sum(L) 0.0136951692
## 13      Temperatura_Agua / Indice_Forma_Corpo         r^2 0.0025063679
## 14   Oxigenio_Dissolvido / Indice_Forma_Corpo         r^2 0.0019721580
## 15              Turbidez / Indice_Forma_Corpo       Eta^2 0.0028194981
## 16    Classificacao_Site / Indice_Forma_Corpo       Eta^2 0.0044516742
##       Std.Obs   Alter Pvalue          Pvalue.adj   
## 1   2.0422428 greater  0.049  0.0871111111111111  .
## 2   2.0747284 greater  0.047  0.0871111111111111  .
## 3   1.0406961 greater  0.148   0.215272727272727   
## 4   0.7028300 greater  0.203   0.270666666666667   
## 5  -0.3859742 greater  0.546               0.623   
## 6  -0.6046252 greater  0.623               0.623   
## 7  -0.3306191 greater  0.617               0.623   
## 8   0.2124999 greater  0.325                 0.4   
## 9   3.9380203 greater  0.007              0.0112  *
## 10  4.2226903 greater  0.004 0.00914285714285714 **
## 11  5.7366051 greater  0.001               0.004 **
## 12  5.9166107 greater  0.001               0.004 **
## 13  2.8992751 greater  0.026              0.0832  .
## 14  2.1134674 greater  0.055               0.088  .
## 15  2.2991116 greater  0.041  0.0871111111111111  .
## 16  2.3810326 greater  0.035  0.0871111111111111  .
## 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Passo 8: Visualizar a matriz de resultados da Quarta Esquina

plot(fc_result, alpha = 0.05, stat = "D")

plot(fc_result, alpha = 0.05, stat = "D2")
plot(fc_result, alpha = 0.05, stat = "G")