February 13th, 2008, 10:38 pm
Come on, the 8% answer was an easy target I am afraid the responses so far missed the point that it is the (cumulative) percentage of first-time passes to 'any' passes, not to all candidates, that is requested - and the drop-out rate didn't even get a mention Here's (I hope) a brute-force Matlab solution. With 50% of candidates failing any exam dropping out (vs. retaking the exam next year), I get about 0.5; greater perseverance on candidates' part, with only 20% dropping out, shrinks the ratio of first-time passes to 30%.n = 100; % number of periods to simulatep = [.4 .4 .5]; % pass rates for exams 1-3 (known)d = .2; % probability of dropping out after failing an exam (assumed) % If don't drop out, try again next yearl1TakeFirst = 100*ones(n,1); % 100 people enroll each year[l1TakeAgain, l1Take, l1Pass, l1Fail,... l2TakeFirstAce, l2TakeFirstBad, l2TakeAgain, l2Take, l2Pass, l2Fail, ... l3TakeFirstAce, l3TakeFirstBad, l3TakeAgain, l3Take, l3Pass, l3Fail, ... FirstTimePass] = deal(zeros(n,1));% Notation explained: % l1Take - # of people taking exam 1% l1TakeFirst - # of people taking exam 1 for the first time% l2TakeAgain - # of people re-taking exam 2% l3TakeFirstAce - # of people taking exam 3 for the first time and having first-time-pass record up to now% l3TakeFirstBad - # of people taking exam 3 for the first time and not having first-time-pass record up to nowfor t = 1:n % level 1 if t == 1 l1TakeAgain(t) = 0; else l1TakeAgain(t) = (1-d)*l1Fail(t-1); end l1Take(t) = l1TakeFirst(t) + l1TakeAgain(t); l1Pass(t) = p(1)*l1Take(t); l1Fail(t) = l1Take(t) - l1Pass(t); % level 2 if t > 1 l2TakeFirstAce(t) = p(1)*l1TakeFirst(t-1); l2TakeFirstBad(t) = p(1)*l1TakeAgain(t-1); l2TakeAgain(t) = (1-d)*l2Fail(t-1); l2Take(t) = l2TakeFirstAce(t) + l2TakeFirstBad(t) + l2TakeAgain(t); l2Pass(t) = p(2)*l2Take(t); l2Fail(t) = l2Take(t) - l2Pass(t); end % level 3 if t > 2 l3TakeFirstAce(t) = p(2)*l2TakeFirstAce(t-1); l3TakeFirstBad(t) = p(2)*l2TakeFirstBad(t-1); l3TakeAgain(t) = (1-d)*l3Fail(t-1); l3Take(t) = l3TakeFirstAce(t) + l3TakeFirstBad(t) + l3TakeAgain(t); l3Pass(t) = p(3)*l3Take(t); l3Fail(t) = l3Take(t) - l3Pass(t); FirstTimePass(t) = p(3)*l3TakeFirstAce(t); end end plot(FirstTimePass./l3Pass)