Correlatos emocionales de la actividad física

# Algunos paquetes necesarios para el documentos.
invisible({capture.output({

require(tidyverse)
library(tibble)
require(readxl)
library(ggeasy)
library(cowplot)
library(report)
library(easystats)
library(writexl)
require(rstatix)
require(gridExtra)
require(gifski)
require(ggpubr)
library(smplot2)
library(afex)
library(emmeans)
library(magick)
library(lme4)
library(Rmisc) 
library(PupillometryR)
library(osfr)
library("httr")
require(purrr)
library(zoo)
library(details)

})})

1. Introducción

Este documento lo utilizaremos para la interpretación de los datos obtenidos en la “Práctica 2: Correlatos emocionales de la actividad física” de la asignatura de Análisis Comportamental y Desarrollo Motor (2023) del grado de Ciencias de la acitivad física y el deporte de la Universidad de Granada. El documento es un ejemplo de un breve preocesamiento de datos en RStudio, realización de figuras y análisis estadístico.

Lo que concerne a la práctica, el objetivo era de evaluar la respuesta emocional de dos ejercicios físicos de diferentes intensidades y de intentar establecer si alguna variable predictora (por ejemplo, el estado de condición física) condiciona esta respuesta.

Breve recordatorio de lo que hizo en la práctica y de los datos recogidos: Protocolo

Las escalas que utilizamos fueron:
PANAS: Positive and Negative Affect Schedule (PANAS-SF). Watson, D., Clark, L. A., & Tellegen, A. 1988.
FAS: Felt Arousal Scale. Svebak & Murgatroyd, 1985
FS: Feeling Scale. Rejeski et al., 1987
RPE: Rate of perceived exertion. Borg 1982

Los datos de la práctica están depositados en la plataforma OSF y podéis obtenerlo aquí. Aquí se accede a ellos a traves del siguiente comando.

# Carga el archivo desde OSF

invisible({capture.output({

# Todas variables

url <- 'https://osf.io/5qyvt//?action=download' 
filename <- 'ACDM.xlsx'
GET(url, write_disk(filename, overwrite = TRUE)) 
Eva <-readxl::read_xlsx(filename, sheet= "Evaluación") 
PANAS <-readxl::read_xlsx(filename, sheet= "PANAS") 
IFIS <-readxl::read_xlsx(filename, sheet= "IFIS") 
EAFD <-readxl::read_xlsx(filename, sheet= "EAFD") 

})})

Aquí podemos ver un resumen de una de las bases de datos.

knitr::kable(head(Eva[, 1:10]), "pipe", caption = "Datos recogidos durante la práctica")
Datos recogidos durante la práctica
ID Sesion Grupo FS_PRE FAS_PRE FC_serie1 RPE_serie1 FS_serie1 FAS_serie1 FC_serie2
7 Baja 1r 1 3 183 6 4 3 192
3 Baja 1r 5 2 120 2 3 3 156
4 Baja 1r 5 3 164 5 4 4 172
5 Baja 1r 1 1 164 6 0 2 162
6 Baja 1r 4 1 120 2 3 2 150
1 Baja 1r 4 2 168 6 4 2 173

En este lenguaje de programación, para la realización de la mayoría de los análisis y figuras, necesitamos transformar el formato de la base de datos de un formato “amplio” a un formato “largo”.

# Cambiar a formato largo. Colapsamos cols de 4 as 23 (separadas por _). 
Eva_largo<- pivot_longer(Eva, cols =4:23, names_to = c("Escala", "Tiempo"),
                       names_sep = "_", values_to = "Valor", values_drop_na = TRUE) 


knitr::kable(head(Eva_largo[, 1:6]), "pipe", caption = "Datos recogidos durante la práctica en formato largo")
Datos recogidos durante la práctica en formato largo
ID Sesion Grupo Escala Tiempo Valor
7 Baja 1r FS PRE 1
7 Baja 1r FAS PRE 3
7 Baja 1r FC serie1 183
7 Baja 1r RPE serie1 6
7 Baja 1r FS serie1 4
7 Baja 1r FAS serie1 3
# Vamos a hacer algunas figuras para comprobar la distribución de los datos para cada sesión

# Normalice el tamaño del texto en todas las figuras. Lo utilizaremos para todas las figuras.
size = theme(
  title = element_text(size = 12),
  axis.text.x = element_text(size = 12),
  axis.title.y = element_text(size = 12),
  axis.title.x = element_text(size = 12))

2. Percepción del esfuerzo

Como recordatorio, el objetivo de la práctica era de hacer cada intervalo a una misma percepción del esfuerzo. Para la sesión de baja intensidad habíamos estblecido una sensación de ~5 dentro de la escala y para la sesión de alta intensidad una sensación de ~8.

# filtramos solo la escala RPE
RPE <-  filter(Eva_largo, Escala == "RPE")
# Fijar el orden de las series
RPE$Tiempo <- factor(RPE$Tiempo, levels=c("serie1", "serie2", "serie3", "serie4"))

# Calculamos algunos datos para añadirlos al gráfico  
sumrepdatRPE <- summarySE(RPE, measurevar = "Valor",
                       groupvars=c("Sesion", "Tiempo"))

RPErain <- ggplot(RPE, aes(x = Tiempo, y = Valor, fill = Sesion)) +
  geom_flat_violin(aes(fill = Sesion),position = position_nudge(x = .1, y = 0), adjust = 1.5, trim = FALSE, alpha = .5, colour = NA)+
  geom_point(aes(x = as.numeric(Tiempo)-.15, y = Valor, colour = Sesion),position = position_jitter(width = .05), size = .25, shape = 20)+
  geom_boxplot(aes(x = Tiempo, y = Valor, fill = Sesion),outlier.shape = NA, alpha = .5, width = .1, colour = "black")+
  geom_line(data = sumrepdatRPE, aes(x = Tiempo, y = Valor, group = Sesion, colour = Sesion), linetype = 3)+
  geom_point(data = sumrepdatRPE, aes(x = Tiempo, y = Valor, group = Sesion, colour = Sesion), shape = 18) +
  scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+
  sm_classic() +
  labs( y = "Escala de RPE (1-10)", x = element_blank(),
        title ="Distribución de la percepción del esfuerzo entre sesiones y a lo largo de la práctica",
        )+
  size+
  theme(legend.position = "right")


RPErain

Vemos como que aún nivel grupal, la mayoría de los corredores se encuentran dentro del rango esperado en ambas sesiones, hay algunos corredores que están fuera de este rango ya sea en la sesión de baja o alta intensidad. No obstante, podemos claramente observar que la precisión es mayor en la sesión de alta intensidad. Es más fácil situarse en en los extremos de la escala que en los valores intermedios.

Otro dato curioso que podemos observar es que la percepción del esfuerzo aumenta (al menos visualmente) con el paso de las series. Sin embargo, este no era el “objetivo” de práctica. El objetivo de la práctica era de mantener el mismo nivel de percepción del esfuerzo en todas las series, aunque esto era de esperar cuando no se tiene experiencia en el uso de la escala (y potencialmente con el tipo de ejercicio físico). Para mantener la misma sensación del esfuerzo durante todas las series, lo normal es adaptar la velocidad que se completa cada serie. Es decir, si es necesario habría que reducir la velocidad de cada intervalo para mantener la misma percepción del esfuerzo debido a la acumulación de fatiga. Por lo tanto, sería normal que una primera serie el ritmo sea más elevado porque no hay fatiga, pero a posteriori se reduzca para igualar la intensidad física con la percepción subjetiva.

Visualmente, hay diferencias entre las dos sesiones, pero a nivel estadístico? Este análisis nos sirve como medida de control, para saber si las dos activades realmente difieren a nivel de sensación subjetiva.

RPEmodel <- lmer(Valor ~ Sesion + Tiempo + Sesion : Tiempo + (1|ID), data = RPE)
car::Anova(RPEmodel, type=3)
## Analysis of Deviance Table (Type III Wald chisquare tests)
## 
## Response: Valor
##                  Chisq Df Pr(>Chisq)    
## (Intercept)   533.6432  1  < 2.2e-16 ***
## Sesion         32.9675  1  9.371e-09 ***
## Tiempo         98.7599  3  < 2.2e-16 ***
## Sesion:Tiempo   1.1553  3     0.7637    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Otro análisis estadístico 

# mixed(Valor ~ Sesion + Tiempo + Sesion : Tiempo + (1|ID), data = RPE)

Los resultados nos muestran que claramente hay un efecto de sesión (p< 9.371e-09 ), indicando que la sensación subjetiva de ambas sesiones son diferentes. También corrobora lo que hemos visto visualmente de que la RPE aumenta a lo largo del tiempo.


3. Frecuencia cardiaca

Se corresponde los valores subjetivos de la perpceción del esfuerzo con los datos fisilógicos (objetivos) de la frecuencia cardiaca? Debemos de esperar que la frecuencia cardiaca sea mayor en la sesión de alta intensidad que en la sesión de baja intensidad?

Como vimos en clase, los la escala original de borg 6-20 fue diseñada por su correlación de los valores con los datos de frecuencia cardiaca, aunque nosotros usamos la escala modificada de 1-10.

# Filtrar solo los valore sde Frecuencia cardiaca
FC <-  filter(Eva_largo, Escala == "FC")
# Fijar el orden
FC$Tiempo <- factor(FC$Tiempo, levels=c("serie1", "serie2", "serie3", "serie4"))

# Calculamos algunos datos para añadirlos al gráfico  
sumrepdatFC <- summarySE(FC, measurevar = "Valor",
                       groupvars=c("Sesion", "Tiempo"))

FCrain <- ggplot(FC, aes(x = Tiempo, y = Valor, fill = Sesion)) +
  geom_flat_violin(aes(fill = Sesion),position = position_nudge(x = .1, y = 0), adjust = 1.5, trim = FALSE, alpha = .5, colour = NA)+
  geom_point(aes(x = as.numeric(Tiempo)-.15, y = Valor, colour = Sesion),position = position_jitter(width = .05), size = .25, shape = 20)+
  geom_boxplot(aes(x = Tiempo, y = Valor, fill = Sesion),outlier.shape = NA, alpha = .5, width = .1, colour = "black")+
  geom_line(data = sumrepdatFC, aes(x = Tiempo, y = Valor, group = Sesion, colour = Sesion), linetype = 3)+
  geom_point(data = sumrepdatFC, aes(x = Tiempo, y = Valor, group = Sesion, colour = Sesion), shape = 18) +
  scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+
  sm_classic() +
  labs( y = "Frecuencia Cardica (ppm)", x = element_blank(),
        title ="Distribución de la frecuencia cardica entre sesion y a lo largo del tiempo"
        )+
  size+
  theme(legend.position = "right")


FCrain

Podemos ver que en valore medios, la frecuencia cardiaca es mayor en la sesión de alta intensidad que en la sesión de baja de intensidad, aunque no parece que sea una diferencia muy clara. De estos datos podemos comentar algunos aspectos claves:

  1. Sin conocer los valores basales y máximos de cada persona es complicado saber si está ejercitando a la intensidad adecuada dado el objetivo de la sesión. Por eso, la dispersión de valores es mayor.

  2. Medirse pulso carotídeo (en el cuello) o el pulso radial (en la muñeca), no es de las formas mas fiables para obtener la frecuencia cardiaca. Vemos como hay valores altos poco plausibles en la sesión de baja intensidad (salvo estado de forma muy malo 😄) y valores poco comunes en la sesión de alta intensidad (>210 ppm).

  3. En la sesión de alta intensidad, parece que en la última serie aumenta aún más la frecuencia (efecto fin de carrera).

Veamos lo que sucede a nivel estadístico…

FCmodel <- lmer(Valor ~ Sesion + Tiempo + Sesion : Tiempo + (1|ID), data = FC)
car::Anova(FCmodel, type=3)
## Analysis of Deviance Table (Type III Wald chisquare tests)
## 
## Response: Valor
##                   Chisq Df Pr(>Chisq)    
## (Intercept)   1448.7663  1  < 2.2e-16 ***
## Sesion           3.5318  1     0.0602 .  
## Tiempo          68.5098  3  8.898e-15 ***
## Sesion:Tiempo    1.8892  3     0.5957    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

No parece que haya diferencias a nivel de frecuencia cardiaca entre las dos sesiones (Sesion: p= 0.0602), pero eso no es lo que nosotros esperabamos Entonces realizaremos otro análisis para intentar probar nuestra hipótesis inicial.

# Estadístico 

mixed(Valor ~ Sesion + Tiempo + Sesion : Tiempo + (1|ID), data = FC)
## Mixed Model Anova Table (Type 3 tests, S-method)
## 
## Model: Valor ~ Sesion + Tiempo + Sesion:Tiempo + (1 | ID)
## Data: FC
##          Effect        df         F p.value
## 1        Sesion  1, 55.00    4.83 *    .032
## 2        Tiempo 3, 165.00 38.04 ***   <.001
## 3 Sesion:Tiempo 3, 165.00      0.63    .597
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1

En cambio, con este último análisis si obtenemos el efecto esperado (Sesión: p= 0.32).

Podemos ver que según el tipo de análisis que realicemos, podemos ver que hay un diferencia entre las dos condiciones. Es un problema de los análisis estadísticos, la gran flexibilidad que tenemos de aplicar diferentes técnicas o procesamientos de datos para apoyar nuestras creencias.

De todas formas, los datos de la frecuencia cardiaca no son esclarecedores, ya que estamos comparando entre grupos de personas diferentes y no sabemos cuales son los rangos normales de cada personas.

4. Feeling Scale

Ahora, veremos como se comporta la respuesta emocional al ejercicio medida con la Feeling Scale.

# Filtramos solo la escala FS
FS <-  filter(Eva_largo, Escala == "FS")
FS$Tiempo <- factor(FS$Tiempo, levels=c("PRE","serie1", "serie2", "serie3", "serie4", "POST"))


# Calculamos algunos datos para añadirlos al gráfico  
sumrepdatFS <- summarySE(FS, measurevar = "Valor",
                       groupvars=c("Sesion", "Tiempo"))

FSrain <- ggplot(FS, aes(x = Tiempo, y = Valor, fill = Sesion)) +
  geom_flat_violin(aes(fill = Sesion),position = position_nudge(x = .1, y = 0), adjust = 1.5, trim = FALSE, alpha = .5, colour = NA)+
  geom_point(aes(x = as.numeric(Tiempo)-.15, y = Valor, colour = Sesion),position = position_jitter(width = .05), size = .25, shape = 20)+
  geom_boxplot(aes(x = Tiempo, y = Valor, fill = Sesion),outlier.shape = NA, alpha = .5, width = .1, colour = "black")+
  geom_line(data = sumrepdatFS, aes(x = Tiempo, y = Valor, group = Sesion, colour = Sesion), linetype = 3)+
  geom_point(data = sumrepdatFS, aes(x = Tiempo, y = Valor, group = Sesion, colour = Sesion), shape = 18) +
  scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+
  sm_classic() +
  labs( y = "Estado de ánimo", x = element_blank(),
        title ="Distribución del estado emocional entre sesiones y dentro de la sesión",
        )+
  size+
  theme(legend.position = "right")


FSrain

Visualmente, podemos ver como los valores en reposo (pre y post sesión) son similares en ambas sesiones. Por el contrario, podemos observar como el estado emocional es menos positivo en la sesión de alta intensidad que en la sesión de baja intensidad. Además, vemos que duante el ejercicio, la respuesta emocional se vuelve cada vez más negativa con el paso de las series, aunque la reducción es similar en ambas sesiones.

Hay diferencias a nivel estadístico?

FSmodel <- lmer(Valor ~ Sesion + Tiempo + Sesion : Tiempo + (1|ID), data = FS)

# Estadístico 
car::Anova(FSmodel, type=3)
## Analysis of Deviance Table (Type III Wald chisquare tests)
## 
## Response: Valor
##                  Chisq Df Pr(>Chisq)    
## (Intercept)    18.9094  1  1.371e-05 ***
## Sesion          0.7686  1    0.38066    
## Tiempo        101.4152  5  < 2.2e-16 ***
## Sesion:Tiempo  11.3848  5    0.04426 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mixed(Valor ~ Sesion + Tiempo + Sesion : Tiempo + (1|ID), data = FS)
## Mixed Model Anova Table (Type 3 tests, S-method)
## 
## Model: Valor ~ Sesion + Tiempo + Sesion:Tiempo + (1 | ID)
## Data: FS
##          Effect        df         F p.value
## 1        Sesion  1, 55.00   8.50 **    .005
## 2        Tiempo 5, 275.00 25.74 ***   <.001
## 3 Sesion:Tiempo 5, 275.00    2.28 *    .047
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1

No, pero si.. Al igual que hemos visto con anterioridad, depende un poco de como analicemos los datos.

4.1 FS en función del estado de forma reportado.

Ahora vamos a ver la respuesta emocional es diferente según el estado de forma. Primero, tenemos que transformar los valores de la escala IFIS en categorias. Puntuaciones entre 0-5 es muy mala, 5-10 es mala, 10-15 aceptable, 15-20, buena, y mayor de 20 muy buena.

# Convertimos en categórica
IFIS <- within(IFIS, {   
  Cond <- NA # para empezar la variable 
  Cond[Global <= 5] <- "muy mala"
  Cond[Global > 5 & Global <= 10] <- "mala"
  Cond[Global > 10 & Global <= 15] <- "aceptable"
  Cond[Global > 15 & Global <= 20] <- "buena"
  Cond[Global > 20] <- "muy buena"
   } )
IFIS$Cond <- factor(IFIS$Cond, levels = c("muy mala", "mala", "aceptable", "buena", "muy buena"))

Los datos están en una variable diferente, así que tenemos que añadir esta variable a nuestra base de datos con los demás valores.

# Añadimos los datos de la escala a nuestra base de datos para el análisis de la covarianza
Eva_FS <- right_join(FS, IFIS, by="ID")

knitr::kable(head(Eva_FS[, 1:8]), "pipe", caption = "Base de datos con la condición física. Con respecto a la tabla anterior, ahora tenemos la columna de Cond, que refiere al estado de condición física reportado con la IFIS")
Base de datos con la condición física. Con respecto a la tabla anterior, ahora tenemos la columna de Cond, que refiere al estado de condición física reportado con la IFIS
ID Sesion Grupo Escala Tiempo Valor Global Cond
3 Baja 1r FS PRE 5 15 aceptable
3 Baja 1r FS serie1 3 15 aceptable
3 Baja 1r FS serie2 1 15 aceptable
3 Baja 1r FS serie3 0 15 aceptable
3 Baja 1r FS serie4 -1 15 aceptable
3 Baja 1r FS POST 0 15 aceptable

Como es la respuesta a emocional si la observamos según los distintos grupos de condición física reportada?

# Calcule la media de los participantes para cada tiempo, estado de forma y sesion para los datos de FS 
FS_group <- Eva_FS %>% 
  group_by(Sesion, Tiempo, Cond) %>% 
  summarise_at(vars(Valor),           
               list(emocion = mean))  


# La figura

FS_group_figu<-ggplot(FS_group, aes(x = Tiempo, y = emocion))
FS_group_figu <- FS_group_figu + geom_line(aes(color = Sesion, group = Sesion)) + geom_point()+ size


# Dividir en paneles por condición física
FS_group_figu <- FS_group_figu + facet_grid(Cond ~ Sesion) 
FS_group_figu+scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+ size

Sin embargo, que sucede si vemos los datos a nivel individual?

FSCond<-ggplot(Eva_FS, aes(x = Tiempo, y = Valor))
FSCond <- FSCond + geom_line(aes(color = Sesion, group = ID)) + geom_point()


# Divide panels for conditions (rows) and participants (columns)
FSCond <- FSCond + facet_grid(Cond ~ Sesion) 
FSCond+scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+ size

Cuando vemos datos por grupos a nivel global, corremos el riesgo de no saber si los distintos grupos están igualmente representados. Podemos ver que los “grupos” no están balanceados, es decir, no hay el mismo numero de personas para los tres niveles de condición física detectados.

Finalmente, que sucede si análizamos a nivel estadístico estos datos?

mixed(Valor ~ Sesion + Tiempo + Cond + Sesion : Tiempo + (1|ID), data = Eva_FS)
## Mixed Model Anova Table (Type 3 tests, S-method)
## 
## Model: Valor ~ Sesion + Tiempo + Cond + Sesion:Tiempo + (1 | ID)
## Data: Eva_FS
##          Effect        df         F p.value
## 1        Sesion  1, 41.14  10.55 **    .002
## 2        Tiempo 5, 216.03 29.47 ***   <.001
## 3          Cond  2, 52.49    4.37 *    .017
## 4 Sesion:Tiempo 5, 216.03  4.49 ***   <.001
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1

En cualquier caso vemos que es posible, pero no se pueden obtener una respuesta exclarecedora. Dependerá también del tipo de análisis. Por ejemplo, podríamos haber analizados los datos de la condición física como una variable continua y no como una categórica.

5. Feeling arousal scale (nivel de excitación/activación)

Por “excitado” nos referimos a lo “excitado” que te sientes. Puede experimentar una gran excitación de varias maneras, por ejemplo como excitación, ansiedad o enfado. La excitación baja también puede experimentarse de distintas maneras, por ejemplo, como relajación, aburrimiento o calma.

# Filtramos la escala
FAS <-  filter(Eva_largo, Escala == "FAS")
FAS$Tiempo <- factor(FAS$Tiempo, levels=c("PRE","serie1", "serie2", "serie3", "serie4", "POST"))


 # Calculamos algunos datos para añadirlos al gráfico  
sumrepdatFAS <- summarySE(FAS, measurevar = "Valor",
                       groupvars=c("Sesion", "Tiempo"))

FASrain <- ggplot(FAS, aes(x = Tiempo, y = Valor, fill = Sesion)) +
  geom_flat_violin(aes(fill = Sesion),position = position_nudge(x = .1, y = 0), adjust = 1.5, trim = FALSE, alpha = .5, colour = NA)+
  geom_point(aes(x = as.numeric(Tiempo)-.15, y = Valor, colour = Sesion),position = position_jitter(width = .05), size = .25, shape = 20)+
  geom_boxplot(aes(x = Tiempo, y = Valor, fill = Sesion),outlier.shape = NA, alpha = .5, width = .1, colour = "black")+
  geom_line(data = sumrepdatFAS, aes(x = Tiempo, y = Valor, group = Sesion, colour = Sesion), linetype = 3)+
  geom_point(data = sumrepdatFAS, aes(x = Tiempo, y = Valor, group = Sesion, colour = Sesion), shape = 18) +
  scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+
  sm_classic() +
  labs( y = "Estado de excitación/activación", x = element_blank(),
        title ="Distribución del estado de excitación entre sesion y a lo largo del tiempo",
        )+
  size+
  theme(legend.position = "right")


FASrain

A simple vista, en ambas sesiones se parte de un nivel de excitación/activación similar y a posteriori el nivel de excitación es muy parecido en ambas sesiones.

Hay diferencias a nivel estadístico?

FASmodel <- lmer(Valor ~ Sesion + Tiempo + Sesion : Tiempo + (1|ID), data = FAS)

# Estadístico 
car::Anova(FASmodel, type=3)
## Analysis of Deviance Table (Type III Wald chisquare tests)
## 
## Response: Valor
##                  Chisq Df Pr(>Chisq)    
## (Intercept)   117.0196  1     <2e-16 ***
## Sesion          0.0476  1     0.8274    
## Tiempo        107.2319  5     <2e-16 ***
## Sesion:Tiempo   5.0787  5     0.4063    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
mixed(Valor ~ Sesion + Tiempo + Sesion : Tiempo + (1|ID), data = FAS)
## Mixed Model Anova Table (Type 3 tests, S-method)
## 
## Model: Valor ~ Sesion + Tiempo + Sesion:Tiempo + (1 | ID)
## Data: FAS
##          Effect        df         F p.value
## 1        Sesion  1, 55.00    4.91 *    .031
## 2        Tiempo 5, 275.00 32.21 ***   <.001
## 3 Sesion:Tiempo 5, 275.00      1.02    .409
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1

No se observan diferencias en el estado de excitación a nivel estadístico entre las dos sesiones. A que se puede deber esto? Al estado de forma?

5.1 FAS en función del estado de forma reportado.

Veamos los datos de manera similar que la FS. Es normal que el nivel de excitación sea similar en ambas sesiones?

Eva_FAS <- right_join(FAS, IFIS, by="ID")

# Calcule la media de los participantes para cada tiempo, estado de forma y sesion para los datos de FS 
FAS_group <- Eva_FAS %>% 
  group_by(Sesion, Tiempo, Cond) %>% 
  summarise_at(vars(Valor),           
               list(excitacion = mean))  


# La figura

FAS_group_figu<-ggplot(FAS_group, aes(x = Tiempo, y = excitacion))
FAS_group_figu <- FAS_group_figu + geom_line(aes(color = Sesion, group = Sesion)) + geom_point() + size


# Dividir en paneles
FAS_group_figu <- FAS_group_figu + facet_grid(Cond ~ Sesion) 
FAS_group_figu+scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+ size+
  labs(title = "Estado de forma reportado con la IFIS y FAS a nivel grupal")

Y a nivel individual?

FASCond<-ggplot(Eva_FAS, aes(x = Tiempo, y = Valor))
FASCond <- FASCond + geom_line(aes(color = Sesion, group = ID)) + geom_point()+ size


# Divide panels for conditions (rows) and participants (columns)
FASCond <- FASCond + facet_grid(Cond ~ Sesion) 
FASCond+scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+ size+
    labs(title = "Estado de forma reportado con la IFIS y FAS para cada participante")

# Análisis con el predictor de estado de forma (cond)
mixed(Valor ~ Sesion + Tiempo + Cond + Sesion : Tiempo + (1|ID), data = Eva_FAS)
## Mixed Model Anova Table (Type 3 tests, S-method)
## 
## Model: Valor ~ Sesion + Tiempo + Cond + Sesion:Tiempo + (1 | ID)
## Data: Eva_FAS
##          Effect        df         F p.value
## 1        Sesion  1, 40.39    4.17 *    .048
## 2        Tiempo 5, 215.68 26.71 ***   <.001
## 3          Cond  2, 47.79      0.71    .499
## 4 Sesion:Tiempo 5, 215.68      0.57    .723
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1

6. PANAS

El objetivo de utilizar la PANAS era de obtenir otra medida el estado emocional postivio y negativo de una forma un poco más “difusa” ya que dispone de 20 items (10 relativos a emociones positivas y 10 a negativas).

Eva_PANAS <- right_join(Eva, PANAS , by="ID")

Eva_PANAS <- subset(Eva_PANAS,select = c('ID','Sesion', "Pos_PRE", "Neg_PRE", "Pos_POST", "Neg_POST"))

Eva_PANAS<- pivot_longer(Eva_PANAS, cols =3:6, names_to = c("Escala", "Tiempo"),
                       names_sep = "_", values_to = "Valor", values_drop_na = TRUE) 

Eva_PANAS <- right_join(Eva_PANAS, IFIS , by="ID")
PANASpos <-  filter(Eva_PANAS, Escala == "Pos")
PANASpos$Tiempo <- factor(PANASpos$Tiempo, levels=c("PRE","POST"))


# Calculamos algunos datos para añadirlos al gráfico  
sumrepdatPos <- summarySE(PANASpos, measurevar = "Valor",
                       groupvars=c("Sesion", "Tiempo"))

Posrain  <- ggplot(PANASpos, aes(x = Tiempo, y = Valor, fill = Sesion)) +
  geom_flat_violin(aes(fill = Sesion),position = position_nudge(x = .1, y = 0), adjust = 1.5, trim = FALSE, alpha = .5, colour = NA)+
  geom_point(aes(x = as.numeric(Tiempo)-.15, y = Valor, colour = Sesion),position = position_jitter(width = .05), size = .25, shape = 20)+
  geom_boxplot(aes(x = Tiempo, y = Valor, fill = Sesion),outlier.shape = NA, alpha = .5, width = .1, colour = "black")+
  geom_line(data = sumrepdatPos, aes(x = Tiempo, y = Valor, group = Sesion, colour = Sesion), linetype = 3)+
  geom_point(data = sumrepdatPos, aes(x = Tiempo, y = Valor, group = Sesion, colour = Sesion), shape = 18) +
  scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+
  sm_classic() +
  labs( y = "Estado emocional positivo", x = element_blank(),
        title ="Cambio pre-post sesión emocional positiva",
        )+
  size+
  theme(legend.position = "right")


PANASneg <-  filter(Eva_PANAS, Escala == "Neg")
PANASneg$Tiempo <- factor(PANASneg$Tiempo, levels=c("PRE","POST"))


# Calculamos algunos datos para añadirlos al gráfico  
sumrepdatNeg <- summarySE(PANASneg, measurevar = "Valor",
                       groupvars=c("Sesion", "Tiempo"))

Negrain  <- ggplot(PANASneg, aes(x = Tiempo, y = Valor, fill = Sesion)) +
  geom_flat_violin(aes(fill = Sesion),position = position_nudge(x = .1, y = 0), adjust = 1.5, trim = FALSE, alpha = .5, colour = NA)+
  geom_point(aes(x = as.numeric(Tiempo)-.15, y = Valor, colour = Sesion),position = position_jitter(width = .05), size = .25, shape = 20)+
  geom_boxplot(aes(x = Tiempo, y = Valor, fill = Sesion),outlier.shape = NA, alpha = .5, width = .1, colour = "black")+
  geom_line(data = sumrepdatNeg, aes(x = Tiempo, y = Valor, group = Sesion, colour = Sesion), linetype = 3)+
  geom_point(data = sumrepdatNeg, aes(x = Tiempo, y = Valor, group = Sesion, colour = Sesion), shape = 18) +
  scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+
  sm_classic() +
  labs( y = "Estado emocional negativo", x = element_blank(),
        title ="Cambio pre-post sesión emocional negativa",
        )+
  size+
  theme(legend.position = "right")




PosNeg <- ggarrange(Posrain, Negrain,
                            labels = c("A", "B"),
                            ncol = 2,
                            common.legend = T,
                            legend = "right",
                            align = "h"
)
PosNeg

6.1 PANAS en función del estado de forma

# Calcule la media de los participantes para cada tiempo, estado de forma y sesion para los datos  
Pos_group <- PANASpos %>% 
  group_by(Sesion, Tiempo, Cond) %>% 
  summarise_at(vars(Valor),           
               list(media = mean))  


# La figura

Pos_group_figu<-ggplot(Pos_group, aes(x = Tiempo, y = media))
Pos_group_figu <- Pos_group_figu + geom_line(aes(color = Sesion, group = Sesion)) + geom_point() + size


# Dividir en paneles
Pos_group_figu <- Pos_group_figu + facet_grid(Cond ~ Sesion) 
Pos_group_figu+scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+ size+
  labs(title = "Estado de forma reportado con la IFIS y respuesta emocional positiva")

# Calcule la media de los participantes para cada tiempo, estado de forma y sesion para los datos  
Neg_group <- PANASneg %>% 
  group_by(Sesion, Tiempo, Cond) %>% 
  summarise_at(vars(Valor),           
               list(media = mean))  


# La figura

Neg_group_figu<-ggplot(Neg_group, aes(x = Tiempo, y = media))
Neg_group_figu <- Neg_group_figu + geom_line(aes(color = Sesion, group = Sesion)) + geom_point() + size


# Dividir en paneles
Neg_group_figu <- Neg_group_figu + facet_grid(Cond ~ Sesion) 
Neg_group_figu+scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+ size+
  labs(title = "Estado de forma reportado con la IFIS y respuesta emocional negativa")  

Y a nivel individual?

PosInd<-ggplot(PANASpos, aes(x = Tiempo, y = Valor))
PosInd <- PosInd + geom_line(aes(color = Sesion, group = ID)) + geom_point()+ size


# Divide panels for conditions (rows) and participants (columns)
PosInd <- PosInd + facet_grid(Cond ~ Sesion) 
PosInd +scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+ size+
    labs(title = "Estado de forma reportado con la IFIS y PANAS positivo para cada participante")

NegInd<-ggplot(PANASneg, aes(x = Tiempo, y = Valor))
NegInd <- NegInd + geom_line(aes(color = Sesion, group = ID)) + geom_point()+ size


# Divide panels for conditions (rows) and participants (columns)
NegInd <- NegInd + facet_grid(Cond ~ Sesion) 
NegInd +scale_colour_brewer(palette = "Set1")+
  scale_fill_brewer(palette = "Set1")+ size+
    labs(title = "Estado de forma reportado con la IFIS y PANAS negativo para cada participante")


7. Conclusiones

  • La toma de datos subjetivos, aunque parezca una tarea sencilla, tienes sus complejidades dado que estamos tratando con personas con diferentes sensaciones, conocimientos, experiencia, etc.

  • Es muy importante como se definen los conceptos. El uso de la semántica y las palabras es fundamental. Por ejemplo, decimos sensación o percepción del esfuerzo?

  • Los datos subjetivos no siempre coinciden con los datos objetivos, aunque esto no quiere decir que estos no sean precisos u oportunos.

  • La respuesta emocional al ejercicio depende de varios factores. Aquí hemos considerado la condición física, pero también podría estar condicionada por el nivel de experiencia en la actividad que se realiza.

  • Tenemos mucha flexibilidad para analizar un mismo conjunto de datos, por lo tanto covniene siempre estar en alerta cuando nos presentan un análisis o gráfico.

Si tenéis alguna duda, podeis contactarme