library(pwr)
library(readr)
library(dplyr)
library(tidyr)
library(ggplot2)
library(car)
1. Importação e Limpeza dos Dados
petro_prod_total <- read_csv(
"C:/Users/Guilherme/Downloads/petro/oil-production-by-country.csv"
) |>
rename(
pais = Entity,
codigo = Code,
ano = Year,
producao_oil = Oil
) |>
drop_na() |>
filter(!is.na(codigo) & codigo != "")
gini_index <- read_csv(
"C:/Users/Guilherme/Downloads/GINI/API_SI.POV.GINI_DS2_en_csv_v2_288.csv",
skip = 4
) |>
select(-"Indicator Name", -"Indicator Code") |>
pivot_longer(
cols = -c("Country Name", "Country Code"),
names_to = "ano",
values_to = "gini"
) |>
rename(pais = "Country Name", codigo = "Country Code") |>
mutate(ano = as.integer(ano)) |>
filter(ano <= 2023) |>
drop_na(gini)
2. Filtro 2015 — Países em Comum
paises_comuns_gini <- inner_join(
gini_index |> filter(ano == 2015) |> select(codigo),
petro_prod_total |> filter(ano == 2015) |> select(codigo),
by = "codigo"
)
gini_2015 <- gini_index |> filter(ano == 2015, codigo %in% paises_comuns_gini$codigo)
petro_gini_2015 <- petro_prod_total |> filter(ano == 2015, codigo %in% paises_comuns_gini$codigo)
3. Teste de Hipótese — GINI vs Petróleo
dados_gini <- inner_join(gini_2015, petro_gini_2015, by = "codigo")
mediana_producao <- median(dados_gini$producao_oil)
dados_gini <- dados_gini |>
mutate(grupo = ifelse(producao_oil >= mediana_producao,
"Acima da mediana",
"Abaixo da mediana"))
levene_result <- leveneTest(gini ~ grupo, data = dados_gini)
levene_result
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 1.3333 0.2515
## 84
var_igual <- levene_result$`Pr(>F)`[1] > 0.05
cat("Variâncias iguais?", ifelse(var_igual, "SIM → teste t padrão", "NÃO → Welch t-test"), "\n")
## Variâncias iguais? SIM → teste t padrão
table(dados_gini$grupo)
##
## Abaixo da mediana Acima da mediana
## 43 43
ggplot(dados_gini, aes(x = gini, fill = grupo)) +
geom_density(alpha = 0.5) +
geom_vline(xintercept = median(dados_gini$gini[dados_gini$grupo == "Acima da mediana"]),
color = "blue", linetype = "dashed") +
geom_vline(xintercept = median(dados_gini$gini[dados_gini$grupo == "Abaixo da mediana"]),
color = "red", linetype = "dashed") +
scale_x_continuous(limits = c(0, 80)) +
labs(
title = "Distribuição do GINI por Grupo de Produção de Petróleo (2015)",
x = "Índice GINI",
y = "Densidade",
fill = "Grupo"
) +
theme_minimal()

ggplot(dados_gini, aes(x = gini, fill = grupo)) +
geom_density(alpha = 0.5) +
geom_vline(xintercept = mean(dados_gini$gini[dados_gini$grupo == "Acima da mediana"]),
color = "blue", linetype = "dashed", show.legend = FALSE) +
geom_vline(xintercept = mean(dados_gini$gini[dados_gini$grupo == "Abaixo da mediana"]),
color = "red", linetype = "dashed", show.legend = FALSE) +
facet_wrap(~ grupo, ncol = 1) +
scale_x_continuous(limits = c(0, 80)) +
labs(
title = "Distribuição do GINI por Grupo (2015)",
x = "Índice GINI",
y = "Densidade",
fill = "Grupo"
) +
theme_minimal()

4. Estatísticas e Teste t
dados_gini |>
group_by(grupo) |>
summarise(
n = n(),
media_gini = mean(gini),
dp_gini = sd(gini)
)
## # A tibble: 2 × 4
## grupo n media_gini dp_gini
## <chr> <int> <dbl> <dbl>
## 1 Abaixo da mediana 43 37.7 8.52
## 2 Acima da mediana 43 35.9 6.81
resultado_teste_gini <- t.test(
gini ~ grupo,
data = dados_gini,
var.equal = var_igual
)
resultado_teste_gini
##
## Two Sample t-test
##
## data: gini by grupo
## t = 1.0749, df = 84, p-value = 0.2855
## alternative hypothesis: true difference in means between group Abaixo da mediana and group Acima da mediana is not equal to 0
## 95 percent confidence interval:
## -1.520062 5.096806
## sample estimates:
## mean in group Abaixo da mediana mean in group Acima da mediana
## 37.66977 35.88140
alfa <- 0.05
cat("Erro Tipo 1 (alfa):", alfa, "\n")
## Erro Tipo 1 (alfa): 0.05
media_acima <- mean(dados_gini$gini[dados_gini$grupo == "Acima da mediana"])
media_abaixo <- mean(dados_gini$gini[dados_gini$grupo == "Abaixo da mediana"])
dp_acima <- sd(dados_gini$gini[dados_gini$grupo == "Acima da mediana"])
dp_abaixo <- sd(dados_gini$gini[dados_gini$grupo == "Abaixo da mediana"])
dp_pooled <- sqrt((dp_acima^2 + dp_abaixo^2) / 2)
d_cohen <- (media_acima - media_abaixo) / dp_pooled
gl <- 2 * 49 - 2
t_critico <- qt(1 - 0.05 / 2, df = gl)
cat("Graus de liberdade:", gl, "\n")
## Graus de liberdade: 96
cat("Valor crítico (±t):", round(t_critico, 4), "\n")
## Valor crítico (±t): 1.985
cat("t observado:", round(resultado_teste_gini$statistic, 4), "\n")
## t observado: 1.0749
cat("p-valor:", round(resultado_teste_gini$p.value, 4), "\n")
## p-valor: 0.2855
cat("Rejeita H0 se t <", round(-t_critico, 4), "ou t >", round(t_critico, 4), "\n")
## Rejeita H0 se t < -1.985 ou t > 1.985
cat("t observado está na região de",
ifelse(abs(resultado_teste_gini$statistic) > t_critico, "REJEIÇÃO ❌", "NÃO REJEIÇÃO ✅"), "\n")
## t observado está na região de NÃO REJEIÇÃO ✅
x <- seq(-4, 4, length.out = 1000)
y <- dt(x, df = gl)
ggplot(data.frame(x, y), aes(x, y)) +
geom_line(size = 1) +
geom_area(data = subset(data.frame(x, y), x > t_critico), aes(x, y), fill = "red", alpha = 0.4) +
geom_area(data = subset(data.frame(x, y), x < -t_critico), aes(x, y), fill = "red", alpha = 0.4) +
geom_vline(xintercept = t_critico, color = "red", linetype = "dashed") +
geom_vline(xintercept = -t_critico, color = "red", linetype = "dashed") +
geom_vline(xintercept = resultado_teste_gini$statistic, color = "blue", size = 1) +
annotate("text", x = t_critico + 0.3, y = 0.35, label = paste("t crítico =", round( t_critico, 2)), color = "red") +
annotate("text", x = -t_critico - 0.3, y = 0.35, label = paste("t crítico =", round(-t_critico, 2)), color = "red") +
annotate("text", x = resultado_teste_gini$statistic, y = 0.38,
label = paste("t obs =", round(resultado_teste_gini$statistic, 2)), color = "blue") +
labs(
title = "Distribuição t — Teste GINI vs Produção de Petróleo (2015)",
x = "Valor t",
y = "Densidade"
) +
theme_minimal()

5. Teste Eliminando Não Produtores
Amostra_petro2 <- petro_gini_2015 |> filter(producao_oil > 0)
paises_comuns_gini_2 <- inner_join(
gini_2015 |> select(codigo),
Amostra_petro2 |> select(codigo),
by = "codigo"
)
dados_gini_2 <- inner_join(gini_2015, Amostra_petro2, by = "codigo")
mediana_producao_2 <- median(dados_gini_2$producao_oil)
dados_gini_2 <- dados_gini_2 |>
mutate(grupo = ifelse(producao_oil >= mediana_producao_2,
"Acima da mediana",
"Abaixo da mediana"))
dados_gini_2 |>
group_by(grupo) |>
summarise(
n = n(),
media_gini = mean(gini),
dp_gini = sd(gini)
)
## # A tibble: 2 × 4
## grupo n media_gini dp_gini
## <chr> <int> <dbl> <dbl>
## 1 Abaixo da mediana 25 34.0 5.82
## 2 Acima da mediana 26 36.9 7.17
resultado_teste_gini_2 <- t.test(
gini ~ grupo,
data = dados_gini_2,
var.equal = FALSE
)
resultado_teste_gini_2
##
## Welch Two Sample t-test
##
## data: gini by grupo
## t = -1.6148, df = 47.683, p-value = 0.1129
## alternative hypothesis: true difference in means between group Abaixo da mediana and group Acima da mediana is not equal to 0
## 95 percent confidence interval:
## -6.6184869 0.7231023
## sample estimates:
## mean in group Abaixo da mediana mean in group Acima da mediana
## 33.96000 36.90769
alfa_2 <- 0.05
cat("Erro Tipo 1 (alfa):", alfa_2, "\n")
## Erro Tipo 1 (alfa): 0.05
media_acima <- mean(dados_gini_2$gini[dados_gini_2$grupo == "Acima da mediana"])
media_abaixo <- mean(dados_gini_2$gini[dados_gini_2$grupo == "Abaixo da mediana"])
dp_acima <- sd(dados_gini_2$gini[dados_gini_2$grupo == "Acima da mediana"])
dp_abaixo <- sd(dados_gini_2$gini[dados_gini_2$grupo == "Abaixo da mediana"])
dp_pooled <- sqrt((dp_acima^2 + dp_abaixo^2) / 2)
d_cohen_2 <- (media_acima - media_abaixo) / dp_pooled
n_grupo <- min(table(dados_gini_2$grupo))
gl <- 2 * n_grupo - 2
t_critico <- qt(1 - 0.05 / 2, df = gl)
cat("Graus de liberdade:", gl, "\n")
## Graus de liberdade: 48
cat("Valor crítico (±t):", round(t_critico, 4), "\n")
## Valor crítico (±t): 2.0106
cat("t observado:", round(resultado_teste_gini_2$statistic, 4), "\n")
## t observado: -1.6148
cat("p-valor:", round(resultado_teste_gini_2$p.value, 4), "\n")
## p-valor: 0.1129
cat("Rejeita H0 se t <", round(-t_critico, 4), "ou t >", round(t_critico, 4), "\n")
## Rejeita H0 se t < -2.0106 ou t > 2.0106
cat("t observado está na região de",
ifelse(abs(resultado_teste_gini_2$statistic) > t_critico, "REJEIÇÃO", "NÃO REJEIÇÃO"), "\n")
## t observado está na região de NÃO REJEIÇÃO
ggplot(dados_gini_2, aes(x = gini, fill = grupo)) +
geom_density(alpha = 0.5) +
geom_vline(xintercept = median(dados_gini_2$gini[dados_gini_2$grupo == "Acima da mediana"]),
color = "blue", linetype = "dashed", show.legend = FALSE) +
geom_vline(xintercept = median(dados_gini_2$gini[dados_gini_2$grupo == "Abaixo da mediana"]),
color = "red", linetype = "dashed", show.legend = FALSE) +
scale_x_continuous(limits = c(0, 80)) +
labs(
title = "Distribuição do GINI — Apenas Produtores de Petróleo (2015)",
x = "Índice GINI",
y = "Densidade",
fill = "Grupo"
) +
theme_minimal()

ggplot(dados_gini_2, aes(x = gini, fill = grupo)) +
geom_density(alpha = 0.5) +
geom_vline(xintercept = mean(dados_gini_2$gini[dados_gini_2$grupo == "Acima da mediana"]),
color = "blue", linetype = "dashed", show.legend = FALSE) +
geom_vline(xintercept = mean(dados_gini_2$gini[dados_gini_2$grupo == "Abaixo da mediana"]),
color = "red", linetype = "dashed", show.legend = FALSE) +
facet_wrap(~ grupo, ncol = 1) +
scale_x_continuous(limits = c(0, 80)) +
labs(
title = "Distribuição do GINI — Apenas Produtores de Petróleo (2015)",
x = "Índice GINI",
y = "Densidade",
fill = "Grupo"
) +
theme_minimal()

cat("\nTamanho do efeito (d de Cohen):", round(d_cohen_2, 4), "\n")
##
## Tamanho do efeito (d de Cohen): 0.4514
cat("╔══════════════════════════════════════════╗\n")
## ╔══════════════════════════════════════════╗
cat("║ RESULTADO DO TESTE t ║\n")
## ║ RESULTADO DO TESTE t ║
cat("╠══════════════════════════════════════════╣\n")
## ╠══════════════════════════════════════════╣
cat("║ t observado :", round(resultado_teste_gini_2$statistic, 4), "\n")
## ║ t observado : -1.6148
cat("║ t crítico : ±", round(t_critico, 4), "\n")
## ║ t crítico : ± 2.0106
cat("║ p-valor :", round(resultado_teste_gini_2$p.value, 4), "\n")
## ║ p-valor : 0.1129
cat("║ alfa : 0.05\n")
## ║ alfa : 0.05
cat("╠══════════════════════════════════════════╣\n")
## ╠══════════════════════════════════════════╣
cat("║ d de Cohen :", round(d_cohen_2, 4), "\n")
## ║ d de Cohen : 0.4514
cat("╠══════════════════════════════════════════╣\n")
## ╠══════════════════════════════════════════╣
cat("║ DECISÃO:",
ifelse(resultado_teste_gini_2$p.value < 0.05,
"REJEITA H0 ❌",
"NÃO REJEITA H0 ✅"), "\n")
## ║ DECISÃO: NÃO REJEITA H0 ✅
cat("╚══════════════════════════════════════════╝\n")
## ╚══════════════════════════════════════════╝