Event-related skin conductance response (ER-SCR) analysis examines phasic EDA changes that are time-locked to experimental events (e.g., stimulus presentations, decisions, or feedback). This is the most common paradigm in psychophysiology research using EDA.
This vignette demonstrates how to use PhysioEDA to perform event-related SCR analysis, from data preparation through statistical summary of event-locked responses.
The typical event-related SCR analysis pipeline consists of:
For event-related analysis, the PhysioExperiment object must contain event markers. These can be imported from experimental software or added manually.
library(PhysioEDA)
# Generate simulated EDA with 4 stimulus events
x <- make_eda_with_scr(n_time = 6000, sr = 10, n_events = 4)
# Inspect the events
events <- getEvents(x)
eventsIf your data does not already contain events, you can add them using
setEvents():
The preprocessing steps are the same as for general EDA analysis: filtering and artifact correction. It is important to complete preprocessing before decomposition.
For event-related analysis, the Continuous Decomposition Analysis (CDA) method is recommended as it provides a physiologically meaningful driver signal.
The SCR response rate is an important measure that indicates the proportion of trials that elicited a detectable SCR.
When computing mean amplitudes, a common approach is to include only trials with a valid SCR (responders-only) or to set non-responder amplitudes to zero.
# Responders-only mean amplitude
responders <- er_results[er_results$scr_present, ]
if (nrow(responders) > 0) {
mean_amp <- mean(responders$scr_amplitude, na.rm = TRUE)
cat("Mean SCR amplitude (responders):", round(mean_amp, 3), "uS\n")
}
# All-trials mean (non-responders = 0)
er_results$amplitude_zero <- ifelse(er_results$scr_present,
er_results$scr_amplitude, 0)
mean_amp_all <- mean(er_results$amplitude_zero)
cat("Mean SCR amplitude (all trials):", round(mean_amp_all, 3), "uS\n")When events have different types or values, you can compare SCR features across conditions.
# If events have different types, filter by event type
# Example: comparing CS+ vs CS- in a conditioning paradigm
# Get event metadata
events <- getEvents(x)
event_df <- events@events
# Merge event metadata with ER-SCR results
er_results$event_value <- event_df$value[er_results$event_index]
# Compare conditions (using base R)
by_condition <- split(er_results, er_results$event_value)
condition_summary <- do.call(rbind, lapply(names(by_condition), function(cond) {
d <- by_condition[[cond]]
data.frame(
condition = cond,
n_trials = nrow(d),
response_rate = mean(d$scr_present),
mean_amplitude = mean(d$scr_amplitude, na.rm = TRUE),
mean_latency = mean(d$scr_latency, na.rm = TRUE),
stringsAsFactors = FALSE
)
}))
condition_summarySCR amplitudes are typically right-skewed. Before parametric statistical tests, consider applying a log or square root transformation.
Onset window: Use 1-4 seconds for typical sympathetic response latencies. Adjust for your paradigm if needed (e.g., shorter for startle responses).
Amplitude threshold: The conventional minimum is 0.01-0.05 microsiemens. Use a consistent threshold across all participants and conditions.
Decomposition method: CDA is recommended for event-related analyses as it provides better temporal resolution of overlapping SCRs than simple highpass filtering.
Non-responders: Decide a priori whether to analyze responders only or to score non-responders as zero amplitude. Report which approach was used.
Multiple channels: If recording from multiple sites, analyze each channel separately. The results data.frame includes a channel column for this purpose.