您必须在随机性和原始刺激之间的最大距离限制之间做出妥协。当您将刺激安排在 4 个相同系列的 48 个刺激(非随机呈现)中时,将获得最大距离。在这种情况下,对于每个原始刺激,距离固定为 48。
如果将 192 对完全随机分布,则原始刺激之间的平均距离平均为 38.6,最小和最大可能距离分别为 1 和 144:
t = Flatten[Table[i, {4}, {i, 48}]];
{Mean[#], StandardDeviation[#]} &@
Table[
rs = RandomSample[t, 192];
Mean[Mean[Differences[Flatten[Position[rs, #]]]] & /@ Range[48]] //
N, {10000}
]
(* ==> {38.60370417, 1.397151004} *)
你可以做不同的事情。首先将 48 个刺激分为 24 个块(1-24 [块 I] 和 25-48 [块 II])。然后生成 I 和 II 的随机排列 (p):p(I)p(II)p(I)p(II)p(I)p(II)p(I)p(II)。
现在平均距离变为:
{Mean[#], StandardDeviation[#]} &@
Table[
rs =
Join[RandomSample[Range[24]], RandomSample[Range[25, 48]],
RandomSample[Range[24]], RandomSample[Range[25, 48]],
RandomSample[Range[24]], RandomSample[Range[25, 48]],
RandomSample[Range[24]], RandomSample[Range[25, 48]]
];
Mean[Mean[Differences[Flatten[Position[rs, #]]]] & /@ Range[48]] //N, {10000}]
(* ==> {48., 0.} *)
所以我们现在有一个更加随机的表示,而平均距离仍然是 48(现在最小距离是 24,最大距离是 47)。请注意标准差 0。作为练习,我将证明为什么必须如此。
更新 1
我在这里将刺激分为两组,1-24 和 25-48。我建议您在开始分成两组之前为每个主题使用新的随机初始安排。这将在主题上引入一些额外的平衡。
更新 2
现在,刺激条件组合生成的代码:
首先,随机化所有刺激的条件:
m = MapThread[
List,
{
Table[Range[48], {4}],
Table[RandomSample[{1, 2, 3, 4}], {48}]\[Transpose]
}, 2
]
然后,分成 24 人一组,洗牌,排列成一个列表:
Flatten[RandomSample /@ Partition[Flatten[m, 1], 24], 1]
为了随机化每个主题的顺序(正如我在更新 1 中建议的那样),在第一部分需要进行一些小改动:
initialArrangement = RandomSample[Range[48]];
m =
MapThread[
List,
{
Table[initialArrangement, {4}],
Table[RandomSample[{1, 2, 3, 4}], {48}]\[Transpose]
}, 2
]
请注意,将第一行 ( RandomSample[Range[48]]
) 放在Table
!
对于 Mr.Wizard 这里的中缀符号版本表明我真的很努力;-)
m~Set~MapThread[List, (Range[48]~Table~{4}~
List~((RandomSample[{1, 2, 3, 4}]~Table~ {48})\[Transpose])), 2]
第二部分:
(RandomSample /@ m~Flatten~1~Partition~24)~Flatten~1
第一部分的变化,如上:
initialArrangement~Set~RandomSample[Range[48]];
m~Set~MapThread[List, (initialArrangement~Table~{4}~
List~((RandomSample[{1, 2, 3, 4}]~Table~ {48})\[Transpose])), 2]
顺便说一句,忘记第二部分中的括号,输出虽然看起来相似,但将是完全错误的。