Análise Exploratória

#-----------------------------------------------------------------------
# Carrega os pacotes necessários.

rm(list = ls())
library(lattice)
library(latticeExtra)
library(nlme)
library(EACS)

#-----------------------------------------------------------------------
# Visualização do desenho experimental.

data(np_carobinha)
str(np_carobinha)

# Nome curto é mais fácil de trabalhar.
np <- np_carobinha

# Níveis de N e P.
unique(sort(np$N))
unique(sort(np$P))

# Combinações presentes no experimento.
cbn <- unique(np[, c("N", "P")])
cbn

# Desenho simétrico.
xyplot(N ~ P, data = cbn, aspect = 1)

xtabs(~epoc + bloc, data = np)
xtabs(~P + N, data = np)

xyplot(msf ~ N | P, data = np, groups = epoc)

xyplot(msf ~ P | N, data = np, groups = epoc)

# Codificar os níveis de N e P para mesma escala centrada.
cod <- function(x) {
    u <- unique(x)
    stopifnot(length(u) == 5)
    u <- sort(u)
    m <- u[3]
    d <- diff(u[c(2, 4)])/2
    z <- (x - m)/d
    return(z)
}

# Criando versões codificadas de N e P.
np <- transform(np,
                nn = round(cod(N), 2),
                pp = round(cod(P), 2),
                epoc = factor(epoc))
cbn <- unique(np[, c("nn", "pp")])

# Criando um tratamento categórico de 9 níveis combinando N e P.
np$trat <- with(np,
                interaction(round(nn), round(pp),
                            drop = TRUE))

# Criando o indentificador de unidade experimental.
np$ue <- with(np,
              interaction(bloc, trat,
                          drop = TRUE))
str(np)

# Classifica se é ponto no quadrado ou não (nível codificado +/- 1).
np$quad <- as.integer(with(np, {
    abs(nn) == 1 & abs(pp) == 1
}))

Análise da Massa Seca das Folhas

#-----------------------------------------------------------------------
# Visualização dos dados.

# Em função dos tratamentos.
xyplot(msf ~ trat | bloc, groups = epoc, data = np)

# Em função dos níveis de N e P.
xyplot.list(list(N = msf ~ N,
                 P = msf ~ P),
            data = np,
            groups = epoc,
            x.same = FALSE,
            xlab = "Nutriente",
            ylab = "Massa seca das folhas")

#-----------------------------------------------------------------------
# Ajuste do modelo misto com efeito de bloco e ue aleatórios.

# Modelo saturado com um tratamento categórico de 9 níveis.
m0 <- lme(sqrt(msf) ~ trat * epoc,
          random = ~ 1 | bloc/ue,
          data = np,
          na.action = na.omit,
          method = "ML")
m1 <- update(m0, random = ~ 1 | bloc)
anova(m0, m1)
##    Model df      AIC      BIC    logLik   Test   L.Ratio p-value
## m0     1 21 127.7926 175.0111 -42.89632                         
## m1     2 20 126.2528 171.2226 -43.12637 1 vs 2 0.4600987  0.4976
# # Diagnóstico.
# r <- residuals(m0)
# f <- fitted(m0)
# c(qqmath(r),
#   xyplot(r ~ f),
#   xyplot(sqrt(abs(r)) ~ f))

#-----------------------------------------------------------------------
# Ajuste dos modelos de efeito fixo dado o não efeito de ue.

m0 <- lm(sqrt(msf) ~ bloc + trat * epoc, data = np)

# Diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

layout(1)

# Quadro de ANOVA.
anova(m0)
## Analysis of Variance Table
## 
## Response: sqrt(msf)
##           Df Sum Sq Mean Sq  F value Pr(>F)    
## bloc       3  0.070   0.023   0.0828 0.9691    
## trat       8  1.808   0.226   0.8036 0.6024    
## epoc       1 80.892  80.892 287.6717 <2e-16 ***
## trat:epoc  8  2.728   0.341   1.2125 0.3116    
## Residuals 49 13.779   0.281                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Modelo com N e P contínuos.
m1 <- update(m0, . ~ bloc + (nn + I(nn^2)) * (pp + I(pp^2) * epoc))
anova(m1, m0)
## Analysis of Variance Table
## 
## Model 1: sqrt(msf) ~ bloc + nn + I(nn^2) + pp + I(pp^2) + epoc + I(pp^2):epoc + 
##     nn:pp + nn:I(pp^2) + nn:epoc + I(nn^2):pp + I(nn^2):I(pp^2) + 
##     I(nn^2):epoc + nn:I(pp^2):epoc + I(nn^2):I(pp^2):epoc
## Model 2: sqrt(msf) ~ bloc + trat * epoc
##   Res.Df    RSS Df Sum of Sq      F Pr(>F)
## 1     52 13.993                           
## 2     49 13.779  3   0.21406 0.2538 0.8583
anova(m1)
## Analysis of Variance Table
## 
## Response: sqrt(msf)
##                      Df Sum Sq Mean Sq  F value  Pr(>F)    
## bloc                  3  0.070   0.023   0.0865 0.96712    
## nn                    1  1.101   1.101   4.0906 0.04828 *  
## I(nn^2)               1  0.089   0.089   0.3325 0.56670    
## pp                    1  0.076   0.076   0.2816 0.59792    
## I(pp^2)               1  0.012   0.012   0.0455 0.83191    
## epoc                  1 80.147  80.147 297.8463 < 2e-16 ***
## I(pp^2):epoc          1  0.996   0.996   3.7006 0.05987 .  
## nn:pp                 1  0.453   0.453   1.6825 0.20032    
## nn:I(pp^2)            1  0.513   0.513   1.9057 0.17335    
## nn:epoc               1  0.427   0.427   1.5863 0.21347    
## I(nn^2):pp            1  0.341   0.341   1.2674 0.26543    
## I(nn^2):I(pp^2)       1  0.053   0.053   0.1955 0.66024    
## I(nn^2):epoc          1  0.642   0.642   2.3844 0.12861    
## nn:I(pp^2):epoc       1  0.104   0.104   0.3880 0.53607    
## I(nn^2):I(pp^2):epoc  1  0.260   0.260   0.9660 0.33023    
## Residuals            52 13.993   0.269                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Reduz o modelo.
m2 <- update(m0, . ~ bloc + nn + pp + epoc)
anova(m2, m0)
## Analysis of Variance Table
## 
## Model 1: sqrt(msf) ~ bloc + nn + pp + epoc
## Model 2: sqrt(msf) ~ bloc + trat * epoc
##   Res.Df    RSS Df Sum of Sq      F Pr(>F)
## 1     63 18.064                           
## 2     49 13.779 14    4.2852 1.0885 0.3907
# Quadro de ANOVA.
anova(m2)
## Analysis of Variance Table
## 
## Response: sqrt(msf)
##           Df Sum Sq Mean Sq  F value Pr(>F)    
## bloc       3  0.070   0.023   0.0812 0.9700    
## nn         1  1.101   1.101   3.8389 0.0545 .  
## pp         1  0.077   0.077   0.2702 0.6050    
## epoc       1 79.964  79.964 278.8859 <2e-16 ***
## Residuals 63 18.064   0.287                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Estimativas dos parâmetros.
summary(m2)
## 
## Call:
## lm(formula = sqrt(msf) ~ bloc + nn + pp + epoc, data = np)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.61253 -0.38955  0.06693  0.35685  0.87432 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  2.64718    0.14157  18.699   <2e-16 ***
## blocII       0.07960    0.17849   0.446   0.6571    
## blocIII     -0.05809    0.18419  -0.315   0.7535    
## blocIV       0.06058    0.17849   0.339   0.7354    
## nn           0.10440    0.05758   1.813   0.0746 .  
## pp          -0.03571    0.05694  -0.627   0.5329    
## epoc770     -2.14163    0.12824 -16.700   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.5355 on 63 degrees of freedom
##   (2 observations deleted due to missingness)
## Multiple R-squared:  0.818,  Adjusted R-squared:  0.8007 
## F-statistic: 47.21 on 6 and 63 DF,  p-value: < 2.2e-16

Não houve efeito de N e P (\(p > 5%\)) na massa seca de folhas. Apenas o efeito de época foi significativo.

#-----------------------------------------------------------------------
# Predição.

# source(paste0("https://raw.githubusercontent.com/walmes/",
#               "wzRfun/master/R/panel.3d.contour.R"))

pred <- expand.grid(nn = seq(-2.2, 2.2, by = 0.2),
                    pp = seq(-2.2, 2.2, by = 0.2),
                    epoc = levels(np$epoc),
                    bloc = levels(np$bloc)[1])
pred$y <- predict(m2, newdata = pred, level = 0)

levelplot(y ~ nn + pp | epoc,
          data = pred,
          aspect = "iso",
          cuts = 50,
          contour = TRUE)

# display.brewer.all()
colr <- brewer.pal(11, "Spectral")
colr <- colorRampPalette(colr, space = "rgb")

wireframe(y ~ nn + pp | epoc,
          data = pred,
          scales = list(arrows = FALSE),
          xlab = "Nitrogênio (codificado)",
          ylab = "Fósforo (codificado)",
          zlab = list("Raíz da Massa Seca de Folhas (g)", rot = 90),
          col = "gray50",
          col.contour = 1,
          panel.3d.wireframe = panel.3d.contour,
          type = "on",
          col.regions = colr(100),
          drape = TRUE,
          alpha.regions = 0.5,)

Teor de Potássio nas Raízes

#-----------------------------------------------------------------------
# Visualização dos dados.

# Em função dos tratamentos.
xyplot(Kraiz ~ trat | bloc, groups = epoc, data = np)

# Em função dos níveis de N e P.
xyplot.list(list(N = Kraiz ~ N,
                 P = Kraiz ~ P),
            data = np,
            groups = epoc,
            x.same = FALSE,
            xlab = "Nutriente",
            ylab = "Teor de potássio nas raízes")

#-----------------------------------------------------------------------
# Ajuste do modelo misto com efeito de bloco e ue aleatórios.

# Modelo saturado com um tratamento categórico de 9 níveis.
m0 <- lme(Kraiz ~ trat * epoc,
          random = ~ 1 | bloc/ue,
          data = np,
          na.action = na.omit,
          method = "ML")
m1 <- update(m0, random = ~ 1 | bloc)
anova(m0, m1)
##    Model df        AIC       BIC   logLik   Test      L.Ratio
## m0     1 21  -99.42884 -52.21044 70.71442                    
## m1     2 20 -101.42884 -56.45893 70.71442 1 vs 2 6.201617e-11
##    p-value
## m0        
## m1       1
# # Diagnóstico.
# r <- residuals(m0)
# f <- fitted(m0)
# c(qqmath(r),
#   xyplot(r ~ f),
#   xyplot(sqrt(abs(r)) ~ f))

#-----------------------------------------------------------------------
# Ajuste dos modelos de efeito fixo dado o não efeito de ue.

m0 <- lm(Kraiz ~ bloc + trat * epoc, data = np)

# Diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

layout(1)

# Quadro de ANOVA.
anova(m0)
## Analysis of Variance Table
## 
## Response: Kraiz
##           Df  Sum Sq Mean Sq  F value  Pr(>F)    
## bloc       3 0.10279 0.03426   3.4287 0.02409 *  
## trat       8 0.05471 0.00684   0.6843 0.70309    
## epoc       1 1.47896 1.47896 148.0014 < 2e-16 ***
## trat:epoc  8 0.04078 0.00510   0.5101 0.84291    
## Residuals 49 0.48965 0.00999                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Modelo com N e P contínuos.
m1 <- update(m0, . ~ bloc + (nn + I(nn^2)) * (pp + I(pp^2) * epoc))
anova(m1, m0)
## Analysis of Variance Table
## 
## Model 1: Kraiz ~ bloc + nn + I(nn^2) + pp + I(pp^2) + epoc + I(pp^2):epoc + 
##     nn:pp + nn:I(pp^2) + nn:epoc + I(nn^2):pp + I(nn^2):I(pp^2) + 
##     I(nn^2):epoc + nn:I(pp^2):epoc + I(nn^2):I(pp^2):epoc
## Model 2: Kraiz ~ bloc + trat * epoc
##   Res.Df     RSS Df Sum of Sq      F Pr(>F)
## 1     52 0.51838                           
## 2     49 0.48965  3  0.028727 0.9583 0.4199
anova(m1)
## Analysis of Variance Table
## 
## Response: Kraiz
##                      Df  Sum Sq Mean Sq  F value  Pr(>F)    
## bloc                  3 0.10279 0.03426   3.4370 0.02339 *  
## nn                    1 0.00582 0.00582   0.5834 0.44843    
## I(nn^2)               1 0.00364 0.00364   0.3655 0.54810    
## pp                    1 0.00237 0.00237   0.2379 0.62777    
## I(pp^2)               1 0.01382 0.01382   1.3861 0.24442    
## epoc                  1 1.46860 1.46860 147.3194 < 2e-16 ***
## I(pp^2):epoc          1 0.00709 0.00709   0.7116 0.40277    
## nn:pp                 1 0.00781 0.00781   0.7836 0.38012    
## nn:I(pp^2)            1 0.00320 0.00320   0.3215 0.57317    
## nn:epoc               1 0.00001 0.00001   0.0012 0.97253    
## I(nn^2):pp            1 0.00386 0.00386   0.3873 0.53645    
## I(nn^2):I(pp^2)       1 0.02567 0.02567   2.5753 0.11460    
## I(nn^2):epoc          1 0.00159 0.00159   0.1599 0.69088    
## nn:I(pp^2):epoc       1 0.00018 0.00018   0.0178 0.89432    
## I(nn^2):I(pp^2):epoc  1 0.00205 0.00205   0.2053 0.65238    
## Residuals            52 0.51838 0.00997                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m2 <- update(m0, . ~ bloc + nn + pp + epoc)
anova(m2, m0)
## Analysis of Variance Table
## 
## Model 1: Kraiz ~ bloc + nn + pp + epoc
## Model 2: Kraiz ~ bloc + trat * epoc
##   Res.Df     RSS Df Sum of Sq      F Pr(>F)
## 1     63 0.57770                           
## 2     49 0.48965 14  0.088051 0.6294 0.8274
# Quadro de ANOVA e estimativas dos parâmetros.
anova(m2)
## Analysis of Variance Table
## 
## Response: Kraiz
##           Df  Sum Sq Mean Sq  F value  Pr(>F)    
## bloc       3 0.10279 0.03426   3.7364 0.01548 *  
## nn         1 0.00582 0.00582   0.6342 0.42879    
## pp         1 0.00243 0.00243   0.2653 0.60829    
## epoc       1 1.47815 1.47815 161.1961 < 2e-16 ***
## Residuals 63 0.57770 0.00917                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Call:
## lm(formula = Kraiz ~ bloc + nn + pp + epoc, data = np)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.15003 -0.05510 -0.01766  0.04514  0.35914 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.577249   0.025317  22.801   <2e-16 ***
## blocII       0.022099   0.031920   0.692   0.4913    
## blocIII      0.080280   0.032939   2.437   0.0176 *  
## blocIV       0.006889   0.031920   0.216   0.8298    
## nn          -0.010584   0.010297  -1.028   0.3079    
## pp           0.004415   0.010183   0.434   0.6661    
## epoc770     -0.291176   0.022934 -12.696   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.09576 on 63 degrees of freedom
##   (2 observations deleted due to missingness)
## Multiple R-squared:  0.7334, Adjusted R-squared:  0.708 
## F-statistic: 28.88 on 6 and 63 DF,  p-value: 2.461e-16

Não houve efeito de N e P (\(p > 5%\)) no teor de potássio das raízes. Apenas o efeito de época foi significativo.

#-----------------------------------------------------------------------
# Predição.

# source(paste0("https://raw.githubusercontent.com/walmes/",
#               "wzRfun/master/R/panel.3d.contour.R"))

pred <- expand.grid(nn = seq(-2.2, 2.2, by = 0.2),
                    pp = seq(-2.2, 2.2, by = 0.2),
                    epoc = levels(np$epoc),
                    bloc = levels(np$bloc)[1])
pred$y <- predict(m2, newdata = pred, level = 0)

levelplot(y ~ nn + pp | epoc,
          data = pred,
          aspect = "iso",
          cuts = 50,
          contour = TRUE)

# display.brewer.all()
colr <- brewer.pal(11, "Spectral")
colr <- colorRampPalette(colr, space = "rgb")

wireframe(y ~ nn + pp | epoc,
          data = pred,
          scales = list(arrows = FALSE),
          xlab = "Nitrogênio (codificado)",
          ylab = "Fósforo (codificado)",
          zlab = list("Teor de Potássio na Raíz", rot = 90),
          col = "gray50",
          col.contour = 1,
          panel.3d.wireframe = panel.3d.contour,
          type = "on",
          col.regions = colr(100),
          drape = TRUE,
          alpha.regions = 0.5,)

Teor de Potássio nas Folhas

#-----------------------------------------------------------------------
# Visualização dos dados.

xtabs(!is.na(Kfolh) ~ bloc + epoc, data = np)
##      epoc
## bloc  259 770
##   I     9   0
##   II    9   0
##   III   9   0
##   IV    9   9
# Em função dos níveis de N e P.
xyplot.list(list(N = Kfolh ~ N,
                 P = Kfolh ~ P),
            data = np,
            groups = epoc,
            x.same = FALSE,
            xlab = "Nutriente",
            ylab = "Teor de potássio nas folhas")

#-----------------------------------------------------------------------
# Ajuste do modelo para uma época apenas.

m0 <- lm(Kraiz ~ bloc + trat, data = subset(np, epoc == "259"))

# Diagnóstico.
par(mfrow = c(2, 2))
plot(m0)

layout(1)

# Quadro de ANOVA.
anova(m0)
## Analysis of Variance Table
## 
## Response: Kraiz
##           Df   Sum Sq  Mean Sq F value  Pr(>F)  
## bloc       3 0.111297 0.037099   3.686 0.02585 *
## trat       8 0.034781 0.004348   0.432 0.89008  
## Residuals 24 0.241557 0.010065                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Modelo com N e P contínuos.
m1 <- update(m0, . ~ bloc + (nn + I(nn^2)) * (pp + I(pp^2)))
anova(m1, m0)
## Analysis of Variance Table
## 
## Model 1: Kraiz ~ bloc + nn + I(nn^2) + pp + I(pp^2) + nn:pp + nn:I(pp^2) + 
##     I(nn^2):pp + I(nn^2):I(pp^2)
## Model 2: Kraiz ~ bloc + trat
##   Res.Df     RSS Df  Sum of Sq F Pr(>F)
## 1     24 0.24156                       
## 2     24 0.24156  0 1.3878e-16
anova(m1)
## Analysis of Variance Table
## 
## Response: Kraiz
##                 Df   Sum Sq  Mean Sq F value  Pr(>F)  
## bloc             3 0.111297 0.037099  3.6860 0.02585 *
## nn               1 0.003820 0.003820  0.3796 0.54363  
## I(nn^2)          1 0.000411 0.000411  0.0408 0.84160  
## pp               1 0.001452 0.001452  0.1443 0.70738  
## I(pp^2)          1 0.012606 0.012606  1.2525 0.27416  
## nn:pp            1 0.001301 0.001301  0.1293 0.72229  
## nn:I(pp^2)       1 0.002860 0.002860  0.2842 0.59889  
## I(nn^2):pp       1 0.002865 0.002865  0.2846 0.59858  
## I(nn^2):I(pp^2)  1 0.009465 0.009465  0.9404 0.34184  
## Residuals       24 0.241557 0.010065                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m2 <- update(m0, . ~ bloc + nn + pp)
anova(m2, m0)
## Analysis of Variance Table
## 
## Model 1: Kraiz ~ bloc + nn + pp
## Model 2: Kraiz ~ bloc + trat
##   Res.Df     RSS Df Sum of Sq      F Pr(>F)
## 1     30 0.27104                           
## 2     24 0.24156  6  0.029488 0.4883 0.8105
anova(m2)
## Analysis of Variance Table
## 
## Response: Kraiz
##           Df   Sum Sq  Mean Sq F value  Pr(>F)  
## bloc       3 0.111297 0.037099  4.1062 0.01486 *
## nn         1 0.003820 0.003820  0.4228 0.52047  
## pp         1 0.001473 0.001473  0.1631 0.68922  
## Residuals 30 0.271045 0.009035                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Call:
## lm(formula = Kraiz ~ bloc + nn + pp, data = subset(np, epoc == 
##     "259"))
## 
## Residuals:
##       Min        1Q    Median        3Q       Max 
## -0.133263 -0.057803 -0.000182  0.050801  0.221132 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.577646   0.031684  18.231   <2e-16 ***
## blocII      -0.022044   0.044808  -0.492   0.6263    
## blocIII      0.121240   0.044808   2.706   0.0111 *  
## blocIV       0.008266   0.044808   0.184   0.8549    
## nn          -0.004521   0.014437  -0.313   0.7563    
## pp          -0.005765   0.014278  -0.404   0.6892    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.09505 on 30 degrees of freedom
## Multiple R-squared:  0.3008, Adjusted R-squared:  0.1842 
## F-statistic: 2.581 on 5 and 30 DF,  p-value: 0.04675

Não houve efeito de N e P (\(p > 5%\)) no teor de potássio das folhas.

#-----------------------------------------------------------------------
# Predição.

# source(paste0("https://raw.githubusercontent.com/walmes/",
#               "wzRfun/master/R/panel.3d.contour.R"))

pred <- expand.grid(nn = seq(-2.2, 2.2, by = 0.2),
                    pp = seq(-2.2, 2.2, by = 0.2),
                    bloc = levels(np$bloc)[1])
pred$y <- predict(m2, newdata = pred)

levelplot(y ~ nn + pp,
          data = pred,
          aspect = "iso",
          cuts = 50,
          contour = TRUE)

# display.brewer.all()
colr <- brewer.pal(11, "Spectral")
colr <- colorRampPalette(colr, space = "rgb")

wireframe(y ~ nn + pp,
          data = pred,
          scales = list(arrows = FALSE),
          xlab = "Nitrogênio (codificado)",
          ylab = "Fósforo (codificado)",
          zlab = list("Teor de Potássio na Raíz", rot = 90),
          col = "gray50",
          col.contour = 1,
          panel.3d.wireframe = panel.3d.contour,
          type = "on",
          col.regions = colr(100),
          drape = TRUE,
          alpha.regions = 0.5,
          screen = list(x = -105, z = -10, y = -145))

Informações da Sessão

## Atualizado em 11 de julho de 2019.
## 
## R version 3.6.1 (2019-07-05)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 18.04.2 LTS
## 
## Matrix products: default
## BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
## 
## locale:
##  [1] LC_CTYPE=pt_BR.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=pt_BR.UTF-8        LC_COLLATE=en_US.UTF-8    
##  [5] LC_MONETARY=pt_BR.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=pt_BR.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=pt_BR.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods  
## [7] base     
## 
## other attached packages:
## [1] nlme_3.1-140        EACS_0.0-7          wzRfun_0.91        
## [4] captioner_2.2.3     latticeExtra_0.6-28 RColorBrewer_1.1-2 
## [7] lattice_0.20-38     knitr_1.23         
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_1.0.1        compiler_3.6.1    prettyunits_1.0.2
##  [4] remotes_2.1.0     tools_3.6.1       testthat_2.1.1   
##  [7] digest_0.6.20     pkgbuild_1.0.3    pkgload_1.0.2    
## [10] evaluate_0.14     memoise_1.1.0     rlang_0.4.0      
## [13] rstudioapi_0.10   cli_1.1.0         commonmark_1.7   
## [16] yaml_2.2.0        pkgdown_1.3.0     xfun_0.8         
## [19] withr_2.1.2       stringr_1.4.0     roxygen2_6.1.1   
## [22] xml2_1.2.0        desc_1.2.0        fs_1.3.1         
## [25] devtools_2.1.0    rprojroot_1.3-2   grid_3.6.1       
## [28] glue_1.3.1        R6_2.4.0          processx_3.4.0   
## [31] rmarkdown_1.13    sessioninfo_1.1.1 callr_3.3.0      
## [34] magrittr_1.5      usethis_1.5.1     backports_1.1.4  
## [37] ps_1.3.0          htmltools_0.3.6   MASS_7.3-51.4    
## [40] assertthat_0.2.1  stringi_1.4.3     crayon_1.3.4