Data & Analysis
PsyCloud stores trial-level data with strong provenance. This guide covers getting it out and into your analysis tool.
Export your data
The simplest path is the Data perspective: pick a run and export CSV, JSON, or a snapshot. CSV is the most convenient for analysis.
Data export operates on hosted runs. Local Preview sessions are for debugging and aren't exportable here — publish and host a run to collect exportable data.
Load it
import pandas as pd
df = pd.read_csv("study_export.csv")
print(f"Participants: {df.participant_id.nunique()}")
print(f"Overall accuracy: {df.correct.mean():.1%}")
print(f"Mean RT: {df.rt.mean():.0f} ms")library(tidyverse)
data <- read_csv("study_export.csv")
data |> summarise(
participants = n_distinct(participant_id),
accuracy = mean(correct, na.rm = TRUE),
mean_rt = mean(rt, na.rm = TRUE)
)The data shape
Each row is one trial. The exact columns depend on your design, but trial-level exports typically include:
| Column | Meaning |
|---|---|
participant_id, session_id | who, and which session |
trial_number, block_number | position in the study |
condition | the trial's condition |
stimulus, response | what was shown / what they did |
correct | whether the response was correct |
rt | response time (ms) |
…plus any factor and derived columns from your design.
Analyze by condition
by_condition = df.groupby("condition").agg(
accuracy=("correct", "mean"),
mean_rt=("rt", "mean"),
n=("rt", "count"),
)data |>
group_by(condition) |>
summarise(accuracy = mean(correct, na.rm = TRUE),
mean_rt = mean(rt, na.rm = TRUE),
n = n())Clean and screen
Filter implausible RTs and aggregate per participant first (then across participants — don't average averages):
clean = df[(df.rt > 200) & (df.rt < 2000) & df.correct.notna()]
per_participant = clean.groupby("participant_id").agg(
mean_rt=("rt", "mean"), accuracy=("correct", "mean")
)Common quality flags: median RT under ~300 ms (too fast), a high timeout rate, near-chance accuracy, or near-zero RT variance (button-mashing). Analyze any attention-check trials separately and report every exclusion.
Because randomization is seeded and counterbalancing is explicit, you can reconstruct a participant's exact sequence — pair that with a preregistered analysis script for fully reproducible results.
Next
Replay and explain an individual session when the numbers look off.