IAT数据处理求助:按指定规则筛选合格被试(R语言)
IAT被试筛选的R代码实现需求
我正在开展IAT(内隐联想测验)研究,需遵循Nosek等人的标准流程与计分算法筛选被试。参考脚本已生成P_300(<300ms反应占比)、P_error(错误率)字段,test字段标记练习块(1)与关键块(2)。已完成以下R语言初步数据处理代码(注:当前代码移除了test字段,后续筛选需重新关联该字段以区分练习块与关键块):
library(tidyverse) # libraries ---- library(tidyverse) # load raw data ---- iat_raw <- read.delim("data/iat_raw.xlsx", header = TRUE, sep = "\t", fill = TRUE, colClasses = rep("numeric", 7) ) # flag and summarise data ---- iat_1 <- iat_raw %>% select(-c(order, test)) %>% mutate( lat300 = if_else(latency < 300, 1, 0), lat3k = if_else(latency > 3000, 1, 0), lat400 = if_else(latency < 400, 1, 0), lat10k = if_else(latency > 10000, 1, 0) ) %>% group_by(id, blocknum) %>% summarise( # mean standraddeviation for block latencies including all trials M_latency = round(mean(latency),0), SD_latency = round(sd(latency),3), M_correct = round(mean(correct),3), SD_correct = round(sd(correct),3), # trial counts N_trials = n(), N_correct = sum(correct), N_error = n() - sum(correct), N_300 = sum(lat300), N_3k = sum(lat3k), N_400 = sum(lat400), N_10k = sum(lat10k), # percentages of trial counts # P_correct = round(N_correct / n(), 3), # the same like M_correct P_error = round(N_error / n(), 3), P_300 = round(N_300 / n(), 3), P_3k = round(N_3k / n(), 3), P_400 = round(N_400 / n(), 3), P_10k = round(N_300 / n(), 3) ) %>% ungroup() %>% arrange()
现需实现以下7条不合格被试排除规则(需排除整个不合格被试而非仅标记块),重点解决「任意块」及「跨块汇总」的筛选逻辑:
- 总测验中<300ms反应占比超10%;
- 任意关键块中<300ms反应占比超25%;
- 任意练习块中<300ms反应占比超35%;
- 所有关键块总错误率超30%;
- 任意关键块错误率超40%;
- 所有练习块总错误率超40%;
- 任意练习块错误率超50%。
请协助完成后续代码编写。
内容的提问来源于stack exchange,提问作者marsellus w.
相关产品推荐
相关产品推荐

