在一个可能很大的条件文件中以伪随机的方式只选择少量的试验



我正在使用PsychoPy Builder,并且只使用了基本的代码。现在我有一个问题,我认为编码是不可避免的,但我不知道如何做到这一点,到目前为止,我没有在网上找到有用的答案。

我用3个价的图片做了一个实验(负、中性、正)。在图片的一个角落,额外的图片(字母和数字)可以在随机延迟中出现(随机出现在4个位置之一)。

总而言之,考虑到所有组合(考虑到字母/数字的同一性),我有超过2000种试验可能性。但我只需要72次试验,条件是每个效价出现24次(或36张图片中的每张出现2次),每个延迟出现36次。因此,价和延迟应该是平衡的,但是字母和数字的位置和身份可以是随机的。然而,在特定的比率下(25%的试验),角落里不应该出现字母/数字。

有办法吗?

在builder中添加一个非常简单的代码组件将为您完成此操作。我对条件有点困惑,但你可能会有大概的想法。让我们假设在条件文件中有72个"固定"条件,并为每个条件运行一个例程循环。

我假设你在你的刺激程序中有一个TextStim。假设你把它叫做"letternumber"。一般策略是预先计算出72次试验中每个随机字符和位置的列表,然后在我们进行实验时显示它们。为此,在刺激例程的顶部添加一个代码组件,并在"开始实验"下面添加:

import random  # we'll use this module to pick random elements from below
# Indicator sequence, specifying whether letter/number should be shown. False= do not show. True = do show.
show_letternumber = [False] * 18 + [True] * 54  # 18/72=25%, 54/72=75%.
random.shuffle(show_letternumber)
# Sets of letters and numbers to present
char_set = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g']  # ... and so on.
char_trial = [random.choice(char_set) if show_char else '' for show_char in char_set]  # list with characters
# List of positions
pos_set = [(0.5, 0.5),(-0.5, 0.5),(-0.5,-0.5),(0.5, -0.5)]  # coordinates of your four corners
pos_trial = [random.choice(pos_set) for char in char_trial]

然后在代码组件的"开始例行程序"下,设置lettersnumbers显示该试验的character_trial值并位于pos_trial中的位置。

letternumbers.pos = pos_trial[trials.thisN]  # set position. trials.thisN is the current trial number
letternumbers.text = char_trial[trials.thisN]  # set text
# Save to data/log
trials.addData('pos', pos_trial[trials.thisN])
trials.addData('char', char_trial[trials.thisN])

您可能需要在Builder中为lettersnumbers组件勾选"set every repeat",以便文本实际显示。

这是一个你可以尝试的策略,但是因为我不使用builder,所以我不能把它集成到工作流程中。

准备一个列表,其中包含您想要写入数字的试验类型。如果需要的话,你可以用手打出来。例如,mytrials = ['a','a',...'d','d'],其中这些字母代表您想要的试用类型组合的某个标签。

然后打开控制台并排列该列表(即洗牌)。

import random
random.shuffle(mytrials)

这将改变我的试验。你可以打印出来。当你满意的时候把它粘贴到你的代码中,加上一些循环,比如

t in mytrials:
   if t == 'a':
      <grab a picture of type 'a'>
   elseif t == 'b':
      <grab a picture of type 'b'>
   else:
      <grab a picture of type 'c'>
   <then show the picture you grabbed>

有一些程序化的方法来构建具有正确重复次数的列表,但是对于您正在做的事情来说,使用手写列表可能更容易,然后担心一旦工作后使它更漂亮。

相关内容

  • 没有找到相关文章

最新更新