library(tidyverse)
library(scales)
library(zoo)
library(ggplot2)Treino de Triangulação de dados climáticos e infecções respiratórias
Conteúdo
- Ciclos
- for
- while
- Condições
- if
- ifelse
- case when
- funções
- Correlações
- Defasagem
- Correlações defasadas
Desafio para próxima aula
- Objetivo:
- Criar uma função que receba os seguintes parâmetros: base de dados, nomes das variáveis.
- Resultado:
- Imprimir uma matriz de correlações.
Pacotes
Base de dados
set.seed(123) # Para reprodutibilidade
# Criando a base de dados fictícia
dados <- data.frame(
semana = 1:52,
IRA = round(runif(52, 50, 200),0),
Pop = round(runif(52, 200, 1000),0),
Temp_min = round(runif(52, -5, 15), 1),
Temp_max = round(runif(52, 10, 30), 1),
Humidade = round(runif(52, 30, 90), 1)
)
# Visualizando as primeiras linhas da base de dados
dados[2:5,-1]=NA # Colocando NA nas linhas 2 a 5 Verificando dados Omissos
head(dados,2) semana IRA Pop Temp_min Temp_max Humidade
1 1 93 839 4.7 21.4 40.2
2 2 NA NA NA NA NA
paste0("Total de NA = " ,sum(is.na(dados)))[1] "Total de NA = 20"
paste0("Total de NA (IRA) é " ,sum(is.na(dados$IRA)))[1] "Total de NA (IRA) é 4"
Operações condicionais (if e if else)
if (condição) { expressão}
if (condição) { expressão caso verdadeiro} else { expressão caso falso}
ifelse (condição , expressão caso verdadeiro, expressão caso falso)
dados=dados %>% mutate(Estacao= ifelse(semana<26,"verao","inverno"))
dados %>%
group_by(Estacao) %>%
summarise(Taxa=sum(IRA, na.rm = T)/sum(Pop,na.rm = T)) %>%
mutate(Taxa_per=percent(Taxa))# A tibble: 2 × 3
Estacao Taxa Taxa_per
<chr> <dbl> <chr>
1 inverno 0.194 19.4%
2 verao 0.211 21.1%
Condições (while)
while (condição) { expressão}
i=1
Media_Temp_min=median(dados$Temp_min, na.rm = T)
while(i<=length(dados$Temp_max)){
if(is.na(dados[i,4])){
dados[i,4] = Media_Temp_min
}
i=i+1
}
head(dados,3) semana IRA Pop Temp_min Temp_max Humidade Estacao
1 1 93 839 4.7 21.4 40.2 verao
2 2 NA NA 3.5 NA NA verao
3 3 NA NA 3.5 NA NA verao
Ciclos (for)
for (indice in vector) { expressão}
# Calculando a média dos valores não NA da variável IRA
media_IRA <- mean(dados$IRA, na.rm = TRUE)
# Substituindo NA pela média usando if
for (i in 1:length(dados$IRA)) {
if (is.na(dados$IRA[i])) {
dados$IRA[i] <- media_IRA
} }
head(dados,3) semana IRA Pop Temp_min Temp_max Humidade Estacao
1 1 93.0000 839 4.7 21.4 40.2 verao
2 2 123.3125 NA 3.5 NA NA verao
3 3 123.3125 NA 3.5 NA NA verao
Ciclos (case when)
case_when {
condição 1 ~ expressão 1,
condição 2 ~ expressão 2,
condição 3 ~ expressão 3,
.default = expressão caso contrário
}
dados=dados %>% mutate(
Estacao=case_when(
Estacao == "verao" ~ "Verão",
.default = "Inverno") )
head(dados, 3) semana IRA Pop Temp_min Temp_max Humidade Estacao
1 1 93.0000 839 4.7 21.4 40.2 Verão
2 2 123.3125 NA 3.5 NA NA Verão
3 3 123.3125 NA 3.5 NA NA Verão
tail(dados,3) semana IRA Pop Temp_min Temp_max Humidade Estacao
50 50 179 466 -0.1 27.6 54.3 Inverno
51 51 57 591 -2.8 17.3 58.3 Inverno
52 52 116 964 2.8 15.8 82.1 Inverno
Funções
function( argumentos ou listas ) { expressão1
expressão2
return(value)
}
substituir_NA_por_media <- function(data, variavel) {
# Calculando a média dos valores não NA da variável
media_variavel <- mean(data[[variavel]], na.rm = TRUE)
# Substituindo NA pela média usando if
for (i in 1:length(data[[variavel]])) {
if (is.na(data[[variavel]][i])) {
data[[variavel]][i] <- media_variavel
}
}
return(data)
}
Base=substituir_NA_por_media(dados, "Pop")
Base=substituir_NA_por_media(Base, "Temp_min")
Base=substituir_NA_por_media(Base, "Temp_max")
Base=substituir_NA_por_media(Base, "Humidade")Visualização da nova base
head(Base) semana IRA Pop Temp_min Temp_max Humidade Estacao
1 1 93.0000 839 4.7 21.40 40.20000 Verão
2 2 123.3125 612 3.5 20.85 61.03542 Verão
3 3 123.3125 612 3.5 20.85 61.03542 Verão
4 4 123.3125 612 3.5 20.85 61.03542 Verão
5 5 123.3125 612 3.5 20.85 61.03542 Verão
6 6 57.0000 803 -2.1 17.10 70.50000 Verão
# Se a opção é eliminar
# Base = na.omit(Base)
sum(is.na(Base))[1] 0
Correlações
cor(dados$IRA,dados$Temp_min, method = "pearson")[1] -0.01733183
cor(dados$IRA,dados$Temp_min, method = "spearman")[1] 0.005617498
plot(dados$IRA,dados$Temp_min, xlab="Incidência de IRA", ylab="Temperatura mínima (ºC)", main="Investigando uma possivel correlação")Suavização
dados=dados %>% mutate(
IRA_M1=rollmean(IRA, k=1, fill=NA, align='center'),
IRA_M2=rollmean(IRA, k=2, fill=NA, align='center'),
IRA_M3=rollmean(IRA, k=3, fill=NA, align='center'))
dados %>%
ggplot()+
geom_line(aes(x=semana, y=IRA, col="Original"))+
geom_line(aes(x=semana, y=IRA_M1, col="lag 1"), lty=2)+
geom_line(aes(x=semana, y=IRA_M2, col="lag 2"), lty=2)+
geom_line(aes(x=semana, y=IRA_M3, col="lag 3"), lty=2)+
labs(x="Semana epidemiológica",y="casos de IRA",col="Defasagem")Warning: Removed 1 row containing missing values or values outside the scale range
(`geom_line()`).
Warning: Removed 2 rows containing missing values or values outside the scale range
(`geom_line()`).
Defasagem
Dados passados em atraso temporal de 2 semanas é chamado defasagem de ordem 2.
dados$Temp_min_lag1=lag(dados$Temp_min,1)
dados$Temp_min_lag2=lag(dados$Temp_min,2)
dados$Temp_min_lag3=lag(dados$Temp_min,3)
head(dados %>% select(Temp_min,Temp_min_lag1,Temp_min_lag2,Temp_min_lag3)) Temp_min Temp_min_lag1 Temp_min_lag2 Temp_min_lag3
1 4.7 NA NA NA
2 3.5 4.7 NA NA
3 3.5 3.5 4.7 NA
4 3.5 3.5 3.5 4.7
5 3.5 3.5 3.5 3.5
6 -2.1 3.5 3.5 3.5
Correlações defasadas
dados=na.omit(dados)
cor(dados$IRA,dados$Temp_min_lag1)[1] 0.0657845
cor(dados$IRA,dados$Temp_min_lag2)[1] 0.08559559
cor(dados$IRA,dados$Temp_min_lag3)[1] 0.1004605