##Loading the dataset and packages
library(readxl)
Conditions2_3_Updated <- read_excel("Conditions2&3_Updated.xlsx")
#View(Conditions2_3_Updated)
library(gtsummary)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(rstatix)
##
## Attaching package: 'rstatix'
## The following object is masked from 'package:stats':
##
## filter
library(ggplot2)
library(ggpubr)
library(ggstatsplot)
## You can cite this package as:
## Patil, I. (2021). Visualizations with statistical details: The 'ggstatsplot' approach.
## Journal of Open Source Software, 6(61), 3167, doi:10.21105/joss.03167
library(ggpattern)
library(tidyr)
library(Hmisc)
##
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
##
## src, summarize
## The following objects are masked from 'package:base':
##
## format.pval, units
library(sjPlot)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ readr 2.1.5
## ✔ lubridate 1.9.3 ✔ stringr 1.5.1
## ✔ purrr 1.0.2 ✔ tibble 3.2.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ rstatix::filter() masks dplyr::filter(), stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ Hmisc::src() masks dplyr::src()
## ✖ Hmisc::summarize() masks dplyr::summarize()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ez)
##Renaming the Values and Cleaning the Dataset
SH_Data <- Conditions2_3_Updated
SH_Data <- SH_Data[complete.cases(SH_Data$key_resp.rt), ]
correct_data <- SH_Data %>%
filter(key_resp.corr == 1)
SH_Cleaned_Data <- correct_data %>%
filter(key_resp.rt > 0.200 & key_resp.rt < 2.00) %>%
mutate(cutoff = mean(as.numeric(key_resp.rt)) + 2 * sd(as.numeric(key_resp.rt))) %>%
filter(as.numeric(key_resp.rt) < cutoff) %>%
select(-cutoff) %>%
mutate(key_resp.rt = (as.numeric(key_resp.rt) * 1000))
SH_Cleaned_Data$key_resp.corr <- factor(SH_Cleaned_Data$key_resp.corr, levels = c(0, 1), labels = c("incorrect", "correct"))
SH_Cleaned_Data$Participant_ID <- factor(SH_Cleaned_Data$Participant_ID)
SH_Cleaned_Data$Time_of_Display <- factor(SH_Cleaned_Data$Time_of_Display, levels = c(100, 900), labels = c("Time100", "Time900"))
SH_Cleaned_Data$Condition_code <- factor(SH_Cleaned_Data$Condition_code, levels = c(2, 3), labels = c("face-noise", "place-noise"))
SH_Cleaned_Data$Validity <- factor(SH_Cleaned_Data$Validity, levels = c('invalid', 'valid'), labels = c("Invalid", "Valid"))
SH_Cleaned_Data$key_resp.keys <- factor(SH_Cleaned_Data$key_resp.keys, levels = c('right', 'left'), labels = c("right", "left"))
SH_Cleaned_Data$Visual_Field <- factor(SH_Cleaned_Data$Visual_Field, levels = c(1, 0), labels = c("right", "left"))
head(SH_Cleaned_Data)
## # A tibble: 6 × 10
## Left_Pic Right_Pic Time_of_Display Condition_code key_resp.keys key_resp.corr
## <chr> <chr> <fct> <fct> <fct> <fct>
## 1 Gray30.j… HaF22.jpg Time900 face-noise right correct
## 2 HaF6.jpg Gray14.j… Time900 face-noise right correct
## 3 Gray5.jpg HaF13.jpg Time100 face-noise left correct
## 4 Gray12.j… HaF3.jpg Time100 face-noise left correct
## 5 HaF29.jpg Gray28.j… Time900 face-noise left correct
## 6 HaF26.jpg Gray23.j… Time100 face-noise right correct
## # ℹ 4 more variables: key_resp.rt <dbl>, Participant_ID <fct>, Validity <fct>,
## # Visual_Field <fct>
##Running an ANOVA
RM_ANOVA_data <- SH_Cleaned_Data %>%
group_by(Time_of_Display, Condition_code, Validity, Participant_ID) %>%
summarise(
count = n(),
mean = mean(key_resp.rt, na.rm = TRUE),
sd = sd(key_resp.rt, na.rm = TRUE)
) %>%
mutate_at(vars(Participant_ID, Condition_code, Time_of_Display, Validity), factor) %>%
arrange(Participant_ID, Condition_code, Time_of_Display, Validity)
## `summarise()` has grouped output by 'Time_of_Display', 'Condition_code',
## 'Validity'. You can override using the `.groups` argument.
RM_ANOVA_data
## # A tibble: 200 × 7
## # Groups: Time_of_Display, Condition_code, Validity [8]
## Time_of_Display Condition_code Validity Participant_ID count mean sd
## <fct> <fct> <fct> <fct> <int> <dbl> <dbl>
## 1 Time100 face-noise Invalid 2 40 287. 31.8
## 2 Time100 face-noise Valid 2 40 284. 31.2
## 3 Time900 face-noise Invalid 2 119 297. 30.1
## 4 Time900 face-noise Valid 2 118 290. 33.2
## 5 Time100 place-noise Invalid 2 40 296. 40.9
## 6 Time100 place-noise Valid 2 38 278. 23.7
## 7 Time900 place-noise Invalid 2 120 299. 27.7
## 8 Time900 place-noise Valid 2 118 296. 35.0
## 9 Time100 face-noise Invalid 3 39 379. 38.4
## 10 Time100 face-noise Valid 3 37 373. 54.4
## # ℹ 190 more rows
RM_anova <- ezANOVA(
data = RM_ANOVA_data,
dv = .(mean),
wid = .(Participant_ID),
within = .(Time_of_Display, Condition_code, Validity), detailed = TRUE)
print(RM_anova)
## $ANOVA
## Effect DFn DFd SSn SSd
## 1 (Intercept) 1 24 2.204890e+07 220619.040
## 2 Time_of_Display 1 24 2.180289e+02 5944.856
## 3 Condition_code 1 24 3.540100e+00 1096.068
## 4 Validity 1 24 8.155315e+02 2329.511
## 5 Time_of_Display:Condition_code 1 24 8.206286e+02 1974.533
## 6 Time_of_Display:Validity 1 24 8.626801e+01 2347.179
## 7 Condition_code:Validity 1 24 2.620294e+02 1645.375
## 8 Time_of_Display:Condition_code:Validity 1 24 2.470487e-01 1357.102
## F p p<.05 ges
## 1 2.398585e+03 1.447084e-25 * 9.893515e-01
## 2 8.802050e-01 3.574920e-01 9.178937e-04
## 3 7.751563e-02 7.830775e-01 1.491717e-05
## 4 8.402086e+00 7.885429e-03 * 3.424744e-03
## 5 9.974553e+00 4.248387e-03 * 3.446075e-03
## 6 8.820940e-01 3.569858e-01 3.633868e-04
## 7 3.822051e+00 6.232500e-02 1.102930e-03
## 8 4.368992e-03 9.478471e-01 1.041021e-06
#Calculating partial Effect Size
anova_table <- RM_anova$ANOVA
#Calculate partial eta squared for each effect
anova_table$partial_eta_squared <- anova_table$SSn / (anova_table$SSn + anova_table$SSd)
print(anova_table)
## Effect DFn DFd SSn SSd
## 1 (Intercept) 1 24 2.204890e+07 220619.040
## 2 Time_of_Display 1 24 2.180289e+02 5944.856
## 3 Condition_code 1 24 3.540100e+00 1096.068
## 4 Validity 1 24 8.155315e+02 2329.511
## 5 Time_of_Display:Condition_code 1 24 8.206286e+02 1974.533
## 6 Time_of_Display:Validity 1 24 8.626801e+01 2347.179
## 7 Condition_code:Validity 1 24 2.620294e+02 1645.375
## 8 Time_of_Display:Condition_code:Validity 1 24 2.470487e-01 1357.102
## F p p<.05 ges partial_eta_squared
## 1 2.398585e+03 1.447084e-25 * 9.893515e-01 0.9900932263
## 2 8.802050e-01 3.574920e-01 9.178937e-04 0.0353777243
## 3 7.751563e-02 7.830775e-01 1.491717e-05 0.0032194200
## 4 8.402086e+00 7.885429e-03 * 3.424744e-03 0.2593069493
## 5 9.974553e+00 4.248387e-03 * 3.446075e-03 0.2935889392
## 6 8.820940e-01 3.569858e-01 3.633868e-04 0.0354509553
## 7 3.822051e+00 6.232500e-02 1.102930e-03 0.1373748893
## 8 4.368992e-03 9.478471e-01 1.041021e-06 0.0001820082
#Creating a cleaned summary dataset that computes mean and SD of RTs
RM_ANOVA_Validity_data <- SH_Cleaned_Data %>%
group_by(Validity, Condition_code, Participant_ID, Time_of_Display) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Validity), factor) %>%
mutate(Validity = factor(Validity, levels = c("Valid", "Invalid"))) %>%
arrange(Participant_ID, Condition_code, Validity)
#Print the summarized data structure and sample for debugging
print(str(RM_ANOVA_Validity_data))
## tibble [200 × 6] (S3: tbl_df/tbl/data.frame)
## $ Validity : Factor w/ 2 levels "Valid","Invalid": 1 1 2 2 1 1 2 2 1 1 ...
## $ Condition_code : Factor w/ 2 levels "face-noise","place-noise": 1 1 1 1 2 2 2 2 1 1 ...
## $ Participant_ID : Factor w/ 25 levels "2","3","4","5",..: 1 1 1 1 1 1 1 1 2 2 ...
## $ Time_of_Display: Factor w/ 2 levels "Time100","Time900": 1 2 1 2 1 2 1 2 1 2 ...
## $ mean_rt : num [1:200] 284 290 287 297 278 ...
## $ sd_rt : num [1:200] 31.2 33.2 31.8 30.1 23.7 ...
## NULL
print(head(RM_ANOVA_Validity_data, 20))
## # A tibble: 20 × 6
## Validity Condition_code Participant_ID Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 Valid face-noise 2 Time100 284. 31.2
## 2 Valid face-noise 2 Time900 290. 33.2
## 3 Invalid face-noise 2 Time100 287. 31.8
## 4 Invalid face-noise 2 Time900 297. 30.1
## 5 Valid place-noise 2 Time100 278. 23.7
## 6 Valid place-noise 2 Time900 296. 35.0
## 7 Invalid place-noise 2 Time100 296. 40.9
## 8 Invalid place-noise 2 Time900 299. 27.7
## 9 Valid face-noise 3 Time100 373. 54.4
## 10 Valid face-noise 3 Time900 391. 48.0
## 11 Invalid face-noise 3 Time100 379. 38.4
## 12 Invalid face-noise 3 Time900 388. 45.6
## 13 Valid place-noise 3 Time100 377. 49.0
## 14 Valid place-noise 3 Time900 385. 48.5
## 15 Invalid place-noise 3 Time100 388. 45.1
## 16 Invalid place-noise 3 Time900 386. 39.9
## 17 Valid face-noise 4 Time100 314. 57.6
## 18 Valid face-noise 4 Time900 306. 46.1
## 19 Invalid face-noise 4 Time100 336. 44.1
## 20 Invalid face-noise 4 Time900 327. 54.1
#Calculate means and standard errors for RTs
mean_data <- RM_ANOVA_Validity_data %>%
group_by(Participant_ID, Validity, Condition_code) %>%
summarise(mean_rt = mean(mean_rt, na.rm = TRUE), .groups = "drop") %>% # average over Time_of_Display within subject
group_by(Validity, Condition_code) %>%
summarise(
Mean_Value = mean(mean_rt, na.rm = TRUE),
SE_Value = sd(mean_rt, na.rm = TRUE) / sqrt(n_distinct(Participant_ID)),
.groups = "drop"
)
#Print the mean data structure and sample for debugging
print(str(mean_data))
## tibble [4 × 4] (S3: tbl_df/tbl/data.frame)
## $ Validity : Factor w/ 2 levels "Valid","Invalid": 1 1 2 2
## $ Condition_code: Factor w/ 2 levels "face-noise","place-noise": 1 2 1 2
## $ Mean_Value : num [1:4] 329 331 335 333
## $ SE_Value : num [1:4] 7.02 6.74 6.78 6.88
## NULL
print(head(mean_data, 20))
## # A tibble: 4 × 4
## Validity Condition_code Mean_Value SE_Value
## <fct> <fct> <dbl> <dbl>
## 1 Valid face-noise 329. 7.02
## 2 Valid place-noise 331. 6.74
## 3 Invalid face-noise 335. 6.78
## 4 Invalid place-noise 333. 6.88
#Check for duplicates in the summarized data
duplicates <- RM_ANOVA_Validity_data %>%
group_by(Validity, Condition_code, Participant_ID) %>%
filter(n() > 1)
print(duplicates)
## # A tibble: 200 × 6
## # Groups: Validity, Condition_code, Participant_ID [100]
## Validity Condition_code Participant_ID Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 Valid face-noise 2 Time100 284. 31.2
## 2 Valid face-noise 2 Time900 290. 33.2
## 3 Invalid face-noise 2 Time100 287. 31.8
## 4 Invalid face-noise 2 Time900 297. 30.1
## 5 Valid place-noise 2 Time100 278. 23.7
## 6 Valid place-noise 2 Time900 296. 35.0
## 7 Invalid place-noise 2 Time100 296. 40.9
## 8 Invalid place-noise 2 Time900 299. 27.7
## 9 Valid face-noise 3 Time100 373. 54.4
## 10 Valid face-noise 3 Time900 391. 48.0
## # ℹ 190 more rows
#Define the y-axis limits
y_limits <- c(300, 350)
#Change the names of the variables on the x-axis
custom_labels <- c("Face-Noise", "Place-Noise")
#Define interaction order
mean_data$interaction_order <- factor(with(mean_data, interaction(Condition_code, Validity)),
levels = c("face-noise.Valid", "face-noise.Invalid",
"place-noise.Valid", "place-noise.Invalid"))
#Make sure Condition_code has the right order
mean_data$Condition_code <- factor(mean_data$Condition_code,
levels = c("face-noise", "place-noise"))
#Define colors of bars
fill_palette <- c("face-noise.Valid" = "#66c2a5",
"face-noise.Invalid" = "#FFFFFF",
"place-noise.Valid" = "#8da0cb",
"place-noise.Invalid" = "#FFFFFF")
#Define colors for borders
color_palette <- c("face-noise.Valid" = "#66c2a5",
"face-noise.Invalid" = "#66c2a5",
"place-noise.Valid" = "#8da0cb",
"place-noise.Invalid" = "#8da0cb")
#Define patterns for valid and invalid conditions
pattern_palette <- c("face-noise.Valid" = "none",
"face-noise.Invalid" = "stripe",
"place-noise.Valid" = "none",
"place-noise.Invalid" = "stripe")
#X-axis labels for the two conditions
custom_labels <- c("face-noise" = "Face-Noise",
"place-noise" = "Place-Noise")
#Plotting
ggplot(mean_data,
aes(x = Condition_code,
y = Mean_Value,
fill = interaction_order,
pattern = interaction_order)) +
geom_bar_pattern(
stat = "identity",
position = position_dodge(width = 0.9),
aes(color = interaction_order),
pattern_fill = "black",
pattern_angle = 45,
pattern_density = 0.2,
pattern_spacing = 0.03,
pattern_key_scale_factor = 0.6
) +
scale_fill_manual(values = fill_palette) +
scale_pattern_manual(values = pattern_palette) +
scale_color_manual(values = color_palette) +
geom_errorbar(
aes(ymin = Mean_Value - SE_Value,
ymax = Mean_Value + SE_Value),
width = 0.2,
position = position_dodge(width = 0.9),
color = "black"
) +
scale_x_discrete(labels = custom_labels) +
xlab("Condition") +
ylab("Mean Reaction Time") +
ggtitle("Mean Reaction Time per Validity and Condition") +
theme_bw() +
theme(
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
plot.title = element_text(size = 16, hjust = 0.5)
) +
coord_cartesian(ylim = y_limits)
#Plotting across SOAs
#Creating a cleaned summary dataset that computes mean and SD of RTs
RM_ANOVA_Validity_data <- SH_Cleaned_Data %>%
group_by(Time_of_Display, Validity, Condition_code, Participant_ID) %>%
summarise(
count = n(),
mean = mean(key_resp.rt, na.rm = TRUE),
sd = sd(key_resp.rt, na.rm = TRUE)
) %>%
mutate_at(vars(Time_of_Display, Participant_ID, Condition_code, Validity), factor) %>%
arrange(Time_of_Display, Participant_ID, Condition_code, Validity)
## `summarise()` has grouped output by 'Time_of_Display', 'Validity',
## 'Condition_code'. You can override using the `.groups` argument.
RM_ANOVA_Validity_data
## # A tibble: 200 × 7
## # Groups: Time_of_Display, Validity, Condition_code [8]
## Time_of_Display Validity Condition_code Participant_ID count mean sd
## <fct> <fct> <fct> <fct> <int> <dbl> <dbl>
## 1 Time100 Invalid face-noise 2 40 287. 31.8
## 2 Time100 Valid face-noise 2 40 284. 31.2
## 3 Time100 Invalid place-noise 2 40 296. 40.9
## 4 Time100 Valid place-noise 2 38 278. 23.7
## 5 Time100 Invalid face-noise 3 39 379. 38.4
## 6 Time100 Valid face-noise 3 37 373. 54.4
## 7 Time100 Invalid place-noise 3 39 388. 45.1
## 8 Time100 Valid place-noise 3 38 377. 49.0
## 9 Time100 Invalid face-noise 4 40 336. 44.1
## 10 Time100 Valid face-noise 4 40 314. 57.6
## # ℹ 190 more rows
mean_data <- RM_ANOVA_Validity_data %>%
group_by(Time_of_Display, Condition_code, Validity) %>%
summarise(
Mean_Value = mean(mean, na.rm = TRUE),
N = n_distinct(Participant_ID),
SE_Value = sd(mean, na.rm = TRUE) / sqrt(N),
.groups = "drop")
mean_data
## # A tibble: 8 × 6
## Time_of_Display Condition_code Validity Mean_Value N SE_Value
## <fct> <fct> <fct> <dbl> <int> <dbl>
## 1 Time100 face-noise Invalid 337. 25 6.72
## 2 Time100 face-noise Valid 332. 25 8.06
## 3 Time100 place-noise Invalid 331. 25 7.01
## 4 Time100 place-noise Valid 331. 25 6.89
## 5 Time900 face-noise Invalid 333. 25 7.07
## 6 Time900 face-noise Valid 325. 25 6.50
## 7 Time900 place-noise Invalid 335. 25 7.03
## 8 Time900 place-noise Valid 332. 25 6.86
#Define interaction order
mean_data$interaction_order <- factor(with(mean_data, interaction(Condition_code, Validity)),
levels = c("face-noise.Valid", "face-noise.Invalid",
"place-noise.Valid", "place-noise.Invalid"))
#Make sure Condition_code has the right order
mean_data$Condition_code <- factor(mean_data$Condition_code,
levels = c("face-noise", "place-noise"))
#Define colors of bars
fill_palette <- c("face-noise.Valid" = "#66c2a5",
"face-noise.Invalid" = "#FFFFFF",
"place-noise.Valid" = "#8da0cb",
"place-noise.Invalid" = "#FFFFFF")
#Define colors for borders
color_palette <- c("face-noise.Valid" = "#66c2a5",
"face-noise.Invalid" = "#66c2a5",
"place-noise.Valid" = "#8da0cb",
"place-noise.Invalid" = "#8da0cb")
#Define patterns for valid and invalid conditions
pattern_palette <- c("face-noise.Valid" = "none",
"face-noise.Invalid" = "stripe",
"place-noise.Valid" = "none",
"place-noise.Invalid" = "stripe")
#Custom y-axis breaks
custom_y_values <- seq(290, 340, by = 10)
custom_labels <- c("100 ms", "900 ms")
#Plotting
ggplot(mean_data,
aes(x = Time_of_Display,
y = Mean_Value,
fill = interaction_order,
pattern = interaction_order)) +
geom_bar_pattern(
stat = "identity",
position = position_dodge(width = 0.9),
aes(color = interaction_order),
pattern_fill = "black",
pattern_angle = 45,
pattern_density = 0.2,
pattern_spacing = 0.03,
pattern_key_scale_factor = 0.6
) +
scale_fill_manual(values = fill_palette) +
scale_pattern_manual(values = pattern_palette) +
scale_color_manual(values = color_palette) +
geom_errorbar(
aes(ymin = Mean_Value - SE_Value,
ymax = Mean_Value + SE_Value),
width = 0.2,
position = position_dodge(width = 0.9),
color = "black") +
scale_x_discrete(labels = custom_labels) +
xlab("Condition") +
ylab("Mean Reaction Time") +
ggtitle("Mean Reaction Time per Validity and Condition") +
theme_bw() +
theme(
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
plot.title = element_text(size = 16, hjust = 0.5)) +
coord_cartesian(ylim = y_limits)
#Plotting SOA and Condition interaction
#Creating a cleaned summary dataset that computes mean and SD of RTs
RM_ANOVA_SOA_data <- SH_Cleaned_Data %>%
group_by(Condition_code, Participant_ID, Time_of_Display) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Time_of_Display), factor) %>%
mutate(Condition_code = factor(Condition_code, levels = c("face-noise", "place-noise"))) %>%
arrange(Participant_ID, Condition_code, Time_of_Display)
#Print the summarized data structure and sample for debugging
print(str(RM_ANOVA_SOA_data))
## tibble [100 × 5] (S3: tbl_df/tbl/data.frame)
## $ Condition_code : Factor w/ 2 levels "face-noise","place-noise": 1 1 2 2 1 1 2 2 1 1 ...
## $ Participant_ID : Factor w/ 25 levels "2","3","4","5",..: 1 1 1 1 2 2 2 2 3 3 ...
## $ Time_of_Display: Factor w/ 2 levels "Time100","Time900": 1 2 1 2 1 2 1 2 1 2 ...
## $ mean_rt : num [1:100] 286 293 287 297 376 ...
## $ sd_rt : num [1:100] 31.3 31.8 34.5 31.5 46.6 ...
## NULL
print(head(RM_ANOVA_SOA_data, 20))
## # A tibble: 20 × 5
## Condition_code Participant_ID Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <dbl> <dbl>
## 1 face-noise 2 Time100 286. 31.3
## 2 face-noise 2 Time900 293. 31.8
## 3 place-noise 2 Time100 287. 34.5
## 4 place-noise 2 Time900 297. 31.5
## 5 face-noise 3 Time100 376. 46.6
## 6 face-noise 3 Time900 390. 46.8
## 7 place-noise 3 Time100 382. 47.0
## 8 place-noise 3 Time900 386. 44.3
## 9 face-noise 4 Time100 325. 52.1
## 10 face-noise 4 Time900 316. 51.3
## 11 place-noise 4 Time100 307. 43.8
## 12 place-noise 4 Time900 318. 47.9
## 13 face-noise 5 Time100 314. 38.0
## 14 face-noise 5 Time900 300. 43.0
## 15 place-noise 5 Time100 320. 41.4
## 16 place-noise 5 Time900 298. 37.5
## 17 face-noise 6 Time100 314. 36.9
## 18 face-noise 6 Time900 326. 41.7
## 19 place-noise 6 Time100 313. 33.0
## 20 place-noise 6 Time900 328. 43.1
#Calculate means and standard errors for RTs
mean_data <- RM_ANOVA_SOA_data %>%
group_by(Condition_code, Time_of_Display) %>%
summarise(
Mean_Value = mean(mean_rt, na.rm = TRUE),
N = n_distinct(Participant_ID),
SE_Value = sd(mean_rt, na.rm = TRUE) / sqrt(N),
.groups = "drop"
)
mean_data
## # A tibble: 4 × 5
## Condition_code Time_of_Display Mean_Value N SE_Value
## <fct> <fct> <dbl> <int> <dbl>
## 1 face-noise Time100 335. 25 7.15
## 2 face-noise Time900 329. 25 6.69
## 3 place-noise Time100 331. 25 6.79
## 4 place-noise Time900 333. 25 6.93
#Print the mean data structure and sample for debugging
print(str(mean_data))
## tibble [4 × 5] (S3: tbl_df/tbl/data.frame)
## $ Condition_code : Factor w/ 2 levels "face-noise","place-noise": 1 1 2 2
## $ Time_of_Display: Factor w/ 2 levels "Time100","Time900": 1 2 1 2
## $ Mean_Value : num [1:4] 335 329 331 333
## $ N : int [1:4] 25 25 25 25
## $ SE_Value : num [1:4] 7.15 6.69 6.79 6.93
## NULL
print(head(mean_data, 20))
## # A tibble: 4 × 5
## Condition_code Time_of_Display Mean_Value N SE_Value
## <fct> <fct> <dbl> <int> <dbl>
## 1 face-noise Time100 335. 25 7.15
## 2 face-noise Time900 329. 25 6.69
## 3 place-noise Time100 331. 25 6.79
## 4 place-noise Time900 333. 25 6.93
#Check for duplicates in the summarized data
duplicates <- RM_ANOVA_SOA_data %>%
group_by(Time_of_Display, Condition_code, Participant_ID) %>%
filter(n() > 1)
print(duplicates)
## # A tibble: 0 × 5
## # Groups: Time_of_Display, Condition_code, Participant_ID [0]
## # ℹ 5 variables: Condition_code <fct>, Participant_ID <fct>,
## # Time_of_Display <fct>, mean_rt <dbl>, sd_rt <dbl>
#Define the y-axis limits
y_limits <- c(300, 350)
#Change the names of the variables on the x-axis
custom_labels <- c("Time100", "Time900")
#Define interaction order
mean_data$interaction_order <- factor(with(mean_data, interaction(Time_of_Display, Condition_code)),
levels = c("Time100.face-noise", "Time100.place-noise",
"Time900.face-noise", "Time900.place-noise"))
#Make sure SOA has the right order
mean_data$Time_of_Display <- factor(mean_data$Time_of_Display,
levels = c("Time100", "Time900"))
#Define colors of bars
fill_palette <- c("Time100.face-noise" = "maroon4",
"Time100.place-noise" = "#FFFFFF",
"Time900.face-noise" = "orchid2",
"Time900.place-noise" = "#FFFFFF")
#Define colors for borders
color_palette <- c("Time100.face-noise" = "maroon4",
"Time100.place-noise" = "maroon4",
"Time900.face-noise" = "orchid2",
"Time900.place-noise" = "orchid2")
#Define patterns for valid and invalid conditions
pattern_palette <- c("Time100.face-noise" = "none",
"Time100.place-noise" = "stripe",
"Time900.face-noise" = "none",
"Time900.place-noise" = "stripe")
#X-axis labels for the two conditions
custom_labels <- c("Time 100", "Time 900")
#Plotting
ggplot(mean_data,
aes(x = Time_of_Display,
y = Mean_Value,
fill = interaction_order,
pattern = interaction_order)) +
geom_bar_pattern(
stat = "identity",
position = position_dodge(width = 0.9),
aes(color = interaction_order),
pattern_fill = "black",
pattern_angle = 45,
pattern_density = 0.2,
pattern_spacing = 0.03,
pattern_key_scale_factor = 0.6
) +
scale_fill_manual(values = fill_palette) +
scale_pattern_manual(values = pattern_palette) +
scale_color_manual(values = color_palette) +
geom_errorbar(
aes(ymin = Mean_Value - SE_Value,
ymax = Mean_Value + SE_Value),
width = 0.2,
position = position_dodge(width = 0.9),
color = "black"
) +
scale_x_discrete(labels = custom_labels) +
xlab("SOA") +
ylab("Mean Reaction Time") +
ggtitle("Mean Reaction Time per Time of Display and Condition") +
theme_bw() +
theme(
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
plot.title = element_text(size = 16, hjust = 0.5)
) +
coord_cartesian(ylim = y_limits)
#plotting individual performance
#Valid - Invalid difference per participant at 100 and 900
diff_data <- SH_Cleaned_Data %>%
group_by(Participant_ID, Time_of_Display, Validity) %>%
summarise(mean_rt = mean(key_resp.rt), .groups = 'drop') %>%
pivot_wider(names_from = Validity, values_from = mean_rt) %>%
mutate(diff = Invalid - Valid)
#plotting
ggplot(diff_data, aes(x = Time_of_Display, y = diff)) +
geom_boxplot() +
geom_jitter(width = 0.2) +
ylab("RT Difference (Invalid - Valid)") +
xlab("Time of Display") +
ggtitle("Validity Effect Size by SOA")
#####################trends################
#Create participant-level validity effect (Invalid - Valid) for each SOA and condition
validity_diff_data <- SH_Cleaned_Data %>%
group_by(Participant_ID, Time_of_Display, Condition_code, Validity) %>%
summarise(mean_rt = mean(key_resp.rt), .groups = 'drop') %>%
pivot_wider(names_from = Validity, values_from = mean_rt) %>%
mutate(Validity_Effect = Invalid - Valid)
#Set factor levels for SOA order
validity_diff_data$Time_of_Display <- factor(validity_diff_data$Time_of_Display,
levels = c("Time100", "Time900"))
#Plot for each Condition_code
ggplot(validity_diff_data, aes(x = Time_of_Display, y = Validity_Effect, group = Participant_ID, color = Participant_ID)) +
geom_line(size = 1) +
geom_point(size = 2) +
facet_wrap(~ Condition_code) +
labs(
title = "Validity Effect (Invalid – Valid RT) by SOA",
x = "Time of Display",
y = "Validity Effect (ms)"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
strip.text = element_text(size = 14),
legend.position = "none"
) + stat_summary(aes(group = 1), fun = mean, geom = "line", color = "black", size = 1.2, linetype = "dashed")
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
###############separated by Validity#######################
#Create a summary dataset: Mean RT per Participant × SOA × Condition × Validity
valid_invalid_data <- SH_Cleaned_Data %>%
group_by(Participant_ID, Time_of_Display, Condition_code, Validity) %>%
summarise(mean_rt = mean(key_resp.rt), .groups = 'drop')
# Set factor levels for correct ordering
valid_invalid_data$Time_of_Display <- factor(valid_invalid_data$Time_of_Display, levels = c("Time100", "Time900"))
#Plot for Valid Trials
valid_data <- filter(valid_invalid_data, Validity == "Valid")
ggplot(valid_data, aes(x = Time_of_Display, y = mean_rt, group = Participant_ID, color = Participant_ID)) +
geom_line(size = 1) +
geom_point(size = 2) +
facet_wrap(~ Condition_code) +
stat_summary(aes(group = 1), fun = mean, geom = "line", color = "black", size = 1.2, linetype = "dashed") +
labs(
title = "Valid Trials: RT by SOA",
x = "Time of Display",
y = "Reaction Time (ms)"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
strip.text = element_text(size = 14),
legend.position = "none"
)
#Plot for Invalid Trials
invalid_data <- filter(valid_invalid_data, Validity == "Invalid")
ggplot(invalid_data, aes(x = Time_of_Display, y = mean_rt, group = Participant_ID, color = Participant_ID)) +
geom_line(size = 1) +
geom_point(size = 2) +
facet_wrap(~ Condition_code) +
stat_summary(aes(group = 1), fun = mean, geom = "line", color = "black", size = 1.2, linetype = "dashed") +
labs(
title = "Invalid Trials: RT by SOA",
x = "Time of Display",
y = "Reaction Time (ms)"
) +
theme_minimal() +
theme(
plot.title = element_text(size = 16, face = "bold", hjust = 0.5),
axis.title = element_text(size = 14),
axis.text = element_text(size = 12),
strip.text = element_text(size = 14),
legend.position = "none"
)
#Running t-tests
#t-test comparing the conditions in 100 SOA
#Filter and summarize the data
RM_ANOVA_SOA_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time100") %>%
group_by(Participant_ID, Condition_code, Time_of_Display) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Time_of_Display), factor) %>%
arrange(Participant_ID, Condition_code, Time_of_Display)
#View the summarized data
print(RM_ANOVA_SOA_data)
## # A tibble: 50 × 5
## Participant_ID Condition_code Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <dbl> <dbl>
## 1 2 face-noise Time100 286. 31.3
## 2 2 place-noise Time100 287. 34.5
## 3 3 face-noise Time100 376. 46.6
## 4 3 place-noise Time100 382. 47.0
## 5 4 face-noise Time100 325. 52.1
## 6 4 place-noise Time100 307. 43.8
## 7 5 face-noise Time100 314. 38.0
## 8 5 place-noise Time100 320. 41.4
## 9 6 face-noise Time100 314. 36.9
## 10 6 place-noise Time100 313. 33.0
## # ℹ 40 more rows
#Extract vectors for each validity condition
face_means <- RM_ANOVA_SOA_data %>%
filter(Condition_code == "face-noise") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
place_means <- RM_ANOVA_SOA_data %>%
filter(Condition_code == "place-noise") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
#Perform the paired t-test
res <- t.test(face_means, place_means, paired = TRUE)
#View the t-test results
print(res)
##
## Paired t-test
##
## data: face_means and place_means
## t = 2.0992, df = 24, p-value = 0.0465
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## 0.06184899 7.29713426
## sample estimates:
## mean difference
## 3.679492
#Summary statistics
summary_stats <- RM_ANOVA_SOA_data %>%
group_by(Condition_code) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n())
#View summary statistics
print(summary_stats)
## # A tibble: 2 × 4
## Condition_code mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 face-noise 335. NA 25
## 2 place-noise 331. NA 25
#t-test comparing the conditions in 900 SOA
#Filter and summarize the data
RM_ANOVA_SOA_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time900") %>%
group_by(Participant_ID, Condition_code, Time_of_Display) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Time_of_Display), factor) %>%
arrange(Participant_ID, Condition_code, Time_of_Display)
#View the summarized data
print(RM_ANOVA_SOA_data)
## # A tibble: 50 × 5
## Participant_ID Condition_code Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <dbl> <dbl>
## 1 2 face-noise Time900 293. 31.8
## 2 2 place-noise Time900 297. 31.5
## 3 3 face-noise Time900 390. 46.8
## 4 3 place-noise Time900 386. 44.3
## 5 4 face-noise Time900 316. 51.3
## 6 4 place-noise Time900 318. 47.9
## 7 5 face-noise Time900 300. 43.0
## 8 5 place-noise Time900 298. 37.5
## 9 6 face-noise Time900 326. 41.7
## 10 6 place-noise Time900 328. 43.1
## # ℹ 40 more rows
#Extract vectors for each validity condition
face_means <- RM_ANOVA_SOA_data %>%
filter(Condition_code == "face-noise") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
place_means <- RM_ANOVA_SOA_data %>%
filter(Condition_code == "place-noise") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
#Perform the paired t-test
res <- t.test(face_means, place_means, paired = TRUE)
#View the t-test results
print(res)
##
## Paired t-test
##
## data: face_means and place_means
## t = -3.0704, df = 24, p-value = 0.005247
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -7.438349 -1.458194
## sample estimates:
## mean difference
## -4.448272
#Summary statistics
summary_stats <- RM_ANOVA_SOA_data %>%
group_by(Condition_code) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n())
#View summary statistics
print(summary_stats)
## # A tibble: 2 × 4
## Condition_code mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 face-noise 329. NA 25
## 2 place-noise 333. NA 25
#t-test comparing the valid vs invalid in 100 ms for face-noise
#Filter and summarize the data
RM_ANOVA_Validity_data <- SH_Cleaned_Data %>%
filter(Condition_code == "face-noise", Time_of_Display == "Time100") %>%
group_by(Participant_ID, Validity, Condition_code, Time_of_Display) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Time_of_Display), factor) %>%
arrange(Participant_ID, Condition_code, Time_of_Display)
#View the summarized data
print(RM_ANOVA_Validity_data)
## # A tibble: 50 × 6
## Participant_ID Validity Condition_code Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 2 Invalid face-noise Time100 287. 31.8
## 2 2 Valid face-noise Time100 284. 31.2
## 3 3 Invalid face-noise Time100 379. 38.4
## 4 3 Valid face-noise Time100 373. 54.4
## 5 4 Invalid face-noise Time100 336. 44.1
## 6 4 Valid face-noise Time100 314. 57.6
## 7 5 Invalid face-noise Time100 318. 38.0
## 8 5 Valid face-noise Time100 309. 37.9
## 9 6 Invalid face-noise Time100 319. 42.2
## 10 6 Valid face-noise Time100 309. 30.3
## # ℹ 40 more rows
#Extract vectors for each validity condition
valid_means <- RM_ANOVA_Validity_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means <- RM_ANOVA_Validity_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
#Ensure the vectors are aligned by Participant_ID
if (length(valid_means) != length(invalid_means)) {stop("Mismatch in the number of participants between validity conditions")}
#Perform the paired t-test
res <- t.test(valid_means, invalid_means, paired = TRUE)
#View the t-test results
print(res)
##
## Paired t-test
##
## data: valid_means and invalid_means
## t = -1.4069, df = 24, p-value = 0.1723
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -12.19713 2.30902
## sample estimates:
## mean difference
## -4.944053
#Summary statistics
summary_stats <- RM_ANOVA_Validity_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n())
#View summary statistics
print(summary_stats)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 337. NA 25
## 2 Valid 332. NA 25
#t-test comparing the valid vs invalid in 100 ms for place-noise
#Filter and summarize the data
RM_ANOVA_Validity_data <- SH_Cleaned_Data %>%
filter(Condition_code == "place-noise", Time_of_Display == "Time100") %>%
group_by(Participant_ID, Validity, Condition_code, Time_of_Display) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Time_of_Display), factor) %>%
arrange(Participant_ID, Condition_code, Time_of_Display)
#View the summarized data
print(RM_ANOVA_Validity_data)
## # A tibble: 50 × 6
## Participant_ID Validity Condition_code Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 2 Invalid place-noise Time100 296. 40.9
## 2 2 Valid place-noise Time100 278. 23.7
## 3 3 Invalid place-noise Time100 388. 45.1
## 4 3 Valid place-noise Time100 377. 49.0
## 5 4 Invalid place-noise Time100 315. 46.5
## 6 4 Valid place-noise Time100 298. 39.5
## 7 5 Invalid place-noise Time100 320. 28.4
## 8 5 Valid place-noise Time100 319. 51.6
## 9 6 Invalid place-noise Time100 314. 31.8
## 10 6 Valid place-noise Time100 312. 34.6
## # ℹ 40 more rows
#Extract vectors for each validity condition
valid_means <- RM_ANOVA_Validity_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means <- RM_ANOVA_Validity_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
#Ensure the vectors are aligned by Participant_ID
if (length(valid_means) != length(invalid_means)) {stop("Mismatch in the number of participants between validity conditions")}
#Perform the paired t-test
res <- t.test(valid_means, invalid_means, paired = TRUE)
#View the t-test results
print(res)
##
## Paired t-test
##
## data: valid_means and invalid_means
## t = -0.168, df = 24, p-value = 0.868
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -6.724711 5.712368
## sample estimates:
## mean difference
## -0.5061712
#Summary statistics
summary_stats <- RM_ANOVA_Validity_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n())
#View summary statistics
print(summary_stats)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 331. NA 25
## 2 Valid 331. NA 25
#t-test comparing the valid vs invalid in 900 ms for face-noise
#Filter and summarize the data
RM_ANOVA_Validity_data <- SH_Cleaned_Data %>%
filter(Condition_code == "face-noise", Time_of_Display == "Time900") %>%
group_by(Participant_ID, Validity, Condition_code, Time_of_Display) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Time_of_Display), factor) %>%
arrange(Participant_ID, Condition_code, Time_of_Display)
#View the summarized data
print(RM_ANOVA_Validity_data)
## # A tibble: 50 × 6
## Participant_ID Validity Condition_code Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 2 Invalid face-noise Time900 297. 30.1
## 2 2 Valid face-noise Time900 290. 33.2
## 3 3 Invalid face-noise Time900 388. 45.6
## 4 3 Valid face-noise Time900 391. 48.0
## 5 4 Invalid face-noise Time900 327. 54.1
## 6 4 Valid face-noise Time900 306. 46.1
## 7 5 Invalid face-noise Time900 300. 45.7
## 8 5 Valid face-noise Time900 300. 40.3
## 9 6 Invalid face-noise Time900 329. 47.1
## 10 6 Valid face-noise Time900 323. 35.6
## # ℹ 40 more rows
#Extract vectors for each validity condition
valid_means <- RM_ANOVA_Validity_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means <- RM_ANOVA_Validity_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
#Ensure the vectors are aligned by Participant_ID
if (length(valid_means) != length(invalid_means)) {stop("Mismatch in the number of participants between validity conditions")}
#Perform the paired t-test
res <- t.test(valid_means, invalid_means, paired = TRUE)
#View the t-test results
print(res)
##
## Paired t-test
##
## data: valid_means and invalid_means
## t = -4.3287, df = 24, p-value = 0.000229
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -11.388555 -4.034838
## sample estimates:
## mean difference
## -7.711697
#Summary statistics
summary_stats <- RM_ANOVA_Validity_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n())
#View summary statistics
print(summary_stats)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 333. NA 25
## 2 Valid 325. NA 25
#t-test comparing the valid vs invalid in 900 ms for place-noise
#Filter and summarize the data
RM_ANOVA_Validity_data <- SH_Cleaned_Data %>%
filter(Condition_code == "place-noise", Time_of_Display == "Time900") %>%
group_by(Participant_ID, Validity, Condition_code, Time_of_Display) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Time_of_Display), factor) %>%
arrange(Participant_ID, Condition_code, Time_of_Display)
#View the summarized data
print(RM_ANOVA_Validity_data)
## # A tibble: 50 × 6
## Participant_ID Validity Condition_code Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 2 Invalid place-noise Time900 299. 27.7
## 2 2 Valid place-noise Time900 296. 35.0
## 3 3 Invalid place-noise Time900 386. 39.9
## 4 3 Valid place-noise Time900 385. 48.5
## 5 4 Invalid place-noise Time900 321. 48.1
## 6 4 Valid place-noise Time900 316. 47.8
## 7 5 Invalid place-noise Time900 300. 38.2
## 8 5 Valid place-noise Time900 297. 37.0
## 9 6 Invalid place-noise Time900 330. 45.1
## 10 6 Valid place-noise Time900 327. 41.1
## # ℹ 40 more rows
#Extract vectors for each validity condition
valid_means <- RM_ANOVA_Validity_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means <- RM_ANOVA_Validity_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
#Ensure the vectors are aligned by Participant_ID
if (length(valid_means) != length(invalid_means)) {stop("Mismatch in the number of participants between validity conditions")}
#Perform the paired t-test
res <- t.test(valid_means, invalid_means, paired = TRUE)
#View the t-test results
print(res)
##
## Paired t-test
##
## data: valid_means and invalid_means
## t = -2.9998, df = 24, p-value = 0.006208
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -5.0516061 -0.9336866
## sample estimates:
## mean difference
## -2.992646
#Summary statistics
summary_stats <- RM_ANOVA_Validity_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n())
#View summary statistics
print(summary_stats)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 335. NA 25
## 2 Valid 332. NA 25
#Benjamini-Hochberg correction
p_vals <- c(
face_100 = 0.17,
place_100 = 0.87,
face_900 = 0.000229,
place_900 = 0.006208)
p_adj <- p.adjust(p_vals, method = "BH")
p_adj
## face_100 place_100 face_900 place_900
## 0.2266667 0.8700000 0.0009160 0.0124160
#Running t-test for Conditions and Validity Collapsed across SOAs #testing Face-Noise
#Filter and summarize the data
RM_ANOVA_Validity_data <- SH_Cleaned_Data %>%
filter(Condition_code == "face-noise") %>%
group_by(Participant_ID, Validity) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = "drop"
) %>%
mutate(across(c(Participant_ID, Validity), as.factor)) %>%
arrange(Participant_ID, Validity)
print(RM_ANOVA_Validity_data)
## # A tibble: 50 × 4
## Participant_ID Validity mean_rt sd_rt
## <fct> <fct> <dbl> <dbl>
## 1 2 Invalid 294. 30.7
## 2 2 Valid 289. 32.7
## 3 3 Invalid 386. 44.0
## 4 3 Valid 387. 50.0
## 5 4 Invalid 330. 51.7
## 6 4 Valid 308. 49.2
## 7 5 Invalid 305. 44.5
## 8 5 Valid 303. 39.8
## 9 6 Invalid 326. 46.0
## 10 6 Valid 320. 34.9
## # ℹ 40 more rows
# Pivot to guarantee correct pairing by Participant_ID
wide_data <- RM_ANOVA_Validity_data %>%
select(Participant_ID, Validity, mean_rt) %>%
pivot_wider(names_from = Validity, values_from = mean_rt)
# Keep only participants who have both Valid and Invalid
wide_data_complete <- wide_data %>%
drop_na(Valid, Invalid)
# Paired t-test: Valid vs Invalid
res <- t.test(wide_data_complete$Valid, wide_data_complete$Invalid, paired = TRUE)
print(res)
##
## Paired t-test
##
## data: wide_data_complete$Valid and wide_data_complete$Invalid
## t = -4.4986, df = 24, p-value = 0.0001487
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -10.502675 -3.896481
## sample estimates:
## mean difference
## -7.199578
# Summary statistics (across participants)
summary_stats <- RM_ANOVA_Validity_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt, na.rm = TRUE),
sd_rt = sd(mean_rt, na.rm = TRUE),
n = n_distinct(Participant_ID),
.groups = "drop"
)
print(summary_stats)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 334. NA 25
## 2 Valid 327. NA 25
#testing Place-Noise
#Filter and summarize the data
RM_ANOVA_Validity_data <- SH_Cleaned_Data %>%
filter(Condition_code == "place-noise") %>%
group_by(Participant_ID, Validity) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = "drop"
) %>%
mutate(across(c(Participant_ID, Validity), as.factor)) %>%
arrange(Participant_ID, Validity)
# View the summarized data
print(RM_ANOVA_Validity_data)
## # A tibble: 50 × 4
## Participant_ID Validity mean_rt sd_rt
## <fct> <fct> <dbl> <dbl>
## 1 2 Invalid 298. 31.4
## 2 2 Valid 291. 33.4
## 3 3 Invalid 387. 41.1
## 4 3 Valid 383. 48.6
## 5 4 Invalid 319. 47.6
## 6 4 Valid 311. 46.4
## 7 5 Invalid 305. 37.0
## 8 5 Valid 302. 42.2
## 9 6 Invalid 326. 42.6
## 10 6 Valid 323. 40.0
## # ℹ 40 more rows
# Pivot to guarantee correct pairing by Participant_ID
wide_data <- RM_ANOVA_Validity_data %>%
select(Participant_ID, Validity, mean_rt) %>%
pivot_wider(names_from = Validity, values_from = mean_rt)
# Keep only participants who have both Valid and Invalid
wide_data_complete <- wide_data %>%
drop_na(Valid, Invalid)
# Paired t-test: Valid vs Invalid
res <- t.test(wide_data_complete$Valid, wide_data_complete$Invalid, paired = TRUE)
print(res)
##
## Paired t-test
##
## data: wide_data_complete$Valid and wide_data_complete$Invalid
## t = -2.0061, df = 24, p-value = 0.05625
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -4.77869825 0.06791688
## sample estimates:
## mean difference
## -2.355391
# Summary statistics (across participants)
summary_stats <- RM_ANOVA_Validity_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt, na.rm = TRUE),
sd_rt = sd(mean_rt, na.rm = TRUE),
n = n_distinct(Participant_ID),
.groups = "drop"
)
print(summary_stats)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 334. NA 25
## 2 Valid 331. NA 25
#Including the Visual Field in the Model
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
group_by(Time_of_Display, Condition_code, Validity, Visual_Field, Participant_ID) %>%
summarise(
count = n(),
mean = mean(key_resp.rt, na.rm = TRUE),
sd = sd(key_resp.rt, na.rm = TRUE)
) %>%
mutate_at(vars(Participant_ID, Condition_code, Time_of_Display, Validity, Visual_Field), factor) %>%
arrange(Participant_ID, Condition_code, Time_of_Display, Validity, Visual_Field)
## `summarise()` has grouped output by 'Time_of_Display', 'Condition_code',
## 'Validity', 'Visual_Field'. You can override using the `.groups` argument.
RM_ANOVA_VF_data
## # A tibble: 400 × 8
## # Groups: Time_of_Display, Condition_code, Validity, Visual_Field [16]
## Time_of_Display Condition_code Validity Visual_Field Participant_ID count
## <fct> <fct> <fct> <fct> <fct> <int>
## 1 Time100 face-noise Invalid right 2 20
## 2 Time100 face-noise Invalid left 2 20
## 3 Time100 face-noise Valid right 2 20
## 4 Time100 face-noise Valid left 2 20
## 5 Time900 face-noise Invalid right 2 59
## 6 Time900 face-noise Invalid left 2 60
## 7 Time900 face-noise Valid right 2 59
## 8 Time900 face-noise Valid left 2 59
## 9 Time100 place-noise Invalid right 2 20
## 10 Time100 place-noise Invalid left 2 20
## # ℹ 390 more rows
## # ℹ 2 more variables: mean <dbl>, sd <dbl>
RM_anova_VF <- ezANOVA(
data = RM_ANOVA_VF_data,
dv = .(mean),
wid = .(Participant_ID),
within = .(Time_of_Display, Condition_code, Validity, Visual_Field), detailed = TRUE)
print(RM_anova_VF)
## $ANOVA
## Effect DFn DFd SSn
## 1 (Intercept) 1 24 4.410124e+07
## 2 Time_of_Display 1 24 4.475434e+02
## 3 Condition_code 1 24 3.637282e+00
## 4 Validity 1 24 1.637574e+03
## 5 Visual_Field 1 24 5.300197e-03
## 6 Time_of_Display:Condition_code 1 24 1.645223e+03
## 7 Time_of_Display:Validity 1 24 1.759966e+02
## 8 Condition_code:Validity 1 24 5.161618e+02
## 9 Time_of_Display:Visual_Field 1 24 3.941308e-01
## 10 Condition_code:Visual_Field 1 24 7.381775e+02
## 11 Validity:Visual_Field 1 24 1.084749e+02
## 12 Time_of_Display:Condition_code:Validity 1 24 4.404291e-01
## 13 Time_of_Display:Condition_code:Visual_Field 1 24 1.144954e+02
## 14 Time_of_Display:Validity:Visual_Field 1 24 3.470410e+02
## 15 Condition_code:Validity:Visual_Field 1 24 6.828298e+01
## 16 Time_of_Display:Condition_code:Validity:Visual_Field 1 24 2.443175e+00
## SSd F p p<.05 ges
## 1 442411.531 2.392410e+03 1.492104e-25 * 9.885693e-01
## 2 11933.621 9.000656e-01 3.522201e-01 8.768712e-04
## 3 2300.825 3.794064e-02 8.472019e-01 7.132725e-06
## 4 4700.357 8.361447e+00 8.016516e-03 * 3.201033e-03
## 5 18590.963 6.842288e-06 9.979345e-01 1.039378e-08
## 6 4047.129 9.756386e+00 4.619034e-03 * 3.215936e-03
## 7 4702.342 8.982585e-01 3.526953e-01 3.450135e-04
## 8 3379.101 3.666029e+00 6.752611e-02 1.011179e-03
## 9 3284.766 2.879700e-03 9.576480e-01 7.728970e-07
## 10 1984.884 8.925589e+00 6.391588e-03 * 1.445487e-03
## 11 1493.694 1.742926e+00 1.992219e-01 2.126760e-04
## 12 2829.605 3.735609e-03 9.517701e-01 8.636887e-07
## 13 2508.385 1.095482e+00 3.056870e-01 2.244772e-04
## 14 1117.309 7.454505e+00 1.166586e-02 * 6.800908e-04
## 15 2077.238 7.889281e-01 3.832402e-01 1.338862e-04
## 16 2577.470 2.274952e-02 8.813708e-01 4.791087e-06
#Calculating partial Effect Size
anova_table_VF <- RM_anova_VF$ANOVA
#Calculate partial eta squared for each effect
anova_table_VF$partial_eta_squared <- anova_table_VF$SSn / (anova_table_VF$SSn + anova_table_VF$SSd)
print(anova_table_VF)
## Effect DFn DFd SSn
## 1 (Intercept) 1 24 4.410124e+07
## 2 Time_of_Display 1 24 4.475434e+02
## 3 Condition_code 1 24 3.637282e+00
## 4 Validity 1 24 1.637574e+03
## 5 Visual_Field 1 24 5.300197e-03
## 6 Time_of_Display:Condition_code 1 24 1.645223e+03
## 7 Time_of_Display:Validity 1 24 1.759966e+02
## 8 Condition_code:Validity 1 24 5.161618e+02
## 9 Time_of_Display:Visual_Field 1 24 3.941308e-01
## 10 Condition_code:Visual_Field 1 24 7.381775e+02
## 11 Validity:Visual_Field 1 24 1.084749e+02
## 12 Time_of_Display:Condition_code:Validity 1 24 4.404291e-01
## 13 Time_of_Display:Condition_code:Visual_Field 1 24 1.144954e+02
## 14 Time_of_Display:Validity:Visual_Field 1 24 3.470410e+02
## 15 Condition_code:Validity:Visual_Field 1 24 6.828298e+01
## 16 Time_of_Display:Condition_code:Validity:Visual_Field 1 24 2.443175e+00
## SSd F p p<.05 ges partial_eta_squared
## 1 442411.531 2.392410e+03 1.492104e-25 * 9.885693e-01 9.900679e-01
## 2 11933.621 9.000656e-01 3.522201e-01 8.768712e-04 3.614712e-02
## 3 2300.825 3.794064e-02 8.472019e-01 7.132725e-06 1.578365e-03
## 4 4700.357 8.361447e+00 8.016516e-03 * 3.201033e-03 2.583768e-01
## 5 18590.963 6.842288e-06 9.979345e-01 1.039378e-08 2.850953e-07
## 6 4047.129 9.756386e+00 4.619034e-03 * 3.215936e-03 2.890234e-01
## 7 4702.342 8.982585e-01 3.526953e-01 3.450135e-04 3.607716e-02
## 8 3379.101 3.666029e+00 6.752611e-02 1.011179e-03 1.325101e-01
## 9 3284.766 2.879700e-03 9.576480e-01 7.728970e-07 1.199731e-04
## 10 1984.884 8.925589e+00 6.391588e-03 * 1.445487e-03 2.710836e-01
## 11 1493.694 1.742926e+00 1.992219e-01 2.126760e-04 6.770505e-02
## 12 2829.605 3.735609e-03 9.517701e-01 8.636887e-07 1.556261e-04
## 13 2508.385 1.095482e+00 3.056870e-01 2.244772e-04 4.365256e-02
## 14 1117.309 7.454505e+00 1.166586e-02 * 6.800908e-04 2.369932e-01
## 15 2077.238 7.889281e-01 3.832402e-01 1.338862e-04 3.182582e-02
## 16 2577.470 2.274952e-02 8.813708e-01 4.791087e-06 9.469989e-04
#Plotting with VF included
#Summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
group_by(Validity, Condition_code, Participant_ID, Visual_Field) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Validity, Visual_Field), factor) %>%
arrange(Participant_ID, Condition_code, Validity, Visual_Field)
#Set factor levels to ensure the correct order
RM_ANOVA_VF_data$Validity <- factor(RM_ANOVA_VF_data$Validity, levels = c("Valid", "Invalid"))
RM_ANOVA_VF_data$Visual_Field <- factor(RM_ANOVA_VF_data$Visual_Field, levels = c("left", "right"))
#Print the summarized data structure and sample for debugging
print(str(RM_ANOVA_VF_data))
## tibble [200 × 6] (S3: tbl_df/tbl/data.frame)
## $ Validity : Factor w/ 2 levels "Valid","Invalid": 2 2 1 1 2 2 1 1 2 2 ...
## $ Condition_code: Factor w/ 2 levels "face-noise","place-noise": 1 1 1 1 2 2 2 2 1 1 ...
## $ Participant_ID: Factor w/ 25 levels "2","3","4","5",..: 1 1 1 1 1 1 1 1 2 2 ...
## $ Visual_Field : Factor w/ 2 levels "left","right": 2 1 2 1 2 1 2 1 2 1 ...
## $ mean_rt : num [1:200] 296 293 292 286 298 ...
## $ sd_rt : num [1:200] 32.5 29 30.2 35 26.6 ...
## NULL
print(head(RM_ANOVA_VF_data, 20))
## # A tibble: 20 × 6
## Validity Condition_code Participant_ID Visual_Field mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 Invalid face-noise 2 right 296. 32.5
## 2 Invalid face-noise 2 left 293. 29.0
## 3 Valid face-noise 2 right 292. 30.2
## 4 Valid face-noise 2 left 286. 35.0
## 5 Invalid place-noise 2 right 298. 26.6
## 6 Invalid place-noise 2 left 298. 35.7
## 7 Valid place-noise 2 right 292. 35.5
## 8 Valid place-noise 2 left 291. 31.5
## 9 Invalid face-noise 3 right 393. 41.8
## 10 Invalid face-noise 3 left 379. 45.1
## 11 Valid face-noise 3 right 398. 49.6
## 12 Valid face-noise 3 left 376. 48.2
## 13 Invalid place-noise 3 right 389. 40.5
## 14 Invalid place-noise 3 left 385. 42.0
## 15 Valid place-noise 3 right 377. 48.9
## 16 Valid place-noise 3 left 390. 47.8
## 17 Invalid face-noise 4 right 334. 51.2
## 18 Invalid face-noise 4 left 326. 52.2
## 19 Valid face-noise 4 right 310. 54.7
## 20 Valid face-noise 4 left 305. 43.2
#Calculate means and standard errors for each variable, including Visual_Field
mean_data_VF <- RM_ANOVA_VF_data %>%
group_by(Validity, Condition_code, Visual_Field) %>%
summarise(
Mean_Value = mean(mean_rt, na.rm = TRUE),
N = n_distinct(Participant_ID),
SE_Value = sd(mean_rt, na.rm = TRUE) / sqrt(N),
.groups = "drop")
mean_data_VF
## # A tibble: 8 × 6
## Validity Condition_code Visual_Field Mean_Value N SE_Value
## <fct> <fct> <fct> <dbl> <int> <dbl>
## 1 Valid face-noise left 325. 25 6.75
## 2 Valid face-noise right 328. 25 6.85
## 3 Valid place-noise left 333. 25 7.07
## 4 Valid place-noise right 330. 25 6.78
## 5 Invalid face-noise left 333. 25 7.52
## 6 Invalid face-noise right 335. 25 6.67
## 7 Invalid place-noise left 334. 25 7.01
## 8 Invalid place-noise right 333. 25 7.15
#Print the mean data structure and sample for debugging
print(str(mean_data_VF))
## tibble [8 × 6] (S3: tbl_df/tbl/data.frame)
## $ Validity : Factor w/ 2 levels "Valid","Invalid": 1 1 1 1 2 2 2 2
## $ Condition_code: Factor w/ 2 levels "face-noise","place-noise": 1 1 2 2 1 1 2 2
## $ Visual_Field : Factor w/ 2 levels "left","right": 1 2 1 2 1 2 1 2
## $ Mean_Value : num [1:8] 325 328 333 330 333 ...
## $ N : int [1:8] 25 25 25 25 25 25 25 25
## $ SE_Value : num [1:8] 6.75 6.85 7.07 6.78 7.52 ...
## NULL
print(head(mean_data_VF, 20))
## # A tibble: 8 × 6
## Validity Condition_code Visual_Field Mean_Value N SE_Value
## <fct> <fct> <fct> <dbl> <int> <dbl>
## 1 Valid face-noise left 325. 25 6.75
## 2 Valid face-noise right 328. 25 6.85
## 3 Valid place-noise left 333. 25 7.07
## 4 Valid place-noise right 330. 25 6.78
## 5 Invalid face-noise left 333. 25 7.52
## 6 Invalid face-noise right 335. 25 6.67
## 7 Invalid place-noise left 334. 25 7.01
## 8 Invalid place-noise right 333. 25 7.15
#Check for duplicates in the summarized data
duplicates <- RM_ANOVA_VF_data %>%
group_by(Validity, Condition_code, Participant_ID, Visual_Field) %>%
filter(n() > 1)
print(duplicates)
## # A tibble: 0 × 6
## # Groups: Validity, Condition_code, Participant_ID, Visual_Field [0]
## # ℹ 6 variables: Validity <fct>, Condition_code <fct>, Participant_ID <fct>,
## # Visual_Field <fct>, mean_rt <dbl>, sd_rt <dbl>
#Define the y-axis limits
y_limits <- c(300, 350)
#Change the names of the variables on the x-axis
custom_labels <- c("face-noise" = "face-noise",
"place-noise" = "place-noise")
#Define the interaction order
mean_data_VF <- mean_data_VF %>%
mutate(interaction_order = paste0(Condition_code, ".", Validity))
mean_data_VF$interaction_order <- factor(
mean_data_VF$interaction_order,
levels = c("face-noise.Valid", "face-noise.Invalid",
"place-noise.Valid", "place-noise.Invalid"))
mean_data_VF$Condition_code <- factor(mean_data_VF$Condition_code,
levels = c("face-noise", "place-noise"))
#key for fill (condition + validity)
mean_data_VF <- mean_data_VF %>%
mutate(fill_key = paste0(Condition_code, ".", Validity))
#fill colors
fill_palette <- c(
"face-noise.Valid" = "#66c2a5",
"face-noise.Invalid" = "#FFFFFF",
"place-noise.Valid" = "#8da0cb",
"place-noise.Invalid" = "#FFFFFF")
#borders color
border_palette <- c(
"face-noise" = "#66c2a5",
"place-noise" = "#8da0cb")
#fill pattern
pattern_palette <- c(
"Valid" = "none",
"Invalid" = "stripe")
#Plotting
ggplot(mean_data_VF,aes(x = Condition_code, y = Mean_Value, group = Validity)) +
geom_col_pattern(aes(fill = fill_key, color = Condition_code, pattern = Validity),
position = position_dodge(width = 0.9),
width = 0.85,
linewidth = 0.7,
pattern_fill = "black",
pattern_colour = "black",
pattern_density = 0.25,
pattern_spacing = 0.04,
pattern_angle = 45) +
geom_errorbar(aes(
ymin = Mean_Value - SE_Value,
ymax = Mean_Value + SE_Value),
width = 0.2,
position = position_dodge(width = 0.9),
color = "black",
linewidth = 0.5) +
scale_fill_manual(values = fill_palette) +
scale_color_manual(values = border_palette) +
scale_pattern_manual(values = pattern_palette) +
facet_wrap(~ Visual_Field,
ncol = 2,
labeller = labeller(Visual_Field = c(left = "Left Visual Field", right = "Right Visual Field"))) +
scale_x_discrete(labels = c("face-noise" = "face-noise", "place-noise" = "place-noise")) +
xlab("Condition") +
ylab("Mean Reaction Time") +
ggtitle("Mean Reaction Time per Validity, Condition, and Visual Field") +
theme_bw() +
theme(
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
plot.title = element_text(size = 16, hjust = 0.5)) +
coord_cartesian(ylim = y_limits)
#Checking the Distribution of RTs accross VFs
mean_data_VF %>%
arrange(Condition_code, Validity, Visual_Field) %>%
print(n = Inf)
## # A tibble: 8 × 8
## Validity Condition_code Visual_Field Mean_Value N SE_Value
## <fct> <fct> <fct> <dbl> <int> <dbl>
## 1 Valid face-noise left 325. 25 6.75
## 2 Valid face-noise right 328. 25 6.85
## 3 Invalid face-noise left 333. 25 7.52
## 4 Invalid face-noise right 335. 25 6.67
## 5 Valid place-noise left 333. 25 7.07
## 6 Valid place-noise right 330. 25 6.78
## 7 Invalid place-noise left 334. 25 7.01
## 8 Invalid place-noise right 333. 25 7.15
## # ℹ 2 more variables: interaction_order <fct>, fill_key <chr>
#Plotting with SOAs
#Plotting across SOAs
#Creating a cleaned summary dataset that computes mean and SD of RTs
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
group_by(Time_of_Display, Validity, Condition_code, Visual_Field, Participant_ID) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
n_trials = sum(!is.na(key_resp.rt)),
.groups = "drop"
) %>%
mutate(across(c(Time_of_Display, Validity, Condition_code, Visual_Field, Participant_ID), factor))
#set factor order
RM_ANOVA_VF_data$Validity <- factor(RM_ANOVA_VF_data$Validity, levels = c("Valid", "Invalid"))
RM_ANOVA_VF_data$Visual_Field <- factor(RM_ANOVA_VF_data$Visual_Field, levels = c("left", "right"))
RM_ANOVA_VF_data$Condition_code <- factor(RM_ANOVA_VF_data$Condition_code, levels = c("face-noise", "place-noise"))
#Group means + SE across participants
mean_data_VF <- RM_ANOVA_VF_data %>%
group_by(Time_of_Display, Condition_code, Validity, Visual_Field) %>%
summarise(
Mean_Value = mean(mean_rt, na.rm = TRUE),
N = n_distinct(Participant_ID),
SE_Value = sd(mean_rt, na.rm = TRUE) / sqrt(N),
.groups = "drop"
) %>%
mutate(
fill_key = paste0(Condition_code, ".", Validity),
fill_key = factor(
fill_key,
levels = c("face-noise.Valid", "face-noise.Invalid",
"place-noise.Valid", "place-noise.Invalid")
)
)
mean_data_VF
## # A tibble: 16 × 8
## Time_of_Display Condition_code Validity Visual_Field Mean_Value N
## <fct> <fct> <fct> <fct> <dbl> <int>
## 1 Time100 face-noise Valid left 332. 25
## 2 Time100 face-noise Valid right 333. 25
## 3 Time100 face-noise Invalid left 335. 25
## 4 Time100 face-noise Invalid right 340. 25
## 5 Time100 place-noise Valid left 335. 25
## 6 Time100 place-noise Valid right 327. 25
## 7 Time100 place-noise Invalid left 331. 25
## 8 Time100 place-noise Invalid right 331. 25
## 9 Time900 face-noise Valid left 323. 25
## 10 Time900 face-noise Valid right 327. 25
## 11 Time900 face-noise Invalid left 333. 25
## 12 Time900 face-noise Invalid right 333. 25
## 13 Time900 place-noise Valid left 332. 25
## 14 Time900 place-noise Valid right 331. 25
## 15 Time900 place-noise Invalid left 335. 25
## 16 Time900 place-noise Invalid right 334. 25
## # ℹ 2 more variables: SE_Value <dbl>, fill_key <fct>
#Styling palettes
fill_palette <- c(
"face-noise.Valid" = "#66c2a5",
"face-noise.Invalid" = "#FFFFFF",
"place-noise.Valid" = "#8da0cb",
"place-noise.Invalid" = "#FFFFFF")
border_palette <- c(
"face-noise" = "#66c2a5",
"place-noise" = "#8da0cb")
pattern_palette <- c(
"Valid" = "none",
"Invalid" = "stripe")
#x-axis labels for SOA
soa_labels <- c(
"Time100" = "100 ms",
"Time900" = "900 ms")
#y-axis limits
y_limits <- c(300, 350)
#Plot
ggplot(
mean_data_VF,
aes(x = Time_of_Display, y = Mean_Value, group = fill_key)
) +
geom_col_pattern(
aes(
fill = fill_key,
color = Condition_code,
pattern = Validity
),
position = position_dodge(width = 0.9),
width = 0.85,
linewidth = 0.7,
pattern_fill = "black",
pattern_colour = "black",
pattern_density = 0.20,
pattern_spacing = 0.03,
pattern_angle = 45
) +
geom_errorbar(
aes(ymin = Mean_Value - SE_Value, ymax = Mean_Value + SE_Value),
width = 0.2,
position = position_dodge(width = 0.9),
color = "black",
linewidth = 0.5
) +
scale_fill_manual(values = fill_palette) +
scale_color_manual(values = border_palette) +
scale_pattern_manual(values = pattern_palette) +
guides(
fill = guide_legend(
title = NULL,
override.aes = list(
color = "black",
pattern_fill = "black",
pattern_colour = "black",
pattern_density = 0.20,
pattern_spacing = 0.03,
pattern_angle = 45
)
),
color = "none",
pattern = "none"
) +
facet_wrap(
~ Visual_Field,
ncol = 2,
labeller = labeller(Visual_Field = c(left = "Left Visual Field", right = "Right Visual Field"))
) +
scale_x_discrete(labels = soa_labels) +
xlab("SOA") +
ylab("Mean Reaction Time (ms)") +
ggtitle("Mean Reaction Time across SOA by Condition, Validity, and Visual Field") +
theme_bw() +
theme(
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
plot.title = element_text(size = 16, hjust = 0.5)
) +
coord_cartesian(ylim = y_limits)
#Plotting interaction of Condition and VF
#Summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
group_by(Validity, Condition_code, Participant_ID, Visual_Field) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Validity, Visual_Field), factor) %>%
arrange(Participant_ID, Condition_code, Validity, Visual_Field)
#Set factor levels to ensure the correct order
RM_ANOVA_VF_data$Condition_code <- factor(RM_ANOVA_VF_data$Condition_code, levels = c("face-noise", "place-noise"))
RM_ANOVA_VF_data$Visual_Field <- factor(RM_ANOVA_VF_data$Visual_Field, levels = c("left", "right"))
#Print the summarized data structure and sample for debugging
print(str(RM_ANOVA_VF_data))
## tibble [200 × 6] (S3: tbl_df/tbl/data.frame)
## $ Validity : Factor w/ 2 levels "Invalid","Valid": 1 1 2 2 1 1 2 2 1 1 ...
## $ Condition_code: Factor w/ 2 levels "face-noise","place-noise": 1 1 1 1 2 2 2 2 1 1 ...
## $ Participant_ID: Factor w/ 25 levels "2","3","4","5",..: 1 1 1 1 1 1 1 1 2 2 ...
## $ Visual_Field : Factor w/ 2 levels "left","right": 2 1 2 1 2 1 2 1 2 1 ...
## $ mean_rt : num [1:200] 296 293 292 286 298 ...
## $ sd_rt : num [1:200] 32.5 29 30.2 35 26.6 ...
## NULL
print(head(RM_ANOVA_VF_data, 20))
## # A tibble: 20 × 6
## Validity Condition_code Participant_ID Visual_Field mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 Invalid face-noise 2 right 296. 32.5
## 2 Invalid face-noise 2 left 293. 29.0
## 3 Valid face-noise 2 right 292. 30.2
## 4 Valid face-noise 2 left 286. 35.0
## 5 Invalid place-noise 2 right 298. 26.6
## 6 Invalid place-noise 2 left 298. 35.7
## 7 Valid place-noise 2 right 292. 35.5
## 8 Valid place-noise 2 left 291. 31.5
## 9 Invalid face-noise 3 right 393. 41.8
## 10 Invalid face-noise 3 left 379. 45.1
## 11 Valid face-noise 3 right 398. 49.6
## 12 Valid face-noise 3 left 376. 48.2
## 13 Invalid place-noise 3 right 389. 40.5
## 14 Invalid place-noise 3 left 385. 42.0
## 15 Valid place-noise 3 right 377. 48.9
## 16 Valid place-noise 3 left 390. 47.8
## 17 Invalid face-noise 4 right 334. 51.2
## 18 Invalid face-noise 4 left 326. 52.2
## 19 Valid face-noise 4 right 310. 54.7
## 20 Valid face-noise 4 left 305. 43.2
#Calculate means and standard errors for each variable, including Visual_Field
mean_data_VF <- RM_ANOVA_VF_data %>%
group_by(Condition_code, Visual_Field) %>%
summarise(
Mean_Value = mean(mean_rt, na.rm = TRUE),
N = n_distinct(Participant_ID),
SE_Value = sd(mean_rt, na.rm = TRUE) / sqrt(N),
.groups = "drop"
)
mean_data_VF
## # A tibble: 4 × 5
## Condition_code Visual_Field Mean_Value N SE_Value
## <fct> <fct> <dbl> <int> <dbl>
## 1 face-noise left 329. 25 7.11
## 2 face-noise right 331. 25 6.73
## 3 place-noise left 334. 25 6.97
## 4 place-noise right 332. 25 6.91
#Print the mean data structure and sample for debugging
print(str(mean_data_VF))
## tibble [4 × 5] (S3: tbl_df/tbl/data.frame)
## $ Condition_code: Factor w/ 2 levels "face-noise","place-noise": 1 1 2 2
## $ Visual_Field : Factor w/ 2 levels "left","right": 1 2 1 2
## $ Mean_Value : num [1:4] 329 331 334 332
## $ N : int [1:4] 25 25 25 25
## $ SE_Value : num [1:4] 7.11 6.73 6.97 6.91
## NULL
print(head(mean_data_VF, 20))
## # A tibble: 4 × 5
## Condition_code Visual_Field Mean_Value N SE_Value
## <fct> <fct> <dbl> <int> <dbl>
## 1 face-noise left 329. 25 7.11
## 2 face-noise right 331. 25 6.73
## 3 place-noise left 334. 25 6.97
## 4 place-noise right 332. 25 6.91
#Check for duplicates in the summarized data
duplicates <- RM_ANOVA_VF_data %>%
group_by(Condition_code, Participant_ID, Visual_Field) %>%
filter(n() > 1)
print(duplicates)
## # A tibble: 200 × 6
## # Groups: Condition_code, Participant_ID, Visual_Field [100]
## Validity Condition_code Participant_ID Visual_Field mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 Invalid face-noise 2 right 296. 32.5
## 2 Invalid face-noise 2 left 293. 29.0
## 3 Valid face-noise 2 right 292. 30.2
## 4 Valid face-noise 2 left 286. 35.0
## 5 Invalid place-noise 2 right 298. 26.6
## 6 Invalid place-noise 2 left 298. 35.7
## 7 Valid place-noise 2 right 292. 35.5
## 8 Valid place-noise 2 left 291. 31.5
## 9 Invalid face-noise 3 right 393. 41.8
## 10 Invalid face-noise 3 left 379. 45.1
## # ℹ 190 more rows
#Define the y-axis limits
y_limits <- c(300, 350)
#Change the names of the variables on the x-axis
custom_labels <- c("left" = "Left",
"right" = "Right")
#Define the interaction order
mean_data_VF <- mean_data_VF %>%
mutate(interaction_order = paste0(Condition_code, ".", Visual_Field))
mean_data_VF$interaction_order <- factor(
mean_data_VF$interaction_order,
levels = c("face-noise.left", "face-noise.right",
"place-noise.left", "place-noise.right"))
mean_data_VF$Condition_code <- factor(mean_data_VF$Condition_code,
levels = c("face-noise", "place-noise"))
#key for fill (condition + VF)
mean_data_VF <- mean_data_VF %>%
mutate(fill_key = paste0(Condition_code, ".", Visual_Field))
#fill colors
fill_palette <- c(
"face-noise.left" = "#66c2a5",
"face-noise.right" = "#66c2a5",
"place-noise.left" = "#8da0cb",
"place-noise.right" = "#8da0cb")
#borders color
border_palette <- c(
"face-noise" = "#66c2a5",
"place-noise" = "#8da0cb")
#Plotting
ggplot(mean_data_VF,aes(x = Condition_code, y = Mean_Value, group = Visual_Field)) +
geom_col_pattern(aes(fill = fill_key, color = Condition_code, pattern = Visual_Field),
position = position_dodge(width = 0.9),
width = 0.85,
linewidth = 0.7,
pattern_fill = "black",
pattern_colour = "black",
pattern_density = 0.25,
pattern_spacing = 0.04,
pattern_angle = 45) +
geom_errorbar(aes(
ymin = Mean_Value - SE_Value,
ymax = Mean_Value + SE_Value),
width = 0.2,
position = position_dodge(width = 0.9),
color = "black",
linewidth = 0.5) +
scale_fill_manual(values = fill_palette) +
scale_color_manual(values = border_palette) +
facet_wrap(~ Visual_Field,
ncol = 2,
labeller = labeller(Condition_code = c(left = "face-noise", right = "place-noise"))) +
scale_x_discrete(labels = c("left" = "Left Visual Field", "right" = "Right Visual Field")) +
xlab("Visual Field") +
ylab("Mean Reaction Time") +
ggtitle("Mean Reaction Time per Condition and Visual Field") +
theme_bw() +
theme(
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
plot.title = element_text(size = 16, hjust = 0.5)) +
coord_cartesian(ylim = y_limits)
#Checking the Distribution of RTs accross VFs
mean_data_VF %>%
arrange(Condition_code, Visual_Field) %>%
print(n = Inf)
## # A tibble: 4 × 7
## Condition_code Visual_Field Mean_Value N SE_Value interaction_order
## <fct> <fct> <dbl> <int> <dbl> <fct>
## 1 face-noise left 329. 25 7.11 face-noise.left
## 2 face-noise right 331. 25 6.73 face-noise.right
## 3 place-noise left 334. 25 6.97 place-noise.left
## 4 place-noise right 332. 25 6.91 place-noise.right
## # ℹ 1 more variable: fill_key <chr>
#Plotting with SOAs and validity and VF
#Plotting across SOAs
#Creating a cleaned summary dataset that computes mean and SD of RTs
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
group_by(Time_of_Display, Validity, Visual_Field, Participant_ID) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
n_trials = sum(!is.na(key_resp.rt)),
.groups = "drop"
) %>%
mutate(across(c(Time_of_Display, Validity, Visual_Field, Participant_ID), factor))
#set factor order
RM_ANOVA_VF_data$Time_of_Display <- factor(RM_ANOVA_VF_data$Time_of_Display, levels = c("Time100", "Time900"))
RM_ANOVA_VF_data$Visual_Field <- factor(RM_ANOVA_VF_data$Visual_Field, levels = c("left", "right"))
RM_ANOVA_VF_data$Validity <- factor(RM_ANOVA_VF_data$Validity, levels = c("Valid", "Invalid"))
#Group means + SE across participants
mean_data_VF <- RM_ANOVA_VF_data %>%
group_by(Time_of_Display, Validity, Visual_Field) %>%
summarise(
Mean_Value = mean(mean_rt, na.rm = TRUE),
N = n_distinct(Participant_ID),
SE_Value = sd(mean_rt, na.rm = TRUE) / sqrt(N),
.groups = "drop"
) %>%
mutate(
fill_key = paste0(Validity, ".", Time_of_Display),
fill_key = factor(
fill_key,
levels = c("Valid.Time100", "Invalid.Time100",
"Valid.Time900", "Invalid.Time900")
)
)
mean_data_VF
## # A tibble: 8 × 7
## Time_of_Display Validity Visual_Field Mean_Value N SE_Value fill_key
## <fct> <fct> <fct> <dbl> <int> <dbl> <fct>
## 1 Time100 Valid left 333. 25 7.72 Valid.Time100
## 2 Time100 Valid right 330. 25 7.24 Valid.Time100
## 3 Time100 Invalid left 333. 25 6.82 Invalid.Time1…
## 4 Time100 Invalid right 336. 25 6.89 Invalid.Time1…
## 5 Time900 Valid left 328. 25 6.83 Valid.Time900
## 6 Time900 Valid right 329. 25 6.73 Valid.Time900
## 7 Time900 Invalid left 334. 25 7.43 Invalid.Time9…
## 8 Time900 Invalid right 333. 25 7.00 Invalid.Time9…
#Styling palettes
fill_palette <- c(
"Valid.Time100" = "beige",
"Invalid.Time100" = "brown",
"Valid.Time900" = "beige",
"Invalid.Time900" = "brown")
border_palette <- c(
"Valid" = "beige",
"Invalid" = "brown")
#x-axis labels for SOA
soa_labels <- c(
"Time100" = "100 ms",
"Time900" = "900 ms")
#y-axis limits
y_limits <- c(300, 350)
#Plot
ggplot(
mean_data_VF,
aes(x = Time_of_Display, y = Mean_Value, group = fill_key)
) +
geom_col_pattern(
aes(
fill = fill_key,
color = Validity),
pattern = "none",
position = position_dodge(width = 0.9),
width = 0.85,
linewidth = 0.7
) +
geom_errorbar(
aes(ymin = Mean_Value - SE_Value, ymax = Mean_Value + SE_Value),
width = 0.2,
position = position_dodge(width = 0.9),
color = "black",
linewidth = 0.5
) +
scale_fill_manual(values = fill_palette) +
scale_color_manual(values = border_palette) +
guides(
fill = guide_legend(
title = NULL),
color = "none") +
facet_wrap(
~ Visual_Field,
ncol = 2,
labeller = labeller(Visual_Field = c(left = "Left Visual Field", right = "Right Visual Field"))
) +
scale_x_discrete(labels = soa_labels) +
xlab("SOA") +
ylab("Mean Reaction Time (ms)") +
ggtitle("Mean Reaction Time across SOAs by Validity and Visual Field") +
theme_bw() +
theme(
axis.title.x = element_text(size = 14),
axis.title.y = element_text(size = 14),
axis.text.x = element_text(size = 12),
axis.text.y = element_text(size = 12),
plot.title = element_text(size = 16, hjust = 0.5)
) +
coord_cartesian(ylim = y_limits)
#testing VF for face-noise conditions for Left Appearance of Faces
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Condition_code == "face-noise", Visual_Field == "left") %>%
group_by(Participant_ID, Validity, Condition_code, Visual_Field) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Visual_Field), factor) %>%
arrange(Participant_ID, Condition_code, Visual_Field)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 6
## Participant_ID Validity Condition_code Visual_Field mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 2 Invalid face-noise left 293. 29.0
## 2 2 Valid face-noise left 286. 35.0
## 3 3 Invalid face-noise left 379. 45.1
## 4 3 Valid face-noise left 376. 48.2
## 5 4 Invalid face-noise left 326. 52.2
## 6 4 Valid face-noise left 305. 43.2
## 7 5 Invalid face-noise left 300. 46.6
## 8 5 Valid face-noise left 303. 44.1
## 9 6 Invalid face-noise left 324. 40.5
## 10 6 Valid face-noise left 319. 37.5
## # ℹ 40 more rows
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -3.6708, df = 24, p-value = 0.001205
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -11.995831 -3.361299
## sample estimates:
## mean difference
## -7.678565
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 333. NA 25
## 2 Valid 325. NA 25
#testing VF for face-noise conditions for Right Appearance of Faces
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Condition_code == "face-noise", Visual_Field == "right") %>%
group_by(Participant_ID, Validity, Condition_code, Visual_Field) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Visual_Field), factor) %>%
arrange(Participant_ID, Condition_code, Visual_Field)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 6
## Participant_ID Validity Condition_code Visual_Field mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 2 Invalid face-noise right 296. 32.5
## 2 2 Valid face-noise right 292. 30.2
## 3 3 Invalid face-noise right 393. 41.8
## 4 3 Valid face-noise right 398. 49.6
## 5 4 Invalid face-noise right 334. 51.2
## 6 4 Valid face-noise right 310. 54.7
## 7 5 Invalid face-noise right 310. 42.0
## 8 5 Valid face-noise right 302. 35.1
## 9 6 Invalid face-noise right 329. 51.0
## 10 6 Valid face-noise right 320. 32.3
## # ℹ 40 more rows
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -3.6138, df = 24, p-value = 0.001389
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -10.454513 -2.853923
## sample estimates:
## mean difference
## -6.654218
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 335. NA 25
## 2 Valid 328. NA 25
#testing VF for place-noise conditions for Left Appearance of Places
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Condition_code == "place-noise", Visual_Field == "left") %>%
group_by(Participant_ID, Validity, Condition_code, Visual_Field) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Visual_Field), factor) %>%
arrange(Participant_ID, Condition_code, Visual_Field)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 6
## Participant_ID Validity Condition_code Visual_Field mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 2 Invalid place-noise left 298. 35.7
## 2 2 Valid place-noise left 291. 31.5
## 3 3 Invalid place-noise left 385. 42.0
## 4 3 Valid place-noise left 390. 47.8
## 5 4 Invalid place-noise left 313. 44.6
## 6 4 Valid place-noise left 307. 48.2
## 7 5 Invalid place-noise left 304. 35.2
## 8 5 Valid place-noise left 302. 37.1
## 9 6 Invalid place-noise left 330. 45.6
## 10 6 Valid place-noise left 327. 43.3
## # ℹ 40 more rows
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -0.88045, df = 24, p-value = 0.3873
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -5.005355 2.011847
## sample estimates:
## mean difference
## -1.496754
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 334. NA 25
## 2 Valid 333. NA 25
#testing VF for place-noise conditions for Right Appearance of Places
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Condition_code == "place-noise", Visual_Field == "right") %>%
group_by(Participant_ID, Validity, Condition_code, Visual_Field) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Visual_Field), factor) %>%
arrange(Participant_ID, Condition_code, Visual_Field)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 6
## Participant_ID Validity Condition_code Visual_Field mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 2 Invalid place-noise right 298. 26.6
## 2 2 Valid place-noise right 292. 35.5
## 3 3 Invalid place-noise right 389. 40.5
## 4 3 Valid place-noise right 377. 48.9
## 5 4 Invalid place-noise right 326. 49.9
## 6 4 Valid place-noise right 316. 44.4
## 7 5 Invalid place-noise right 306. 38.9
## 8 5 Valid place-noise right 303. 47.3
## 9 6 Invalid place-noise right 322. 39.2
## 10 6 Valid place-noise right 319. 36.1
## # ℹ 40 more rows
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -2.1738, df = 24, p-value = 0.03981
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -6.3816226 -0.1654965
## sample estimates:
## mean difference
## -3.27356
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 333. NA 25
## 2 Valid 330. NA 25
#B-H Correction
#B-H correction for 4 visual-field follow-up paired t-tests
#correct the 4 p-values you already got:
p_raw <- c(
face_left = 0.001205,
face_right = 0.001389,
place_left = 0.3873,
place_right= 0.03981
)
p_bh <- p.adjust(p_raw, method = "BH")
p_bh
## face_left face_right place_left place_right
## 0.002778 0.002778 0.387300 0.053080
#testing Conditions for Left Appearance of Face and Place
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Visual_Field == "left") %>%
group_by(Participant_ID, Condition_code, Visual_Field) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Visual_Field), factor) %>%
arrange(Participant_ID, Condition_code, Visual_Field)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 5
## Participant_ID Condition_code Visual_Field mean_rt sd_rt
## <fct> <fct> <fct> <dbl> <dbl>
## 1 2 face-noise left 289. 32.2
## 2 2 place-noise left 294. 33.7
## 3 3 face-noise left 377. 46.6
## 4 3 place-noise left 387. 44.9
## 5 4 face-noise left 315. 48.9
## 6 4 place-noise left 310. 46.4
## 7 5 face-noise left 301. 45.2
## 8 5 place-noise left 303. 36.1
## 9 6 face-noise left 322. 39.0
## 10 6 place-noise left 328. 44.4
## # ℹ 40 more rows
# Step 2: Extract vectors for each validity condition
face_means_VF <- RM_ANOVA_VF_data %>%
filter(Condition_code == "face-noise") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
place_means_VF <- RM_ANOVA_VF_data %>%
filter(Condition_code == "place-noise") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(face_means_VF) != length(place_means_VF)) {
stop("Mismatch in the number of participants between conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(face_means_VF, place_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: face_means_VF and place_means_VF
## t = -3.1015, df = 24, p-value = 0.00487
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -7.553863 -1.517336
## sample estimates:
## mean difference
## -4.5356
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Condition_code) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Condition_code mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 face-noise 329. NA 25
## 2 place-noise 334. NA 25
#testing Conditions for Right Appearance of Face and Place
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Visual_Field == "right") %>%
group_by(Participant_ID, Condition_code, Visual_Field) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Condition_code, Visual_Field), factor) %>%
arrange(Participant_ID, Condition_code, Visual_Field)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 5
## Participant_ID Condition_code Visual_Field mean_rt sd_rt
## <fct> <fct> <fct> <dbl> <dbl>
## 1 2 face-noise right 294. 31.3
## 2 2 place-noise right 295. 31.3
## 3 3 face-noise right 396. 45.8
## 4 3 place-noise right 383. 45.1
## 5 4 face-noise right 322. 54.1
## 6 4 place-noise right 321. 47.3
## 7 5 face-noise right 306. 38.7
## 8 5 place-noise right 304. 43.1
## 9 6 face-noise right 325. 42.8
## 10 6 place-noise right 320. 37.6
## # ℹ 40 more rows
# Step 2: Extract vectors for each validity condition
face_means_VF <- RM_ANOVA_VF_data %>%
filter(Condition_code == "face-noise") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
place_means_VF <- RM_ANOVA_VF_data %>%
filter(Condition_code == "place-noise") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(face_means_VF) != length(place_means_VF)) {
stop("Mismatch in the number of participants between conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(face_means_VF, place_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: face_means_VF and place_means_VF
## t = -0.12332, df = 24, p-value = 0.9029
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -2.787226 2.472921
## sample estimates:
## mean difference
## -0.1571526
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Condition_code) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Condition_code mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 face-noise 331. NA 25
## 2 place-noise 332. NA 25
#testing VF and validty for SOAs across conditions - Left 100 ms
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time100", Visual_Field == "left") %>%
group_by(Participant_ID, Validity, Visual_Field, Time_of_Display) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Visual_Field, Time_of_Display), factor) %>%
arrange(Participant_ID, Visual_Field, Time_of_Display)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 6
## Participant_ID Validity Visual_Field Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 2 Invalid left Time100 288. 41.4
## 2 2 Valid left Time100 280. 28.9
## 3 3 Invalid left Time100 377. 44.5
## 4 3 Valid left Time100 363. 50.2
## 5 4 Invalid left Time100 317. 48.2
## 6 4 Valid left Time100 295. 45.4
## 7 5 Invalid left Time100 314. 37.7
## 8 5 Valid left Time100 312. 41.6
## 9 6 Invalid left Time100 316. 31.1
## 10 6 Valid left Time100 318. 38.8
## # ℹ 40 more rows
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = 0.045888, df = 24, p-value = 0.9638
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -6.472948 6.767326
## sample estimates:
## mean difference
## 0.147189
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 333. NA 25
## 2 Valid 333. NA 25
#testing VF and validty for SOAs across conditions - Left 900 ms
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time900", Visual_Field == "left") %>%
group_by(Participant_ID, Validity, Visual_Field, Time_of_Display) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Visual_Field, Time_of_Display), factor) %>%
arrange(Participant_ID, Visual_Field, Time_of_Display)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 6
## Participant_ID Validity Visual_Field Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 2 Invalid left Time900 298. 28.8
## 2 2 Valid left Time900 291. 34.3
## 3 3 Invalid left Time900 383. 43.3
## 4 3 Valid left Time900 389. 46.2
## 5 4 Invalid left Time900 320. 49.2
## 6 4 Valid left Time900 310. 45.3
## 7 5 Invalid left Time900 298. 41.7
## 8 5 Valid left Time900 299. 39.8
## 9 6 Invalid left Time900 331. 46.1
## 10 6 Valid left Time900 325. 41.2
## # ℹ 40 more rows
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -4.2558, df = 24, p-value = 0.0002756
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -9.268470 -3.214654
## sample estimates:
## mean difference
## -6.241562
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 334. NA 25
## 2 Valid 328. NA 25
#testing VF and validty for SOAs across conditions - Right 100 ms
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time100", Visual_Field == "right") %>%
group_by(Participant_ID, Validity, Visual_Field, Time_of_Display) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Visual_Field, Time_of_Display), factor) %>%
arrange(Participant_ID, Visual_Field, Time_of_Display)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 6
## Participant_ID Validity Visual_Field Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 2 Invalid right Time100 295. 31.3
## 2 2 Valid right Time100 282. 26.9
## 3 3 Invalid right Time100 390. 38.3
## 4 3 Valid right Time100 387. 50.3
## 5 4 Invalid right Time100 334. 43.1
## 6 4 Valid right Time100 317. 51.7
## 7 5 Invalid right Time100 325. 27.2
## 8 5 Valid right Time100 316. 49.1
## 9 6 Invalid right Time100 317. 42.9
## 10 6 Valid right Time100 303. 22.6
## # ℹ 40 more rows
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -2.6183, df = 24, p-value = 0.01507
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -10.997809 -1.302196
## sample estimates:
## mean difference
## -6.150003
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 336. NA 25
## 2 Valid 330. NA 25
#testing VF and validty for SOAs across conditions - Right 900 ms
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time900", Visual_Field == "right") %>%
group_by(Participant_ID, Validity, Visual_Field, Time_of_Display) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Visual_Field, Time_of_Display), factor) %>%
arrange(Participant_ID, Visual_Field, Time_of_Display)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 6
## Participant_ID Validity Visual_Field Time_of_Display mean_rt sd_rt
## <fct> <fct> <fct> <fct> <dbl> <dbl>
## 1 2 Invalid right Time900 298. 29.2
## 2 2 Valid right Time900 295. 34.1
## 3 3 Invalid right Time900 391. 42.1
## 4 3 Valid right Time900 388. 50.4
## 5 4 Invalid right Time900 328. 53.0
## 6 4 Valid right Time900 311. 49.2
## 7 5 Invalid right Time900 302. 42.5
## 8 5 Valid right Time900 298. 37.5
## 9 6 Invalid right Time900 328. 46.1
## 10 6 Valid right Time900 325. 35.6
## # ℹ 40 more rows
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -3.1935, df = 24, p-value = 0.003901
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -7.618619 -1.636967
## sample estimates:
## mean difference
## -4.627793
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 333. NA 25
## 2 Valid 329. NA 25
#B-H Correction
#B-H correction for visual-field follow-up paired t-tests
#correct the 4 p-values you already got:
p_raw <- c(
left100 = 0.9638,
left900 = 0.0002756,
right100 = 0.01507,
right900= 0.03981
)
p_bh <- p.adjust(p_raw, method = "BH")
p_bh
## left100 left900 right100 right900
## 0.9638000 0.0011024 0.0301400 0.0530800
#testing validty for SOAs, conditions, and VF - 100, face, left
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time100", Visual_Field == "left", Condition_code == "face-noise") %>%
group_by(Participant_ID, Validity, Visual_Field, Time_of_Display, Condition_code) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Visual_Field, Time_of_Display, Condition_code), factor) %>%
arrange(Participant_ID, Visual_Field, Time_of_Display, Condition_code)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 7
## Participant_ID Validity Visual_Field Time_of_Display Condition_code mean_rt
## <fct> <fct> <fct> <fct> <fct> <dbl>
## 1 2 Invalid left Time100 face-noise 279.
## 2 2 Valid left Time100 face-noise 287.
## 3 3 Invalid left Time100 face-noise 375.
## 4 3 Valid left Time100 face-noise 349.
## 5 4 Invalid left Time100 face-noise 328.
## 6 4 Valid left Time100 face-noise 304.
## 7 5 Invalid left Time100 face-noise 317.
## 8 5 Valid left Time100 face-noise 316.
## 9 6 Invalid left Time100 face-noise 315.
## 10 6 Valid left Time100 face-noise 311.
## # ℹ 40 more rows
## # ℹ 1 more variable: sd_rt <dbl>
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -0.6076, df = 24, p-value = 0.5492
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -13.207255 7.199579
## sample estimates:
## mean difference
## -3.003838
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 335. NA 25
## 2 Valid 332. NA 25
#testing validty for SOAs, conditions, and VF - 900, face, left
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time900", Visual_Field == "left", Condition_code == "face-noise") %>%
group_by(Participant_ID, Validity, Visual_Field, Time_of_Display, Condition_code) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Visual_Field, Time_of_Display, Condition_code), factor) %>%
arrange(Participant_ID, Visual_Field, Time_of_Display, Condition_code)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 7
## Participant_ID Validity Visual_Field Time_of_Display Condition_code mean_rt
## <fct> <fct> <fct> <fct> <fct> <dbl>
## 1 2 Invalid left Time900 face-noise 298.
## 2 2 Valid left Time900 face-noise 285.
## 3 3 Invalid left Time900 face-noise 380.
## 4 3 Valid left Time900 face-noise 384.
## 5 4 Invalid left Time900 face-noise 325.
## 6 4 Valid left Time900 face-noise 306.
## 7 5 Invalid left Time900 face-noise 294.
## 8 5 Valid left Time900 face-noise 298.
## 9 6 Invalid left Time900 face-noise 327.
## 10 6 Valid left Time900 face-noise 322.
## # ℹ 40 more rows
## # ℹ 1 more variable: sd_rt <dbl>
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -3.7989, df = 24, p-value = 0.0008745
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -14.202957 -4.203116
## sample estimates:
## mean difference
## -9.203036
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 333. NA 25
## 2 Valid 323. NA 25
#testing validty for SOAs, conditions, and VF - 100, face, right
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time100", Visual_Field == "right", Condition_code == "face-noise") %>%
group_by(Participant_ID, Validity, Visual_Field, Time_of_Display, Condition_code) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Visual_Field, Time_of_Display, Condition_code), factor) %>%
arrange(Participant_ID, Visual_Field, Time_of_Display, Condition_code)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 7
## Participant_ID Validity Visual_Field Time_of_Display Condition_code mean_rt
## <fct> <fct> <fct> <fct> <fct> <dbl>
## 1 2 Invalid right Time100 face-noise 296.
## 2 2 Valid right Time100 face-noise 282.
## 3 3 Invalid right Time100 face-noise 383.
## 4 3 Valid right Time100 face-noise 398.
## 5 4 Invalid right Time100 face-noise 344.
## 6 4 Valid right Time100 face-noise 325.
## 7 5 Invalid right Time100 face-noise 320.
## 8 5 Valid right Time100 face-noise 303.
## 9 6 Invalid right Time100 face-noise 323.
## 10 6 Valid right Time100 face-noise 306.
## # ℹ 40 more rows
## # ℹ 1 more variable: sd_rt <dbl>
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -1.9502, df = 24, p-value = 0.06293
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -14.0939973 0.3992223
## sample estimates:
## mean difference
## -6.847388
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 340. NA 25
## 2 Valid 333. NA 25
#testing validty for SOAs, conditions, and VF - 900, face, right
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time900", Visual_Field == "right", Condition_code == "face-noise") %>%
group_by(Participant_ID, Validity, Visual_Field, Time_of_Display, Condition_code) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Visual_Field, Time_of_Display, Condition_code), factor) %>%
arrange(Participant_ID, Visual_Field, Time_of_Display, Condition_code)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 7
## Participant_ID Validity Visual_Field Time_of_Display Condition_code mean_rt
## <fct> <fct> <fct> <fct> <fct> <dbl>
## 1 2 Invalid right Time900 face-noise 296.
## 2 2 Valid right Time900 face-noise 295.
## 3 3 Invalid right Time900 face-noise 397.
## 4 3 Valid right Time900 face-noise 398.
## 5 4 Invalid right Time900 face-noise 330.
## 6 4 Valid right Time900 face-noise 305.
## 7 5 Invalid right Time900 face-noise 306.
## 8 5 Valid right Time900 face-noise 302.
## 9 6 Invalid right Time900 face-noise 331.
## 10 6 Valid right Time900 face-noise 325.
## # ℹ 40 more rows
## # ℹ 1 more variable: sd_rt <dbl>
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -3.0258, df = 24, p-value = 0.005836
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -10.463013 -1.977381
## sample estimates:
## mean difference
## -6.220197
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 333. NA 25
## 2 Valid 327. NA 25
#testing validty for SOAs, conditions, and VF - 100, place, left
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time100", Visual_Field == "left", Condition_code == "place-noise") %>%
group_by(Participant_ID, Validity, Visual_Field, Time_of_Display, Condition_code) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Visual_Field, Time_of_Display, Condition_code), factor) %>%
arrange(Participant_ID, Visual_Field, Time_of_Display, Condition_code)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 7
## Participant_ID Validity Visual_Field Time_of_Display Condition_code mean_rt
## <fct> <fct> <fct> <fct> <fct> <dbl>
## 1 2 Invalid left Time100 place-noise 297.
## 2 2 Valid left Time100 place-noise 274.
## 3 3 Invalid left Time100 place-noise 380.
## 4 3 Valid left Time100 place-noise 377.
## 5 4 Invalid left Time100 place-noise 306.
## 6 4 Valid left Time100 place-noise 286.
## 7 5 Invalid left Time100 place-noise 312.
## 8 5 Valid left Time100 place-noise 309.
## 9 6 Invalid left Time100 place-noise 317.
## 10 6 Valid left Time100 place-noise 325.
## # ℹ 40 more rows
## # ℹ 1 more variable: sd_rt <dbl>
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = 0.98728, df = 24, p-value = 0.3334
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -3.677725 10.422834
## sample estimates:
## mean difference
## 3.372555
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 331. NA 25
## 2 Valid 335. NA 25
#testing validty for SOAs, conditions, and VF - 900, place, left
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time900", Visual_Field == "left", Condition_code == "place-noise") %>%
group_by(Participant_ID, Validity, Visual_Field, Time_of_Display, Condition_code) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Visual_Field, Time_of_Display, Condition_code), factor) %>%
arrange(Participant_ID, Visual_Field, Time_of_Display, Condition_code)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 7
## Participant_ID Validity Visual_Field Time_of_Display Condition_code mean_rt
## <fct> <fct> <fct> <fct> <fct> <dbl>
## 1 2 Invalid left Time900 place-noise 298.
## 2 2 Valid left Time900 place-noise 296.
## 3 3 Invalid left Time900 place-noise 386.
## 4 3 Valid left Time900 place-noise 394.
## 5 4 Invalid left Time900 place-noise 316.
## 6 4 Valid left Time900 place-noise 314.
## 7 5 Invalid left Time900 place-noise 302.
## 8 5 Valid left Time900 place-noise 300.
## 9 6 Invalid left Time900 place-noise 334.
## 10 6 Valid left Time900 place-noise 327.
## # ℹ 40 more rows
## # ℹ 1 more variable: sd_rt <dbl>
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -1.7441, df = 24, p-value = 0.09394
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -6.9571012 0.5842798
## sample estimates:
## mean difference
## -3.186411
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 335. NA 25
## 2 Valid 332. NA 25
#testing validty for SOAs, conditions, and VF - 100, place, right
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time100", Visual_Field == "right", Condition_code == "place-noise") %>%
group_by(Participant_ID, Validity, Visual_Field, Time_of_Display, Condition_code) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Visual_Field, Time_of_Display, Condition_code), factor) %>%
arrange(Participant_ID, Visual_Field, Time_of_Display, Condition_code)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 7
## Participant_ID Validity Visual_Field Time_of_Display Condition_code mean_rt
## <fct> <fct> <fct> <fct> <fct> <dbl>
## 1 2 Invalid right Time100 place-noise 294.
## 2 2 Valid right Time100 place-noise 283.
## 3 3 Invalid right Time100 place-noise 396.
## 4 3 Valid right Time100 place-noise 378.
## 5 4 Invalid right Time100 place-noise 324.
## 6 4 Valid right Time100 place-noise 310.
## 7 5 Invalid right Time100 place-noise 329.
## 8 5 Valid right Time100 place-noise 329.
## 9 6 Invalid right Time100 place-noise 310.
## 10 6 Valid right Time100 place-noise 300.
## # ℹ 40 more rows
## # ℹ 1 more variable: sd_rt <dbl>
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -1.2733, df = 24, p-value = 0.2151
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -11.535953 2.732829
## sample estimates:
## mean difference
## -4.401562
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 331. NA 25
## 2 Valid 327. NA 25
#testing validty for SOAs, conditions, and VF - 900, place, right
#Filter and summarize the data
RM_ANOVA_VF_data <- SH_Cleaned_Data %>%
filter(Time_of_Display == "Time900", Visual_Field == "right", Condition_code == "place-noise") %>%
group_by(Participant_ID, Validity, Visual_Field, Time_of_Display, Condition_code) %>%
summarise(
mean_rt = mean(key_resp.rt, na.rm = TRUE),
sd_rt = sd(key_resp.rt, na.rm = TRUE),
.groups = 'drop'
) %>%
mutate_at(vars(Participant_ID, Visual_Field, Time_of_Display, Condition_code), factor) %>%
arrange(Participant_ID, Visual_Field, Time_of_Display, Condition_code)
# View the summarized data
print(RM_ANOVA_VF_data)
## # A tibble: 50 × 7
## Participant_ID Validity Visual_Field Time_of_Display Condition_code mean_rt
## <fct> <fct> <fct> <fct> <fct> <dbl>
## 1 2 Invalid right Time900 place-noise 300.
## 2 2 Valid right Time900 place-noise 295.
## 3 3 Invalid right Time900 place-noise 386.
## 4 3 Valid right Time900 place-noise 377.
## 5 4 Invalid right Time900 place-noise 326.
## 6 4 Valid right Time900 place-noise 318.
## 7 5 Invalid right Time900 place-noise 298.
## 8 5 Valid right Time900 place-noise 293.
## 9 6 Invalid right Time900 place-noise 326.
## 10 6 Valid right Time900 place-noise 326.
## # ℹ 40 more rows
## # ℹ 1 more variable: sd_rt <dbl>
# Step 2: Extract vectors for each validity condition
valid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Valid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
invalid_means_VF <- RM_ANOVA_VF_data %>%
filter(Validity == "Invalid") %>%
arrange(Participant_ID) %>%
pull(mean_rt)
# Ensure the vectors are aligned by Participant_ID
if (length(valid_means_VF) != length(invalid_means_VF)) {
stop("Mismatch in the number of participants between validity conditions")
}
# Step 3: Perform the paired t-test
res_VF <- t.test(valid_means_VF, invalid_means_VF, paired = TRUE)
# View the t-test results
print(res_VF)
##
## Paired t-test
##
## data: valid_means_VF and invalid_means_VF
## t = -1.8471, df = 24, p-value = 0.0771
## alternative hypothesis: true mean difference is not equal to 0
## 95 percent confidence interval:
## -6.1058876 0.3385155
## sample estimates:
## mean difference
## -2.883686
# Summary statistics
summary_stats_VF <- RM_ANOVA_VF_data %>%
group_by(Validity) %>%
summarise(
mean_rt = mean(mean_rt),
sd_rt = sd(mean_rt),
n = n()
)
# View summary statistics
print(summary_stats_VF)
## # A tibble: 2 × 4
## Validity mean_rt sd_rt n
## <fct> <dbl> <dbl> <int>
## 1 Invalid 334. NA 25
## 2 Valid 331. NA 25
#B-H Correction
# B-H correction for visual-field follow-up paired t-tests
p_raw <- c(
face_left100 = 0.5492,
face_left900 = 0.0008745,
place_left100 = 0.3334,
place_left900 = 0.09394,
face_right100 = 0.06293,
face_right900 = 0.005836,
place_right100 = 0.2151,
place_right900 = 0.0771
)
p_BH <- p.adjust(p_raw, method = "BH")
p_BH
## face_left100 face_left900 place_left100 place_left900 face_right100
## 0.5492000 0.0069960 0.3810286 0.1503040 0.1503040
## face_right900 place_right100 place_right900
## 0.0233440 0.2868000 0.1503040
# Code Eval
library(afex)
## Loading required package: lme4
## Loading required package: Matrix
##
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
## ************
## Welcome to afex. For support visit: http://afex.singmann.science/
## - Functions for ANOVAs: aov_car(), aov_ez(), and aov_4()
## - Methods for calculating p-values with mixed(): 'S', 'KR', 'LRT', and 'PB'
## - 'afex_aov' and 'mixed' objects can be passed to emmeans() for follow-up tests
## - Get and set global package options with: afex_options()
## - Set sum-to-zero contrasts globally: set_sum_contrasts()
## - For example analyses see: browseVignettes("afex")
## ************
##
## Attaching package: 'afex'
## The following object is masked from 'package:lme4':
##
## lmer
afex_fit <- aov_ez(id = "Participant_ID",
dv = "mean",
data = RM_ANOVA_data,
within = c("Time_of_Display", "Condition_code", "Validity"))
library(emmeans)
## Welcome to emmeans.
## Caution: You lose important information if you filter this package's results.
## See '? untidy'
# Standard errors in original code were wrong values given that
# subjects had two observations in row when estimating variance.
# Alternative code:
print(conditonal_means1 <- emmeans(afex_fit, ~Condition_code + Validity + Time_of_Display))
## Condition_code Validity Time_of_Display emmean SE df lower.CL upper.CL
## face.noise Invalid Time100 337 6.72 24 324 351
## place.noise Invalid Time100 331 7.01 24 317 346
## face.noise Valid Time100 332 8.06 24 316 349
## place.noise Valid Time100 331 6.89 24 317 345
## face.noise Invalid Time900 333 7.07 24 318 347
## place.noise Invalid Time900 335 7.03 24 320 349
## face.noise Valid Time900 325 6.50 24 312 338
## place.noise Valid Time900 332 6.86 24 317 346
##
## Confidence level used: 0.95
print(conditonal_means2 <- emmeans(afex_fit, ~Condition_code + Validity))
## Condition_code Validity emmean SE df lower.CL upper.CL
## face.noise Invalid 335 6.78 24 321 349
## place.noise Invalid 333 6.88 24 319 347
## face.noise Valid 329 7.02 24 314 343
## place.noise Valid 331 6.74 24 317 345
##
## Results are averaged over the levels of: Time_of_Display
## Confidence level used: 0.95
print(conditonal_means3 <- emmeans(afex_fit, ~Time_of_Display))
## Time_of_Display emmean SE df lower.CL upper.CL
## Time100 333 6.94 24 319 347
## Time900 331 6.80 24 317 345
##
## Results are averaged over the levels of: Validity, Condition_code
## Confidence level used: 0.95
print(Conditonal_means4 <- emmeans(afex_fit, ~Condition_code + Validity, at = list(Time_of_Display = "Time900")))
## Condition_code Validity emmean SE df lower.CL upper.CL
## face.noise Invalid 333 7.07 24 318 347
## place.noise Invalid 335 7.03 24 320 349
## face.noise Valid 325 6.50 24 312 338
## place.noise Valid 332 6.86 24 317 346
##
## Confidence level used: 0.95
# pairwise comparisons
# also can be used to do the pairwise comparisons with and without corrections
contrast(conditonal_means1, method = "pairwise", adjust = "BH")
## contrast estimate SE df
## face.noise Invalid Time100 - place.noise Invalid Time100 6.004 2.560 24
## face.noise Invalid Time100 - face.noise Valid Time100 4.944 3.510 24
## face.noise Invalid Time100 - place.noise Valid Time100 6.510 2.440 24
## face.noise Invalid Time100 - face.noise Invalid Time900 4.756 2.490 24
## face.noise Invalid Time100 - place.noise Invalid Time900 2.798 2.410 24
## face.noise Invalid Time100 - face.noise Valid Time900 12.467 2.680 24
## face.noise Invalid Time100 - place.noise Valid Time900 5.790 2.640 24
## place.noise Invalid Time100 - face.noise Valid Time100 -1.060 3.680 24
## place.noise Invalid Time100 - place.noise Valid Time100 0.506 3.010 24
## place.noise Invalid Time100 - face.noise Invalid Time900 -1.248 3.020 24
## place.noise Invalid Time100 - place.noise Invalid Time900 -3.206 2.740 24
## place.noise Invalid Time100 - face.noise Valid Time900 6.463 2.540 24
## place.noise Invalid Time100 - place.noise Valid Time900 -0.214 3.050 24
## face.noise Valid Time100 - place.noise Valid Time100 1.566 2.830 24
## face.noise Valid Time100 - face.noise Invalid Time900 -0.188 4.010 24
## face.noise Valid Time100 - place.noise Invalid Time900 -2.146 3.300 24
## face.noise Valid Time100 - face.noise Valid Time900 7.523 4.160 24
## face.noise Valid Time100 - place.noise Valid Time900 0.846 3.430 24
## place.noise Valid Time100 - face.noise Invalid Time900 -1.755 3.390 24
## place.noise Valid Time100 - place.noise Invalid Time900 -3.712 2.660 24
## place.noise Valid Time100 - face.noise Valid Time900 5.957 3.170 24
## place.noise Valid Time100 - place.noise Valid Time900 -0.720 2.770 24
## face.noise Invalid Time900 - place.noise Invalid Time900 -1.958 1.400 24
## face.noise Invalid Time900 - face.noise Valid Time900 7.712 1.780 24
## face.noise Invalid Time900 - place.noise Valid Time900 1.035 1.360 24
## place.noise Invalid Time900 - face.noise Valid Time900 9.670 2.110 24
## place.noise Invalid Time900 - place.noise Valid Time900 2.993 0.998 24
## face.noise Valid Time900 - place.noise Valid Time900 -6.677 1.940 24
## t.ratio p.value
## 2.346 0.0964
## 1.407 0.3281
## 2.667 0.0629
## 1.908 0.1853
## 1.160 0.4238
## 4.646 0.0017
## 2.197 0.1180
## -0.288 0.9041
## 0.168 0.9348
## -0.414 0.8691
## -1.169 0.4238
## 2.541 0.0718
## -0.070 0.9629
## 0.554 0.8122
## -0.047 0.9629
## -0.651 0.7681
## 1.806 0.1946
## 0.247 0.9041
## -0.518 0.8122
## -1.395 0.3281
## 1.876 0.1853
## -0.260 0.9041
## -1.399 0.3281
## 4.329 0.0021
## 0.760 0.7073
## 4.587 0.0017
## 3.000 0.0348
## -3.447 0.0147
##
## P value adjustment: BH method for 28 tests
contrast(conditonal_means2, method = "pairwise", adjust = "none")
## contrast estimate SE df t.ratio p.value
## face.noise Invalid - place.noise Invalid 2.02 1.56 24 1.299 0.2064
## face.noise Invalid - face.noise Valid 6.33 1.95 24 3.240 0.0035
## face.noise Invalid - place.noise Valid 3.77 1.76 24 2.147 0.0421
## place.noise Invalid - face.noise Valid 4.30 1.62 24 2.658 0.0138
## place.noise Invalid - place.noise Valid 1.75 1.68 24 1.043 0.3072
## face.noise Valid - place.noise Valid -2.56 1.46 24 -1.746 0.0936
##
## Results are averaged over the levels of: Time_of_Display
contrast(conditonal_means3, method = "pairwise", adjust = "none")
## contrast estimate SE df t.ratio p.value
## Time100 - Time900 2.09 2.23 24 0.938 0.3575
##
## Results are averaged over the levels of: Validity, Condition_code
# same result as paired t-test performed in alternative code
contrast(Conditonal_means4, method = "pairwise", adjust = "none")
## contrast estimate SE df t.ratio p.value
## face.noise Invalid - place.noise Invalid -1.96 1.400 24 -1.399 0.1747
## face.noise Invalid - face.noise Valid 7.71 1.780 24 4.329 0.0002
## face.noise Invalid - place.noise Valid 1.03 1.360 24 0.760 0.4547
## place.noise Invalid - face.noise Valid 9.67 2.110 24 4.587 0.0001
## place.noise Invalid - place.noise Valid 2.99 0.998 24 3.000 0.0062
## face.noise Valid - place.noise Valid -6.68 1.940 24 -3.447 0.0021
# note on small p-value with small effect size: this is a function of how correlated the two conditons are.
# for this paritiualar case the conditons are more positvely correlated than the others leading to less variability in
# the difference score and thus a small SE and thus a smaller p value.
#Franz, V. H., & Loftus, G. R. (2012). Standard errors and confidence intervals in within-subjects designs: Generalizing Loftus and Masson (1994) and avoiding the biases of alternative accounts. Psychonomic bulletin & review, 19(3), 395-404.