1. Importação e Limpeza dos Dados

PIB per Capita

gdp_total <- read_csv(
  "C:/Users/Guilherme/Downloads/GDP/API_NY.GDP.PCAP.CD_DS2_en_csv_v2_245.csv",
  skip = 4                                                   # pula 4 linhas de metadado do Banco Mundial
) |>
  select(-"Indicator Name", -"Indicator Code") |>            # remove colunas desnecessárias
  pivot_longer(
    cols      = -c("Country Name", "Country Code"),          # transforma colunas de ano em linhas
    names_to  = "ano",
    values_to = "gdp_per_capita"
  ) |>
  rename(pais = "Country Name", codigo = "Country Code") |>  # renomeia para português
  mutate(ano = as.integer(ano)) |>                           # converte ano para inteiro
  filter(ano <= 2023) |>                                     # remove anos futuros sem dados
  drop_na(gdp_per_capita)                                    # remove linhas sem valor de PIB

Produção de Petróleo

petro_prod_total <- read_csv(
  "C:/Users/Guilherme/Downloads/petro/oil-production-by-country.csv"
) |>
  rename(
    pais         = Entity,                                   # renomeia para português
    codigo       = Code,
    ano          = Year,
    producao_oil = Oil
  ) |>
  drop_na() |>                                               # remove linhas com NA
  filter(!is.na(codigo) & codigo != "") |>                   # remove regiões sem código
  filter(producao_oil > 0) |>                                # remove países sem produção
  filter(codigo %in% gdp_total$codigo)                       # mantém só códigos que existem no GDP

2. Filtro para 2015 — Países em Comum

# Países em comum entre PIB e Petróleo em 2015
paises_comuns_gdp <- inner_join(
  gdp_total        |> filter(ano == 2015) |> select(codigo), # códigos do PIB em 2015
  petro_prod_total |> filter(ano == 2015) |> select(codigo), # códigos do petróleo em 2015
  by = "codigo"                                              # cruza pelo código do país
)

# Filtra cada base para 2015 com países em comum
gdp_2015       <- gdp_total        |> filter(ano == 2015, codigo %in% paises_comuns_gdp$codigo)
petro_gdp_2015 <- petro_prod_total |> filter(ano == 2015, codigo %in% paises_comuns_gdp$codigo)

cat("Países em comum:", nrow(paises_comuns_gdp))
## Países em comum: 98

3. Teste de Hipótese — PIB per Capita vs Produção de Petróleo

H₀: A média do PIB per capita é igual entre grandes e pequenos produtores de petróleo.
H₁: A média do PIB per capita é diferente entre grandes e pequenos produtores de petróleo.

# Une as duas bases
dados_gdp <- inner_join(gdp_2015, petro_gdp_2015, by = "codigo")

# Divide pela mediana de produção
mediana_producao_gdp <- median(dados_gdp$producao_oil)

dados_gdp <- dados_gdp |>
  mutate(grupo = ifelse(producao_oil >= mediana_producao_gdp,
                        "Acima da mediana",                  # grandes produtores
                        "Abaixo da mediana"))                # pequenos produtores

table(dados_gdp$grupo)
## 
## Abaixo da mediana  Acima da mediana 
##                49                49

Teste de Levene (Homogeneidade de Variâncias)

levene_result <- leveneTest(gdp_per_capita ~ grupo, data = dados_gdp)
levene_result
## Levene's Test for Homogeneity of Variance (center = median)
##       Df F value Pr(>F)
## group  1  0.9697 0.3272
##       96
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

Estatísticas Descritivas

dados_gdp |>
  group_by(grupo) |>
  summarise(
    n         = n(),
    media_gdp = round(mean(gdp_per_capita), 2),
    dp_gdp    = round(sd(gdp_per_capita), 2)
  ) |>
  kable(caption = "Estatísticas Descritivas por Grupo")
Estatísticas Descritivas por Grupo
grupo n media_gdp dp_gdp
Abaixo da mediana 49 12154.26 13216.5
Acima da mediana 49 15993.23 19614.4

Teste t

resultado_teste_gdp <- t.test(
  gdp_per_capita ~ grupo,
  data      = dados_gdp,
  var.equal = FALSE
)
resultado_teste_gdp
## 
##  Welch Two Sample t-test
## 
## data:  gdp_per_capita by grupo
## t = -1.1362, df = 84.137, p-value = 0.2591
## 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:
##  -10557.939   2879.996
## sample estimates:
## mean in group Abaixo da mediana  mean in group Acima da mediana 
##                        12154.26                        15993.23

Poder do Teste

alfa         <- 0.05
media_acima  <- mean(dados_gdp$gdp_per_capita[dados_gdp$grupo == "Acima da mediana"])
media_abaixo <- mean(dados_gdp$gdp_per_capita[dados_gdp$grupo == "Abaixo da mediana"])
dp_acima     <- sd(dados_gdp$gdp_per_capita[dados_gdp$grupo == "Acima da mediana"])
dp_abaixo    <- sd(dados_gdp$gdp_per_capita[dados_gdp$grupo == "Abaixo da mediana"])
dp_pooled    <- sqrt((dp_acima^2 + dp_abaixo^2) / 2)        # desvio padrão combinado
d_cohen      <- (media_acima - media_abaixo) / dp_pooled    # tamanho do efeito

gl        <- 2 * 49 - 2
t_critico <- qt(1 - alfa / 2, df = gl)

poder <- pwr.t.test(n = 49, d = d_cohen, sig.level = alfa, type = "two.sample")

cat("╔══════════════════════════════════════════╗\n")
## ╔══════════════════════════════════════════╗
cat("║    RESULTADO — PIB vs PRODUÇÃO PETRÓLEO  ║\n")
## ║    RESULTADO — PIB vs PRODUÇÃO PETRÓLEO  ║
cat("╠══════════════════════════════════════════╣\n")
## ╠══════════════════════════════════════════╣
cat("║ Levene p-valor  :", round(levene_result$`Pr(>F)`[1], 4), "\n")
## ║ Levene p-valor  : 0.3272
cat("║ Variâncias      :", ifelse(var_igual, "Iguais", "Diferentes"), "\n")
## ║ Variâncias      : Iguais
cat("╠══════════════════════════════════════════╣\n")
## ╠══════════════════════════════════════════╣
cat("║ t observado     :", round(resultado_teste_gdp$statistic, 4), "\n")
## ║ t observado     : -1.1362
cat("║ t crítico       : ±", round(t_critico, 4), "\n")
## ║ t crítico       : ± 1.985
cat("║ p-valor         :", round(resultado_teste_gdp$p.value, 4), "\n")
## ║ p-valor         : 0.2591
cat("║ alfa            : 0.05\n")
## ║ alfa            : 0.05
cat("╠══════════════════════════════════════════╣\n")
## ╠══════════════════════════════════════════╣
cat("║ d de Cohen      :", round(d_cohen, 4), "\n")
## ║ d de Cohen      : 0.2295
cat("║ Poder do teste  :", round(poder$power, 4), "\n")
## ║ Poder do teste  : 0.2028
cat("║ Erro Tipo 2     :", round(1 - poder$power, 4), "\n")
## ║ Erro Tipo 2     : 0.7972
cat("╠══════════════════════════════════════════╣\n")
## ╠══════════════════════════════════════════╣
cat("║ DECISÃO:", ifelse(resultado_teste_gdp$p.value < 0.05, "REJEITA H0", "NÃO REJEITA H0"), "\n")
## ║ DECISÃO: NÃO REJEITA H0
cat("╚══════════════════════════════════════════╝\n")
## ╚══════════════════════════════════════════╝

4. Visualizações

Distribuição do PIB per Capita por Grupo

ggplot(dados_gdp, aes(x = gdp_per_capita, fill = grupo)) +
  geom_density(alpha = 0.5, adjust = 1, trim = TRUE) +
  geom_vline(xintercept = mean(dados_gdp$gdp_per_capita[dados_gdp$grupo == "Acima da mediana"]),
             color = "blue", linetype = "dashed", show.legend = FALSE) +
  geom_vline(xintercept = mean(dados_gdp$gdp_per_capita[dados_gdp$grupo == "Abaixo da mediana"]),
             color = "red", linetype = "dashed", show.legend = FALSE) +
  scale_x_continuous(limits = c(-20000, 75000)) +
  labs(
    title = "Distribuição do PIB per Capita por Grupo de Produção de Petróleo (2015)",
    x     = "PIB per Capita (US$)",
    y     = "Densidade",
    fill  = "Grupo"
  ) +
  theme_minimal()

Distribuições Separadas Centradas na Média

dados_gdp <- dados_gdp |>
  group_by(grupo) |>
  mutate(gdp_centrado = gdp_per_capita - mean(gdp_per_capita)) |>  # subtrai a média do grupo
  ungroup()

ggplot(dados_gdp, aes(x = gdp_centrado, fill = grupo)) +
  geom_density(alpha = 0.5, adjust = 1, trim = TRUE) +
  geom_vline(xintercept = 0, color = "black",
             linetype = "dashed", show.legend = FALSE) +            # zero = média do grupo
  facet_wrap(~ grupo, ncol = 1) +
  scale_x_continuous(limits = c(-40000, 60000)) +
  labs(
    title = "Distribuição do PIB per Capita Centrada na Média por Grupo (2015)",
    x     = "Desvio em relação à média do grupo (US$)",
    y     = "Densidade",
    fill  = "Grupo"
  ) +
  theme_minimal()

Distribuição t com Regiões Críticas

x <- seq(-4, 4, length.out = 1000)
y <- dt(x, df = gl)

ggplot(data.frame(x, y), aes(x, y)) +
  geom_line(linewidth = 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_gdp$statistic,
             color = "blue", linetype = "solid", linewidth = 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_gdp$statistic, y = 0.38,
           label = paste("t obs =", round(resultado_teste_gdp$statistic, 2)), color = "blue") +
  labs(
    title = "Distribuição t com Regiões Críticas — PIB per Capita vs Produção de Petróleo (2015)",
    x     = "Valor t",
    y     = "Densidade"
  ) +
  theme_minimal()


5. Conclusão

Com p-valor = 0.2591 (maior que α = 0.05), não rejeitamos H₀. Não há evidência estatística de diferença no PIB per capita entre os grupos.


Fontes: