Maybe if you walk through a step by step flow of the calculations..
Fair enough, and I certainly don't want to distract from other work. But your core question is EXCELLENT. It focuses on the fact that a 2% up bias in returns does NOT mean we simply increase the yearly index by 2%.
The theory is simply that in discussion of SWR, people say that 4% yielding safety really has to be 3% because returns of the future will be lower. Or they say the reverse. The question is, what impact on SWR safety does a bias upward or downward on historical equity returns have? The focal word in that paragraph is "returns".
This will NOT be simply saying . . . I think returns in the future will be 2% better than the past and therefore all that need be done is take the index value from 1871 thru 2005 and increment each year by 2%. That is wrong. That is not an increase in returns. That is an increase in the index. It is the wrong derivative in calculus.
I therefore think that 2% will have to compound over each 135 yearly value. It is returns that tell the tale for us, not the value of the index used to measure equity performance.
I was under the impression that the equity performance for Firecalc each year since 1871 (or whatever) is a published number from a historical database. That database is presumably total return (including dividends) -- meaning when one says the S&P did +5% in 2005, that includes dividends. The Dec 31 S&P index number should be 5% greater than Jan 1. The keepers of the index include dividends, I think so you would have nothing to address because their effect is in the published number.
If what you have is a closing price for an index since 1871, and not a database of yearly returns, then the return must be derived. After that we'd need:
Something like:
Return[1872] = (Index[1872] - Index[1871]) / Index[1871]
/* this computes 1872's stock market return */
BiasedReturn[1872] = Return[1872] + UserBias
/* This biases that return upward or downward */
BiasedIndex[1872] = BiasedIndex[1871] * (1.0 + BiasedReturn[1872])
/* This creates a new index. 1872's value would have been something different if the bias had been present. Note it is based on the BiasedIndex value of the previous year, because this effect will compound */
Somewhere above this loop you'd have a BiasedIndex[1871] = Index[1871] because it is the first datapoint and needs initializing. Replace the year numbers above by an i counter in a loop i = 1871, i =< 2005, i++ and you're good to go.
One thus computes the raw return of 1872 and other years from the raw data. One adds user bias to the raw return and computes a "new" index based on returns computed from the original, but with those returns biased. The biased index (or returns, however you've mechanized the code) is what is applied to the user's money.
I suggest compounding here because if you just increased each index year by 2%, the 1872 number would be 2% higher and so would the 1871 number. The rate of increase from 1871 to 1872 would not be 2% higher and we want it to be.
Does this make sense?