library(tidyverse)
library(kableExtra)
library(lubridate)
library(ggforce)
library(here)
theme_set(theme_bw())
# SEMPRE read_csv NUNCA read.csv
clima_tudo = read_csv(
here("data/tempo-jp-cg-pt.csv"),
col_types = cols(
.default = col_double(),
cidade = col_character(),
semana = col_date(format = ""),
ano = col_integer(),
mes = col_integer()
)
)
clima = clima_tudo %>%
filter(ano > 2009, ano < 2021)
#temperaturas médias das semanas atual e anterior
temp_sem_ant = clima %>%
select(cidade, semana, temp_media) %>%
mutate(temp_anterior = lag(temp_media, n = 1)) %>%
filter(!is.na(temp_media), !is.na(temp_anterior)) %>%
group_by(cidade)
Consideraremos novamente alguns aspectos do clima de Campina Grande, João Pessoa e Patos, que nos ajudarão a compreender melhor o clima paraibano. Essas cidades são uma amostra das regiões do Litoral, Serra da Borborema e Sertão. Nessa análise o foco é observar a correlação entre diferentes medidas do clima dessas cidades. Os dados utilizados vêm de estações do INMET e são compostos por medições semanais desde 2010 até 2020, com temperatura mínima, média e máxima, velocidade média e máxima do vento, umidade e chuva.
Nesse primeiro momento observaremos em cada uma das 3 cidades a relação entre a temperatura média de uma semana e a temperatura da semana anterior a ela.
#dados anteriores filtrados para Campina Grande
tsa_campina = temp_sem_ant %>%
filter(cidade == "Campina Grande")
tsa_campina %>%
ggplot(aes(x = temp_media, y = temp_anterior)) +
geom_point(size = 3, alpha = .2, color = "blue") +
geom_hline(yintercept = mean(tsa_campina$temp_anterior), color = "gray") +
geom_vline(xintercept = mean(tsa_campina$temp_media), color = "gray") +
labs(
y = "Temperatura Média Anterior (C)",
x = "Temperatura Média Atual (C)",
title = "Correlação entre semanas atual e anterior em Campina Grande"
)
Ao observar as medições de Campina Grande notamos que a grande maioria dos pontos indica que quando a temperatura de uma semana anterior foi baixa a da semana atual também foi, e que o mesmo acontece a medida que as temperaturas das semanas anteriores aumentam. Uma exceção ocorre em apenas um dos valores, no qual a temperatura anterior teve um valor abaixo da média da faixa de valores enquanto a temperatura atual foi uma das 3 maiores registradas. De acordo com as linhas separam os pontos pelas médias, podemos ver que há uma predominância de valores em baixo a esquerda e em cima a direita, o que indica uma correlação positiva intensa que não se reverte mas é mais forte na porção onde as temperaturas são mais altas, por meio de um padrão linear. O coeficiente de correlação Pearson é aproximadamente 0.86, o que reforça as evidências anteriores.
#Coeficiente Pearson para Campina Grande
tsa_campina %>%
summarise(corr_pearson = cor(temp_media, temp_anterior, method = "pearson")) %>%
pull(corr_pearson)
## [1] 0.8588985
#dados anteriores filtrados para João Pessoa
tsa_jpessoa = temp_sem_ant %>%
filter(cidade == "João Pessoa")
tsa_jpessoa %>%
ggplot(aes(x = temp_media, y = temp_anterior)) +
geom_point(size = 3, alpha = .2, color = "darkgreen") +
geom_hline(yintercept = mean(tsa_jpessoa$temp_anterior), color = "gray") +
geom_vline(xintercept = mean(tsa_jpessoa$temp_media), color = "gray") +
labs(
y = "Temperatura Média Anterior (C)",
x = "Temperatura Média Atual (C)",
title = "Correlação entre semanas atual e anterior em João Pessoa"
)
Os pontos para João Pessoa mostram um cenário parecido com o de Campina Grande, indicando uma correlação linear positiva forte que não muda de sinal e também com um único valor que se distancia mais claramente da tendência de subida, onde a temperatura anterior é uma das mais baixas registradas enquanto a temperatura atual fica na metade da faixa de valores. A diferença aqui é que os pontos em geral parecem um pouco mais dispersos do que no cenário anterior, principalmente na porção onde as temperaturas são mais baixas. O coeficiente de correlação Pearson é aproximadamente 0.82, e ajuda a validar a conclusão desse cenário.
#Coeficiente Pearson para João Pessoa
tsa_jpessoa %>%
summarise(corr_pearson = cor(temp_media, temp_anterior, method = "pearson")) %>%
pull(corr_pearson)
## [1] 0.8344111
#dados anteriores filtrados para Patos
tsa_patos = temp_sem_ant %>%
filter(cidade == "Patos")
tsa_patos %>%
ggplot(aes(x = temp_media, y = temp_anterior)) +
geom_point(size = 3, alpha = .2, color = "red") +
geom_hline(yintercept = mean(tsa_patos$temp_anterior), color = "gray") +
geom_vline(xintercept = mean(tsa_patos$temp_media), color = "gray") +
labs(
y = "Temperatura Média Anterior (C)",
x = "Temperatura Média Atual (C)",
title = "Correlação entre semanas atual e anterior em Patos"
)
Para Patos temos uma relação semelhante com a das 2 cidades anteriores, que é de uma correlação linear positiva forte que não muda, mas sem valores que apresentam uma saída muito aparente da tendência de subida. Novamente a diferença aqui é que os pontos em geral parecem mais dispersos do que para Campina Grande, principalmente na porção onde as temperaturas são mais baixas, como ocorre para João Pessoa. O coeficiente de correlação Pearson é aproximadamente 0.82, e ajuda a validar esta conclusão.
#Coeficiente Pearson para Patos
tsa_patos %>%
summarise(corr_pearson = cor(temp_media, temp_anterior, method = "pearson")) %>%
pull(corr_pearson)
## [1] 0.8165758
Nessa segunda parte da análise observaremos em cada uma das 3 cidades a relação entre a temperatura média de uma semana e precipitação da chuva em milímetros.
#chuva e temperaturas médias
chuva_temp = clima %>%
select(cidade, semana, temp_media, chuva) %>%
filter(!is.na(temp_media), !is.na(chuva), chuva > 0) %>%
group_by(cidade)
#dados anteriores filtrados para Campina Grande
ct_campina = chuva_temp %>%
filter(cidade == "Campina Grande")
ct_campina %>%
ggplot(aes(x = temp_media, y = chuva)) +
geom_point(size = 3, alpha = .2, color = "blue") +
labs(
y = "Precipitação da chuva (mm)",
x = "Temperatura Média (C)",
title = "Correlação temperatura média e chuva em Campina Grande"
)
Percebemos que a distribuição das medições de chuva possui muitos valores baixos e alguns pontos extremos, o que dificulta a visualização algum padrão que possa estar presente. Para lidar com esse problema é presciso observar o eixo dos valores de chuva por meio de uma escala logarítmica.
#dados anteriores filtrados para Campina Grande
ct_campina = chuva_temp %>%
filter(cidade == "Campina Grande")
ct_campina %>%
ggplot(aes(x = temp_media, y = chuva)) +
geom_point(size = 3, alpha = .2, color = "blue") +
geom_hline(yintercept = mean(ct_campina$chuva), color = "gray") +
geom_vline(xintercept = mean(ct_campina$temp_media), color = "gray") +
scale_y_log10() +
labs(
y = "Precipitação da chuva (mm)",
x = "Temperatura Média (C)",
title = "Correlação temperatura média e chuva em Campina Grande"
)
Agora é possível compreender melhor a distribuição dos valores de chuva para Campina Grande ao longo da faixa. Dividindo os pontos com linhas que os separam pelas médias, notamos uma leve predominância de valores em cima à esquerda e em baixo na direita, aparentando uma leve correlação negativa entre chuva e temperatura. Os valores extremos se concentram onde a temperatura é mais alta e as chuvas são mais fracas. O coeficiente de correlação Pearson é aproximadamente -0.34 reforçando essa suposição.
#Coeficiente Pearson para Campina Grande
ct_campina %>%
summarise(corr_pearson = cor(temp_media, chuva, method = "pearson")) %>%
pull(corr_pearson)
## [1] -0.3385436
#dados anteriores filtrados para João Pessoa
ct_jpessoa = chuva_temp %>%
filter(cidade == "João Pessoa")
ct_jpessoa %>%
ggplot(aes(x = temp_media, y = chuva)) +
geom_point(size = 3, alpha = .2, color = "darkgreen") +
geom_hline(yintercept = mean(ct_jpessoa$chuva), color = "gray") +
geom_vline(xintercept = mean(ct_jpessoa$temp_media), color = "gray") +
scale_y_log10() +
labs(
y = "Precipitação da chuva (mm)",
x = "Temperatura Média (C)",
title = "Correlação temperatura média e chuva em João Pessoa"
)
Já sabendo como tipicamente se apresenta a distribuição de chuvas, partimos de começo para uma visualização em escala logarítmica para facilitar a identificação de padrões nas medições de João Pessoa. Comparando com o que vimos nos dados de Campina Grande, temos para João Pessoa uma distribuição de valores que indica uma diminuição mais perceptível da chuva à medida que a temperatura aumenta. Os valores extremos são predominantes em cima a esquerda em embaixo na direita, caracterizando também uma correlação fraca e negativa. O coeficiente de correlação Pearson é aproximadamente -0.41 e reforça essa suposição.
#Coeficiente Pearson para João Pessoa
ct_jpessoa %>%
summarise(corr_pearson = cor(temp_media, chuva, method = "pearson")) %>%
pull(corr_pearson)
## [1] -0.4235738
#dados anteriores filtrados para Patos
ct_patos = chuva_temp %>%
filter(cidade == "Patos")
ct_patos %>%
ggplot(aes(x = temp_media, y = chuva)) +
geom_point(size = 3, alpha = .2, color = "red") +
geom_hline(yintercept = mean(ct_patos$chuva), color = "gray") +
geom_vline(xintercept = mean(ct_patos$temp_media), color = "gray") +
scale_y_log10() +
labs(
y = "Precipitação da chuva (mm)",
x = "Temperatura Média (C)",
title = "Correlação temperatura média e chuva em Patos"
)
Novamente utilizando visualização em escala logarítmica, ao comparar os dados de Patos com os das outras cidades notamos uma grande diferença, pois não conseguimos identificar nenhum tipo de padrão e existem valores extremos espalhados por várias regiões. Se há alguma correlação é muito fraca, quase imperceptível à primeira vista, não é possível identificar sinal de correlação. O coeficiente de correlação Pearson é aproximadamente -0.09, indicando uma correlação bastante fraca.
#Coeficiente Pearson para Patos
ct_patos %>%
summarise(corr_pearson = cor(temp_media, chuva, method = "pearson")) %>%
pull(corr_pearson)
## [1] -0.09370906
#dados anteriores filtrados para Patos
ct_patos = chuva_temp %>%
filter(cidade == "Patos") %>%
mutate(chuva_rank = rank(chuva),
temp_rank = rank(temp_media))
ct_patos %>%
ggplot(aes(x = temp_rank, y = chuva_rank)) +
geom_point(size = 3, alpha = .2, color = "red") +
geom_hline(yintercept = mean(ct_patos$chuva_rank), color = "gray") +
geom_vline(xintercept = mean(ct_patos$temp_rank), color = "gray") +
labs(
y = "Precipitação (mm)",
x = "Temperatura Média (C)",
title = "Correlação temperatura média e chuva em Patos"
)
Nem mesmo ao ranquear os valores de chuva e temperatura de Patos podemos notar alguma relação entre elas, na verdade o resultado dessa transformação mostra um gráfico que parece indicar menos correlação ainda. Isso é reforçado pelos coeficientes de Pearson, Spearman e Kendall na nova visualização, os quais indicam haver uma correlação fraca entre esses 2 valores. Os valores dos coeficientes pare esse cenário são respectivamente 0.34, 0.4 e 0.27.
#Coeficientes para Patos
coefs = ct_patos %>%
summarise(
corr_pearson = cor(temp_media, chuva, method = "pearson"),
corr_spearman = cor(temp_media, chuva, method = "spearman"),
corr_kendall = cor(temp_media, chuva, method = "kendall"))