library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(rstatix)
##
## Attaching package: 'rstatix'
##
## The following object is masked from 'package:stats':
##
## filter
library(ggplot2)
library(ggpubr)
library(ez)
library(lme4)
## Loading required package: Matrix
##
## Attaching package: 'Matrix'
##
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
library(lmerTest)
##
## Attaching package: 'lmerTest'
##
## The following object is masked from 'package:lme4':
##
## lmer
##
## The following object is masked from 'package:stats':
##
## step
library(dplyr)
setwd("~/conducta_aud_tms/fMRI_task_aud/csvlog/taskswitch")
ts <- read_csv("ts_correctas.csv")
## Rows: 178 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (4): subj, tx, condition, sesion
## dbl (1): correct_responses
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Filtrar sujetos con ambas sesiones
sujetos_completos <- ts %>%
group_by(subj) %>%
filter(all(c("ses-01", "ses-02") %in% sesion)) %>%
ungroup()
table(sujetos_completos$subj, sujetos_completos$sesion)
##
## ses-01 ses-02
## sub-01 2 2
## sub-03 2 2
## sub-04 2 2
## sub-05 2 2
## sub-06 2 2
## sub-07 2 2
## sub-08 2 2
## sub-09 2 2
## sub-10 2 2
## sub-11 2 2
## sub-12 2 2
## sub-13 2 2
## sub-14 2 2
## sub-15 2 2
## sub-16 2 2
## sub-17 2 2
## sub-18 2 2
## sub-19 2 2
## sub-20 2 2
## sub-22 2 2
## sub-24 2 2
## sub-25 2 2
## sub-28 2 2
## sub-29 2 2
## sub-30 2 2
## sub-31 2 2
## sub-32 2 2
## sub-33 2 2
## sub-34 2 2
## sub-35 2 2
## sub-36 2 2
## sub-37 2 2
## sub-38 2 2
## sub-40 2 2
## sub-42 2 2
## sub-43 2 2
## sub-44 2 2
## sub-45 2 2
## sub-46 2 2
## sub-47 2 2
## sub-48 2 2
Filtrar los datos de la condicion switch para los 3 grupos, revisar los supuestos de normalidad y efectuar anova
#filtrar para switch
datos_switch <- sujetos_completos %>%
filter(condition == "switch")
#Verificar normalidad de datos
# QQ-Plot
ggplot(datos_switch, aes(sample = correct_responses)) +
geom_qq() +
facet_grid(tx ~ sesion) +
geom_qq_line()
# Shapiro-Wilk por grupo
datos_switch %>%
group_by(tx, sesion) %>%
shapiro_test(correct_responses)
#Prueba de Levene para la homogeneidad de varianzas
datos_switch %>%
levene_test(correct_responses ~ tx * sesion)
#Se cumplieron los supuestos
# Modelo ANOVA
modelo <- anova_test(
data = datos_switch,
dv = correct_responses,
wid = subj, # Variable de identificación de sujetos
between = tx, # Factor entre-sujetos
within = sesion # Factor intra-sujetos
)
# Resultados
summary(modelo)
## Effect DFn DFd F
## Length:3 Min. :1.000 Min. :38 Min. :1.108
## Class :character 1st Qu.:1.500 1st Qu.:38 1st Qu.:1.555
## Mode :character Median :2.000 Median :38 Median :2.002
## Mean :1.667 Mean :38 Mean :2.000
## 3rd Qu.:2.000 3rd Qu.:38 3rd Qu.:2.446
## Max. :2.000 Max. :38 Max. :2.890
## p p<.05 ges
## Min. :0.0970 Length:3 Min. :0.0290
## 1st Qu.:0.1230 Class :character 1st Qu.:0.0315
## Median :0.1490 Mode :character Median :0.0340
## Mean :0.1957 Mean :0.0340
## 3rd Qu.:0.2450 3rd Qu.:0.0365
## Max. :0.3410 Max. :0.0390
get_anova_table(modelo)
#reportar resultados
cat(
"Efecto de tx: F(2, 38) =", round(modelo$F[1], 3), ", p =", round(modelo$p[1], 3),
"\nEfecto de sesion: F(1, 38) =", round(modelo$F[2], 3), ", p =", round(modelo$p[2], 3),
"\nInteracción tx:sesion: F(2, 38) =", round(modelo$F[3], 3), ", p =", round(modelo$p[3], 3)
)
## Efecto de tx: F(2, 38) = 1.108 , p = 0.341
## Efecto de sesion: F(1, 38) = 2.89 , p = 0.097
## Interacción tx:sesion: F(2, 38) = 2.002 , p = 0.149
#No significativo para SWITCH
Filtrar los datos de la condicion noswitch para los 3 grupos, revisar los supuestos de normalidad y efectuar anova
#filtrar para noswitch
datos_noswitch <- sujetos_completos %>%
filter(condition == "noswitch")
#Verificar normalidad de datos
# QQ-Plot
ggplot(datos_noswitch, aes(sample = correct_responses)) +
geom_qq() +
facet_grid(tx ~ sesion) +
geom_qq_line()
# Shapiro-Wilk por grupo
datos_noswitch %>%
group_by(tx, sesion) %>%
shapiro_test(correct_responses)
#Prueba de Levene para la homogeneidad de varianzas
datos_noswitch %>%
levene_test(correct_responses ~ tx * sesion)
#Se cumplieron los supuestos
# Modelo ANOVA
modelo_noswitch <- anova_test(
data = datos_noswitch,
dv = correct_responses,
wid = subj, # Variable de identificación de sujetos
between = tx, # Factor entre-sujetos
within = sesion # Factor intra-sujetos
)
# Resultados
summary(modelo)
## Effect DFn DFd F
## Length:3 Min. :1.000 Min. :38 Min. :1.108
## Class :character 1st Qu.:1.500 1st Qu.:38 1st Qu.:1.555
## Mode :character Median :2.000 Median :38 Median :2.002
## Mean :1.667 Mean :38 Mean :2.000
## 3rd Qu.:2.000 3rd Qu.:38 3rd Qu.:2.446
## Max. :2.000 Max. :38 Max. :2.890
## p p<.05 ges
## Min. :0.0970 Length:3 Min. :0.0290
## 1st Qu.:0.1230 Class :character 1st Qu.:0.0315
## Median :0.1490 Mode :character Median :0.0340
## Mean :0.1957 Mean :0.0340
## 3rd Qu.:0.2450 3rd Qu.:0.0365
## Max. :0.3410 Max. :0.0390
get_anova_table(modelo)
#reportar resultados
cat(
"Efecto de tx: F(2, 38) =", round(modelo_noswitch$F[1], 3), ", p =", round(modelo_noswitch$p[1], 3),
"\nEfecto de sesion: F(1, 38) =", round(modelo_noswitch$F[2], 3), ", p =", round(modelo_noswitch$p[2], 3),
"\nInteracción tx:sesion: F(2, 38) =", round(modelo_noswitch$F[3], 3), ", p =", round(modelo_noswitch$p[3], 3)
)
## Efecto de tx: F(2, 38) = 3.054 , p = 0.059
## Efecto de sesion: F(1, 38) = 0.223 , p = 0.64
## Interacción tx:sesion: F(2, 38) = 2.819 , p = 0.072
Efecto de tx significativo para noswitch Post-hoc
pairwise_t_test(
data = datos_noswitch,
correct_responses ~ tx,
p.adjust.method = "bonferroni"
)
Vizualizacion switch
viz_switch <- ggplot(datos_switch, aes(x = sesion, y = correct_responses, color = tx, group = tx)) +
stat_summary(fun = mean, geom = "line", linewidth = 1.2, alpha = 0.8) +
stat_summary(fun = mean, geom = "point", size = 3.5, shape = 19) +
stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.15, linewidth = 0.8, alpha = 0.6) +
labs(
title = "Interacción Tratamiento × Sesión (Condición Switch)",
subtitle = "ANOVA: Efectos no significativos (p > 0.05)",
x = "Sesión",
y = "Respuestas Correctas (Switch)",
color = "Tratamiento",
caption = "Error bars: ±1 SEM"
) +
theme_minimal(base_size = 13) +
scale_color_manual(
values = c("control" = "#E41A1C", "active" = "#377EB8", "sham" = "#4DAF4A")
) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 14),
plot.subtitle = element_text(hjust = 0.5, color = "gray30", size = 11),
legend.position = "top",
panel.grid.major = element_line(color = "gray90"),
axis.text = element_text(color = "black")
)
viz_switch
Visualizacion noswitch con etiquetas
viz_noswitch <- ggplot(datos_noswitch, aes(x = sesion, y = correct_responses, color = tx, group = tx)) +
stat_summary(fun = mean, geom = "line", linewidth = 1.2, alpha = 0.8) +
stat_summary(fun = mean, geom = "point", size = 3.5, shape = 19) +
stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.15, linewidth = 0.8, alpha = 0.6) +
labs(
title = "Interacción Tratamiento × Sesión (Condición No-Switch)",
subtitle = "ANOVA: tx (p = 0.059), sesión (p = 0.64), interacción (p = 0.072)",
x = "Sesión",
y = "Respuestas Correctas (No-Switch)",
color = "Tratamiento",
caption = "Error bars: ±1 SEM"
) +
theme_minimal(base_size = 13) +
scale_color_manual(
values = c("control" = "#E41A1C", "active" = "#377EB8", "sham" = "#4DAF4A")
) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 14),
plot.subtitle = element_text(hjust = 0.5, color = "gray30", size = 11),
legend.position = "top",
panel.grid.major = element_line(color = "gray90"),
axis.text = element_text(color = "black")
)
annotations <- data.frame(
sesion = c("ses-01", "ses-02"),
correct_responses = rep(max(datos_noswitch$correct_responses) * 1.05, 2), # Posición Y
label = c("†", "†"), # Símbolo de efecto marginal
tx = "control")
viz_noswitch +
geom_text(
data = annotations,
aes(x = sesion, y = correct_responses, label = label),
color = "black", size = 6, fontface = "bold",
inherit.aes = FALSE # Ignora los aesthetics del gráfico principal
)
MLM para condiciones switch y noswitch Efecto aleatorio (1|subj)
modelo_noswitch <- lmer(
correct_responses ~ tx * sesion + (1 | subj),
data = datos_noswitch,
REML = TRUE
)
summary_noswitch<-summary(modelo_noswitch)
summary_noswitch
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: correct_responses ~ tx * sesion + (1 | subj)
## Data: datos_noswitch
##
## REML criterion at convergence: 429
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -3.0025 -0.1465 0.1579 0.5941 1.2503
##
## Random effects:
## Groups Name Variance Std.Dev.
## subj (Intercept) 1.382 1.175
## Residual 12.166 3.488
## Number of obs: 82, groups: subj, 41
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 20.2143 0.9837 75.2176 20.549 < 2e-16 ***
## txcontrol 4.1857 1.3678 75.2176 3.060 0.00307 **
## txsham 1.9524 1.4480 75.2176 1.348 0.18159
## sesionses-02 2.9286 1.3183 38.0000 2.221 0.03235 *
## txcontrol:sesionses-02 -3.9286 1.8330 38.0000 -2.143 0.03856 *
## txsham:sesionses-02 -3.7619 1.9405 38.0000 -1.939 0.06000 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) txcntr txsham ssn-02 txc:-02
## txcontrol -0.719
## txsham -0.679 0.489
## sesionss-02 -0.670 0.482 0.455
## txcntrl:-02 0.482 -0.670 -0.327 -0.719
## txshm:ss-02 0.455 -0.327 -0.670 -0.679 0.489
resultados_noswitch <- summary_noswitch$coefficients
# P-valores para efectos específicos:
p_txcontrol <- resultados_noswitch["txcontrol", "Pr(>|t|)"] # 0.00307 (significativo)
p_txsham <- resultados_noswitch["txsham", "Pr(>|t|)"] # 0.18159 (no significativo)
p_sesion <- resultados_noswitch["sesionses-02", "Pr(>|t|)"] # 0.03235 (significativo)
p_interaccion_control <- resultados_noswitch["txcontrol:sesionses-02", "Pr(>|t|)"] # 0.03856 (significativo)
p_interaccion_sham <- resultados_noswitch["txsham:sesionses-02", "Pr(>|t|)"] # 0.06000 (marginal)
# Para efectos globales (opcional)
p_global_tx <- 0.05890 # Efecto principal de tx (marginal)
p_global_interaccion <- 0.07221 # Interacción tx:sesion (marginal)
#Para efectos fijos
anova_noswitch<-anova(modelo_noswitch, type = 3)
mlm_noswitch<-ggplot(datos_noswitch, aes(x = sesion, y = correct_responses, color = tx, group = tx)) +
stat_summary(fun = mean, geom = "line", linewidth = 1.2) +
stat_summary(fun = mean, geom = "point", size = 3) +
stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.1) +
labs(
title = "MLM: Efectos en condición 'noswitch'",
x = "Sesión",
y = "Respuestas Correctas (noswitch)",
color = "Tratamiento"
) +
theme_minimal() +
scale_color_brewer(palette = "Set1")
# Añadir anotaciones de significancia
mlm_noswitch <- mlm_noswitch +
annotate("text", x = 1, y = max(datos_noswitch$correct_responses) * 1.05,
label = ifelse(p_txcontrol < 0.01, "**",
ifelse(p_txcontrol < 0.05, "*",
ifelse(p_txcontrol < 0.1, "†", ""))),
color = "black", size = 8, fontface = "bold") +
annotate("text", x = 1.5, y = max(datos_noswitch$correct_responses) * 1.1,
label = ifelse(p_interaccion_control < 0.05, "*",
ifelse(p_interaccion_control < 0.1, "†", "")),
color = "#377EB8", size = 8, fontface = "bold") +
annotate("text", x = 2, y = max(datos_noswitch$correct_responses[datos_noswitch$tx == "sham"]) * 1.05,
label = ifelse(p_interaccion_sham < 0.1, "†", ""),
color = "#4DAF4A", size = 6, fontface = "bold") +
annotate("text", x = Inf, y = -Inf,
label = "** p < 0.01, * p < 0.05, † p < 0.1 (marginal)",
hjust = 1.1, vjust = -0.5, size = 3.5, color = "gray40")
mlm_noswitch
#-------------------------SWITCH------------------------
modelo_switch <- lmer(
correct_responses ~ tx * sesion + (1 | subj),
data = datos_switch,
REML = TRUE
)
summary_switch<-summary(modelo_switch)
summary_switch
## Linear mixed model fit by REML. t-tests use Satterthwaite's method [
## lmerModLmerTest]
## Formula: correct_responses ~ tx * sesion + (1 | subj)
## Data: datos_switch
##
## REML criterion at convergence: 361.7
##
## Scaled residuals:
## Min 1Q Median 3Q Max
## -2.7437 -0.2094 0.2292 0.4994 1.5524
##
## Random effects:
## Groups Name Variance Std.Dev.
## subj (Intercept) 1.252 1.119
## Residual 4.447 2.109
## Number of obs: 82, groups: subj, 41
##
## Fixed effects:
## Estimate Std. Error df t value Pr(>|t|)
## (Intercept) 11.7857 0.6380 72.5020 18.473 <2e-16 ***
## txcontrol 2.0810 0.8871 72.5020 2.346 0.0217 *
## txsham 0.6310 0.9391 72.5020 0.672 0.5038
## sesionses-02 1.7857 0.7970 38.0000 2.240 0.0310 *
## txcontrol:sesionses-02 -2.1857 1.1082 38.0000 -1.972 0.0559 .
## txsham:sesionses-02 -0.7857 1.1732 38.0000 -0.670 0.5071
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Correlation of Fixed Effects:
## (Intr) txcntr txsham ssn-02 txc:-02
## txcontrol -0.719
## txsham -0.679 0.489
## sesionss-02 -0.625 0.449 0.424
## txcntrl:-02 0.449 -0.625 -0.305 -0.719
## txshm:ss-02 0.424 -0.305 -0.625 -0.679 0.489
resultados_switch <- summary_switch$coefficients
# P-valores para efectos específicos:
ps_txcontrol <- resultados_switch["txcontrol", "Pr(>|t|)"] # 0.00307 (significativo)
ps_txsham <- resultados_switch["txsham", "Pr(>|t|)"] # 0.18159 (no significativo)
ps_sesion <- resultados_switch["sesionses-02", "Pr(>|t|)"] # 0.03235 (significativo)
ps_interaccion_control <- resultados_switch["txcontrol:sesionses-02", "Pr(>|t|)"] # 0.03856 (significativo)
ps_interaccion_sham <- resultados_switch["txsham:sesionses-02", "Pr(>|t|)"] # 0.06000 (marginal)
# Para efectos globales (opcional)
ps_global_tx <- 0.05890 # Efecto principal de tx (marginal)
ps_global_interaccion <- 0.07221 # Interacción tx:sesion (marginal)
#Para efectos fijos
switch_aov<-anova(modelo_switch, type = 3)
switch_aov
mlm_switch<-ggplot(datos_switch, aes(x = sesion, y = correct_responses, color = tx, group = tx)) +
stat_summary(fun = mean, geom = "line", linewidth = 1.2) +
stat_summary(fun = mean, geom = "point", size = 3) +
stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.1) +
labs(
title = "MLM: Efectos en condición 'switch'",
x = "Sesión",
y = "Respuestas Correctas (switch)",
color = "Tratamiento"
) +
theme_minimal() +
scale_color_brewer(palette = "Set1")
mlm_switch <- mlm_switch +
annotate("text", x = 1, y = max(datos_switch$correct_responses) * 1.05,
label = ifelse(ps_txcontrol < 0.01, "**",
ifelse(ps_txcontrol < 0.05, "*",
ifelse(ps_txcontrol < 0.1, "†", ""))),
color = "black", size = 8, fontface = "bold") +
annotate("text", x = 1.5, y = max(datos_switch$correct_responses) * 1.1,
label = ifelse(ps_interaccion_control < 0.05, "*",
ifelse(ps_interaccion_control < 0.1, "†", "")),
color = "#377EB8", size = 6, fontface = "bold") +
annotate("text", x = 2, y = max(datos_switch$correct_responses[datos_switch$tx == "sham"]) * 1.05,
label = ifelse(ps_interaccion_sham < 0.1, "†", ""),
color = "#4DAF4A", size = 6, fontface = "bold") +
annotate("text", x = Inf, y = -Inf,
label = "** p < 0.01, * p < 0.05, † p < 0.1 (marginal)",
hjust = 1.1, vjust = -0.5, size = 3.5, color = "gray40")
mlm_switch
NOSWITCH
Se analizaron las respuestas correctas mediante un modelo lineal mixto (LMM) con efectos aleatorios por sujeto (1 | subj). Efecto del tratamiento (tx): el grupo control mostró más respuestas correctas que el grupo active en la sesión 1 (β = 4.19, SE = 1.37, t = 3.06, p = 0.003), el grupo sham no difirió significativamente del active (β = 1.95, SE = 1.45, t = 1.35, p = 0.182). Respecto al efecto de la sesión (ses-02 vs. ses-01): hubo un aumento general en respuestas correctas en la sesión 2 (β = 2.93, SE = 1.32, t = 2.22, p = 0.032). Sobre la interacción tx × sesión: la ventaja del control en la sesión 1 disminuyó significativamente en la sesión 2 (β = −3.93, SE = 1.83, t = −2.14, p = 0.039). El grupo sham mostró una tendencia marginal a disminuir (β = −3.76, SE = 1.94, t = −1.94, p = 0.060).
SWITCH
Se analizaron las respuestas correctas mediante un modelo lineal mixto (LMM) con efectos aleatorios por sujeto (1 | subj). Efecto del tratamiento (tx): el grupo control superó al active en la sesión 1 (β = 2.08, SE = 0.89, t = 2.35, p = 0.022) y el grupo sham no difirió significativamente (β = 0.63, SE = 0.94, t = 0.67, p = 0.504).Efecto de la sesión (ses-02 vs. ses-01): hubo una mejora general en la sesión 2 (β = 1.79, SE = 0.80, t = 2.24, p = 0.031). Interacción tx × sesión: el grupo control mostró una tendencia marginal a reducir en la sesión 2 (β = −2.19, SE = 1.11, t = −1.97, p = 0.056). No hubo cambios significativos para el grupo sham (β = −0.79, SE = 1.17, t = −0.67, p = 0.507).
SOLO ACTIVOS Y SHAM
library(ARTool)
library(emmeans)
## Welcome to emmeans.
## Caution: You lose important information if you filter this package's results.
## See '? untidy'
dd <- read.csv("ts_correctas.csv")
# Filtrar sujetos con ambas sesiones y tx = "sham" o "active"
datos_filtrados <- dd %>%
filter(tx %in% c("sham", "active")) %>% # Solo sham y active
group_by(subj) %>%
filter(all(c("ses-01", "ses-02") %in% sesion)) %>% # Que tengan ambas sesiones
ungroup()
# Verificar sujetos únicos
unique(datos_filtrados$subj)
## [1] "sub-16" "sub-17" "sub-18" "sub-19" "sub-20" "sub-22" "sub-24" "sub-25"
## [9] "sub-28" "sub-30" "sub-31" "sub-32" "sub-33" "sub-34" "sub-35" "sub-36"
## [17] "sub-37" "sub-38" "sub-40" "sub-42" "sub-43" "sub-44" "sub-45" "sub-46"
## [25] "sub-47" "sub-48"
SWITCH
dd_switch <- datos_filtrados %>%
filter(condition == "switch") %>%
mutate(
tx = factor(tx),
sesion = factor(sesion)
) %>%
select(subj, tx, sesion, correct_responses)
dd_switch$sesion <- factor(dd_switch$sesion)
dd_switch$tx <- factor(dd_switch$tx)
#Reviso supuestos y no cumple el de normalidad por lo que intento con un Aligned Rank Transform (ART)
modelo_art <- art(
correct_responses ~ tx * sesion + (1 | subj),
data = dd_switch
)
artanova_switch<-anova(modelo_art)
artanova_switch
if ("sesion" %in% rownames(artanova_switch)) {
emmeans(artlm(modelo_art, "sesion"), pairwise ~ sesion, adjust = "tukey")
}
## NOTE: Results may be misleading due to involvement in interactions
## $emmeans
## sesion emmean SE df lower.CL upper.CL
## ses-01 22.4 2.91 46.2 16.6 28.3
## ses-02 30.7 2.91 46.2 24.9 36.6
##
## Results are averaged over the levels of: tx
## Degrees-of-freedom method: kenward-roger
## Confidence level used: 0.95
##
## $contrasts
## contrast estimate SE df t.ratio p.value
## (ses-01) - (ses-02) -8.3 3.69 24 -2.251 0.0338
##
## Results are averaged over the levels of: tx
## Degrees-of-freedom method: kenward-roger
plot(residuals(modelo_art))
#Resultados
#contrast estimate SE df t.ratio p.value
#(ses-01) - (ses-02) -8.3 3.69 24 -2.251 0.0338
#Para una aproximacion mas tradicional
#Prueba de Friedman (within-subjects, para comparar ses-01 vs ses-02).
#Prueba de Wilcoxon rank-sum (between-subjects, para comparar sham vs active en cada sesión).
sham_data_switch <- dd_switch %>%
filter(tx == "sham") %>%
pivot_wider(names_from = sesion, values_from = correct_responses)
friedman.test(cbind(sham_data_switch$`ses-01`, sham_data_switch$`ses-02`))
##
## Friedman rank sum test
##
## data: cbind(sham_data_switch$`ses-01`, sham_data_switch$`ses-02`)
## Friedman chi-squared = 4.5, df = 1, p-value = 0.03389
active_data_switch <- dd_switch %>%
filter(tx == "active") %>%
pivot_wider(names_from = sesion, values_from = correct_responses)
friedman.test(cbind(active_data_switch$`ses-01`, active_data_switch$`ses-02`))
##
## Friedman rank sum test
##
## data: cbind(active_data_switch$`ses-01`, active_data_switch$`ses-02`)
## Friedman chi-squared = 3.6, df = 1, p-value = 0.05778
ses1_data_switch <- dd_switch %>%
filter(sesion == "ses-01")
wilcox.test(correct_responses ~ tx, data = ses1_data_switch)
## Warning in wilcox.test.default(x = DATA[[1L]], y = DATA[[2L]], ...): cannot
## compute exact p-value with ties
##
## Wilcoxon rank sum test with continuity correction
##
## data: correct_responses by tx
## W = 72.5, p-value = 0.5659
## alternative hypothesis: true location shift is not equal to 0
ses2_data_switch <- dd_switch %>%
filter(sesion == "ses-02")
wilcox.test(correct_responses ~ tx, data = ses2_data_switch)
## Warning in wilcox.test.default(x = DATA[[1L]], y = DATA[[2L]], ...): cannot
## compute exact p-value with ties
##
## Wilcoxon rank sum test with continuity correction
##
## data: correct_responses by tx
## W = 71, p-value = 0.4951
## alternative hypothesis: true location shift is not equal to 0
VIZUALIZACION DE SWITCH
viz_ddswitch <- ggplot(dd_switch, aes(x = sesion, y = correct_responses, color = tx, group = tx)) +
stat_summary(fun = mean, geom = "line", linewidth = 1.2, alpha = 0.8) +
stat_summary(fun = mean, geom = "point", size = 3.5, shape = 19) +
stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.15, linewidth = 0.8, alpha = 0.6) +
labs(
title = "Efecto del Tratamiento y Sesión en la Condición Switch",
subtitle = paste(
"Friedman (intra-grupo): sham p = 0.034*, active p = 0.058\n",
"Wilcoxon (entre-grupos): ses-01 p = 0.40, ses-02 p = 0.88"
),
x = "Sesión",
y = "Respuestas Correctas (Switch)",
color = "Tratamiento",
caption = "Error bars: ±1 SEM\n* p < 0.05; Pruebas no paramétricas (Friedman/Wilcoxon)"
) +
theme_minimal(base_size = 13) +
scale_color_manual(
values = c("active" = "#377EB8", "sham" = "#4DAF4A"),
labels = c("active" = "Active (n=14)", "sham" = "Sham (n=12)") # Añade tamaño de muestra
) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 14),
plot.subtitle = element_text(hjust = 0.5, color = "gray30", size = 11),
legend.position = "top",
panel.grid.major = element_line(color = "gray90"),
axis.text = element_text(color = "black"))
viz_ddswitch
Se analizaron las respuestas correctas en la condición switch mediante
pruebas no paramétricas debido a la violación de supuestos
(normalidad/homocedasticidad). Para comparar el efecto del tratamiento
entre sesiones, se usó la prueba de Friedman (intra-grupo) y la prueba
de Wilcoxon (entre grupos). En el grupo sham, hubo un cambio
significativo entre sesiones (χ² = 4.5, p = 0.034), mientras
que en el grupo active no (χ² = 3.6, p = 0.058). Las
comparaciones entre grupos (active vs. sham) no mostraron diferencias
significativas en ninguna sesión (ses-01: W = 59, p = 0.19;
ses-02: W = 96, p = 0.53)
NOSWITCH
dd_noswitch <- datos_filtrados %>%
filter(condition == "noswitch")
dd_noswitch$sesion <- factor(dd_noswitch$sesion)
#verificar supuestos de normalidad
dd_noswitch %>%
group_by(tx, sesion) %>%
shapiro_test(correct_responses)
#NELSON, has no parametricas
dd_noswitch$sesion <- factor(dd_noswitch$sesion)
dd_noswitch$tx <- factor(dd_noswitch$tx)
modelo_art2 <- art(
correct_responses ~ tx * sesion + (1 | subj),
data = dd_noswitch
)
artanova_noswitch<-anova(modelo_art2)
artanova_noswitch
#NADA
# F Df Df.res Pr(>F)
#1 tx 0.37449 1 24 0.54632
#2 sesion 1.32965 1 24 0.26022
#3 tx:sesion 2.25889 1 24 0.14589
#Para una aproximacion mas tradicional
#Prueba de Friedman (within-subjects, para comparar ses-01 vs ses-02).
#Prueba de Wilcoxon rank-sum (between-subjects, para comparar sham vs active en cada sesión).
sham_data_noswitch <- dd_noswitch %>%
filter(tx == "sham") %>%
pivot_wider(names_from = sesion, values_from = correct_responses)
friedman.test(cbind(sham_data_noswitch$`ses-01`, sham_data_noswitch$`ses-02`))
##
## Friedman rank sum test
##
## data: cbind(sham_data_noswitch$`ses-01`, sham_data_noswitch$`ses-02`)
## Friedman chi-squared = 0.4, df = 1, p-value = 0.5271
active_data_noswitch <- dd_noswitch %>%
filter(tx == "active") %>%
pivot_wider(names_from = sesion, values_from = correct_responses)
friedman.test(cbind(active_data_noswitch$`ses-01`, active_data_noswitch$`ses-02`))
##
## Friedman rank sum test
##
## data: cbind(active_data_noswitch$`ses-01`, active_data_noswitch$`ses-02`)
## Friedman chi-squared = 1.9231, df = 1, p-value = 0.1655
ses1_data_noswitch <- dd_noswitch %>%
filter(sesion == "ses-01")
wilcox.test(correct_responses ~ tx, data = ses1_data_noswitch)
## Warning in wilcox.test.default(x = DATA[[1L]], y = DATA[[2L]], ...): cannot
## compute exact p-value with ties
##
## Wilcoxon rank sum test with continuity correction
##
## data: correct_responses by tx
## W = 59, p-value = 0.1963
## alternative hypothesis: true location shift is not equal to 0
ses2_data_noswitch <- dd_noswitch %>%
filter(sesion == "ses-02")
wilcox.test(correct_responses ~ tx, data = ses2_data_noswitch)
## Warning in wilcox.test.default(x = DATA[[1L]], y = DATA[[2L]], ...): cannot
## compute exact p-value with ties
##
## Wilcoxon rank sum test with continuity correction
##
## data: correct_responses by tx
## W = 96, p-value = 0.5393
## alternative hypothesis: true location shift is not equal to 0
viz_ddnoswitch <- ggplot(dd_noswitch, aes(x = sesion, y = correct_responses, color = tx, group = tx)) +
stat_summary(fun = mean, geom = "line", linewidth = 1.2, alpha = 0.8) +
stat_summary(fun = mean, geom = "point", size = 3.5, shape = 19) +
stat_summary(fun.data = mean_se, geom = "errorbar", width = 0.15, linewidth = 0.8, alpha = 0.6) +
labs(
title = "Efecto del Tratamiento y Sesión en la Condición NoSwitch",
subtitle = paste(
"Friedman (intra-grupo): sham p = 0.5271, active p = 0.1655\n",
"Wilcoxon (entre-grupos): ses-01 p = 0.1963, ses-02 p = 0.5393"
),
x = "Sesión",
y = "Respuestas Correctas (NoSwitch)",
color = "Tratamiento",
caption = "Error bars: ±1 SEM\n* p < 0.05; Pruebas no paramétricas (Friedman/Wilcoxon)"
) +
theme_minimal(base_size = 13) +
scale_color_manual(
values = c("active" = "#377EB8", "sham" = "#4DAF4A"),
labels = c("active" = "Active (n=14)", "sham" = "Sham (n=12)") # Añade tamaño de muestra
) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5, size = 14),
plot.subtitle = element_text(hjust = 0.5, color = "gray30", size = 11),
legend.position = "top",
panel.grid.major = element_line(color = "gray90"),
axis.text = element_text(color = "black"))
viz_ddnoswitch
Se analizaron las respuestas correctas en la condición no-switch
mediante pruebas no paramétricas debido a la violación de supuestos
(normalidad y/o homocedasticidad). Para evaluar el efecto del
tratamiento entre sesiones, se aplicó la prueba de Friedman (comparación
intra-grupo) y la prueba de Wilcoxon (comparación entre grupos active
vs. sham).No hubo resultados significativos en el grupo sham entre
sesiones (χ² = 0.4, p = 0.527). Tampoco se encontraron cambios
significativos (χ² = 1.92, p = 0.166). La comparaciones entre
grupos (activo vs sham)no mostraron diferencias significativas en
ninguna sesión (ses-01: W = 59, p = 0.196; W = 96, p =
0.539)