====== Project Data Back Into History ======
Often you have a variable, say a demand, for which you have measured data over some historical period up to your simulation period. You may need to project that demand back into history.
The best way is to get a ratio of that measured value to some driver like population over the known period. Assuming you have the driver back into "pre-history", you can then project the ratio back in several ways as described below
===== Linear Trend - lintrend =====
The simplest way is to linear trend it back into history and then multiply it against the known driver in "pre-history". For example getting families in from 1910 to 1977 when we know families and population over historic time th.
local ratioFamPerPer[cr,t19782006] = familiesTot[cr,t19782006] / CTotPop[cr,t19782006]
local ratioFamPerPerPH[cr,t19101977] = lintrend (ratioFamPerPer[cr,t19782006]; time=1910)
familiesPH[cr,t19101977] = extract (CTotPopPH[cr,t18511990]; time:1910..1977) * ratioFamPerPerPH[cr,t19101977]
The main danger here is that your linear trend variable, ratioFamPerPerPH[cr,t19101977], goes negative
===== Ratio with linint =====
A safer way is to create an extra variable which is the ratio of the first year of pre-history (ratioFamPerPer1910to1978) to the first year of history and then linear interpret between these 2 points for the historic period.
! Build an object to hold the time from beginning of pre history to end of history and put in the part we know
local ratioFamPerPer[cr,t19782006] = familiesTot[cr,t19782006] / CTotPop[cr,t19782006]
local ratioFamPerPerPHx[cr,t19101977] = changeseq (copyshape (ratioFamPerPer[cr,t19782006]); dim=time, start=1910)
ratioFamPerPerPHx[cr,t19101977] = insert (ratioFamPerPer[cr,t19782006]; time->time:1978)
! Multiply the ratioFamPerPer1910to1978 agains against the first year of history and insert that as the first year of pre history
ratioFamPerPerPHx[cr,t19101977] = insert (extract (ratioFamPerPer[cr,t19782006]; time:1978, shrink=on) * \
ratioFamPerPer1910to1978[cr]; time:1910)
! Do Linear interpolation between these values
local ratioFamPerPerPH[cr,t19101977] = extract (linint (ratioFamPerPerPHx[cr,t19101977]); time:+0..1977)
! Apply the ratio
familiesPH[cr,t19101977] = extract (CEEFpop[cr,t18511990]; time:1910..1977) * ratioFamPerPerPH[cr,t19101977]
The main problem with this approach is that it is very flat over pre-history time
===== log and exponential lintrend=====
Another way is to use lintrend with logarithm and exponential
local ratioFamPerPer[cr,t19782006] = familiesTot[cr,t19782006] / CTotPop[cr,t19782006]
local ratioFamPerPerPH[cr,t19101977] = exp (max (lintrend (loge (ratioFamPerPer[cr,t19782006]); time=1910), 0))
familiesPH[cr,t19101977] = extract (CEEFpop[cr,t18511990]; time:1910..1977) * ratioFamPerPerPH[cr,t19101977]