library(doBy)
library(gridExtra)
library(tidyverse)

da <- read_csv2(file = "RCS_Dados.csv",
                col_names = TRUE,
                skip = 1)
da1 <- da %>% select(1:20)
da2 <- da %>% select(1:4, 21:32)

names(da2) <- names(da2) %>%
    gsub(pattern = "_1", replacement = "")

da1$cam <- "C1"
da2$cam <- "C2"

da <- bind_rows(da1, da2)
# View(da)

# dput(names(da))
names(da) <- c("trat", "descr", "bloc", "prod", "pHH2O", "pHCaCl2",
               "Pmehlich", "K", "Ca", "Mg", "Al", "MO", "CTC", "V",
               "Zn", "Cu", "Fe", "Mn", "S", "B", "cam", "SB")
str(da)
## Classes 'tbl_df', 'tbl' and 'data.frame':    80 obs. of  22 variables:
##  $ trat    : chr  "1" "1" "1" "1" ...
##  $ descr   : chr  "Soja (PD)" "Soja (PD)" "Soja (PD)" "Soja (PD)" ...
##  $ bloc    : int  1 2 3 4 1 2 3 4 1 2 ...
##  $ prod    : num  61 59 61.4 62.3 77.8 82.2 77.7 72 82.6 79.6 ...
##  $ pHH2O   : num  6.5 6.5 6.1 6.2 6.5 6.5 6.5 6.4 6.5 6.5 ...
##  $ pHCaCl2 : num  5.7 5.7 5.4 5.5 5.7 5.7 5.7 5.6 5.7 5.7 ...
##  $ Pmehlich: num  23.9 18.5 18.5 19.6 15.3 10.7 11.6 11.6 20.8 11.1 ...
##  $ K       : num  104.3 115.2 80.9 88.8 73.9 ...
##  $ Ca      : num  4.8 4.2 3.6 3.4 4.1 4.4 3.9 4.1 4.8 4.9 ...
##  $ Mg      : num  1.7 1.5 1.3 1.3 1.5 1.6 1.5 1.5 1.8 1.8 ...
##  $ Al      : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ MO      : num  32.2 31.7 31.8 30.4 38.4 36.7 37.4 36.4 45.2 42 ...
##  $ CTC     : num  9.7 8.8 9.5 8.4 8.5 9.1 8.2 9 9.8 9.8 ...
##  $ V       : num  70 68.6 53.9 58.6 67.7 67.6 66.1 63.4 68.5 69.5 ...
##  $ Zn      : num  10.2 9.8 8.8 7.6 6.5 7.5 7.3 8.7 9.2 6.5 ...
##  $ Cu      : num  1.4 1.6 2.3 2.1 1.1 1.3 1.3 1.6 1.3 1.2 ...
##  $ Fe      : num  63 60 69 69 81 79 74 85 71 82 ...
##  $ Mn      : num  49.6 35.1 29.3 21.6 31.1 32.5 28.9 29.1 41.3 29.5 ...
##  $ S       : num  20.2 17.7 16.1 19.1 9.8 10.2 9.1 10.3 12.3 10.9 ...
##  $ B       : num  0.5 0.4 0.4 0.4 0.4 0.4 0.5 0.5 0.6 0.4 ...
##  $ cam     : chr  "C1" "C1" "C1" "C1" ...
##  $ SB      : num  NA NA NA NA NA NA NA NA NA NA ...
db <- da %>%
    gather(key = "var", value = "value", pHH2O:SB, -cam)
str(db)
## Classes 'tbl_df', 'tbl' and 'data.frame':    1360 obs. of  7 variables:
##  $ trat : chr  "1" "1" "1" "1" ...
##  $ descr: chr  "Soja (PD)" "Soja (PD)" "Soja (PD)" "Soja (PD)" ...
##  $ bloc : int  1 2 3 4 1 2 3 4 1 2 ...
##  $ prod : num  61 59 61.4 62.3 77.8 82.2 77.7 72 82.6 79.6 ...
##  $ cam  : chr  "C1" "C1" "C1" "C1" ...
##  $ var  : chr  "pHH2O" "pHH2O" "pHH2O" "pHH2O" ...
##  $ value: num  6.5 6.5 6.1 6.2 6.5 6.5 6.5 6.4 6.5 6.5 ...
gg1 <- ggplot(data = db,
       mapping = aes(x = value,
                     y = prod,
                     shape = cam,
                     color = trat)) +
    geom_point() +
    facet_wrap(facets = ~var, scales = "free_x")
gg1

gg2 <- gg1 +
    geom_smooth(method = lm, se = FALSE)
gg2

ggplot(data = db,
       mapping = aes(x = value,
                     y = prod,
                     color = cam)) +
    geom_point() +
    geom_smooth(method = "lm", se = FALSE) +
    facet_grid(facets = trat ~ var, scales = "free_x") +
    xlab("Valor da variável de solo") +
    ylab("Produtividade") +
    theme(legend.position = "top")

mp <- mean(da$prod)

# Função que retorna o modelo ajustado e os dados usados para o ajuste
# contendo a resposta descontada do efeito dos tratamentos para fazer os
# gráfico dos valores ajustados contra os observados (corrigidos para o
# efeito de tratamentos).
fit_fun <- function(variable = "K") {
    # variable <- "K"
    dc <- db %>%
        filter(var == variable) %>%
        na.omit()
    cams <- dc %>%
        pull(cam) %>%
        unique() %>%
        length()
    if (cams > 1) {
        # Quando o nutriente está em mais de uma camada.
        dd <- dc %>% spread(key = "cam", value = "value")
        m0 <- lm(prod ~ trat + C1 + C2, data = dd)
        dd$resp <- mp + dd$prod -
            fitted(update(m0, . ~ trat, data = m0$model))
        dd <- dd %>% select(prod, trat, C1, C2, resp)
    } else {
        # Quando o nutriente está em apenas uma camada.
        dd <- dc %>% rename(C = "value")
        m0 <- lm(prod ~ trat + C, data = dd)
        dd$resp <- mp + dd$prod -
            fitted(update(m0, . ~ trat, data = m0$model))
        dd <- dd %>% select(prod, trat, C, resp)
    }
    return(list(m0, dd))
}

# Para criar uma progressão aritmética de uma variável com amplitude
# extendida e retornar em uma matriz.  A matriz é usada para obter os
# valores ajustados.
er <- function(data, variable = "C1", length.out = 30) {
    mm <- extendrange(data[, variable])
    matrix(data = seq(mm[1],
                      mm[2],
                      length.out = length.out),
           ncol = 1,
           dimnames = list(NULL,
                           variable))
}

# Cria a matriz para ser usada na predição.  Essa matriz considera o
# efeito médio dos tratamentos (média ajustada para efeito de
# tratamentos) e os valores variando para o fator representado pela
# matriz `bind`.
pred_matrix <- function(model, bind, columns = 1:10) {
    lsm <- LSmatrix(model)[, columns]
    lsm <- outer(rep(1, nrow(bind)), lsm, FUN = "*")
    X <- cbind(lsm, bind)
    return(X)
}

# Retorna os valores ajustados com a banda de confiança.
prediction <- function(model, X) {
    beta <- coef(model)
    stopifnot(all(names(beta) == colnames(X)))
    fit <- X %*% cbind(beta)
    v <- vcov(model)
    s <- sqrt(diag(X %*% v %*% t(X)))
    qtl <- qt(p = 0.975, df = nrow(model$model) - length(beta))
    mr <- qtl * s
    lwr <- fit - mr
    upr <- fit + mr
    flu <- cbind(fit, lwr, upr)
    colnames(flu) <- c("fit", "lwr", "upr")
    return(flu)
}

plot_fit <- function(model, variable = "C1", xlab = "K") {
    ds <- model$model
    ds$resp <- mp + ds$prod -
        fitted(update(model, . ~ trat, data = ds))
    pred <- er(ds, variable)
    X <- pred_matrix(model, pred)
    ci <- prediction(model, X)
    grid <- as.data.frame(cbind(pred, ci))
    gg_pts <- ggplot(data = ds,
                     aes(y = resp,
                         x = get(variable))) +
        geom_point() +
        geom_hline(yintercept = mp, linetype = 3) +
        ylab("Produtividade") +
        xlab(xlab)
    col <- ifelse(tail(summary(model)$coefficients[, 4], n = 1) < 0.05,
                  yes = "red",
                  no = "blue")
    gg <- gg_pts +
        geom_line(data = grid, mapping = aes(x = get(variable), y = fit), col = col) +
        geom_line(data = grid, mapping = aes(x = get(variable), y = lwr), col = "gray") +
        geom_line(data = grid, mapping = aes(x = get(variable), y = upr), col = "gray")
    return(gg)
}

plot_list <- list()

pH H2O

#-----------------------------------------------------------------------

xlab <- expression(pH ~ H[2] * O)
obj <- fit_fun("pHH2O")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 15.9671 7.803e-09 ***
## C1         1  104.68 104.676  6.3986   0.01733 *  
## C2         1    2.98   2.980  0.1822   0.67279    
## Residuals 28  458.06  16.359                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m1 <- update(m0, . ~ . -C2, data = m0$model)
summary(m1)
## 
## Call:
## lm(formula = prod ~ trat + C1, data = m0$model)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -9.5944 -2.2389  0.0931  2.5653  5.4861 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -29.031     35.114  -0.827 0.415124    
## trat2         14.367      2.939   4.888 3.47e-05 ***
## trat3         16.678      2.873   5.804 2.73e-06 ***
## trat4A        14.003      2.873   4.873 3.61e-05 ***
## trat4B        13.022      2.903   4.485 0.000106 ***
## trat5A        17.042      2.939   5.798 2.78e-06 ***
## trat6A        15.928      2.873   5.543 5.61e-06 ***
## trat6B        18.667      2.939   6.350 6.12e-07 ***
## trat7         19.525      2.819   6.925 1.30e-07 ***
## trat8         -1.850      2.819  -0.656 0.516886    
## C1            14.222      5.543   2.566 0.015720 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.987 on 29 degrees of freedom
## Multiple R-squared:  0.8419, Adjusted R-squared:  0.7874 
## F-statistic: 15.45 on 10 and 29 DF,  p-value: 4.402e-09
gg <- plot_fit(m1, "C1", xlab)
gg

plot_list <- append(plot_list, list(pHH2O = gg))

pH CaCl2

#-----------------------------------------------------------------------

xlab <- expression(pH ~ CaCl[2])
obj <- fit_fun("pHCaCl2")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 17.3645 3.026e-09 ***
## C1         1  131.78 131.779  8.7604  0.006203 ** 
## C2         1   12.74  12.739  0.8469  0.365297    
## Residuals 28  421.19  15.043                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m1 <- update(m0, . ~ . -C2, data = m0$model)
summary(m1)
## 
## Call:
## lm(formula = prod ~ trat + C1, data = m0$model)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10.3653  -2.1806   0.2145   2.6272   5.0347 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  -31.690     31.268  -1.013  0.31921    
## trat2         14.839      2.792   5.315 1.06e-05 ***
## trat3         17.269      2.750   6.281 7.39e-07 ***
## trat4A        13.764      2.792   4.930 3.08e-05 ***
## trat4B        13.139      2.792   4.706 5.74e-05 ***
## trat5A        17.514      2.792   6.273 7.55e-07 ***
## trat6A        15.689      2.792   5.619 4.55e-06 ***
## trat6B        18.308      2.861   6.399 5.37e-07 ***
## trat7         19.940      2.739   7.281 5.11e-08 ***
## trat8         -1.850      2.735  -0.676  0.50417    
## C1            16.613      5.598   2.968  0.00596 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.868 on 29 degrees of freedom
## Multiple R-squared:  0.8512, Adjusted R-squared:  0.7999 
## F-statistic: 16.59 on 10 and 29 DF,  p-value: 1.904e-09
gg <- plot_fit(m1, "C1", xlab)
gg

plot_list <- append(plot_list, list(pHCaCl2 = gg))

P-mehlich

#-----------------------------------------------------------------------

xlab <- expression("P-Mehlich")
obj <- fit_fun("Pmehlich")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 13.6699 4.311e-08 ***
## C1         1    3.53   3.525  0.1845    0.6708    
## C2         1   27.15  27.154  1.4211    0.2432    
## Residuals 28  535.03  19.108                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m1 <- update(m0, . ~ . -C2, data = m0$model)
summary(m1)
## 
## Call:
## lm(formula = prod ~ trat + C1, data = m0$model)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.4628  -1.6951   0.4033   1.8445   5.4021 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  58.3550     6.4162   9.095 5.43e-10 ***
## trat2        17.4993     3.8967   4.491 0.000104 ***
## trat3        18.8534     3.5798   5.267 1.21e-05 ***
## trat4A       16.5615     4.0983   4.041 0.000358 ***
## trat4B       15.8599     3.9838   3.981 0.000421 ***
## trat5A       20.2956     4.0741   4.982 2.67e-05 ***
## trat6A       18.5344     4.1722   4.442 0.000119 ***
## trat6B       21.5534     3.5798   6.021 1.50e-06 ***
## trat7        20.5753     3.9699   5.183 1.53e-05 ***
## trat8        -0.9465     3.7659  -0.251 0.803325    
## C1            0.1277     0.2995   0.426 0.672941    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.403 on 29 degrees of freedom
## Multiple R-squared:  0.8072, Adjusted R-squared:  0.7408 
## F-statistic: 12.14 on 10 and 29 DF,  p-value: 6.691e-08
gg <- plot_fit(m1, "C1", xlab)
gg

plot_list <- append(plot_list, list(Pmehlich = gg))

K

#-----------------------------------------------------------------------

xlab <- expression("Potássio")
obj <- fit_fun("K")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 15.1568 1.393e-08 ***
## C1         1   78.56  78.557  4.5583   0.04165 *  
## C2         1    4.61   4.610  0.2675   0.60908    
## Residuals 28  482.55  17.234                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m1 <- update(m0, . ~ . -C2, data = m0$model)
summary(m1)
## 
## Call:
## lm(formula = prod ~ trat + C1, data = m0$model)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10.0509  -1.5108   0.6049   2.8665   5.7019 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 44.22192    7.99118   5.534 5.76e-06 ***
## trat2       22.35380    3.96571   5.637 4.33e-06 ***
## trat3       25.63613    4.53253   5.656 4.11e-06 ***
## trat4A      21.22301    3.94814   5.375 8.94e-06 ***
## trat4B      21.19026    4.13901   5.120 1.82e-05 ***
## trat5A      25.01164    3.96029   6.316 6.73e-07 ***
## trat6A      25.24663    4.66192   5.415 8.00e-06 ***
## trat6B      26.75251    3.99700   6.693 2.43e-07 ***
## trat7       27.51604    4.69620   5.859 2.35e-06 ***
## trat8        4.03814    3.97656   1.015    0.318    
## C1           0.17167    0.07938   2.163    0.039 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.099 on 29 degrees of freedom
## Multiple R-squared:  0.833,  Adjusted R-squared:  0.7754 
## F-statistic: 14.46 on 10 and 29 DF,  p-value: 9.409e-09
gg <- plot_fit(m1, "C1", xlab)
gg

plot_list <- append(plot_list, list(K = gg))

Ca

#-----------------------------------------------------------------------

xlab <- expression("Cálcio")
obj <- fit_fun("Ca")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 19.3748 8.585e-10 ***
## C1         1  147.28 147.282 10.9244  0.002605 ** 
## C2         1   40.94  40.938  3.0365  0.092386 .  
## Residuals 28  377.49  13.482                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m1 <- update(m0, . ~ . -C2, data = m0$model)
summary(m1)
## 
## Call:
## lm(formula = prod ~ trat + C1, data = m0$model)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -9.248 -2.334  0.472  2.377  5.029 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   38.443      7.288   5.275 1.18e-05 ***
## trat2         15.797      2.695   5.862 2.33e-06 ***
## trat3         15.992      2.766   5.782 2.90e-06 ***
## trat4A        15.284      2.686   5.690 3.74e-06 ***
## trat4B        14.097      2.695   5.231 1.33e-05 ***
## trat5A        17.910      2.715   6.597 3.14e-07 ***
## trat6A        14.259      2.855   4.995 2.58e-05 ***
## trat6B        16.866      2.955   5.708 3.56e-06 ***
## trat7         18.260      2.715   6.726 2.22e-07 ***
## trat8         -1.428      2.689  -0.531  0.59933    
## C1             5.620      1.759   3.195  0.00336 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.799 on 29 degrees of freedom
## Multiple R-squared:  0.8565, Adjusted R-squared:  0.8071 
## F-statistic: 17.31 on 10 and 29 DF,  p-value: 1.15e-09
gg <- plot_fit(m1, "C1", xlab)
gg

plot_list <- append(plot_list, list(Ca = gg))

Mg

#-----------------------------------------------------------------------

xlab <- expression("Magnésio")
obj <- fit_fun("Mg")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 18.9761 1.093e-09 ***
## C1         1  134.79 134.792  9.7923   0.00407 ** 
## C2         1   45.50  45.498  3.3053   0.07977 .  
## Residuals 28  385.42  13.765                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m1 <- update(m0, . ~ . -C2, data = m0$model)
summary(m1)
## 
## Call:
## lm(formula = prod ~ trat + C1, data = m0$model)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -9.950 -1.835  0.528  2.603  5.450 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   37.177      8.117   4.580 8.14e-05 ***
## trat2         15.272      2.756   5.541 5.65e-06 ***
## trat3         15.234      2.887   5.277 1.18e-05 ***
## trat4A        14.606      2.739   5.332 1.01e-05 ***
## trat4B        13.981      2.739   5.104 1.90e-05 ***
## trat5A        17.947      2.756   6.512 3.95e-07 ***
## trat6A        14.074      2.935   4.796 4.47e-05 ***
## trat6B        16.705      3.046   5.484 6.61e-06 ***
## trat7         17.887      2.779   6.436 4.86e-07 ***
## trat8         -1.850      2.726  -0.679  0.50270    
## C1            16.378      5.438   3.012  0.00534 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.855 on 29 degrees of freedom
## Multiple R-squared:  0.8523, Adjusted R-squared:  0.8013 
## F-statistic: 16.73 on 10 and 29 DF,  p-value: 1.729e-09
gg <- plot_fit(m1, "C1", xlab)
gg

plot_list <- append(plot_list, list(Mg = gg))

MO

#-----------------------------------------------------------------------

xlab <- expression("Matéria orgânica")
obj <- fit_fun("MO")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 15.5725 1.032e-08 ***
## C1         1   93.25  93.249  5.5592    0.0256 *  
## C2         1    2.80   2.799  0.1669    0.6860    
## Residuals 28  469.66  16.774                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m1 <- update(m0, . ~ . -C2, data = m0$model)
summary(m1)
## 
## Call:
## lm(formula = prod ~ trat + C1, data = m0$model)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10.0669  -2.0914   0.3871   2.3899   5.4351 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)  
## (Intercept)  21.2866    16.6908   1.275   0.2123  
## trat2         9.3330     4.1376   2.256   0.0318 *
## trat3         4.3004     6.4355   0.668   0.5093  
## trat4A        9.8926     3.6733   2.693   0.0116 *
## trat4B        8.1988     3.9698   2.065   0.0479 *
## trat5A       11.0650     4.4314   2.497   0.0185 *
## trat6A        7.1653     5.1253   1.398   0.1727  
## trat6B       11.3069     4.8878   2.313   0.0280 *
## trat7        11.2578     4.4818   2.512   0.0178 *
## trat8         1.3877     3.1587   0.439   0.6637  
## C1            1.2574     0.5256   2.392   0.0234 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.036 on 29 degrees of freedom
## Multiple R-squared:  0.838,  Adjusted R-squared:  0.7821 
## F-statistic:    15 on 10 and 29 DF,  p-value: 6.171e-09
gg <- plot_fit(m1, "C1", xlab)
gg

plot_list <- append(plot_list, list(MO = gg))

CTC

#-----------------------------------------------------------------------

xlab <- expression("CTC")
obj <- fit_fun("CTC")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 15.9181 8.075e-09 ***
## C1         1   16.84  16.838  1.0261   0.31974    
## C2         1   89.41  89.407  5.4485   0.02699 *  
## Residuals 28  459.47  16.410                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m1 <- update(m0, . ~ . -C1, data = m0$model)
summary(m1)
## 
## Call:
## lm(formula = prod ~ trat + C2, data = m0$model)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10.9728  -1.8226   0.4976   1.5459   6.3476 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   34.757     11.536   3.013  0.00532 ** 
## trat2         18.011      2.945   6.115 1.16e-06 ***
## trat3         17.623      2.879   6.122 1.14e-06 ***
## trat4A        16.300      2.896   5.628 4.44e-06 ***
## trat4B        16.470      2.961   5.562 5.33e-06 ***
## trat5A        18.618      2.881   6.462 4.53e-07 ***
## trat6A        15.759      2.953   5.337 9.96e-06 ***
## trat6B        19.766      2.906   6.802 1.81e-07 ***
## trat7         18.173      2.931   6.201 9.19e-07 ***
## trat8          0.218      3.008   0.072  0.94273    
## C2             3.182      1.381   2.304  0.02856 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.061 on 29 degrees of freedom
## Multiple R-squared:  0.8361, Adjusted R-squared:  0.7795 
## F-statistic: 14.79 on 10 and 29 DF,  p-value: 7.279e-09
gg <- plot_fit(m1, "C2", xlab)
gg

plot_list <- append(plot_list, list(CTC = gg))

SB

#-----------------------------------------------------------------------

xlab <- expression("V%")
obj <- fit_fun("V")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 17.1363 3.517e-09 ***
## C1         1  136.66 136.656  8.9652  0.005699 ** 
## C2         1    2.25   2.253  0.1478  0.703541    
## Residuals 28  426.80  15.243                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m1 <- update(m0, . ~ . -C2, data = m0$model)
summary(m1)
## 
## Call:
## lm(formula = prod ~ trat + C1, data = m0$model)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -9.4719 -2.6466  0.2978  2.4802  5.3754 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  34.8263     8.8001   3.957 0.000449 ***
## trat2        15.0761     2.7599   5.463 7.02e-06 ***
## trat3        16.8424     2.7511   6.122 1.14e-06 ***
## trat4A       14.0218     2.7587   5.083 2.02e-05 ***
## trat4B       13.6463     2.7462   4.969 2.76e-05 ***
## trat5A       17.6887     2.7635   6.401 5.34e-07 ***
## trat6A       16.0508     2.7532   5.830 2.54e-06 ***
## trat6B       18.4406     2.8285   6.520 3.87e-07 ***
## trat7        19.7121     2.7205   7.246 5.60e-08 ***
## trat8        -1.1952     2.7284  -0.438 0.664586    
## C1            0.4157     0.1368   3.039 0.004986 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.846 on 29 degrees of freedom
## Multiple R-squared:  0.8529, Adjusted R-squared:  0.8022 
## F-statistic: 16.81 on 10 and 29 DF,  p-value: 1.628e-09
gg <- plot_fit(m1, "C1", xlab)
gg

plot_list <- append(plot_list, list(V = gg))

S

#-----------------------------------------------------------------------

xlab <- expression("Enxofre")
obj <- fit_fun("S")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 14.5678 2.156e-08 ***
## C1         1   25.37  25.372  1.4150    0.2442    
## C2         1   38.29  38.287  2.1353    0.1551    
## Residuals 28  502.05  17.930                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
m1 <- update(m0, . ~ . -C2, data = m0$model)
summary(m1)
## 
## Call:
## lm(formula = prod ~ trat + C1, data = m0$model)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10.0439  -1.4910  -0.0601   2.9415   6.7166 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  68.5511     6.8824   9.960 7.22e-11 ***
## trat2        12.9843     4.2888   3.028 0.005134 ** 
## trat3        15.6797     3.6903   4.249 0.000203 ***
## trat4A       13.1507     3.6214   3.631 0.001077 ** 
## trat4B       11.3156     4.2700   2.650 0.012896 *  
## trat5A       17.3285     3.4381   5.040 2.27e-05 ***
## trat6A       14.8880     3.7105   4.012 0.000387 ***
## trat6B       17.2739     4.2950   4.022 0.000377 ***
## trat7        18.0019     3.3196   5.423 7.84e-06 ***
## trat8        -5.3970     4.3076  -1.253 0.220253    
## C1           -0.4173     0.3576  -1.167 0.252751    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.317 on 29 degrees of freedom
## Multiple R-squared:  0.8147, Adjusted R-squared:  0.7509 
## F-statistic: 12.75 on 10 and 29 DF,  p-value: 3.896e-08
gg <- plot_fit(m1, "C1", xlab)
gg

plot_list <- append(plot_list, list(S = gg))

SB

#-----------------------------------------------------------------------

xlab <- expression("Soma de bases")
obj <- fit_fun("SB")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208  19.175 6.119e-10 ***
## C          1  170.67 170.675  12.529  0.001373 ** 
## Residuals 29  395.04  13.622                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(m0)
## 
## Call:
## lm(formula = prod ~ trat + C, data = dd)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -8.6320 -2.1883  0.6485  2.0438  5.8317 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   44.487      4.997   8.902 8.61e-10 ***
## trat2         16.030      2.613   6.134 1.10e-06 ***
## trat3         18.804      2.617   7.185 6.57e-08 ***
## trat4A        15.660      2.611   5.998 1.60e-06 ***
## trat4B        16.561      2.657   6.234 8.41e-07 ***
## trat5A        18.588      2.615   7.108 8.04e-08 ***
## trat6A        18.642      2.635   7.074 8.79e-08 ***
## trat6B        20.683      2.610   7.924 9.71e-09 ***
## trat7         19.055      2.613   7.292 4.96e-08 ***
## trat8         -6.429      2.913  -2.207  0.03537 *  
## C              4.697      1.327   3.540  0.00137 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.691 on 29 degrees of freedom
## Multiple R-squared:  0.8646, Adjusted R-squared:  0.8178 
## F-statistic: 18.51 on 10 and 29 DF,  p-value: 5.167e-10
gg <- plot_fit(m0, "C", xlab)
gg

# plot_list <- append(plot_list, list(SB = gg))

Zn

#-----------------------------------------------------------------------

xlab <- expression("Zinco")
obj <- fit_fun("Zn")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 13.9740 2.386e-08 ***
## C          1   23.63  23.631  1.2642    0.2701    
## Residuals 29  542.08  18.692                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(m0)
## 
## Call:
## lm(formula = prod ~ trat + C, data = dd)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -10.6762  -1.6756   0.2031   2.2952   5.5631 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  67.0721     5.8790  11.409 3.06e-12 ***
## trat2        15.4192     3.2047   4.811 4.28e-05 ***
## trat3        17.2725     3.1445   5.493 6.45e-06 ***
## trat4A       14.1922     3.2478   4.370 0.000145 ***
## trat4B       13.5165     3.2633   4.142 0.000272 ***
## trat5A       18.7359     3.0820   6.079 1.28e-06 ***
## trat6A       17.1305     3.0634   5.592 4.90e-06 ***
## trat6B       20.5973     3.0625   6.726 2.22e-07 ***
## trat7        19.9810     3.0839   6.479 4.32e-07 ***
## trat8        -4.2311     3.7190  -1.138 0.264559    
## C            -0.6755     0.6008  -1.124 0.270082    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.323 on 29 degrees of freedom
## Multiple R-squared:  0.8141, Adjusted R-squared:   0.75 
## F-statistic:  12.7 on 10 and 29 DF,  p-value: 4.071e-08
gg <- plot_fit(m0, "C", xlab)
gg

plot_list <- append(plot_list, list(Zn = gg))

Cu

#-----------------------------------------------------------------------

xlab <- expression("Cobre")
obj <- fit_fun("Cu")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value   Pr(>F)    
## trat       9 2350.88 261.208 13.3920 3.83e-08 ***
## C          1    0.07   0.072  0.0037    0.952    
## Residuals 29  565.64  19.505                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(m0)
## 
## Call:
## lm(formula = prod ~ trat + C, data = dd)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.3861  -1.8093   0.4305   1.9055   5.4525 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 61.01597    2.66846  22.866  < 2e-16 ***
## trat2       16.47418    3.15169   5.227 1.35e-05 ***
## trat3       18.07787    3.14408   5.750 3.17e-06 ***
## trat4A      15.39058    3.17392   4.849 3.86e-05 ***
## trat4B      14.83565    3.17760   4.669 6.36e-05 ***
## trat5A      19.13812    3.18140   6.016 1.53e-06 ***
## trat6A      17.34017    3.12708   5.545 5.58e-06 ***
## trat6B      20.77664    3.14649   6.603 3.09e-07 ***
## trat7       19.52746    3.12315   6.252 7.99e-07 ***
## trat8       -1.87950    3.16046  -0.595    0.557    
## C           -0.04917    0.80981  -0.061    0.952    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.416 on 29 degrees of freedom
## Multiple R-squared:  0.8061, Adjusted R-squared:  0.7392 
## F-statistic: 12.05 on 10 and 29 DF,  p-value: 7.273e-08
gg <- plot_fit(m0, "C", xlab)
gg

plot_list <- append(plot_list, list(Cu = gg))

Fe

#-----------------------------------------------------------------------

xlab <- expression("Ferro")
obj <- fit_fun("Fe")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208  13.391 3.833e-08 ***
## C          1    0.04   0.039   0.002    0.9648    
## Residuals 29  565.67  19.506                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(m0)
## 
## Call:
## lm(formula = prod ~ trat + C, data = dd)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.3988  -1.8224   0.4146   1.9551   5.4500 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 60.652324   6.518998   9.304 3.30e-10 ***
## trat2       16.439405   3.407465   4.825 4.13e-05 ***
## trat3       18.070747   3.191547   5.662 4.04e-06 ***
## trat4A      15.413508   3.133660   4.919 3.18e-05 ***
## trat4B      14.746719   3.345062   4.409 0.000131 ***
## trat5A      19.159329   3.142811   6.096 1.22e-06 ***
## trat6A      17.336418   3.137887   5.525 5.91e-06 ***
## trat6B      20.772837   3.182190   6.528 3.78e-07 ***
## trat7       19.504105   3.158149   6.176 9.84e-07 ***
## trat8       -1.895968   3.289709  -0.576 0.568837    
## C            0.004179   0.094001   0.044 0.964846    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.417 on 29 degrees of freedom
## Multiple R-squared:  0.806,  Adjusted R-squared:  0.7392 
## F-statistic: 12.05 on 10 and 29 DF,  p-value: 7.279e-08
gg <- plot_fit(m0, "C", xlab)
gg

plot_list <- append(plot_list, list(Fe = gg))

Mn

#-----------------------------------------------------------------------

xlab <- expression("Manganês")
obj <- fit_fun("Mn")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 13.4068 3.784e-08 ***
## C          1    0.70   0.698  0.0358    0.8512    
## Residuals 29  565.01  19.483                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(m0)
## 
## Call:
## lm(formula = prod ~ trat + C, data = dd)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.6180  -1.7507   0.4018   2.0072   5.4970 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 60.03519    5.19319  11.560 2.23e-12 ***
## trat2       16.59187    3.15867   5.253 1.26e-05 ***
## trat3       18.14397    3.12979   5.797 2.78e-06 ***
## trat4A      15.63302    3.30898   4.724 5.45e-05 ***
## trat4B      14.92337    3.18848   4.680 6.16e-05 ***
## trat5A      19.12382    3.13285   6.104 1.20e-06 ***
## trat6A      17.48124    3.19724   5.468 6.92e-06 ***
## trat6B      20.72913    3.14353   6.594 3.16e-07 ***
## trat7       19.56437    3.12808   6.254 7.94e-07 ***
## trat8       -1.55143    3.49710  -0.444    0.661    
## C            0.02625    0.13867   0.189    0.851    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.414 on 29 degrees of freedom
## Multiple R-squared:  0.8063, Adjusted R-squared:  0.7395 
## F-statistic: 12.07 on 10 and 29 DF,  p-value: 7.165e-08
gg <- plot_fit(m0, "C", xlab)
gg

plot_list <- append(plot_list, list(Mn = gg))

B

#-----------------------------------------------------------------------

xlab <- expression("Boro")
obj <- fit_fun("B")
m0 <- obj[[1]]
anova(m0)
## Analysis of Variance Table
## 
## Response: prod
##           Df  Sum Sq Mean Sq F value    Pr(>F)    
## trat       9 2350.88 261.208 14.2142 1.972e-08 ***
## C          1   32.79  32.791  1.7844     0.192    
## Residuals 29  532.92  18.377                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(m0)
## 
## Call:
## lm(formula = prod ~ trat + C, data = dd)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -10.140  -1.535   0.150   1.830   6.085 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   53.502      5.956   8.983 7.09e-10 ***
## trat2         16.063      3.049   5.269 1.20e-05 ***
## trat3         17.227      3.101   5.555 5.43e-06 ***
## trat4A        13.678      3.301   4.144 0.000271 ***
## trat4B        13.927      3.101   4.491 0.000104 ***
## trat5A        17.865      3.186   5.608 4.70e-06 ***
## trat6A        16.040      3.186   5.035 2.30e-05 ***
## trat6B        19.490      3.186   6.118 1.15e-06 ***
## trat7         18.652      3.101   6.015 1.53e-06 ***
## trat8         -1.413      3.049  -0.464 0.646407    
## C             17.465     13.075   1.336 0.192002    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.287 on 29 degrees of freedom
## Multiple R-squared:  0.8173, Adjusted R-squared:  0.7543 
## F-statistic: 12.97 on 10 and 29 DF,  p-value: 3.225e-08
gg <- plot_fit(m0, "C", xlab)
gg

plot_list <- append(plot_list, list(B = gg))

Gráfico final

# plot_list <- lapply(plot_list,
#                     FUN = function(gg) {
#                         gg + theme(legend.position = "none")
#                     })

do.call(what = function(...) grid.arrange(..., ncol = 5),
        args = plot_list)