首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在我的随机函数(MATLAB)中定义概率?

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

Stack Overflow用户
提问于 2020-07-31 13:02:05
回答 1查看 51关注 0票数 0

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

代码语言:javascript
复制
  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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-31 15:14:43

除非观测的数量很高(大数定律),观察到的比例自然会偏离预期的概率。尝试生成大量值并检查:

代码语言:javascript
复制
>> prob1 = 2/3;
>> prob2 = 1/3;
>> randomized_seq = randsrc(1,1e6,[1,2; prob1,prob2]);
>> mean(randomized_seq==1)
>> mean(randomized_seq==2)

给出

代码语言:javascript
复制
ans =
   0.666610000000000
ans =
   0.333390000000000

如果你想要一个确切的比例,比如每种情况中的80和40:

代码语言:javascript
复制
randomized_seq = repelem([1 2], [40 80]); % generate exact number of cases
randomized_seq = randomized_seq(randperm(numel(randomized_seq))); % random shuffle
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63192370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档