ランダム性と元の刺激間の最大距離の制約との間で妥協する必要があります。最大距離は、刺激を 48 個の刺激の 4 つの同一のシリーズに配置したときに得られます (非ランダムな提示)。その場合、元の刺激ごとに距離は 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 の 2 ブロック (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 つのグループに分けました。2 つのグループに分かれる前に、被験者ごとに新しいランダムな初期配置を使用することをお勧めします。これにより、科目間のバランスが少し追加されます。
更新 2
そして今、刺激条件コンボ生成のコード:
まず、すべての刺激に対して条件をランダム化します。
m = MapThread[
List,
{
Table[Range[48], {4}],
Table[RandomSample[{1, 2, 3, 4}], {48}]\[Transpose]
}, 2
]
次に、24 のグループに分けてシャッフルし、1 つのリストとして並べます。
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]
そして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]
ところで、2 番目の部分の括弧を忘れると、出力は似ていますが、完全に間違ったものになります。