5

新しい精神物理学的実験を準備して、私は48の元の刺激を4回(4つの条件)表示し、192回の試行を行いました。実験中に提示の順序をランダム化しようとすると、同じ元の刺激の4つの表示間の距離を最大化する必要があります。

考えてください :

Table[{j, i}, {j, Range[48]}, {i, Range[4]}]

ここで、jは元の刺激番号であり、iは条件です。

出力サンプル:

 {{1, 1}, {1, 2}, {1, 3}, {1, 4}, 
  {2, 1}, {2, 2}, {2, 3}, {2, 4},   
  ...
  {47, 1}, {47, 2}, {47, 3},{47, 4}, 
  {48, 1}, {48, 2}, {48, 3}, {48, 4}}

元の刺激数であるjに関して、同一のアイテム間の距離を最大化して、これらの192アイテムの提示順序をどのように入れ替えることができますか?

4

4 に答える 4

9

ランダム性と元の刺激間の最大距離の制約との間で妥協する必要があります。最大距離は、刺激を 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 番目の部分の括弧を忘れると、出力は似ていますが、完全に間違ったものになります。

于 2011-11-19T23:26:16.370 に答える
3

多分:

a = RandomSample@Range@48;
Flatten[Array[Partition[Riffle[a, #1], 2] &, 4], 1]
于 2011-11-19T18:57:49.493 に答える
2

ベリサリウスのやり方に従って、私はむしろこのように書きたいと思います:

RandomSample[Flatten[Table[{j, i}, {j, Range[48]}, {i, Range[4]}], 1]]
于 2011-11-19T19:07:30.350 に答える
2

これは、オリジナルの配列を生成する際のサイドバーです。

このフォームは不必要に長いです:

Table[{j, i}, {j, Range[48]}, {i, Range[4]}]

簡単に書くことができます:

Table[{j, i}, {j, 48}, {i, 4}]

配列を使用することもできます:

List ~Array~ {48, 4}

または、サブリストを結合したい場合:

Tuples@Range@{48, 4}
于 2011-11-20T00:51:55.053 に答える