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.

Temperatura anterior e temperatura atual

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

Temperatura e chuva

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"))