###################################
## Q1 — Comprimento vs. Local ##
## Autora: Victória Souza ##
###################################
# 0) Ler dados e preparar fator -------------------------------------------
dados <- read.table("questao1.txt", header = TRUE, dec = ".")
# Garante que "local" é fator e na ordem A-D
dados$local <- factor(dados$local, levels = c("A","B","C","D"))
# Visão geral
dados
## local comprimento
## 1 A 3.20
## 2 A 2.60
## 3 A 2.80
## 4 A 3.30
## 5 A 3.72
## 6 A 2.90
## 7 A 3.00
## 8 A 3.06
## 9 A 2.50
## 10 A 3.90
## 11 A 2.50
## 12 A 3.32
## 13 A 3.65
## 14 A 3.15
## 15 A 4.10
## 16 A 3.30
## 17 A 3.45
## 18 A 3.10
## 19 A 3.15
## 20 A 2.80
## 21 A 2.90
## 22 A 1.95
## 23 A 3.60
## 24 A 3.35
## 25 B 2.33
## 26 B 2.95
## 27 B 2.60
## 28 B 3.65
## 29 B 2.55
## 30 B 2.35
## 31 B 2.95
## 32 B 3.00
## 33 B 3.75
## 34 B 3.15
## 35 B 3.20
## 36 B 2.53
## 37 B 3.32
## 38 B 2.53
## 39 B 2.90
## 40 B 3.20
## 41 B 4.22
## 42 B 2.42
## 43 B 2.73
## 44 B 2.45
## 45 B 3.41
## 46 B 3.13
## 47 B 3.42
## 48 B 3.25
## 49 C 3.25
## 50 C 2.71
## 51 C 3.15
## 52 C 2.89
## 53 C 2.71
## 54 C 3.30
## 55 C 3.25
## 56 C 3.22
## 57 C 2.83
## 58 C 4.63
## 59 C 1.73
## 60 C 2.76
## 61 C 4.21
## 62 C 2.12
## 63 C 4.43
## 64 C 2.91
## 65 C 2.30
## 66 C 2.74
## 67 C 2.94
## 68 C 2.60
## 69 C 2.74
## 70 C 2.56
## 71 C 3.90
## 72 C 2.51
## 73 D 2.35
## 74 D 2.47
## 75 D 3.83
## 76 D 3.40
## 77 D 3.41
## 78 D 1.54
## 79 D 3.82
## 80 D 2.71
## 81 D 2.94
## 82 D 3.62
## 83 D 2.13
## 84 D 3.16
## 85 D 2.45
## 86 D 3.45
## 87 D 3.14
## 88 D 2.15
## 89 D 2.46
## 90 D 2.72
## 91 D 2.99
## 92 D 3.26
## 93 D 3.68
## 94 D 3.20
## 95 D 3.10
## 96 D 2.89
summary(dados)
## local comprimento
## A:24 Min. :1.540
## B:24 1st Qu.:2.600
## C:24 Median :3.000
## D:24 Mean :3.027
## 3rd Qu.:3.320
## Max. :4.630
str(dados)
## 'data.frame': 96 obs. of 2 variables:
## $ local : Factor w/ 4 levels "A","B","C","D": 1 1 1 1 1 1 1 1 1 1 ...
## $ comprimento: num 3.2 2.6 2.8 3.3 3.72 2.9 3 3.06 2.5 3.9 ...
# 1) Homogeneidade de variâncias ------------------------------------------
# Teste de Levene
car::leveneTest(comprimento ~ local, data = dados, center = median)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 3 0.6166 0.606
## 92
Interpretação: Teste de Levene (homocedasticidade): F(3,92)=0,617; p=0,606. P-value > 0,05, ou seja, não rejeita H0 (os dados são homocedasticos).
# 2) ANOVA de 1 fator ------------------------------------------------------
resultado.anova <- aov(comprimento ~ local, data = dados)
# 3) Normalidade dos resíduos ---------------------------------------------
# Teste formal
shapiro.test(residuals(resultado.anova))
##
## Shapiro-Wilk normality test
##
## data: residuals(resultado.anova)
## W = 0.98813, p-value = 0.5476
Interpretação: Shapiro–Wilk nos resíduos (normalidade): W=0,988; p=0,548. P-value > 0,05, ou seja, não rejeita H0 (os dados são normais).
# QQ-plot dos resíduos
qqnorm(residuals(resultado.anova)); qqline(residuals(resultado.anova), lty = 2)
Interpretação: Figura 1: Os pontos seguem próximo à linha tracejada reta. Dados tendem à normalidade.
# Densidade + QQ-plot com objeto lm (mesmo ajuste; para confirmar visualmente)
lm1 <- lm(comprimento ~ local, data = dados)
plot(density(residuals(lm1)))
Interpretação: Figura 2: A curva de densidade é próxima ao formato de sino, centrada próximo de 0 e com simetria nas caudas. Padrão compatível com características que indicam normalidade.
plot(lm1, which = 3)
Interpretação:: Figura 3: A linha LOESS (vermelha) está quase horizontal e o espalhamento dos resíduos padronizados é parecido ao longo dos valores ajustados, indicando variância constante. Homocedasticidade atendida.
qqnorm(residuals(lm1)); qqline(residuals(lm1), lty = 2)
# 4) Resultado da ANOVA + Tukey -------------------------------------------
summary(resultado.anova)
## Df Sum Sq Mean Sq F value Pr(>F)
## local 3 0.446 0.1485 0.455 0.714
## Residuals 92 30.016 0.3263
TukeyHSD(resultado.anova) # (executado por completude)
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = comprimento ~ local, data = dados)
##
## $local
## diff lwr upr p adj
## B-A -0.13791667 -0.5693650 0.2935317 0.8369801
## C-A -0.12125000 -0.5526984 0.3101984 0.8826096
## D-A -0.18458333 -0.6160317 0.2468650 0.6785304
## C-B 0.01666667 -0.4147817 0.4481150 0.9996275
## D-B -0.04666667 -0.4781150 0.3847817 0.9920411
## D-C -0.06333333 -0.4947817 0.3681150 0.9806130
Interpretação: ANOVA e Tukey: F(3,92)=0,455; p=0,714. P-value > 0,05, ou seja, comprimento sem diferença significativa entre locais. Como a ANOVA já não havia detectado diferenças significativas, Tukey apenas corrobora que não há diferença par a par.
# 5) Saída compacta -------------------------------------------------------
tab <- anova(resultado.anova)
p <- summary(resultado.anova)[[1]][["Pr(>F)"]][1]
Fv <- summary(resultado.anova)[[1]][["F value"]][1]
df1 <- tab$Df[1]; df2 <- tab$Df[2]
cat(sprintf("ANOVA 1 via: F(%d,%d) = %.3f, p = %.3f\n", df1, df2, Fv, p))
## ANOVA 1 via: F(3,92) = 0.455, p = 0.714
# 6) Gráficos de comparação -----------------------------------------------
# (a) Linha com IC (média ± IC95%)
if (!requireNamespace("sciplot", quietly = TRUE)) install.packages("sciplot")
sciplot::lineplot.CI(local, comprimento, data = dados, las = 1,
xlab = "Local", ylab = "Comprimento")
Interpretação: Figura 4: Os Intervalos de Confiança (95%) dos quatro locais se sobrepõem amplamente, não há evidência visual de diferenças.
# (b) Boxplot + pontos individuais (jitter)
boxplot(comprimento ~ local, data = dados, las = 1,
xlab = "Local", ylab = "Comprimento", main = "Comprimento por local")
stripchart(comprimento ~ local, data = dados, vertical = TRUE,
method = "jitter", pch = 19, add = TRUE)
Interpretação: Figura 5: A distribuição dos comprimentos é semelhante entre A–D, sem deslocamentos claros de mediana.