climas = read_csv(here::here("data/clima_cg_jp-semanal.csv"),
col_types = "cTdddddd")
glimpse(climas)
## Rows: 2,748
## Columns: 8
## $ cidade <chr> "Campina Grande", "Campina Grande", "Campina Grande", "Campina …
## $ semana <dttm> 1992-12-27, 1993-01-03, 1993-01-10, 1993-01-31, 1993-02-07, 19…
## $ tmedia <dbl> 26.13333, 26.11905, 25.76667, 25.74000, 26.31429, 26.28571, 26.…
## $ tmax <dbl> 30.4, 32.4, 32.2, 32.0, 32.7, 32.7, 32.3, 32.3, 32.1, 31.2, 32.…
## $ tmin <dbl> 20.7, 19.3, 19.7, 19.9, 19.6, 20.0, 20.4, 21.2, 19.0, 19.0, 19.…
## $ chuva <dbl> 0.0, 0.0, 0.0, 0.4, 0.3, 0.0, 4.9, 0.0, 0.0, 6.1, 0.4, 1.2, 0.0…
## $ mes <dbl> 12, 1, 1, 1, 2, 2, 2, 2, 10, 11, 11, 11, 11, 12, 12, 12, 12, 1,…
## $ ano <dbl> 1992, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 1993, 199…
Calcular a temperatura da semana anterior em cada linha:
climas = climas %>%
group_by(cidade) %>%
mutate(temp_anterior = lag(tmedia, n = 1)) %>%
ungroup()
Para comparar as cidades, calculamos a temperatura média geral e a média restrita aos meses de janeiro e fevereiro (pico do verão), separadamente por cidade.
medias_periodo <- climas %>%
mutate(periodo = ifelse(month(semana) %in% c(1, 2), "Verão (Jan/Fev)", "Ano Todo")) %>%
group_by(cidade, periodo) %>%
summarise(media = mean(tmedia), desvio = sd(tmedia), .groups = "drop")
medias_periodo
climas %>%
mutate(periodo = ifelse(month(semana) %in% c(1, 2), "Verão (Jan/Fev)", "Ano Todo")) %>%
group_by(cidade, periodo) %>%
mutate(media_cidade = mean(tmedia)) %>%
ggplot(aes(x = cidade, y = tmedia, fill = cidade)) +
geom_violin(alpha = .4, color = "grey30", show.legend = FALSE) +
facet_wrap(~ periodo) +
scale_fill_manual(values = c("Campina Grande" = "#F6511D", "João Pessoa" = "#00A6ED")) +
geom_point(aes(y = media_cidade, color = "Média"), size = 2) +
scale_color_manual(values = c("Média" = "red"), name = NULL) +
scale_y_continuous(breaks = seq(20, 31, 1)) +
guides(fill = "none") +
labs(y = "Temperatura Média (°C)", x = NULL) +
theme(legend.position = "bottom")
Conclusão: João Pessoa é a cidade mais quente, tanto na análise do ano completo (27,45°C contra 24,44°C em Campina Grande) quanto na análise restrita a janeiro/fevereiro (28,65°C contra 25,86°C); sua distribuição de temperatura está deslocada para a direita em relação a Campina Grande em ambos os painéis, e a diferença entre as médias confirma isso numericamente. Usamos a média como métrica central por ser diretamente comparável ao eixo do gráfico de violino, e o desvio-padrão como medida de dispersão complementar: Campina Grande apresenta maior variabilidade de temperatura tanto no ano todo (desvio de 1,52 contra 1,17) quanto no verão (0,90 contra 0,59), o que é coerente com o clima do semiárido. Já no verão, ambas as cidades ficam mais quentes em relação à média anual, mas a distância entre elas se mantém semelhante, ou seja, o verão não inverte nem reduz a superioridade de temperatura de João Pessoa, apenas eleva o nível geral de temperatura nas duas.
medias_mes <- climas %>%
mutate(mes_nome = month(semana, label = TRUE, abbr = FALSE)) %>%
group_by(cidade, mes_nome) %>%
summarise(media = mean(tmedia), .groups = "drop") %>%
arrange(cidade, media)
medias_mes
climas %>%
mutate(mes_nome = month(semana, label = TRUE, abbr = FALSE)) %>%
ggplot(aes(x = tmedia, y = mes_nome, fill = (mes == 6))) +
geom_density_ridges(alpha = .6, color = "white") +
facet_wrap(~ cidade) +
scale_fill_manual(values = c("gray80", "#F6511D"), labels = c("Outros", "Junho")) +
labs(x = "Temperatura Média (°C)", y = NULL, fill = "Destaque")
## Picking joint bandwidth of 0.272
## Picking joint bandwidth of 0.19
O gráfico acima mostra a forma da distribuição de temperatura mês a mês e destaca junho, mas a ordenação cronológica do eixo dificulta identificar de imediato qual mês é o mais quente e qual é o mais frio. Para isso, ordenamos os meses por temperatura média no gráfico abaixo:
medias_mes %>%
ggplot(aes(x = media, y = fct_reorder(mes_nome, media), color = cidade)) +
geom_segment(aes(x = min(media), xend = media, yend = mes_nome), linewidth = 0.5) +
geom_point(size = 2.8) +
facet_wrap(~ cidade, scales = "free_y") +
scale_color_manual(values = c("Campina Grande" = "#F6511D", "João Pessoa" = "#00A6ED")) +
labs(x = "Temperatura Média (°C)", y = NULL) +
guides(color = "none")
Conclusão: o gráfico de ranking deixa explícito que, em Campina Grande, julho é o mês mais frio do ano (22,3°C), enquanto fevereiro, março e dezembro disputam o posto de mês mais quente, todos em torno de 25,9°C. Em João Pessoa, julho também é o mês mais frio (25,9°C), e fevereiro e março se destacam como os mais quentes, ambos próximos de 28,8°C. Isso confirma numericamente o que o gráfico de distribuições já sugeria visualmente: em Campina Grande, os meses mais frios são os do meio do ano (julho, agosto e junho ocupam as três últimas posições do ranking, com as curvas mais deslocadas à esquerda no gráfico de ridges), e os mais quentes se concentram no verão. Em João Pessoa esse padrão sazonal existe, mas é bem mais discreto: as curvas dos diferentes meses têm sobreposição maior, e a variação entre o mês mais quente e o mais frio é visivelmente menor que em Campina Grande, o que, de novo, é um reflexo do efeito do clima do litoral. Quanto às festas juninas (destacadas em laranja no gráfico de ridges), em Campina Grande, cidade que abriga um dos maiores São Joãos do país, junho está justamente entre os três meses mais frios do ano (22,8°C), o que é coerente com o friozinho associado à festa; em João Pessoa, junho também figura entre os meses mais amenos do calendário local (26,4°C), mas em um patamar de temperatura bem mais alto, próximo ao do verão de Campina Grande.
resumo_chuva <- climas %>%
group_by(cidade) %>%
summarise(
media = mean(chuva),
mediana = median(chuva),
q3 = quantile(chuva, .75),
maximo = max(chuva),
.groups = "drop"
)
resumo_chuva
climas %>%
left_join(resumo_chuva, by = "cidade") %>%
ggplot(aes(x = chuva)) +
geom_histogram(binwidth = 10, fill = "white", color = "#00A6ED", boundary = 0) +
geom_rug(alpha = 0.1, color = "#00A6ED") +
geom_vline(aes(xintercept = mediana, linetype = "Mediana"), color = "grey30") +
geom_vline(aes(xintercept = media, linetype = "Média"), color = "red") +
facet_wrap(~ cidade, ncol = 1) +
scale_linetype_manual(values = c("Mediana" = "dashed", "Média" = "solid"), name = NULL) +
scale_x_continuous(expand = expansion(mult = c(0, 0.05))) +
labs(
title = "Volume de chuvas apresenta forte assimetria positiva",
x = "Chuva Semanal (mm)",
y = "Frequência (Semanas)"
) +
theme(legend.position = "bottom")
Conclusão: a distribuição do volume de chuva semanal é fortemente assimétrica à direita nas duas cidades: a grande maioria das semanas tem chuva baixa, com mediana de apenas 4,9mm em Campina Grande e 14,1mm em João Pessoa, mas existe uma cauda longa de semanas com volumes muito altos, que arrasta a média bem acima da mediana em ambas (13,99mm e 32,65mm, respectivamente). Essa cauda é mais extensa em João Pessoa, onde o máximo observado chega a 351,6mm, contra um máximo de 191,9mm em Campina Grande — ou seja, além de chover mais em média, João Pessoa também registra os eventos de chuva mais extremos da base. Foi escolhido reportar média, mediana e máximo juntos justamente por causa dessa distribuição assimétrica: nesse cenário, a média individualmente é uma medida enganosa de “chuva típica”; a mediana representa melhor o que ocorre numa semana comum, enquanto a diferença entre os dois valores quantifica o peso da assimetria. Comparando as cidades, João Pessoa apresenta mediana, média e máximo de chuva mais altos que Campina Grande, refletindo seu clima litorâneo mais úmido, enquanto Campina Grande, no semiárido, tem mais semanas secas, mas ainda assim com episódios pontuais de chuva intensa.
correlacao_temp <- climas %>%
group_by(cidade) %>%
summarise(correlacao = cor(tmedia, temp_anterior, use = "complete.obs"), .groups = "drop")
correlacao_temp
climas %>%
left_join(correlacao_temp, by = "cidade") %>%
mutate(rotulo = paste0(cidade, " (r = ", round(correlacao, 2), ")")) %>%
ggplot(aes(x = temp_anterior, y = tmedia)) +
geom_point(alpha = .3, color = "grey20") +
geom_abline(aes(slope = 1, intercept = 0, linetype = "Identidade (y = x)"), color = "red") +
facet_wrap(~ rotulo) +
scale_linetype_manual(values = c("Identidade (y = x)" = "dashed"), name = NULL) +
labs(x = "Temperatura na Semana Anterior (°C)", y = "Temperatura Atual (°C)") +
theme(legend.position = "bottom")
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_point()`).
Conclusão: existe uma correlação forte e positiva entre a temperatura de uma semana e a da semana anterior nas duas cidades (r = 0,88 em Campina Grande e r = 0,86 em João Pessoa), o que é visível no gráfico pela concentração dos pontos ao redor da linha de identidade (y = x, em vermelho). Usamos o coeficiente de correlação de Pearson como métrica porque a relação aparenta ser aproximadamente linear nos dois casos. Esse resultado é esperado fisicamente: a temperatura muda de forma gradual de uma semana para outra, ou seja, não há saltos abruptos entre estações, tornando raras as mudanças bruscas. Os valores de correlação das duas cidades são muito próximos, o que indica que essa inércia térmica semana a semana é igualmente forte tanto no clima semiárido de Campina Grande quanto no litorâneo de João Pessoa — a localização geográfica parece não afetar de forma relevante esse padrão específico, mesmo afetando a temperatura média e sua variabilidade geral, como visto na Q1.
correlacao_chuva <- climas %>%
filter(chuva > 0) %>%
group_by(cidade) %>%
summarise(correlacao = cor(tmedia, chuva), .groups = "drop")
correlacao_chuva
climas %>%
filter(chuva > 0) %>%
left_join(correlacao_chuva, by = "cidade") %>%
mutate(rotulo = paste0(cidade, " (r = ", round(correlacao, 2), ")")) %>%
ggplot(aes(x = tmedia, y = chuva, color = rotulo)) +
geom_point(alpha = .4) +
geom_smooth(method = "loess", se = FALSE) +
scale_y_log10() +
scale_color_manual(values = c("#F6511D", "#00A6ED")) +
labs(x = "Temperatura Média (°C)", y = "Chuva (mm - log)", color = NULL) +
theme(legend.position = "bottom")
## `geom_smooth()` using formula = 'y ~ x'
Conclusão: nas semanas em que houve chuva, a relação entre temperatura e volume de chuva é negativa em ambas as cidades (r = -0,34 em Campina Grande e r = -0,42 em João Pessoa), ou seja, semanas mais quentes tendem a registrar menos chuva, e isso aparece tanto na tendência decrescente da curva loess quanto no coeficiente de correlação. A relação é um pouco mais pronunciada em João Pessoa do que em Campina Grande. Usamos a escala logarítmica no eixo da chuva porque sua distribuição é fortemente assimétrica (como vimos na Q3), e sem o log a maior parte dos pontos ficaria comprimida perto de zero, dificultando a leitura da tendência. É importante notar, no entanto, que os valores de correlação encontrados são de magnitude moderada a fraca, então essa relação, embora real e fisicamente plausível, já que sistemas de chuva tendem a vir acompanhados de massas de ar mais frias, não deve ser interpretada como um vínculo forte ou determinístico entre as duas variáveis.