dfClong=dfC %>% rename(C_pre_12_8=C_basal_temporada) %>% select(CODE,contains("_pre_")) %>% pivot_longer(-CODE) %>%
mutate(mesDia=str_replace(name,"C_pre_([0-9]+)_([0-9]+)","\\2-\\1")) %>%
separate(col = "mesDia",into = c("mes","dia"),sep = "-") %>%
mutate(mes=as.integer(mes),dia=as.integer(dia),ano=as.integer(ifelse(mes>=7,2022,2023))) %>%
mutate(Fecha=make_date(month = mes,day = dia, year=ano)) %>%
select(CODE,Fecha,Cortisol=value) %>% filter(complete.cases(.))%>%
group_by(CODE) %>% mutate(CortisolZ=scale(Cortisol)) %>% ungroup()
dfClong %>% head()
## # A tibble: 6 × 4
## CODE Fecha Cortisol CortisolZ[,1]
## <chr> <date> <dbl> <dbl>
## 1 COD1 2022-08-12 4.8 0.421
## 2 COD1 2022-08-18 3.99 -0.123
## 3 COD1 2022-08-26 3.23 -0.634
## 4 COD1 2022-08-30 4.3 0.0852
## 5 COD1 2022-09-07 5.6 0.958
## 6 COD1 2022-09-15 6.29 1.42
dfTlong=dfT %>% rename(T_pre_12_8=T_basal_temporada) %>% select(CODE,contains("_pre_")) %>% pivot_longer(-CODE) %>%
mutate(mesDia=str_replace(name,"T_pre_([0-9]+)_([0-9]+)","\\2-\\1")) %>%
separate(col = "mesDia",into = c("mes","dia"),sep = "-") %>%
mutate(mes=as.integer(mes),dia=as.integer(dia),ano=as.integer(ifelse(mes>=7,2022,2023))) %>%
mutate(Fecha=make_date(month = mes,day = dia, year=ano)) %>%
select(CODE,Fecha,Testosterona=value) %>% filter(complete.cases(.)) %>%
group_by(CODE) %>% mutate(TestosteronaZ=scale(Testosterona)) %>% ungroup()
dfTlong %>% head()
## # A tibble: 6 × 4
## CODE Fecha Testosterona TestosteronaZ[,1]
## <chr> <date> <dbl> <dbl>
## 1 COD1 2022-08-12 298 1.66
## 2 COD1 2022-08-18 254 0.832
## 3 COD1 2022-08-26 277 1.26
## 4 COD1 2022-08-30 287 1.45
## 5 COD1 2022-09-07 267 1.08
## 6 COD1 2022-09-15 250 0.757
Vamos a Unir datos de entrenamientos donde tenemos referencias de distancias, etc, con los datos de T y C del mismo dÃa o primer dÃa posterior Hay muchos entrenamientos, antes de una toma de Cortisol o Testosterona, pero enlazamos con la más cercana en el tiempo posterior o en el mismo dia. Añadimos la restricción que la medición de hormona no puede hacerse más de 3 dÃas más tarde del entrenamiento para considerarse válida.
comp_date <- function(x, y) x <= y
comp_code <- function(x, y) x == y
dfGPS_CPosterior <- dfGPS %>%
fuzzy_left_join(dfClong %>% select(CODE,Fecha), by = c("Fecha" = "Fecha","CODE"="CODE"),
match_fun = list(comp_date, comp_code)) %>%
group_by(Fecha.x, CODE.x) %>%
filter(Fecha.y == min(Fecha.y)) %>%
ungroup() %>%
rename(CODE=CODE.x,Fecha=Fecha.x,Fecha_C=Fecha.y) %>% select(-CODE.y) %>%
select(CODE,Fecha,Fecha_C,everything())
dfGPS_TPosterior <- dfGPS %>%
fuzzy_left_join(dfTlong %>% select(CODE,Fecha), by = c("Fecha" = "Fecha","CODE"="CODE"),
match_fun = list(comp_date, comp_code)) %>%
group_by(Fecha.x, CODE.x) %>%
filter(Fecha.y == min(Fecha.y)) %>%
ungroup() %>%
rename(CODE=CODE.x,Fecha=Fecha.x,Fecha_T=Fecha.y) %>% select(-CODE.y) %>%
select(CODE,Fecha,Fecha_T,everything())
dfGPS_CPosterior_apareado=dfGPS_CPosterior %>% select(CODE,Fecha,Fecha_C) %>%
group_by(CODE,Fecha_C) %>% summarise(Fecha=max(Fecha)) %>%
ungroup() %>%
mutate(tiempoC=as.integer(difftime(Fecha_C,Fecha,units = "days"))) %>%
filter(tiempoC<=3) %>% select(CODE,Fecha,Fecha_C,everything())
## `summarise()` has grouped output by 'CODE'. You can override using the
## `.groups` argument.
dfGPS_TPosterior_apareado=dfGPS_TPosterior %>% select(CODE,Fecha,Fecha_T) %>%
group_by(CODE,Fecha_T) %>% summarise(Fecha=max(Fecha)) %>%
ungroup() %>%
mutate(tiempoT=as.integer(difftime(Fecha_T,Fecha,units = "days"))) %>%
filter(tiempoT<=3) %>% select(CODE,Fecha,Fecha_T,everything())
## `summarise()` has grouped output by 'CODE'. You can override using the
## `.groups` argument.
dfGPS_CTPosterior_apareado=dfGPS_CPosterior_apareado %>% left_join(dfGPS_TPosterior_apareado)
## Joining with `by = join_by(CODE, Fecha)`
Observese que cada fecha_C (medición de Cortisol) o fecha_T viene precedido de múltiples entrenamientos (Fecha):
dfGPS_CPosterior %>% select(CODE:Distance)
## # A tibble: 3,097 × 6
## CODE Fecha Fecha_C Repeticion Duration Distance
## <chr> <date> <date> <int> <dbl> <dbl>
## 1 COD10 2022-07-04 2022-08-12 1 91 7925
## 2 COD10 2022-07-05 2022-08-12 0 98 5435
## 3 COD10 2022-07-05 2022-08-12 1 69 4755
## 4 COD10 2022-07-06 2022-08-12 0 108 9169
## 5 COD10 2022-07-07 2022-08-12 0 80 3735
## 6 COD10 2022-07-07 2022-08-12 1 62 3551
## 7 COD10 2022-07-08 2022-08-12 0 92 5755
## 8 COD10 2022-07-08 2022-08-12 1 62 3707
## 9 COD10 2022-07-09 2022-08-12 0 71 5995
## 10 COD10 2022-07-11 2022-08-12 0 108 8543
## # … with 3,087 more rows
Al limitarlo solo al anterior, se reducen muchos los entrenamientos disponibles:
dfGPS_CTPosterior_apareado %>% select(CODE,Fecha,Fecha_C,Fecha_T)
## # A tibble: 560 × 4
## CODE Fecha Fecha_C Fecha_T
## <chr> <date> <date> <date>
## 1 COD10 2022-08-11 2022-08-12 2022-08-12
## 2 COD10 2022-08-18 2022-08-18 2022-08-18
## 3 COD10 2022-08-26 2022-08-26 2022-08-26
## 4 COD10 2022-08-30 2022-08-30 2022-08-30
## 5 COD10 2022-09-07 2022-09-07 2022-09-07
## 6 COD10 2022-09-15 2022-09-15 2022-09-15
## 7 COD10 2022-09-18 2022-09-18 2022-09-18
## 8 COD10 2022-09-30 2022-09-30 2022-09-30
## 9 COD10 2022-10-05 2022-10-05 2022-10-05
## 10 COD10 2022-10-08 2022-10-08 2022-10-08
## # … with 550 more rows
Esas son los dos criterios extremos para unir ambas bases de datos. Tal vez algo intermedio sea conveniente como agregar TODOS los entrenamientos de los dos o tres dias anteriores a la medición de Cortisol y ahà sumar/promediar distancias, promediar/maximo velocidades,… Hay que saber cual es la operación correcta para agregar varios entrenamientos en uno (promedio, suma, maximo…)
En esta versión pequeña de la tabla vamos a explorar la relación entre las variables del entrenamiento y las hormonas, sin tener en cuenta la fecha.
dfWide=dfGPS %>% inner_join(dfGPS_CTPosterior_apareado) %>%
left_join(dfClong %>% rename(Fecha_C=Fecha)) %>%
left_join(dfTlong %>% rename(Fecha_T=Fecha)) %>%
select(CODE,Fecha,Fecha_C,Fecha_T,Cortisol,Testosterona,,CortisolZ,TestosteronaZ,everything())
## Joining with `by = join_by(CODE, Fecha)`
## Joining with `by = join_by(CODE, Fecha_C)`
## Joining with `by = join_by(CODE, Fecha_T)`
dfLong=dfWide %>% select(CODE,Fecha,Cortisol,Testosterona,CortisolZ,TestosteronaZ,Duration:HMLD) %>%
pivot_longer(-c(CODE:TestosteronaZ))
Vamos a por el colesterol
dfLong %>% ggplot(aes(y=Cortisol,x=value))+
geom_point(aes(color=CODE),alpha=0.5,size=0.5)+
geom_smooth()+
facet_wrap(~name, scales = "free_x")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
Y ahora a por la Testosterona:
dfLong %>% ggplot(aes(y=Testosterona,x=value))+
geom_point(aes(color=CODE),alpha=0.5,size=0.5)+
geom_smooth()+
facet_wrap(~name, scales = "free_x")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
dfLong %>% ggplot(aes(y=CortisolZ,x=value))+
geom_point(aes(color=CODE),alpha=0.5,size=0.5)+
geom_smooth()+
facet_wrap(~name, scales = "free_x")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'
dfLong %>% ggplot(aes(y=TestosteronaZ,x=value))+
geom_point(aes(color=CODE),alpha=0.5,size=0.5)+
geom_smooth()+
facet_wrap(~name, scales = "free_x")
## `geom_smooth()` using method = 'loess' and formula = 'y ~ x'