randperm

心理学の実験ではランダムな順番で刺激を呈示することが多いと思います。

そのときに重宝するのがrandpermです。

例えば、

condition = [1 1;

1 2;

1 3;

2 1;

2 2;

2 3];

のような行列を作ります。

この行列conditionは2要因(要因Aと要因B)を表しています。

1列目が要因A、2列目が要因Bとすると、要因Aの水準数は2、要因Bの水準数は3になります。

要因の設定はこれでよいのですが、実際の実験では、2×3=6試行をランダムに呈示する必要があります。

そのときにrandpermを使います。

order = randperm(6)

とすると、orderは

5 4 6 3 2 1

だったり、

6 4 5 1 3 2

だったりします。

(randpermを使うたびに値は変わります)

追記: randperm は Matlabを起動するたびに同じ値を返してしまうため、実験条件を完全にランダムにするには、randpermを使う前に、次のいずれかを呼び出す必要があります。(longviewさん情報をありがとうございました。掲示板を参照)

rand('state',sum(100*clock));
rand('twister',sum(100*clock));

ここで、1試行ごとにカウントされる変数"cnt"があったとすると、

condition(order(cnt), 1)

で要因Aを表すことができ、

condition(order(cnt), 2)

で要因Bを表すことができます。

例えばorderの中身が

4 3 6 5 2 1

だったとすると、

1試行目は行列conditionの4番目の条件(要因A = 2, 要因B = 1)になり、

2試行目は行列conditionの3番目の条件(要因A = 1, 要因B = 3)になります。