Skip to content

Instantly share code, notes, and snippets.

@nelsonroque
Created March 5, 2019 18:27
Show Gist options
  • Save nelsonroque/c9c27493ca0ceaed7f72417977cf7df6 to your computer and use it in GitHub Desktop.
Save nelsonroque/c9c27493ca0ceaed7f72417977cf7df6 to your computer and use it in GitHub Desktop.
Dot Memory: Scoring and Summary Scripts (for use with R's tidyverse package)
# for scoring raw, parsed data
score_dot_memory <- function(df, square_size=5) {
scored <- df %>%
separate(dot_locations, c("dot1","dot2","dot3"), " ", convert=T) %>%
separate(dot1, c("dot1_rx", "dot1_ry"), "_", convert=T) %>%
separate(dot2, c("dot2_rx", "dot2_ry"), "_", convert=T) %>%
separate(dot3, c("dot3_rx", "dot3_ry"), "_", convert=T) %>%
separate(user_answers, c('user_dot1', "user_dot2", "user_dot3"), " ", convert=T) %>%
separate(user_dot1, c("user_dot1_rx", "user_dot1_ry"), "_", convert=T) %>%
separate(user_dot2, c("user_dot2_rx", "user_dot2_ry"), "_", convert=T) %>%
separate(user_dot3, c("user_dot3_rx", "user_dot3_ry"), "_", convert=T) %>%
mutate_at(.vars = vars(dot1_rx:user_dot3_ry),
.funs = funs(`1`=add_to(.,1))) %>%
mutate_at(.vars = vars(dot1_rx_1:user_dot3_ry_1),
.funs = funs(`coord`=mult_by(.,square_size))) %>%
mutate(r1_distance = distance(user_dot1_rx_1_coord, dot1_rx_1_coord,
user_dot1_ry_1_coord, dot1_ry_1_coord),
r2_distance = distance(user_dot2_rx_1_coord, dot2_rx_1_coord,
user_dot2_ry_1_coord, dot2_ry_1_coord),
r3_distance = distance(user_dot3_rx_1_coord, dot3_rx_1_coord,
user_dot3_ry_1_coord, dot3_ry_1_coord)) %>%
mutate(r1_perfect = ifelse(r1_distance == 0, 1, 0),
r2_perfect = ifelse(r2_distance == 0, 1, 0),
r3_perfect = ifelse(r3_distance == 0, 1, 0),
perfect_response = ifelse(r1_distance == 0 & r2_distance == 0 & r3_distance == 0,1,0)) %>%
rowwise() %>%
mutate(sum_perfect_dots = sum(c(r1_perfect, r2_perfect, r3_perfect)),
median_error_distance = median(c(r1_distance, r2_distance, r3_distance)),
sum_error_distance = sum(c(r1_distance, r2_distance, r3_distance)))
return(scored)
}
# for summarizing scored data
summary_dot_memory <- function(df, group_var) {
TASK_NAME <- "DOT_MEMORY"
summary.df <- df %>%
group_by_(.dots = group_var) %>%
summarise(median.RT.all_trials = median(response_time, na.rm=T),
sd.RT.all_trials = sd(response_time, na.rm=T),
median.RT.perfect_trials = median(response_time[perfect_response == 1], na.rm=T),
sd.RT.perfect_trials = sd(response_time[perfect_response == 1], na.rm=T),
median.RT.nonperfect_trials = median(response_time[perfect_response == 0], na.rm=T),
sd.RT.nonperfect_trials = sd(response_time[perfect_response == 0], na.rm=T),
median.error.distance.overall = median(sum_error_distance, na.rm=T),
sd.error.distance.overall = sd(sum_error_distance, na.rm=T),
sum.error.distance.overall = sum(sum_error_distance, na.rm=T),
# no one is perfect, except those who get all dots perfectly!
count.perfect.dots = sum(sum_perfect_dots),
count.perfect.trials = sum(perfect_response, na.rm=T),
n.filtered.trials = sum(is.na(response_time)),
n.trials = n()) %>%
mutate(prop.perfect.trials = count.perfect.trials/n.trials)
# add task name to column names
len_group_var = length(group_var)
names(summary.df)[(len_group_var+1):ncol(summary.df)] <- paste0(TASK_NAME,".",names(summary.df)[(len_group_var+1):ncol(summary.df)])
return(summary.df)
}
df.scored <- score_dot_memory(dot_memory.path)
df.summary <- summary_dot_memory(df.scored,"user_id")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment