如何在我的 randscr 函数 (MATLAB) 中定义概率?

How can I define probabilities in my randscr function (MATLAB)?

我正在尝试进行两种情况的实验,应该以一定的概率显示。在这种情况下,“Trial_p”应该出现在 2/3 的案例中,“Trial_c”应该出现在 1/3 的案例中。当我 运行 实验时,我确实得到了一个相当随机的序列,但概率并不像我定义的那样!有人可以帮忙吗?

  Trial_p = [0 4 1 2]; % trial with percept
  td1 = [0 1 0.5 2];
  Trial_c = [0 4 3]; % control trial
  td2 = [0 1 2];

  total_ntrials = 9; % 120 trials

  prob1 = 1/3*2; %0.66
  prob2 = 1/3*1; %0.33

  my_sequence = [];
  my_duration = [];

 randomized_seq = randsrc(1,total_ntrials,[1,2; prob1,prob2]); % randomize trialtypes 
  %x = rand(1)*(10-5) + 5;
   for i = 1:length(randomized_seq)
       if randomized_seq(i) == 1
           td1(1) = floor(rand(1)*(5-1)+1);    %(30-20) + 20);
           my_sequence = cat(2, my_sequence, Trial_p);
           my_duration = cat(2, my_duration, td1);
       elseif randomized_seq(i) == 2
           td2(1) = floor(rand(1)*(10-5) + 5);
           my_sequence = cat(2, my_sequence, Trial_c);
           my_duration = cat(2, my_duration, td2);
       end
   end

observed的比例自然会偏离expected的概率,除非观察的数量非常多(law of large numbers) .尝试生成大量值并检查:

>> prob1 = 2/3;
>> prob2 = 1/3;
>> randomized_seq = randsrc(1,1e6,[1,2; prob1,prob2]);
>> mean(randomized_seq==1)
>> mean(randomized_seq==2)

给予

ans =
   0.666610000000000
ans =
   0.333390000000000

如果你想要一个精确比例,假设每个案例的 80 和 40:

randomized_seq = repelem([1 2], [40 80]); % generate exact number of cases
randomized_seq = randomized_seq(randperm(numel(randomized_seq))); % random shuffle