如何在我的 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
我正在尝试进行两种情况的实验,应该以一定的概率显示。在这种情况下,“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