为何我使用R中choiceRT_ddm函数时会出现RTu[i, 1:Nu[i]]报错
报错原因说明
你猜测的「不同被试响应数量不一致」是间接诱因,该报错的核心触发逻辑是choiceRT_ddm(hBayesDM包内置函数)预分配的矩阵长度,和被试某类选择的实际反应时数量不匹配,常见场景有两种:
- 某名/多名被试在删除缺失值后,仅保留了单类选择的试次(要么全是choice=1,要么全是choice=2),导致筛选
choice==2的反应时的时候返回空向量,和预分配的长度无法匹配 choice列的编码不符合函数要求,函数默认要求choice取值仅为1和2,若存在0、3等其他编码,会导致分类计数错误
choiceRT_ddm本身支持不同被试的总试次不一致,只要每个被试都同时包含两类选择的有效试次,总试次不均不会触发报错。
解决步骤
- 检查是否存在单类选择的被试
运行以下代码统计每个被试的两类选择数量,筛出只有单类选择的被试:
library(dplyr) DDM2 %>% group_by(subjID) %>% summarise( n_choice1 = sum(choice == 1, na.rm = T), n_choice2 = sum(choice == 2, na.rm = T) ) %>% filter(n_choice1 == 0 | n_choice2 == 0)
如果有输出结果,将对应被试从数据集中剔除,或补全该被试的两类有效试次即可。
- 校验choice列的编码规范
运行代码确认choice列的取值仅为1和2,若存在其他值需重新编码:
# 查看choice所有唯一取值 unique(DDM2$choice) # 示例:如果取值为0和1,重编码为1和2 DDM2$choice <- ifelse(DDM2$choice == 0, 1, 2)
- 过滤无效反应时
提前剔除小于0.1s的异常反应时,避免计数错误:
DDM_clean <- DDM2 %>% filter(RT > 0.1)
处理完成后再运行choiceRT_ddm函数即可。
内容的提问来源于stack exchange,提问作者Lea_c
相关产品推荐
相关产品推荐

