% this is a MATLAB script to compute whether to % use your employer's contribution towards SUSORP or FRS % Naturally, I assume no liability but only bask in % your praise if you find this tool useful. % % (1) type "matlab" on your favorite computer (that has Matlab installed) % (2) edit the assumptions section of this program % (3) run it by typing in Matlab: "frs_susorp" % clear; clf; % --- assumption (your predictions and data) %------------------------------------------------------------- base = 100; % current yearly salary in thousand $$ myage = 45; % current age yearstoPayAvg = 60-myage; % If you want 5 years of DROP % (otherwise FRS does not look so hot) and your highest paid years are % towards the end of your career then the age 60 income determines % your FRS pay level retirePercent = .43; % depends on how many years you have worked and how % many year you still hope to work before age 62 option3 = (100-15)/100; % get "15" or similar from FRS -- % for example 15% because you insure your spouse, 0% if not dropPercent = 1.06; % best guestimate buy_in = 140; % get this from FRS: how much will they charge you? rr= 2; % Your estimate of yearly pay raise raise = rr/100.0; ypast67 = 3; % how many years you amy want to work under SUSORP past % age 67 loyield = 5; hiyield = 7; % yield estimate of SUSORP/market taxrate = 0.7; % 1-your average tax bracket (here 30% pretty high) %------------------------------------------------------------- years = yearstoPayAvg + 7; uf = .1042; maxry= 33; for yy= loyield:hiyield, yield = 1.0+yy/100; %%%% FRS_age67 = age67annual + drop avgFinalPay = base*(1+raise)^yearstoPayAvg; ret_pay = avgFinalPay*retirePercent; age62annual = ret_pay*option3; age67annual = age62annual*dropPercent^5; drop = age62annual* sum(dropPercent.^[1:5]); %%%%OPR_age67 buyin67 = buy_in*yield^years; y1 = years-1; ufcontrib = 0; for k=0:y1, ufcontrib = ufcontrib + ... (base*(1+raise)^k*uf)* yield^(years-k); end; pay67 = base*(1+raise)^20; opr = buyin67 + ufcontrib; %earned6770 = avgFinalPay*sum(yield.^([1:3]))*.7 % earned and uf 10% if working from 67 to 70 % --- into the future ry=retirement years nopr = opr; % age 67 principal dfrs = drop; % age 67 principal pay = age67annual; % anual pay out %earned = earned6770; earned = 0; % 15 =82 equal at y=5% and r=3% for ry=1:maxry, % stop work at 67 nopr = (nopr-pay)*yield; dfrs = dfrs*yield; % no reduction since pension is paid pay = pay*1.03; % 3% cost of living adjustment if ry > ypast67, earned = earned*yield; else earned = earned*yield+... pay67*(1+raise)^(ry)*taxrate; if ry==ypast67, earned, end; end; accnopr(ry) = nopr; accdfrs(ry) = dfrs; accearn(ry) = earned; end; %earned = earned6770 * yield^maxry; yrs = 67+[1:maxry]; colr = [0,1,0]; if yy==loyield, colr = [1,0,0]; end; if yy==hiyield, colr = [0,0,1]; end; %colr = (yy-loyield)*[1,1/2,1]/(hiyield-loyield); plot (yrs, accdfrs,'-','Color',colr); hold on; plot (yrs, accnopr,'--','Color',colr); %plot (yrs, accearn,'-.','Color',colr); plot (yrs, accnopr+accearn,':','Color',colr); text(66,accnopr(1),sprintf('%1d',yy)); % end; end; axis([65 100 0 3000]); tit = sprintf('base %3d raise %1.1f to %3.0f opt %1.2f drop %3.0f',... base,rr,avgFinalPay,option3,drop); short = ... sprintf('%3d%3.0f%1.2f%1d.eps',base,avgFinalPay,option3,ypast67); title(tit); [rr,drop,avgFinalPay,pay67,ypast67,option3] % print('-depsc2',short); % nice .eps output