PsychoPy:" Conditional"但从两个维度的列表中随机选择

时间:2015-04-30 09:57:50

标签: psychopy

在我的实验中,我呈现的是两个维度不同的图像(面部):面部身份和情感

有5个面孔显示5种不同的情绪表达;共制作25种独特的刺激。这些只需要呈现一次(因此25次试验)。

在我呈现其中一张脸之后,下一张脸只需要在情感或身份上有所不同,但在另一张脸上则相同。

示例:

Face 1, emotion 1 -> face 3, emotion 1 -> face 3, emotion 4 -> ... etc.

1:这个任务有心理吗?到目前为止,我主要与构建器一起工作,除了一些数据记录代码,但我很高兴能够对编码器有更多的经验。

我的预感是,我需要在试验列表中添加两列,一列用于身份,另一列用于情绪。然后以某种方式使用getEarlierTrial调用,但此时我几乎迷路了。

2:有人愿意指出我正确的方向吗?

非常感谢提前。

1 个答案:

答案 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中的循环设置为固定顺序,而不是随机化,因为列表本身内置了随机化。