Leonardo de Azevedo Peixoto
Research Scientist III
Iowa State University, Ames, IA, USA
Este e-book apresenta as principais análises estatísticas usadas em pesquisa, com explicações conceituais e exemplos de código em R. É direcionado a alunos de graduação, pós graduação, professores e profissionais que querem entender mais sobre análise de dados.
A escolha da análise estatística adequada é um dos passos mais
importantes para garantir resultados confiáveis e interpretações
corretas.
Essa decisão depende diretamente das características dos seus
dados e da forma como o experimento foi
conduzido.
De modo geral, é preciso considerar os seguintes aspectos:
Antes de escolher a análise estatística, é essencial compreender
que tipo de dado você possui.
Cada tipo de variável requer um tratamento estatístico diferente, pois
os modelos assumem propriedades específicas (como distribuição, escala e
natureza da medição).
Os dados em experimentos e pesquisas científicas podem ser
classificados de diversas formas.
A tabela a seguir resume os principais tipos de variáveis e as análises
mais adequadas para cada caso.
| Tipo de Dado | Exemplos | Características | Técnicas de Análise Comuns |
|---|---|---|---|
| Contínuo | Altura de plantas, produtividade, peso, temperatura | Assume valores em uma escala contínua; geralmente seguem distribuição normal. | Teste t, ANOVA, Regressão Linear, Modelos Mistos |
| Discreto | Número de folhas, número de frutos, número de insetos | Valores inteiros, geralmente oriundos de contagens. | GLM Poisson, Binomial Negativa, Testes não paramétricos |
| Categórico Nominal | Tratamento, genótipo, local, cor, espécie | Sem ordem lógica entre as categorias. | Teste Qui-quadrado, Modelos Log-lineares, GLM com variável dummy |
| Categórico Ordinal | Estágio fenológico, notas de severidade, níveis de dano | Categorias ordenadas, mas sem intervalos numéricos definidos. | Testes de tendência, Regressão Ordinal, Kruskal–Wallis |
| Proporção / Percentual | Germinação (%), sobrevivência (%), incidência de doença (%) | Restrito entre 0 e 1 (ou 0 e 100%); distribuição assimétrica. | GLM Binomial (logit ou probit), Transformação Arco-seno, Modelos Beta |
| Contagem | Nº de sementes germinadas, Nº de insetos, Nº de falhas | Valores não negativos e inteiros; variância geralmente dependente da média. | GLM Poisson, GLM Binomial Negativa |
| Binário (0/1) | Presença/ausência, sucesso/falha, vivo/morto | Duas categorias mutuamente exclusivas. | Regressão Logística, GLM Binomial |
| Proporcional Composta | Fração de um total (ex.: área coberta / área total) | Derivada de contagens, mas tratada como proporção contínua. | GLM Beta, Transformação logit |
| Tempo / Sobrevivência | Tempo até germinação, duração até evento, falha mecânica | Medidas de tempo ou duração; podem incluir censura. | Análise de Sobrevivência (Kaplan-Meier, Cox), Regressão Exponencial |
| Espacial / Geográfica | Coordenadas GPS, posição no campo, altitude | Dados associados a localização espacial. | Geoestatística, Krigagem, Modelos Mistos Espaciais |
| Temporal / Série Temporal | Temperatura diária, chuva mensal, produção anual | Observações sequenciais ao longo do tempo. | Modelos ARIMA, Regressão Temporal, Modelos Mistos Longitudinais |
| Composicional | Fração de componentes (ex.: areia, silte, argila) que somam 1 | Dados interdependentes entre si (soma constante). | Análise Composicional, Transformações Log-ratio (clr, alr, ilr) |
| Multivariado | Conjunto de variáveis correlacionadas (ex.: caracteres agronômicos) | Conjunto de respostas medidas no mesmo indivíduo. | PCA, Análise Fatorial, Discriminante, Cluster Analysis |
Quando há apenas duas médias a comparar, geralmente
aplicamos o teste t (ou Mann–Whitney, se os dados não
forem normais).
Se existem três ou mais grupos, a análise adequada é a
ANOVA (ou Kruskal–Wallis, na versão não paramétrica),
seguida de testes de comparação múltipla como Tukey,
Scott-Knott ou Dunnett.
A estrutura do experimento é um dos pilares mais
importantes da análise estatística, pois define o tipo de modelo que
deve ser ajustado aos dados.
Antes de escolher o método de análise, é essencial compreender os
três princípios básicos da experimentação, o
delineamento utilizado e a presença de
fatores ou interações.
Repetição
A repetição é a aplicação do mesmo tratamento mais de uma vez.
Ela permite estimar o erro experimental e
aumentar a precisão dos resultados.
Sem repetições, não é possível avaliar se as diferenças observadas entre
tratamentos são reais ou apenas fruto do acaso.
Aleatorização
A aleatorização consiste em distribuir os tratamentos ao
acaso entre as unidades experimentais.
Esse princípio garante que fatores não controlados (como variações de
solo ou temperatura) não causem viés sistemático nos
resultados.
Controle local (ou bloqueamento)
O controle local é obtido ao agrupar unidades experimentais
homogêneas em blocos, de modo que a variação dentro de cada
bloco seja mínima.
Isso reduz o erro experimental e aumenta a capacidade
de detectar diferenças reais entre tratamentos.
Os delineamentos definem como os tratamentos são distribuídos nas unidades experimentais.
Os experimentos fatoriais avaliam simultaneamente
dois ou mais fatores (ex.: doses × cultivares, adubo × irrigação).
Esses delineamentos permitem:
Por exemplo, em um experimento fatorial \(2 \times 3\) (dois fatores com 2 e 3 níveis), o modelo pode ser:
\[ Y_{ijk} = \mu + A_i + B_j + (A \times B)_{ij} + \varepsilon_{ijk} \]
Os experimentos fatoriais podem ser conduzidos em DIC, DBC ou até em parcelas subdivididas, dependendo da estrutura e do controle desejado sobre as fontes de variação.
A presença de repetições, blocos, anos, locais ou tratamentos hierárquicos define se o modelo será:
✅ Em resumo:
A correta definição da estrutura experimental é o primeiro passo para
uma análise estatística válida e confiável.
Negligenciar os princípios da experimentação pode levar a
interpretações incorretas e conclusões não
reprodutíveis.
Antes de aplicar testes paramétricos — como ANOVA,
correlação de Pearson e regressão linear — é fundamental verificar se os
dados atendem aos pressupostos do modelo
estatístico.
Esses pressupostos garantem a validade das inferências
e a confiabilidade das conclusões.
Em geral, os modelos lineares clássicos assumem cinco condições
principais:
Os resíduos (diferença entre valores observados e
ajustados) devem seguir uma distribuição normal com
média zero.
Esse pressuposto assegura que os testes de significância (como F e t)
tenham validade.
shapiro.test() no
R)qqnorm() e qqline())A variância dos resíduos deve ser
constante entre todos os grupos ou níveis dos
fatores.
Em outras palavras, a dispersão dos erros deve ser semelhante em todas
as condições.
leveneTest() do pacote
car), Bartlett (bartlett.test())Os erros (resíduos) devem ser independentes entre
si, ou seja, o erro de uma observação não deve influenciar o
erro de outra.
A violação desse pressuposto é comum em dados temporais
ou espaciais.
durbinWatsonTest() do pacote car)Nos modelos de regressão e correlação, supõe-se que exista uma
relação linear entre as variáveis dependente e
independente.
A presença de padrões não lineares compromete a interpretação dos
coeficientes.
plot() e
abline(lm()) no R)O modelo linear assume que os efeitos dos fatores e
preditores se somam de forma aditiva (sem interação
não-modelada ou dependência multiplicativa).
A aditividade significa que o efeito conjunto de duas variáveis é a
soma dos efeitos individuais (exceto quando
explicitamente incluída uma interação).
A:B em
lm(response ~ A * B)).| Pressuposto | O que garante | Como verificar | Alternativas se violado |
|---|---|---|---|
| Normalidade dos resíduos | Validade dos testes F e t | Shapiro-Wilk, Q–Q plot | Transformar dados ou usar testes não paramétricos |
| Homogeneidade de variâncias | Comparabilidade entre grupos | Levene, Bartlett, resíduos vs. ajustados | Transformação ou GLM/LMM com variância heterogênea |
| Independência dos erros | Erros não correlacionados | Durbin–Watson, inspeção visual | Modelos com estrutura de correlação |
| Linearidade | Relação linear entre variáveis | Gráficos de dispersão e resíduos | Transformações ou modelos não lineares |
| Aditividade | Efeitos somam-se de forma linear | Teste e gráfico de interação | Incluir interações, transformar ou usar modelos não aditivos |
✅ Em resumo:
A análise estatística correta é aquela que respeita os
pressupostos do modelo, reflete o delineamento
experimental e considera a natureza dos
dados.
Verificar e, quando necessário, corrigir violações de pressupostos é
essencial para que os resultados sejam estatisticamente
válidos e biologicamente interpretáveis. —
# -------------------------------------------------------------
# Exemplo prático: Verificação dos pressupostos de modelos lineares
# -------------------------------------------------------------
# Pacotes necessários
library(car) # para testes de Levene e Durbin-Watson
library(ggplot2) # para visualizações
library(performance) # diagnóstico completo de modelos
library(dplyr)
# Gerando dados simulados para o exemplo
set.seed(123)
dados <- data.frame(
tratamento = factor(rep(LETTERS[1:4], each = 10)),
y = c(rnorm(10, 10, 1),
rnorm(10, 12, 1.2),
rnorm(10, 14, 1),
rnorm(10, 15, 1.5))
)
# Ajuste do modelo linear
modelo <- lm(y ~ tratamento, data = dados)
# -------------------------------------------------------------
# 1. NORMALIDADE DOS RESÍDUOS
# -------------------------------------------------------------
shapiro.test(residuals(modelo)) # Teste de Shapiro-Wilk
Shapiro-Wilk normality test
data: residuals(modelo)
W = 0.97808, p-value = 0.6186
qqnorm(residuals(modelo)); qqline(residuals(modelo), col = "red") # Q-Q plot
# -------------------------------------------------------------
# 2. HOMOGENEIDADE DE VARIÂNCIAS
# -------------------------------------------------------------
leveneTest(y ~ tratamento, data = dados) # Teste de Levene
Levene's Test for Homogeneity of Variance (center = median)
Df F value Pr(>F)
group 3 0.1577 0.9241
36
bartlett.test(y ~ tratamento, data = dados) # Teste de Bartlett
Bartlett test of homogeneity of variances
data: y by tratamento
Bartlett's K-squared = 1.8999, df = 3, p-value = 0.5934
plot(fitted(modelo), residuals(modelo),
xlab = "Valores Ajustados", ylab = "Resíduos",
main = "Homogeneidade de variâncias")
abline(h = 0, col = "red")
# -------------------------------------------------------------
# 3. INDEPENDÊNCIA DOS ERROS
# -------------------------------------------------------------
durbinWatsonTest(modelo) # Teste de Durbin–Watson
lag Autocorrelation D-W Statistic p-value
1 -0.05766103 2.072777 0.782
Alternative hypothesis: rho != 0
plot(residuals(modelo), type = "b", pch = 19,
ylab = "Resíduos", xlab = "Ordem das observações",
main = "Verificação da independência dos erros")
abline(h = 0, col = "red")
# -------------------------------------------------------------
# 4. LINEARIDADE (Exemplo com variável contínua)
# -------------------------------------------------------------
# Simulando dados para regressão linear
set.seed(321)
x <- 1:50
y2 <- 3 + 2*x + rnorm(50, 0, 5)
modelo_lin <- lm(y2 ~ x)
# Gráfico de dispersão e linha ajustada
plot(x, y2, main = "Verificação da linearidade", pch = 19)
abline(modelo_lin, col = "blue", lwd = 2)
# Gráfico de resíduos
plot(fitted(modelo_lin), residuals(modelo_lin),
xlab = "Valores Ajustados", ylab = "Resíduos",
main = "Resíduos vs. Ajustados")
abline(h = 0, col = "red")
# -------------------------------------------------------------
# 5. ADITIVIDADE DO MODELO (Exemplo com dois fatores)
# -------------------------------------------------------------
set.seed(456)
fatorA <- factor(rep(c("A1", "A2"), each = 20))
fatorB <- factor(rep(c("B1", "B2"), 20))
y3 <- 10 + 2*(fatorA == "A2") + 3*(fatorB == "B2") + rnorm(40, 0, 1)
dados2 <- data.frame(fatorA, fatorB, y3)
# Modelo sem interação
mod_sem_int <- lm(y3 ~ fatorA + fatorB, data = dados2)
# Modelo com interação
mod_com_int <- lm(y3 ~ fatorA * fatorB, data = dados2)
anova(mod_sem_int, mod_com_int) # Teste de aditividade
Analysis of Variance Table
Model 1: y3 ~ fatorA + fatorB
Model 2: y3 ~ fatorA * fatorB
Res.Df RSS Df Sum of Sq F Pr(>F)
1 37 41.876
2 36 41.872 1 0.0044827 0.0039 0.9508
interaction.plot(fatorA, fatorB, y3,
main = "Verificação da aditividade (gráfico de interação)",
xlab = "Fator A", ylab = "Média de Y", col = c("blue", "red"))
legend("topleft", legend = levels(fatorB), col = c("blue", "red"), lty = 1, bty = "n")
# -------------------------------------------------------------
# 6. DIAGNÓSTICO GLOBAL DO MODELO (opcional)
# -------------------------------------------------------------
check_model(modelo)
A estatística descritiva é o primeiro passo na
análise de dados experimentais.
Seu objetivo é resumir, organizar e interpretar as
informações obtidas em um experimento, ajudando o pesquisador a
compreender o comportamento das variáveis antes de aplicar modelos mais
complexos, como ANOVA ou regressões.
Ela é composta principalmente por duas categorias de medidas: 1.
Medidas de tendência central – indicam o valor em torno
do qual os dados se concentram.
2. Medidas de dispersão – indicam o quanto os dados
variam em torno desse valor central.
As medidas de tendência central resumem os dados em um único valor representativo.
Média (\(\bar{x}\)):
É o valor médio de todas as observações.
É adequada quando os dados são simétricos e não
possuem outliers.
\[\bar{x} = \frac{1}{n}\sum_{i=1}^n
x_i\]
Exemplo: produtividade média de soja em um experimento.
Mediana:
É o valor central dos dados ordenados.
É mais apropriada quando há valores extremos, pois
não é influenciada por outliers.
Exemplo: altura mediana de plantas em um ensaio com alguns indivíduos muito altos.
Moda:
É o valor mais frequente.
Útil em dados categóricos ou discretos
(ex: classes de solo, notas, categorias de germinação).
As medidas de dispersão avaliam a variabilidade dos dados — ou seja, o quanto as observações se afastam da média.
Variância (\(s^2\)):
Mede o grau de dispersão dos dados.
\[s^2 = \frac{1}{n-1}\sum_{i=1}^n (x_i -
\bar{x})^2\]
Desvio padrão (\(s\)):
É a raiz quadrada da variância e expressa a dispersão na mesma
unidade dos dados.
\[s = \sqrt{s^2}\]
Quanto maior o desvio padrão, mais heterogêneos são os dados.
Erro padrão da média (SE):
Mede a precisão da média amostral como estimativa da
média populacional.
\[SE = \frac{s}{\sqrt{n}}\]
Valores menores indicam maior confiança na média.
Coeficiente de variação (CV%):
Relaciona o desvio padrão com a média, permitindo comparar
variabilidades entre variáveis com diferentes escalas.
\[CV(\%) = \frac{s}{\bar{x}} \times
100\]
Em experimentos agrícolas, um CV inferior a 20%
geralmente indica boa precisão experimental (dependendo da
variável).
A seguir, um exemplo simples de cálculo das medidas descritivas para um vetor de dados simulados:
# Vetor de dados
dados <- c(12, 15, 13, 16, 14, 17)
# Cálculo das principais medidas descritivas
stats <- data.frame(
Média = mean(dados),
Mediana = median(dados),
Variância = var(dados),
Desvio_Padrão = sd(dados),
Erro_Padrão = sd(dados) / sqrt(length(dados)),
CV_percent = sd(dados) / mean(dados) * 100
)
# Exibir resultados arredondados
round(stats, 3)
Média Mediana Variância Desvio_Padrão Erro_Padrão CV_percent
1 14.5 14.5 3.5 1.871 0.764 12.902
Os gráficos ajudam a interpretar visualmente as medidas descritivas e identificar possíveis assimetria ou outliers.
O histograma mostra a distribuição de frequência dos dados, permitindo visualizar se eles seguem uma tendência simétrica ou assimétrica.
hist(dados,
main = "Distribuição dos Dados (Histograma)",
xlab = "Valores observados",
ylab = "Frequência",
col = "lightblue",
border = "white")
abline(v = mean(dados), col = "red", lwd = 2, lty = 2)
text(mean(dados), 1, paste("Média =", round(mean(dados), 2)), pos = 4, col = "red")
O boxplot (ou diagrama de caixa) resume visualmente
a mediana, os quartis e possíveis
valores discrepantes (outliers).
É uma ferramenta útil para detectar outliers e comparar grupos em
análises posteriores.
boxplot(dados,
main = "Boxplot dos Dados",
ylab = "Valores observados",
col = "lightgreen",
border = "darkgreen",
notch = TRUE)
points(mean(dados), col = "red", pch = 19)
text(mean(dados), mean(dados) + 0.2, "Média", col = "red", pos = 4)
A estatística descritiva é uma etapa essencial para
compreender o comportamento dos dados antes da modelagem
estatística.
Ela permite:
Em resumo: conhecer os dados é o primeiro passo para interpretá-los corretamente.
A análise de correlação é utilizada para medir o
grau de associação entre duas variáveis numéricas.
Ela indica quanto uma variável se altera quando a outra
varia, mas não estabelece relação de causa e
efeito.
| Método | Tipo de Associação | Quando Utilizar | Comando no R |
|---|---|---|---|
| Pearson | Linear | Quando as variáveis têm distribuição normal | cor(x, y, method = "pearson") |
| Spearman | Monotônica (cresce ou decresce de forma ordenada) | Quando há outliers ou dados não lineares | cor(x, y, method = "spearman") |
| Kendall | Monotônica (baseada em pares ordenados) | Para amostras pequenas ou dados com empates | cor(x, y, method = "kendall") |
| Valor de r | Interpretação |
|---|---|
| 0.00 – 0.19 | Correlação muito fraca |
| 0.20 – 0.39 | Correlação fraca |
| 0.40 – 0.69 | Correlação moderada |
| 0.70 – 0.89 | Correlação forte |
| 0.90 – 1.00 | Correlação muito forte |
Dica:
O sinal do coeficiente indica a direção da
relação:
r > 0: correlação positiva (ambas
aumentam)
r < 0: correlação negativa (uma
aumenta, a outra diminui)
Simularemos dois conjuntos de dados com uma relação linear positiva:
set.seed(1)
x <- rnorm(50, mean = 10, sd = 2)
y <- 1.5 * x + rnorm(50, sd = 1)
# Visualização rápida
plot(x, y,
main = "Relação entre x e y",
xlab = "Variável X", ylab = "Variável Y",
pch = 19, col = "steelblue")
abline(lm(y ~ x), col = "red", lwd = 2)
# Calcular diferentes tipos de correlação
r_pearson <- cor(x, y, method = "pearson")
r_spearman <- cor(x, y, method = "spearman")
r_kendall <- cor(x, y, method = "kendall")
# Exibir resultados
data.frame(
Método = c("Pearson", "Spearman", "Kendall"),
Correlação = round(c(r_pearson, r_spearman, r_kendall), 3)
)
Método Correlação
1 Pearson 0.930
2 Spearman 0.902
3 Kendall 0.734
O teste t de correlação verifica se a correlação é
significativamente diferente de zero.
A função cor.test() realiza automaticamente esse teste e
fornece o valor de p.
# Simulação de dados
set.seed(1)
x <- rnorm(50)
y <- 2*x + rnorm(50, sd = 0.5)
# Teste para Pearson
teste_pearson <- cor.test(x, y, method = "pearson")
# Teste para Spearman
teste_spearman <- cor.test(x, y, method = "spearman")
# Teste para Kendall
teste_kendall <- cor.test(x, y, method = "kendall")
# Resultados resumidos
cat("Teste de Pearson: p-valor =", round(teste_pearson$p.value, 4), "\n")
Teste de Pearson: p-valor = 0
cat("Teste de Spearman: p-valor =", round(teste_spearman$p.value, 4), "\n")
Teste de Spearman: p-valor = 0
cat("Teste de Kendall: p-valor =", round(teste_kendall$p.value, 4), "\n")
Teste de Kendall: p-valor = 0
✅ Interpretação: Se o p-valor < 0.05, rejeitamos H₀ e concluímos que há correlação significativa entre as variáveis. Caso contrário, não há evidência estatística de associação.
💡 Dica: Mesmo quando a correlação é significativa, lembre-se de que correlação não implica causalidade. Sempre analise os gráficos de dispersão e o contexto biológico/experimental antes de tirar conclusões.
A comparação de médias é fundamental para verificar se diferentes tratamentos, grupos ou condições apresentam diferenças estatisticamente significativas em uma variável de interesse.
Antes de escolher o teste adequado, é importante considerar:
O teste t é um dos testes paramétricos mais usados para comparar médias entre dois grupos.
| Tipo | Situação | Exemplo |
|---|---|---|
| Independente | Quando os grupos não têm relação entre si | Tratamentos diferentes em parcelas distintas |
| Pareado | Quando há relação entre as observações | Antes e depois do tratamento, ou medidas repetidas |
\[ H_0: \mu_1 = \mu_2 \quad \text{(as médias são iguais)} \] \[ H_1: \mu_1 \neq \mu_2 \quad \text{(as médias são diferentes)} \]
grupo1 <- c(10, 12, 9, 11, 10)
grupo2 <- c(13, 14, 12, 13, 15)
# Teste t para amostras independentes
t_ind <- t.test(grupo1, grupo2, var.equal = TRUE)
# Teste t pareado
t_paired <- t.test(grupo1, grupo1 + rnorm(5, 0, 0.5), paired = TRUE)
t_ind
Two Sample t-test
data: grupo1 and grupo2
t = -4.1603, df = 8, p-value = 0.003164
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-4.662883 -1.337117
sample estimates:
mean of x mean of y
10.4 13.4
t_paired
Paired t-test
data: grupo1 and grupo1 + rnorm(5, 0, 0.5)
t = 1.892, df = 4, p-value = 0.1314
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
-0.09282787 0.48997354
sample estimates:
mean difference
0.1985728
✅ Interpretação: Se o p-valor < 0.05, rejeitamos H₀ e concluímos que há diferença significativa entre as médias.
Quando os dados não atendem aos pressupostos de
normalidade (ex.: teste de Shapiro-Wilk indica p < 0.05) ou
não apresentam homogeneidade de variância, utilizamos
testes não paramétricos.
Esses testes não dependem de distribuição normal e comparam
postos (ranks) em vez dos valores originais,
tornando-os mais robustos para dados assimétricos, com outliers ou
amostras pequenas.
Exemplo no R
# Dois grupos independentes
grupo1 <- c(10.1, 9.8, 10.5, 9.9, 10.2)
grupo2 <- c(11.5, 12.1, 11.8, 12.3, 11.9)
# Teste de Mann-Whitney
teste_mw <- wilcox.test(grupo1, grupo2, alternative = "two.sided")
teste_mw
Wilcoxon rank sum exact test
data: grupo1 and grupo2
W = 0, p-value = 0.007937
alternative hypothesis: true location shift is not equal to 0
✅ Interpretação: Se o p-valor < 0.05 → há diferença significativa entre os grupos, indicando que as distribuições são distintas. Se p ≥ 0.05 → não há evidência de diferença significativa.
O teste de Wilcoxon Pareado é uma alternativa
não paramétrica ao teste t
pareado.
Ele é utilizado quando os dados não seguem uma distribuição
normal, mas há dependência entre as amostras,
ou seja, quando se comparam as mesmas unidades
experimentais em dois momentos ou condições.
Quando utilizar
Hipóteses do Teste
Exemplo em R
# Valores antes e depois de um tratamento
antes <- c(10, 11, 12, 13, 14)
depois <- c(11, 12, 12, 14, 15)
# Teste de Wilcoxon pareado
resultado_wilcox <- wilcox.test(antes, depois, paired = TRUE, alternative = "two.sided")
resultado_wilcox
Wilcoxon signed rank test with continuity correction
data: antes and depois
V = 0, p-value = 0.07186
alternative hypothesis: true location shift is not equal to 0
Interpretação dos Resultados
O resultado do teste de Wilcoxon Pareado (e outros testes não paramétricos) fornece informações essenciais para avaliar a existência de diferença entre grupos dependentes.
Elementos do Resultado
✅ Interpretação prática: - Se p-valor <
0.05, rejeitamos H₀ → existe diferença
significativa entre os grupos ou entre os momentos
comparados.
- Se p-valor ≥ 0.05, não rejeitamos H₀ → não há
evidência de diferença significativa.
| Situação | Teste Paramétrico | Teste Não Paramétrico |
|---|---|---|
| Duas amostras independentes | t-test independente | Mann–Whitney U |
| Duas amostras pareadas | t-test pareado | Wilcoxon Pareado |
| Mais de duas amostras independentes | ANOVA | Kruskal–Wallis |
| Mais de duas amostras pareadas | ANOVA de medidas repetidas | Friedman |
Dica Prática 💡
Antes de escolher qual teste aplicar, siga estes passos:
Mesmo que os testes paramétricos (como o t-test) sejam mais poderosos sob normalidade, os testes não paramétricos garantem resultados mais robustos e confiáveis quando os pressupostos não são atendidos.
Exemplo de Verificação de Normalidade
O código abaixo exemplifica como verificar se as diferenças entre pares seguem uma distribuição normal — etapa essencial antes de decidir entre o teste t pareado ou o Wilcoxon Pareado.
# Valores simulados (antes e depois)
antes <- c(10, 11, 12, 13, 14)
depois <- c(11, 12, 12, 14, 15)
# Diferenças entre os pares
dif <- depois - antes
# Teste de normalidade de Shapiro–Wilk
shapiro.test(dif)
Shapiro-Wilk normality test
data: dif
W = 0.55218, p-value = 0.000131
Interpretação:
p-valor ≥ 0.05: as diferenças seguem distribuição normal → use teste t pareado.
p-valor < 0.05: as diferenças não seguem distribuição normal → use Wilcoxon Pareado.
✅ Conclusão: O teste de Wilcoxon Pareado é ideal quando há dependência entre as observações e os pressupostos paramétricos não são satisfeitos. Ele oferece uma forma segura e robusta de detectar diferenças em dados pareados sem depender da normalidade.
Quando queremos comparar três ou mais médias, o
primeiro passo é aplicar uma ANOVA (Análise de
Variância).
Se a ANOVA indicar diferença significativa entre os tratamentos (p-valor
< 0.05), aplicamos testes de comparação múltipla para identificar
quais médias diferem entre si.
Esses testes assumem que os resíduos seguem distribuição normal e que as variâncias são homogêneas entre os grupos.
# Criando dados simulados
set.seed(123)
dados <- data.frame(
trat = factor(rep(c("A","B","C","D"), each=6)),
y = c(rnorm(6,10,1), rnorm(6,12,1), rnorm(6,11,1), rnorm(6,13,1.2))
)
# ANOVA
mod_aov <- aov(y ~ trat, data = dados)
summary(mod_aov)
Df Sum Sq Mean Sq F value Pr(>F)
trat 3 14.31 4.769 4.878 0.0105 *
Residuals 20 19.55 0.978
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Se o p-valor da ANOVA for < 0.05, aplicamos os testes de comparação múltipla a seguir.
O Teste de Tukey, também conhecido como HSD (Honest Significant Difference), é um dos testes mais utilizados para comparar médias após uma ANOVA significativa.
# Pacote necessário
# install.packages("agricolae") # Execute apenas uma vez, se necessário
library(agricolae)
# Gerando dados simulados
set.seed(123)
dados <- data.frame(
trat = factor(rep(c("A", "B", "C", "D"), each = 6)),
y = c(rnorm(6, 10, 1), rnorm(6, 12, 1), rnorm(6, 11, 1), rnorm(6, 13, 1.2))
)
# ANOVA
mod_aov <- aov(y ~ trat, data = dados)
summary(mod_aov)
Df Sum Sq Mean Sq F value Pr(>F)
trat 3 14.31 4.769 4.878 0.0105 *
Residuals 20 19.55 0.978
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Aplicando o teste de Tukey
tukey <- HSD.test(mod_aov, "trat", group = TRUE)
tukey$groups
y groups
D 12.43757 a
B 11.94121 ab
C 11.04563 ab
A 10.44715 b
O resultado mostra as médias dos tratamentos e as letras de agrupamento.
Tratamentos com a mesma letra não diferem significativamente.
Tratamentos com letras diferentes possuem médias diferentes ao nível de significância adotado (geralmente 5%).
O Teste de Duncan (Duncan’s Multiple Range Test) é
um método de comparação múltipla de médias utilizado após uma ANOVA
significativa.
Ele é menos conservador que o teste de Tukey, ou seja,
tem maior poder para detectar diferenças, mas também
maior risco de erro tipo I (falsos positivos).
# Pacote necessário
# install.packages("agricolae") # Execute apenas uma vez, se necessário
library(agricolae)
# Gerando dados simulados
set.seed(321)
dados <- data.frame(
trat = factor(rep(c("A", "B", "C", "D"), each = 6)),
y = c(rnorm(6, 10, 1), rnorm(6, 11, 1.1), rnorm(6, 12, 1), rnorm(6, 13, 1.2))
)
# ANOVA
mod_aov <- aov(y ~ trat, data = dados)
summary(mod_aov)
Df Sum Sq Mean Sq F value Pr(>F)
trat 3 33.19 11.062 11.98 0.000104 ***
Residuals 20 18.48 0.924
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Teste de Duncan
duncan <- duncan.test(mod_aov, "trat", group = TRUE)
duncan$groups
y groups
D 13.35005 a
C 12.25831 ab
B 11.47290 b
A 10.12324 c
O resultado apresenta as médias por tratamento e as letras de agrupamento.
Tratamentos com a mesma letra não diferem significativamente.
Tratamentos com letras diferentes apresentam médias diferentes ao nível de significância adotado (geralmente 5%).
O teste de Scheffé é um teste
paramétrico utilizado para comparar médias de
tratamentos após uma ANOVA significativa.
É mais conservador do que o teste de Tukey ou Duncan,
pois controla melhor o erro tipo I, sendo recomendado quando se deseja
uma análise mais rigorosa.
# Instalar e carregar o pacote agricolae
install.packages("agricolae")
library(agricolae)
# Exemplo de dados
trat <- c("A", "B", "C", "D")
rep <- 4
valor <- c(10, 12, 13, 15,
11, 13, 14, 16,
9, 11, 12, 14,
10, 12, 13, 15)
dados <- data.frame(trat = rep(trat, each = rep), valor)
# Análise de variância
modelo <- aov(valor ~ trat, data = dados)
summary(modelo)
Df Sum Sq Mean Sq F value Pr(>F)
trat 3 8 2.667 0.615 0.618
Residuals 12 52 4.333
# Aplicar o teste de Scheffé
teste_scheffe <- scheffe.test(modelo, "trat", group = TRUE)
teste_scheffe
$statistics
MSerror Df F Mean CV Scheffe CriticalDifference
4.333333 12 3.490295 12.5 16.65333 3.235875 4.763078
$parameters
test name.t ntr alpha
Scheffe trat 4 0.05
$means
valor std r se Min Max Q25 Q50 Q75
A 12.5 2.081666 4 1.040833 10 15 11.5 12.5 13.5
B 13.5 2.081666 4 1.040833 11 16 12.5 13.5 14.5
C 11.5 2.081666 4 1.040833 9 14 10.5 11.5 12.5
D 12.5 2.081666 4 1.040833 10 15 11.5 12.5 13.5
$comparison
NULL
$groups
valor groups
B 13.5 a
A 12.5 a
D 12.5 a
C 11.5 a
attr(,"class")
[1] "group"
# Exibir o agrupamento de médias
teste_scheffe$groups
valor groups
B 13.5 a
A 12.5 a
D 12.5 a
C 11.5 a
O resultado mostra as médias dos tratamentos e as letras de agrupamento.
Tratamentos com a mesma letra não diferem estatisticamente.
Por ser conservador, o teste de Scheffé tende a identificar menos diferenças significativas entre médias.
O teste de Dunnett é um teste
paramétrico utilizado após uma ANOVA
significativa, quando se deseja comparar vários
tratamentos com um tratamento controle.
Diferente de Tukey ou Duncan, ele não compara todas as médias
entre si, apenas compara cada tratamento ao controle, o que
reduz o erro tipo I e aumenta o poder do teste.
# Instalar e carregar o pacote multcomp
library(multcomp)
# Exemplo de dados
trat <- factor(rep(c("Controle", "T1", "T2", "T3"), each = 5))
valor <- c(10, 9, 11, 10, 10, # Controle
12, 11, 13, 12, 12, # T1
14, 13, 15, 14, 13, # T2
11, 12, 10, 11, 12) # T3
dados <- data.frame(trat, valor)
# Análise de variância
modelo <- aov(valor ~ trat, data = dados)
summary(modelo)
Df Sum Sq Mean Sq F value Pr(>F)
trat 3 38.15 12.72 21.19 8.08e-06 ***
Residuals 16 9.60 0.60
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Aplicar o teste de Dunnett
comparacao <- glht(modelo, linfct = mcp(trat = "Dunnett"))
summary(comparacao)
Simultaneous Tests for General Linear Hypotheses
Multiple Comparisons of Means: Dunnett Contrasts
Fit: aov(formula = valor ~ trat, data = dados)
Linear Hypotheses:
Estimate Std. Error t value Pr(>|t|)
T1 - Controle == 0 2.0000 0.4899 4.082 0.00248 **
T2 - Controle == 0 3.8000 0.4899 7.757 < 0.001 ***
T3 - Controle == 0 1.2000 0.4899 2.449 0.06595 .
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Adjusted p values reported -- single-step method)
# Intervalos de confiança
confint(comparacao)
Simultaneous Confidence Intervals
Multiple Comparisons of Means: Dunnett Contrasts
Fit: aov(formula = valor ~ trat, data = dados)
Quantile = 2.5888
95% family-wise confidence level
Linear Hypotheses:
Estimate lwr upr
T1 - Controle == 0 2.00000 0.73178 3.26822
T2 - Controle == 0 3.80000 2.53178 5.06822
T3 - Controle == 0 1.20000 -0.06822 2.46822
O teste compara cada tratamento com o grupo Controle.
O resultado apresenta a diferença média, o p-valor e o intervalo de confiança.
p-valor < 0.05 indicam que o tratamento difere significativamente do controle.
O teste de Scott-Knott é um método
paramétrico de comparação de médias utilizado após uma
ANOVA significativa.
Ele agrupa médias semelhantes em grupos homogêneos,
maximizando a diferença entre os grupos e minimizando a diferença dentro
de cada grupo.
Diferente de Tukey ou Duncan, o Scott-Knott não realiza
comparações par a par.
Em vez disso, ele divide as médias em grupos distintos
de forma hierárquica e estatisticamente fundamentada.
# Instalar e carregar o pacote ExpDes.pt
# Carregar o pacote
library(ExpDes.pt)
# Criar um conjunto de dados de exemplo
dados <- data.frame(
Tratamento = rep(LETTERS[1:5], each = 5),
Producao = c(10.1, 9.8, 10.5, 10.2, 9.9,
12.1, 11.9, 12.4, 12.3, 12.0,
15.2, 15.4, 15.6, 15.3, 15.1,
14.9, 14.8, 15.0, 15.2, 14.7,
11.1, 11.0, 11.3, 10.9, 11.2)
)
# Aplicar o teste de Scott-Knott
dic(dados$Tratamento,
dados$Producao,
mcomp = "sk")
------------------------------------------------------------------------
Quadro da analise de variancia
------------------------------------------------------------------------
GL SQ QM Fc Pr>Fc
Tratamento 4 107.126 26.7814 617.08 1.2286e-20
Residuo 20 0.868 0.0434
Total 24 107.994
------------------------------------------------------------------------
CV = 1.64 %
------------------------------------------------------------------------
Teste de normalidade dos residuos ( Shapiro-Wilk )
Valor-p: 0.4347053
De acordo com o teste de Shapiro-Wilk a 5% de significancia, os residuos podem ser considerados normais.
------------------------------------------------------------------------
------------------------------------------------------------------------
Teste de homogeneidade de variancia
valor-p: 0.876361
De acordo com o teste de bartlett a 5% de significancia, as variancias podem ser consideradas homogeneas.
------------------------------------------------------------------------
Teste de Scott-Knott
------------------------------------------------------------------------
Grupos Tratamentos Medias
1 a C 15.32
2 b D 14.92
3 c B 12.14
4 d E 11.10
5 e A 10.10
------------------------------------------------------------------------
Quando os pressupostos de normalidade e homogeneidade de
variâncias não são atendidos, os testes paramétricos como a
ANOVA deixam de ser adequados.
Nessas situações, utilizamos os testes não
paramétricos, que comparam postos (ranks) em
vez dos valores originais dos dados.
Os dois principais testes não paramétricos para mais de duas amostras são:
# Exemplo de dados
grupo <- factor(rep(c("A", "B", "C"), each = 5))
valor <- c(5, 7, 6, 8, 7,
9, 10, 8, 9, 11,
12, 11, 13, 12, 14)
dados <- data.frame(grupo, valor)
# Teste de Kruskal-Wallis
kruskal.test(valor ~ grupo, data = dados)
Kruskal-Wallis rank sum test
data: valor by grupo
Kruskal-Wallis chi-squared = 12.113, df = 2, p-value = 0.002342
O resultado apresenta o valor de H (estatística do teste) e o p-valor.
Se p < 0.05, rejeitamos H₀ e concluímos que pelo menos um grupo é diferente.
Caso o teste seja significativo, é possível aplicar testes pós-hoc (como o kruskal() do pacote agricolae) para identificar quais grupos diferem.
O Teste de Friedman é a alternativa não paramétrica à ANOVA de medidas repetidas.
É utilizado quando: - As mesmas unidades experimentais são avaliadas sob três ou mais condições (por exemplo, antes, durante e depois de um tratamento); - Os pressupostos de normalidade e homogeneidade de variâncias não são atendidos; - Os dados são ordinais ou não seguem distribuição normal.
Esse teste analisa se as medianas dos tratamentos diferem significativamente, considerando o bloqueio (ou o fator que representa as repetições dos mesmos indivíduos).
# Exemplo de dados
trat <- factor(rep(c("T1", "T2", "T3"), each = 5))
bloco <- factor(rep(1:5, times = 3))
valor <- c(8, 7, 9, 8, 7,
10, 9, 11, 10, 9,
12, 11, 13, 12, 11)
dados <- data.frame(trat, bloco, valor)
# Teste de Friedman
friedman.test(valor ~ trat | bloco, data = dados)
Friedman rank sum test
data: valor and trat and bloco
Friedman chi-squared = 10, df = 2, p-value = 0.006738
O resultado do teste apresenta:
Estatística de Friedman (χ²): valor baseado na soma dos postos;
p-valor: probabilidade de obter um resultado tão extremo quanto o observado, sob H₀.
✅ Decisão: Se p < 0.05, rejeitamos H₀, indicando diferença significativa entre os tratamentos.
A regressão é uma técnica estatística usada para
modelar e entender a relação entre uma variável dependente (ou resposta)
e uma ou mais variáveis independentes (ou explicativas).
Seu principal objetivo é explicar e/ou
prever o comportamento da variável resposta a partir
das variáveis explicativas.
A regressão linear simples modela a relação entre uma variável resposta \(y\) e uma única variável explicativa \(x\), assumindo uma relação linear entre elas:
\[ y = \beta_0 + \beta_1 x + \epsilon \]
onde: - \(\beta_0\): intercepto (valor esperado de \(y\) quando \(x = 0\)); - \(\beta_1\): coeficiente angular (mudança média em \(y\) para um aumento unitário em \(x\)); - \(\epsilon\): erro aleatório.
set.seed(1)
x <- 1:20
y <- 2 + 0.5*x + rnorm(20)
fit <- lm(y ~ x)
summary(fit)
Call:
lm(formula = y ~ x)
Residuals:
Min 1Q Median 3Q Max
-2.4808 -0.5168 0.1875 0.4833 1.5450
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.96391 0.43158 4.551 0.000248 ***
x 0.52158 0.03603 14.477 2.33e-11 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.9291 on 18 degrees of freedom
Multiple R-squared: 0.9209, Adjusted R-squared: 0.9165
F-statistic: 209.6 on 1 and 18 DF, p-value: 2.33e-11
plot(x, y, main = "Regressão Linear Simples", pch = 19)
abline(fit, col = "blue", lwd = 2)
A regressão linear múltipla é uma extensão da
regressão linear simples que permite analisar o efeito de duas
ou mais variáveis explicativas sobre uma variável resposta
contínua.
O modelo é expresso como:
\[ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_p x_p + \epsilon \]
onde: - \(\beta_0\) é o intercepto (valor esperado de \(y\) quando todas as variáveis \(x_i = 0\)); - \(\beta_i\) representa o efeito médio de \(x_i\) sobre \(y\), mantendo as demais variáveis constantes; - \(\epsilon\) é o termo de erro.
# Exemplo de regressão linear múltipla
set.seed(10)
n <- 50
x1 <- rnorm(n, mean = 10, sd = 2)
x2 <- rnorm(n, mean = 5, sd = 1)
y <- 3 + 0.8*x1 - 0.5*x2 + rnorm(n)
df <- data.frame(y, x1, x2)
# Ajuste do modelo
modelo_mult <- lm(y ~ x1 + x2, data = df)
summary(modelo_mult)
Call:
lm(formula = y ~ x1 + x2, data = df)
Residuals:
Min 1Q Median 3Q Max
-2.0016 -0.7637 0.1436 0.7819 1.5371
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.42110 1.04441 3.276 0.001984 **
x1 0.78522 0.08177 9.603 1.16e-12 ***
x2 -0.55117 0.14509 -3.799 0.000417 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.9908 on 47 degrees of freedom
Multiple R-squared: 0.6879, Adjusted R-squared: 0.6746
F-statistic: 51.8 on 2 and 47 DF, p-value: 1.305e-12
# Visualização simples
pairs(df, main = "Matriz de Dispersão das Variáveis")
O coeficiente de x1 indica a variação média esperada em y para cada unidade de aumento em x1, mantendo x2 constante.
O coeficiente de x2 mostra o efeito isolado de x2 sobre y, mantendo x1 constante.
Dica 💡
Verifique sempre os pressupostos da regressão linear múltipla:
Resíduos: devem ser aproximadamente normais e com variância constante.
Multicolinearidade: evite alta correlação entre variáveis explicativas.
Valores influentes: identifique outliers que podem distorcer o modelo.
Os Modelos Lineares Generalizados (GLMs) são uma
extensão da regressão linear tradicional que permitem lidar com
variáveis resposta que não seguem uma distribuição
Normal.
Eles são compostos por três elementos principais:
Em um GLM, modelamos:
\[ g(E[Y]) = \eta = X\beta \]
onde \(g()\) é a função de ligação.
Os GLMs permitem ajustar modelos para diferentes tipos de dados:
| Distribuição | Tipo de dado | Função de ligação recomendada | Exemplo comum |
|---|---|---|---|
| Normal | Contínuo (valores reais) | identity | Regressão linear tradicional |
| Poisson | Contagem (0,1,2,…) | log | Número de eventos em certo período |
| Binomial | Binária (0/1) ou proporção | logit | Sucesso/fracasso, presença/ausência |
| Gamma | Contínuo positivo (taxas, durações) | inverse ou log | Tempo até um evento, custos |
| Beta | Proporção entre 0 e 1 | logit ou log-log | Frações, taxas percentuais |
A regressão de Poisson é usada quando a variável resposta representa número de ocorrências de um evento em um intervalo fixo (tempo, espaço, etc.).
\[ \log(E[Y]) = \beta_0 + \beta_1 X \]
set.seed(123)
x <- rnorm(100)
counts <- rpois(100, lambda = exp(0.5 + 0.3 * x))
glm_pois <- glm(counts ~ x, family = poisson(link = "log"))
summary(glm_pois)
Call:
glm(formula = counts ~ x, family = poisson(link = "log"))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 0.4286 0.0840 5.102 3.36e-07 ***
x 0.3548 0.0849 4.180 2.92e-05 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 139.65 on 99 degrees of freedom
Residual deviance: 122.18 on 98 degrees of freedom
AIC: 322.96
Number of Fisher Scoring iterations: 5
# Visualização da relação
plot(x, counts, main = "Regressão Poisson", pch = 19)
lines(sort(x), fitted(glm_pois)[order(x)], col = "red", lwd = 2)
Interpretação dos resultados
O coeficiente de x representa o efeito multiplicativo de
x sobre o número esperado de eventos.
Em modelos de Poisson com link log, a média esperada \(E[Y]\) é dada por:
\[ E[Y] = e^{(\beta_0 + \beta_1 x)} \]
Assim, para cada aumento unitário em x, o número
esperado de eventos é multiplicado por \(e^{\beta_1}\).
No exemplo acima, se \(\beta_1 =
0.3\), então \(e^{0.3} \approx
1.35\), indicando que um aumento de 1 unidade em x
aumenta o número esperado de eventos em cerca de
35%.
O intercepto \(\beta_0\) indica o
logaritmo da média esperada de Y quando
x = 0.
A regressão logística é um caso especial dos modelos
lineares generalizados (GLMs) usado quando a variável resposta é
binária (0/1, sucesso/fracasso,
presença/ausência).
Em vez de modelar o valor esperado diretamente, modelamos a
probabilidade de sucesso \(P(Y = 1)\) por meio da função
logística:
\[ \log\left(\frac{p}{1 - p}\right) = \beta_0 + \beta_1 X \]
onde: - \(p = P(Y=1)\) é a probabilidade de sucesso; - o termo \(\log\left(\frac{p}{1-p}\right)\) é chamado de log-odds ou logit.
set.seed(321)
x <- rnorm(200)
# Gera probabilidades segundo uma função logística
p <- 1 / (1 + exp(-(-0.5 + 1.2 * x)))
# Gera resposta binária (0/1) com base nessas probabilidades
y <- rbinom(200, 1, p)
# Ajuste do modelo logístico
glm_bin <- glm(y ~ x, family = binomial(link = "logit"))
summary(glm_bin)
Call:
glm(formula = y ~ x, family = binomial(link = "logit"))
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.3345 0.1598 -2.093 0.0364 *
x 1.1620 0.2120 5.480 4.25e-08 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 273.87 on 199 degrees of freedom
Residual deviance: 233.10 on 198 degrees of freedom
AIC: 237.1
Number of Fisher Scoring iterations: 4
# Visualização
plot(x, y, main = "Regressão Logística (Binomial)", pch = 19, col = "gray50")
curve(predict(glm_bin, data.frame(x = x), type = "response")[order(x)],
add = TRUE, col = "red", lwd = 2)
Interpretação dos resultados
O coeficiente de x (\(\beta_1\)) representa o efeito de
x sobre o logaritmo das chances (log-odds)
de sucesso.
Um coeficiente positivo indica que o aumento em x
aumenta a probabilidade de sucesso, enquanto um
coeficiente negativo diminui essa probabilidade.
Para uma interpretação mais intuitiva, usamos o odds ratio (razão de chances):
exp(coef(glm_bin))
(Intercept) x
0.7156932 3.1964736
Se \(\beta_1 = 1.2\), então:
\[ e^{1.2} \approx 3.32 \]
Isso significa que, a cada aumento unitário em x, as
chances de sucesso são multiplicadas por
3,32, mantendo as demais variáveis constantes.
O intercepto (\(\beta_0\))
representa o log-odds de sucesso quando
x = 0.
Assim, \(e^{\beta_0}\) fornece o
odds esperado nesse ponto.
💡 Dica
n tentativas), ajuste o modelo com
family = binomial e use a sintaxe
cbind(sucessos, fracassos).Avaliação do Modelo
library(pROC)
# Gerando previsões de probabilidade
pred_prob <- predict(glm_bin, type = "response")
# Curva ROC
roc_obj <- roc(y, pred_prob)
plot(roc_obj, main = "Curva ROC - Regressão Logística")
# AUC
auc(roc_obj)
Area under the curve: 0.7488
Resumo
A regressão logística é ideal para modelar respostas
dicotômicas e estimar probabilidades de
ocorrência.
O uso do link logit garante que as previsões fiquem
entre 0 e 1, tornando o modelo adequado para
dados binários. —
A regressão Gamma é usada quando a variável resposta
é contínua, positiva e assimétrica à direita — por
exemplo, tempo de espera, custo, duração ou taxas.
É apropriada quando a variância aumenta com o quadrado da média, isto
é:
\[ Var(Y) = \phi \mu^2 \]
O modelo assume que a média \(\mu\) da resposta está relacionada às variáveis explicativas por meio de um link logarítmico (geralmente):
\[ \log(\mu) = \beta_0 + \beta_1 X \]
set.seed(42)
x <- runif(100, 0, 10)
# Gera dados positivos assimétricos
mu <- exp(1 + 0.2 * x)
y <- rgamma(100, shape = 2, scale = mu / 2)
# Ajuste do modelo Gamma com link log
glm_gamma <- glm(y ~ x, family = Gamma(link = "log"))
summary(glm_gamma)
Call:
glm(formula = y ~ x, family = Gamma(link = "log"))
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.05467 0.12679 8.318 5.29e-13 ***
x 0.19647 0.02098 9.366 2.88e-15 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for Gamma family taken to be 0.3971666)
Null deviance: 81.162 on 99 degrees of freedom
Residual deviance: 48.545 on 98 degrees of freedom
AIC: 594.03
Number of Fisher Scoring iterations: 5
# Visualização
plot(x, y, main = "Regressão Gamma (dados positivos)", pch = 19, col = "gray50")
lines(sort(x), fitted(glm_gamma)[order(x)], col = "blue", lwd = 2)
Interpretação dos resultados
O coeficiente de x indica o efeito
multiplicativo de x sobre a média de
Y.
Como o link é logarítmico, temos:
\[ \mu = e^{(\beta_0 + \beta_1 x)} \]
Assim, para cada aumento unitário em x, a média esperada
de Y é multiplicada por:
\[ e^{\beta_1} \]
Por exemplo, se \(\beta_1 = 0.2\), então:
\[ e^{0.2} \approx 1.22 \]
Isso significa que, para cada aumento de 1 unidade em x,
a média de Y aumenta cerca de 22%.
O intercepto (\(\beta_0\))
representa o logaritmo da média esperada de Y quando
x = 0.
💡 Dica:
Use a regressão Gamma quando os resíduos da regressão
linear forem fortemente assimétricos e Y
for sempre positiva.
Avalie se o modelo com link log ou link inverso oferece melhor ajuste (via AIC ou diagnóstico gráfico).
Para diagnósticos, utilize gráficos de resíduos deviance:
plot(residuals(modelo, type = "deviance"))
A regressão Beta é usada quando a variável resposta é uma proporção contínua entre 0 e 1, como: - taxa de conversão, - proporção de votos, - porcentagem de acertos, - índice de eficiência.
A distribuição Beta é bastante flexível, permitindo diferentes graus
de assimetria.
O modelo relaciona a média da proporção (\(\mu\)) às variáveis explicativas
usando, normalmente, o link logit:
\[ \text{logit}(\mu) = \log\left(\frac{\mu}{1 - \mu}\right) = \beta_0 + \beta_1 X \]
library(betareg)
set.seed(7)
x <- runif(150, 0, 10)
# Gera proporções entre 0 e 1 com relação positiva com x
mu <- plogis(-1 + 0.3 * x) # transforma linear em probabilidade
y <- rbeta(150, shape1 = mu * 20, shape2 = (1 - mu) * 20)
# Ajuste do modelo Beta
glm_beta <- betareg(y ~ x, link = "logit")
summary(glm_beta)
Call:
betareg(formula = y ~ x, link = "logit")
Quantile residuals:
Min 1Q Median 3Q Max
-2.1421 -0.6995 0.0122 0.6941 2.4701
Coefficients (mean model with logit link):
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.96616 0.08104 -11.92 <2e-16 ***
x 0.28498 0.01480 19.26 <2e-16 ***
Phi coefficients (precision model with identity link):
Estimate Std. Error z value Pr(>|z|)
(phi) 20.226 2.292 8.825 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Type of estimator: ML (maximum likelihood)
Log-likelihood: 138.9 on 3 Df
Pseudo R-squared: 0.7187
Number of iterations: 10 (BFGS) + 2 (Fisher scoring)
# Visualização
plot(x, y, main = "Regressão Beta (proporções)", pch = 19, col = "gray50")
lines(sort(x), fitted(glm_beta)[order(x)], col = "darkgreen", lwd = 2)
Interpretação dos resultados
O coeficiente de x indica o efeito de
x sobre o logit da proporção média.
Como o link é logit, a relação entre x
e y é não linear, mas podemos interpretar
o coeficiente por meio do odds ratio:
exp(coef(glm_beta))
(Intercept) x (phi)
3.805405e-01 1.329730e+00 6.081579e+08
Por exemplo, se \(\beta_1 = 0.3\), então:
\[ e^{0.3} \approx 1.35 \]
Isso indica que, para cada aumento unitário em x, as
chances associadas à proporção média aumentam cerca de
35%.
O intercepto (\(\beta_0\))
representa o logit da proporção esperada quando
x = 0.
💡 Dica:
A regressão Beta requer que os valores de
y estejam estritamente entre 0 e 1.
Se houver valores iguais a 0 ou 1, uma prática comum é ajustar
ligeiramente os dados:
y <- (y * (n - 1) + 0.5) / n
onde n é o tamanho da amostra.
Avalie o ajuste usando pseudo-R² e gráficos de resíduos:
plot(glm_beta, which = 1, main = "Resíduos vs. Valores Ajustados (Beta)")
Resumo
A regressão Beta é indicada para proporções
contínuas entre 0 e 1, oferecendo grande
flexibilidade na modelagem de dados
assimétricos.
Com o link logit, o modelo garante previsões
válidas (\(0 < \mu <
1\)) e permite interpretar os efeitos em termos de odds
ratios.
Os Modelos Lineares Generalizados (GLMs) permitem estender a regressão linear para diferentes tipos de variáveis resposta, escolhendo uma distribuição adequada e uma função de ligação (link) apropriada.
| Distribuição | Tipo de dado | Link padrão | Quando usar |
|---|---|---|---|
| Normal | Contínuo (positivo e negativo) | identity | Quando a resposta é aproximadamente normal |
| Poisson | Contagem (0,1,2,…) | log | Quando a resposta é uma contagem de eventos |
| Binomial | Binária (0/1) ou proporção | logit | Quando a resposta é dicotômica |
| Gamma | Contínua positiva | log ou inverse | Quando a resposta é positiva e assimétrica |
| Beta | Proporção (0–1) | logit ou log-log | Quando a resposta é uma proporção contínua |
Os GLMs ampliam o poder da regressão linear para
lidar com diferentes tipos de dados — como contagens, proporções,
respostas binárias e tempos.
Escolher a distribuição e a função de
ligação corretas é essencial para garantir que o modelo:
Em resumo: a regressão linear é apenas um caso particular dos GLMs — com distribuição Normal e link identity.
# install.packages("lme4") # uncomment if needed
library(lme4)
d <- data.frame(
y = rnorm(30),
trat = factor(rep(1:3,10)),
bloco = factor(rep(1:10, each=3))
)
mod_mixed <- lmer(y ~ trat + (1|bloco), data = d)
summary(mod_mixed)
Linear mixed model fit by REML ['lmerMod']
Formula: y ~ trat + (1 | bloco)
Data: d
REML criterion at convergence: 95.3
Scaled residuals:
Min 1Q Median 3Q Max
-2.1324 -0.4783 -0.1430 0.3311 2.2294
Random effects:
Groups Name Variance Std.Dev.
bloco (Intercept) 0.000913 0.03022
Residual 1.544922 1.24295
Number of obs: 30, groups: bloco, 10
Fixed effects:
Estimate Std. Error t value
(Intercept) -0.3204 0.3932 -0.815
trat2 0.1991 0.5559 0.358
trat3 0.2990 0.5559 0.538
Correlation of Fixed Effects:
(Intr) trat2
trat2 -0.707
trat3 -0.707 0.500
pca <- prcomp(iris[,1:4], scale. = TRUE)
summary(pca)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.7084 0.9560 0.38309 0.14393
Proportion of Variance 0.7296 0.2285 0.03669 0.00518
Cumulative Proportion 0.7296 0.9581 0.99482 1.00000
plot(pca, type="l")
biplot(pca, scale=0)
d <- scale(iris[,1:4])
hc <- hclust(dist(d))
plot(hc)
rect.hclust(hc, k=3)
A escolha da análise estatística depende da natureza da
variável resposta, do tipo de fator ou
preditor envolvido e dos pressupostos do
modelo (normalidade, homogeneidade de variâncias, independência
etc.).
A decisão correta garante interpretações válidas,
modelos adequados e inferências
confiáveis.
| Tipo de dado | Objetivo da análise | Métodos recomendados | Comentários |
|---|---|---|---|
| Contínuos (normal) | Comparar médias entre grupos | t-test, ANOVA, ANCOVA | Use quando os resíduos são normais e variâncias homogêneas |
| Contínuos (não normal) | Comparar grupos sem normalidade | Teste de Mann–Whitney, Kruskal–Wallis, Friedman | Alternativas não paramétricas aos testes de médias |
| Contínuos com preditores | Avaliar relações quantitativas | Regressão Linear, Modelos Lineares Múltiplos | Quando a resposta é contínua e normalmente distribuída |
| Binários (0/1) | Modelar probabilidade de sucesso | Regressão Logística, GLM Binomial | Para respostas dicotômicas |
| Contagem (0,1,2,…) | Modelar número de ocorrências | GLM Poisson, Quasi-Poisson, Binomial Negativa | Ideal quando a resposta é uma contagem de eventos |
| Proporção (0–1) | Modelar taxas ou proporções | GLM Binomial, Regressão Beta | Para proporções contínuas dentro do intervalo (0,1) |
| Medidas repetidas / hierarquia | Considerar dependência entre observações | Modelos Mistos (LMM / GLMM) | Incluem efeitos aleatórios e fixos |
| Multivariados (várias respostas) | Analisar múltiplas variáveis simultaneamente | PCA, MANOVA, Análise de Cluster, Discriminante | Para explorar padrões e relações em dados multidimensionais |
# Dados contínuos com 2 grupos → t-test
t.test(mpg ~ am, data = mtcars)
Welch Two Sample t-test
data: mpg by am
t = -3.7671, df = 18.332, p-value = 0.001374
alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
95 percent confidence interval:
-11.280194 -3.209684
sample estimates:
mean in group 0 mean in group 1
17.14737 24.39231
# Dados contínuos com vários grupos → ANOVA
anova_ex <- aov(mpg ~ cyl, data = mtcars)
summary(anova_ex)
Df Sum Sq Mean Sq F value Pr(>F)
cyl 1 817.7 817.7 79.56 6.11e-10 ***
Residuals 30 308.3 10.3
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Dados não normais → Kruskal-Wallis
kruskal.test(mpg ~ cyl, data = mtcars)
Kruskal-Wallis rank sum test
data: mpg by cyl
Kruskal-Wallis chi-squared = 25.746, df = 2, p-value = 2.566e-06
# Dados binários → Regressão logística
glm_log <- glm(am ~ wt + hp, data = mtcars, family = binomial)
summary(glm_log)
Call:
glm(formula = am ~ wt + hp, family = binomial, data = mtcars)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 18.86630 7.44356 2.535 0.01126 *
wt -8.08348 3.06868 -2.634 0.00843 **
hp 0.03626 0.01773 2.044 0.04091 *
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 43.230 on 31 degrees of freedom
Residual deviance: 10.059 on 29 degrees of freedom
AIC: 16.059
Number of Fisher Scoring iterations: 8
# Dados de contagem → Poisson
glm_pois <- glm(gear ~ wt, data = mtcars, family = poisson)
summary(glm_pois)
Call:
glm(formula = gear ~ wt, family = poisson, data = mtcars)
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) 1.69198 0.31842 5.314 1.07e-07 ***
wt -0.12242 0.09812 -1.248 0.212
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
(Dispersion parameter for poisson family taken to be 1)
Null deviance: 4.4634 on 31 degrees of freedom
Residual deviance: 2.8792 on 30 degrees of freedom
AIC: 108.35
Number of Fisher Scoring iterations: 4
# Dados hierárquicos → Modelo misto (exemplo simulado)
if(!require(lme4)) install.packages("lme4")
library(lme4)
set.seed(1)
df_lmm <- data.frame(
y = rnorm(100),
x = rnorm(100),
grupo = rep(1:10, each = 10)
)
lmm_ex <- lmer(y ~ x + (1|grupo), data = df_lmm)
summary(lmm_ex)
Linear mixed model fit by REML ['lmerMod']
Formula: y ~ x + (1 | grupo)
Data: df_lmm
REML criterion at convergence: 267.2
Scaled residuals:
Min 1Q Median 3Q Max
-2.57448 -0.66862 0.00593 0.64584 2.54014
Random effects:
Groups Name Variance Std.Dev.
grupo (Intercept) 0.000 0.0000
Residual 0.815 0.9028
Number of obs: 100, groups: grupo, 10
Fixed effects:
Estimate Std. Error t value
(Intercept) 0.1088521 0.0903480 1.205
x -0.0009324 0.0947216 -0.010
Correlation of Fixed Effects:
(Intr)
x 0.040
optimizer (nloptwrap) convergence code: 0 (OK)
boundary (singular) fit: see help('isSingular')
Quando há mais de uma variável resposta ou o interesse é explorar relações entre variáveis, aplicam-se métodos multivariados:
| Técnica | Tipo de dado | Objetivo |
|---|---|---|
| PCA (Análise de Componentes Principais) | Contínuos | Reduzir dimensionalidade e explorar padrões |
| MANOVA | Contínuos (múltiplas respostas) | Comparar médias multivariadas entre grupos |
| Análise Discriminante | Categóricos + contínuos | Classificar observações em grupos |
| Cluster (agrupamento) | Diversos tipos | Encontrar grupos homogêneos em dados multivariados |
data(iris)
pca_ex <- prcomp(iris[, 1:4], scale. = TRUE)
summary(pca_ex)
Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.7084 0.9560 0.38309 0.14393
Proportion of Variance 0.7296 0.2285 0.03669 0.00518
Cumulative Proportion 0.7296 0.9581 0.99482 1.00000
plot(
pca_ex$x[, 1:2],
col = iris$Species,
pch = 19,
main = "PCA - Dados de Iris"
)
Conclusão
A natureza do dado e o objetivo da
análise determinam o tipo de teste ou modelo estatístico a ser
utilizado.
De modo geral:
t-test,
ANOVA, regressão linear): assumem
normalidade e homogeneidade.Mann–Whitney,
Kruskal–Wallis): usados quando esses pressupostos
são violados.💡 Dica prática:
Sempre comece pela visualização e diagnóstico
dos dados.
Entender a estrutura do seu conjunto de dados é o
primeiro passo para escolher a análise estatística
correta.
ggplot2, dplyr, lme4,
agricolae, emmeans, multcomp,
carscipy, statsmodels,
scikit-learn, pingouinSiga um fluxo simples: (1) Explorar dados → (2) Tratar e visualizar → (3) Escolher teste → (4) Ajustar modelo → (5) Validar pressupostos → (6) Interpretar.