responses = c("GERMINAÇÃO",
"ALTURA (CM)",
"N. FOLHA",
"N. DE RAIZ",
"TAMANHO RAIZ")
for (response_univar in responses) {
tabela <- dados %>%
group_by(TEMPERATURA, VARIEDADE) %>%
summarise(
Média = mean(.data[[response_univar]], na.rm = TRUE),
`Desvio-padrão` = sd(.data[[response_univar]], na.rm = TRUE),
Amplitude = diff(range(.data[[response_univar]])),
.groups = "drop"
)
print(
kable(
tabela,
digits = 2,
caption = paste("Resumo por Temperatura e Variedade —", response_univar),
align = "c"
)
)
}
##
##
## Table: Resumo por Temperatura e Variedade — GERMINAÇÃO
##
## | TEMPERATURA | VARIEDADE | Média | Desvio-padrão | Amplitude |
## |:-----------:|:---------:|:-----:|:-------------:|:---------:|
## | A | V1 | 2.8 | 0.63 | 2 |
## | A | V2 | 3.0 | 0.00 | 0 |
## | B | V1 | 3.0 | 0.00 | 0 |
## | B | V2 | 2.9 | 0.32 | 1 |
##
##
## Table: Resumo por Temperatura e Variedade — ALTURA (CM)
##
## | TEMPERATURA | VARIEDADE | Média | Desvio-padrão | Amplitude |
## |:-----------:|:---------:|:-----:|:-------------:|:---------:|
## | A | V1 | 18.5 | 7.60 | 27 |
## | A | V2 | 16.3 | 5.72 | 14 |
## | B | V1 | 6.6 | 4.20 | 11 |
## | B | V2 | 4.9 | 1.85 | 5 |
##
##
## Table: Resumo por Temperatura e Variedade — N. FOLHA
##
## | TEMPERATURA | VARIEDADE | Média | Desvio-padrão | Amplitude |
## |:-----------:|:---------:|:-----:|:-------------:|:---------:|
## | A | V1 | 9.0 | 3.92 | 14 |
## | A | V2 | 13.5 | 3.69 | 10 |
## | B | V1 | 6.9 | 5.32 | 13 |
## | B | V2 | 3.9 | 4.33 | 12 |
##
##
## Table: Resumo por Temperatura e Variedade — N. DE RAIZ
##
## | TEMPERATURA | VARIEDADE | Média | Desvio-padrão | Amplitude |
## |:-----------:|:---------:|:-----:|:-------------:|:---------:|
## | A | V1 | 17.3 | 6.18 | 20 |
## | A | V2 | 15.0 | 4.71 | 10 |
## | B | V1 | 10.2 | 7.25 | 19 |
## | B | V2 | 9.6 | 4.14 | 17 |
##
##
## Table: Resumo por Temperatura e Variedade — TAMANHO RAIZ
##
## | TEMPERATURA | VARIEDADE | Média | Desvio-padrão | Amplitude |
## |:-----------:|:---------:|:-----:|:-------------:|:---------:|
## | A | V1 | 10.5 | 4.97 | 16 |
## | A | V2 | 7.5 | 2.22 | 5 |
## | B | V1 | 4.5 | 2.92 | 9 |
## | B | V2 | 2.5 | 1.27 | 3 |
for (response_univar in responses) {
print(
ggplot(dados,
aes(x = TEMPERATURA,
y = .data[[response_univar]],
color = VARIEDADE,
group = VARIEDADE)) +
# Pontos das médias
stat_summary(
fun = mean,
geom = "point",
size = 3.2
) +
# Linhas das médias
stat_summary(
fun = mean,
geom = "line",
linewidth = 1
) +
# Cores das variedades (mesmo padrão dos boxplots)
scale_color_manual(
values = c(
"V1" = "#E6AB02", # Amarela
"V2" = "#6A3D9A" # Roxa
),
labels = c(
"V1" = "Amarela",
"V2" = "Roxa"
)
) +
labs(
title = response_univar,
x = "Temperatura",
y = NULL
) +
theme_classic(base_size = 12) +
theme(
legend.position = "top",
legend.title = element_blank(),
axis.text.x = element_text(face = "bold"),
plot.title = element_text(face = "bold", hjust = 0.5)
)
)
}
for (response_univar in responses) {
print(
ggplot(dados, aes(x = TEMPERATURA,
y = .data[[response_univar]],
fill = TEMPERATURA)) +
# Violino (distribuição)
geom_violin(
trim = TRUE,
scale = "width",
color = NA,
alpha = 0.6
) +
# Boxplot (estatísticas centrais)
geom_boxplot(
width = 0.18,
outlier.shape = NA,
alpha = 0.9
) +
# Pontos individuais
geom_jitter(
width = 0.08,
size = 1.6,
alpha = 0.6
) +
# Facetas por variedade
facet_wrap(~ VARIEDADE, scales = "free_y") +
# Paleta discreta (ajuste se quiser)
scale_fill_manual(
values = c(
"#4E79A7",
"#E15759"
)
) +
labs(
title = response_univar,
x = "Temperatura",
y = NULL
) +
theme_classic(base_size = 12) +
theme(
legend.position = "none",
axis.text.x = element_text(face = "bold"),
strip.background = element_blank(),
strip.text = element_text(face = "bold"),
plot.title = element_text(face = "bold", hjust = 0.5)
)
)
}
# Criar uma lista para armazenar os modelos
modelos_lista <- list()
for (i in responses) {
# Adicionamos ` em volta do nome da variável para evitar o erro de função
form <- as.formula(paste0("`", i, "` ~ TEMPERATURA * VARIEDADE"))
modelos_lista[[i]] <- lm(form, data = dados)
}
anova_tabelas <- list()
for (response_univar in responses) {
anova_tabelas[[response_univar]] <- as.data.frame(
anova(modelos_lista[[response_univar]])
) %>%
tibble::rownames_to_column("Fonte") %>%
rename(
GL = Df,
`SQ` = `Sum Sq`,
`QM` = `Mean Sq`,
`F` = `F value`,
`p-valor` = `Pr(>F)`
) %>%
mutate(
across(where(is.numeric), ~ round(.x, 4))
)
}
library(knitr)
for (response_univar in responses) {
print(
kable(
anova_tabelas[[response_univar]],
align = "c",
digits = 4,
caption = paste("Análise de variância para a variável", response_univar)
)
)
}
##
##
## Table: Análise de variância para a variável GERMINAÇÃO
##
## | Fonte | GL | SQ | QM | F | p-valor |
## |:---------------------:|:--:|:-----:|:-----:|:---:|:-------:|
## | TEMPERATURA | 1 | 0.025 | 0.025 | 0.2 | 0.6574 |
## | VARIEDADE | 1 | 0.025 | 0.025 | 0.2 | 0.6574 |
## | TEMPERATURA:VARIEDADE | 1 | 0.225 | 0.225 | 1.8 | 0.1881 |
## | Residuals | 36 | 4.500 | 0.125 | NA | NA |
##
##
## Table: Análise de variância para a variável ALTURA (CM)
##
## | Fonte | GL | SQ | QM | F | p-valor |
## |:---------------------:|:--:|:--------:|:---------:|:-------:|:-------:|
## | TEMPERATURA | 1 | 1357.225 | 1357.2250 | 48.6703 | 0.0000 |
## | VARIEDADE | 1 | 38.025 | 38.0250 | 1.3636 | 0.2506 |
## | TEMPERATURA:VARIEDADE | 1 | 0.625 | 0.6250 | 0.0224 | 0.8818 |
## | Residuals | 36 | 1003.900 | 27.8861 | NA | NA |
##
##
## Table: Análise de variância para a variável N. FOLHA
##
## | Fonte | GL | SQ | QM | F | p-valor |
## |:---------------------:|:--:|:-------:|:--------:|:-------:|:-------:|
## | TEMPERATURA | 1 | 342.225 | 342.2250 | 18.0039 | 0.0001 |
## | VARIEDADE | 1 | 5.625 | 5.6250 | 0.2959 | 0.5898 |
## | TEMPERATURA:VARIEDADE | 1 | 140.625 | 140.6250 | 7.3981 | 0.0100 |
## | Residuals | 36 | 684.300 | 19.0083 | NA | NA |
##
##
## Table: Análise de variância para a variável N. DE RAIZ
##
## | Fonte | GL | SQ | QM | F | p-valor |
## |:---------------------:|:--:|:--------:|:--------:|:-------:|:-------:|
## | TEMPERATURA | 1 | 390.625 | 390.6250 | 11.9977 | 0.0014 |
## | VARIEDADE | 1 | 21.025 | 21.0250 | 0.6458 | 0.4269 |
## | TEMPERATURA:VARIEDADE | 1 | 7.225 | 7.2250 | 0.2219 | 0.6404 |
## | Residuals | 36 | 1172.100 | 32.5583 | NA | NA |
##
##
## Table: Análise de variância para a variável TAMANHO RAIZ
##
## | Fonte | GL | SQ | QM | F | p-valor |
## |:---------------------:|:--:|:-----:|:--------:|:-------:|:-------:|
## | TEMPERATURA | 1 | 302.5 | 302.5000 | 30.4190 | 0.0000 |
## | VARIEDADE | 1 | 62.5 | 62.5000 | 6.2849 | 0.0168 |
## | TEMPERATURA:VARIEDADE | 1 | 2.5 | 2.5000 | 0.2514 | 0.6191 |
## | Residuals | 36 | 358.0 | 9.9444 | NA | NA |
shapiro_resultados <- lapply(responses, function(v) {
shapiro.test(residuals(modelos_lista[[v]]))
})
names(shapiro_resultados) <- responses
shapiro_resultados
## $GERMINAÇÃO
##
## Shapiro-Wilk normality test
##
## data: residuals(modelos_lista[[v]])
## W = 0.42032, p-value = 2.192e-11
##
##
## $`ALTURA (CM)`
##
## Shapiro-Wilk normality test
##
## data: residuals(modelos_lista[[v]])
## W = 0.92034, p-value = 0.007892
##
##
## $`N. FOLHA`
##
## Shapiro-Wilk normality test
##
## data: residuals(modelos_lista[[v]])
## W = 0.96662, p-value = 0.2799
##
##
## $`N. DE RAIZ`
##
## Shapiro-Wilk normality test
##
## data: residuals(modelos_lista[[v]])
## W = 0.94111, p-value = 0.03769
##
##
## $`TAMANHO RAIZ`
##
## Shapiro-Wilk normality test
##
## data: residuals(modelos_lista[[v]])
## W = 0.93992, p-value = 0.03435
dados_manova <- dados %>%
select(TEMPERATURA, VARIEDADE, where(is.numeric)) %>%
drop_na()
modelo_manova <- manova(
as.matrix(dados_manova %>% select(where(is.numeric))) ~
TEMPERATURA * VARIEDADE,
data = dados_manova
)
library(dplyr)
library(knitr)
manova_res <- summary(modelo_manova, test = "Pillai")$stats
tabela_manova <- as.data.frame(manova_res) %>%
tibble::rownames_to_column("Fonte") %>%
rename(
`Traço de Pillai` = Pillai,
F = `approx F`,
GL_num = `num Df`,
GL_den = `den Df`,
`p-valor` = `Pr(>F)`
) %>%
mutate(
across(where(is.numeric), ~ round(.x, 4))
)
kable(
tabela_manova,
align = "c",
caption = "Análise de Variância Multivariada (MANOVA) – Teste de Pillai"
)
| Fonte | Df | Traço de Pillai | F | GL_num | GL_den | p-valor |
|---|---|---|---|---|---|---|
| TEMPERATURA | 1 | 0.6745 | 13.2611 | 5 | 32 | 0.0000 |
| VARIEDADE | 1 | 0.3651 | 3.6810 | 5 | 32 | 0.0096 |
| TEMPERATURA:VARIEDADE | 1 | 0.4078 | 4.4065 | 5 | 32 | 0.0036 |
| Residuals | 36 | NA | NA | NA | NA | NA |
pca <- prcomp(dados_mv, scale. = TRUE)
summary(pca)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5
## Standard deviation 1.7733 0.9637 0.7892 0.45419 0.31235
## Proportion of Variance 0.6289 0.1858 0.1246 0.04126 0.01951
## Cumulative Proportion 0.6289 0.8147 0.9392 0.98049 1.00000
factoextra::fviz_pca_biplot(
pca,
habillage = dados$VARIEDADE,
addEllipses = TRUE,
ellipse.level = 0.95,
palette = c("V1" = "#E6AB02", "V2" = "#6A3D9A"),
repel = TRUE,
col.var = "grey35",
label = "var",
pointshape = 19, # ponto sólido (preenchido)
pointsize = 2.8,
alpha.ind = 0.85
) +
ggplot2::theme_classic(base_size = 12) +
ggplot2::theme(
legend.position = "top",
legend.title = ggplot2::element_blank(),
plot.title = ggplot2::element_text(face = "bold", hjust = 0.5),
axis.title = ggplot2::element_text(face = "bold")
)
factoextra::fviz_pca_biplot(
pca,
habillage = dados$TEMPERATURA,
addEllipses = TRUE,
ellipse.type = "norm", # <- volta ao padrão de dispersão (não encolhe)
ellipse.level = 0.95,
ellipse.alpha = 0.20, # transparência do preenchimento
repel = TRUE,
col.var = "grey35",
label = "var",
pointshape = 19, # pontos preenchidos
pointsize = 2.8,
alpha.ind = 0.85
) +
ggplot2::scale_color_manual(
values = c(
"A" = "#4DB8E8", # 25 °C (frio)
"B" = "#E87A4D" # 33 °C (quente)
),
labels = c(
"A" = "25 °C",
"B" = "33 °C"
)
) +
ggplot2::scale_fill_manual(
values = c(
"A" = "#4DB8E8",
"B" = "#E15759"
)
) +
ggplot2::guides(
fill = "none",
shape = "none"
) +
ggplot2::theme_classic(base_size = 12) +
ggplot2::theme(
legend.position = "top",
legend.title = ggplot2::element_blank(),
plot.title = ggplot2::element_text(face = "bold", hjust = 0.5),
axis.title = ggplot2::element_text(face = "bold")
)