choose a number from a matrix based on probability parameter
조회 수: 2 (최근 30일)
이전 댓글 표시
Hi
I have two different procedures to do, precedure A has 0.8 probabilty and B has 0.2. How can I create a parameter to select those procedures based upon them probability in case of iterative process ( I am doing this thousands of times)?
I have seen some answers here but not so sure that I am doing it right. Two solution are below but I got suspisous its correct when run it a multiple of 10 times where the 1's or 2's werent exactly showing at 80%,20% everytime for the first solution and the use of 'true' in the second one .
I am not expert instastics and probabilty so just asking if that correct way of doing it and is the result ok or not .
% solution 1
out = randsrc(1,1,[1,2;0.8,0.2])
if out==1
Procedure A;
else
procedure B
end
% solution2
p=[1 2];
y = randsample(p,1,true,[0.8,0.2])
댓글 수: 0
채택된 답변
Guillaume
2019년 4월 28일
Either are overly complicated:
if rand > 0.8
do_ProcedureA;
else
do_ProcedureB;
end
추가 답변 (1개)
John D'Errico
2019년 4월 28일
I think perhaps you do not understand probability. Imagine that you have a "fair" coin. Flip it once, and you expect to see it come up heads or tails 50% of the time for each. But flip it JUST ONCE. Is it heads, or is it tails. Did you see a 50% result? Of course not! The sample realization of such a probabilistic thing does not mean it is not a fair coin. It merely says that you took insufficiently many samples. Over the long run, you will expect 50%. In fact, for any odd number of flips, you could never get exactly 50%. But even for an even number, 50% is only a long term thing.
Similarly, flip the coin twice, Some of the time, you will get one head and one tail. But a significant number of times you will get two of one or the other. Yet nothing conflicts with that being a fair coin. It is just a random sample.
Likewise, you have a biased coin, one that comes up heads with frequency 80%, and tails with frequency 20%. Sample a finite number of times however, and there is no presumption that you will get EXACTLY 80/20. That only happens over the long run.
And that is how probability and random variables work.
n = 10;sum(rand(1,n) >= 0.2)/n
ans =
0.7
>> n = 100;sum(rand(1,n) >= 0.2)/n
ans =
0.78
>> n = 1000;sum(rand(1,n) >= 0.2)/n
ans =
0.805
>> n = 10000;sum(rand(1,n) >= 0.2)/n
ans =
0.7935
>> n = 100000;sum(rand(1,n) >= 0.2)/n
ans =
0.79878
>> n = 1000000;sum(rand(1,n) >= 0.2)/n
ans =
0.799477
>> n = 10000000;sum(rand(1,n) >= 0.2)/n
ans =
0.7998852
>> n = 100000000;sum(rand(1,n) >= 0.2)/n
ans =
0.79995754
Every once in a while, you might get exactly the frequency you expected. But don't bet your life savings on it.
댓글 수: 2
John D'Errico
2019년 4월 28일
I think this is a common mistake people make. It arises in many subtly different ways when random sampling is done.
The fallacy is most obvious when you consider a single coin flip, since you then recognize that you cannot have a coin that comes up half heads and half tails on one flip. Ok, it might land balanced just on its edge. And if that ever happens, save that coin, as that must be a REALLY lucky coin. :)
참고 항목
카테고리
Help Center 및 File Exchange에서 Spline Postprocessing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!