在我的实验中,我呈现的是两个维度不同的图像(面部):面部身份和情感。
有5个面孔显示5种不同的情绪表达;共制作25种独特的刺激。这些只需要呈现一次(因此25次试验)。
在我呈现其中一张脸之后,下一张脸只需要在情感或身份上有所不同,但在另一张脸上则相同。
示例:
Face 1, emotion 1 -> face 3, emotion 1 -> face 3, emotion 4 -> ... etc.
1:这个任务有心理吗?到目前为止,我主要与构建器一起工作,除了一些数据记录代码,但我很高兴能够对编码器有更多的经验。
我的预感是,我需要在试验列表中添加两列,一列用于身份,另一列用于情绪。然后以某种方式使用getEarlierTrial调用,但此时我几乎迷路了。
2:有人愿意指出我正确的方向吗?
非常感谢提前。
答案 0 :(得分:0)
这很难在Builder的正常操作模式下实现,即从固定的条件列表中驱动试验。虽然行的顺序可以跨主题随机化,但跨列的值对仍然保持不变。
您在上面的评论中提到的标准答案是:在代码中,在每个实验开始时对条件文件进行随机播放,因此每个主题实质上都是由一个独特的条件文件驱动的试验。
你似乎很高兴在Matlab中这样做。这样可以正常工作,因为这些东西可以在PsychoPy发布之前完成。但它也可以很容易地在Python代码中实现。这样你就可以在PsychoPy中做所有事情,在这种情况下,就没有必要放弃Builder了。您只需插入一个代码组件,其中包含一些代码,以便在实验开始时运行,以自定义条件文件。
你需要创建三个列表,而不是两个,即你还需要一个伪随机选择列表,以便在从试验到试验中保留面部或情绪之间交替:如果你完全随机地做这个,你会得到不平衡,并将一个属性排在另一个之前。
from numpy.random import shuffle
# make a list of 25 dictionaries of unique face/emotion pairs:
pairsList = []
for face in ['1', '2', '3', '4', '5']:
for emotion in ['1', '2', '3', '4', '5']:
pairsList.append({'faceNum': face, 'emotionNum': emotion})
shuffle(pairsList)
# a list of whether to alternate between preserving face or emotion across trials:
attributes = ['faceNum', 'emotionNum'] * 12 # length 24
shuffle(attributes)
# need to create an initial selection before cycling though the
# next 24 randomised but balanced choices:
pair = pairsList.pop()
currentFace = pair['faceNum']
currentEmotion = pair['emotionNum']
images = ['face_' + currentFace + '_emotion_' + currentEmotion + '.jpg']
for attribute in attributes:
if attribute == 'faceNum':
selection = currentFace
else:
selection = currentEmotion
# find another pair with the same selected attribute:
for pair in pairsList:
if pair[attribute] == selection:
# store the combination for this trial:
currentFace = pair['faceNum']
currentEmotion = pair['emotionNum']
images.append('face_' + currentFace + '_emotion_' + currentEmotion + '.jpg')
# remove this combination so it can't be used again
pairsList.remove(pair)
images.reverse()
print(images)
然后将images
列表写入单列.csv文件以用作条件文件。
请记住将Builder中的循环设置为固定顺序,而不是随机化,因为列表本身内置了随机化。