def obtainRenewalDensities(phis, abg, theta, Tf): xmin = FPMultiPhiSolver.calculate_xmin(Tf, abg) dx = .025; dt = FPMultiPhiSolver.calculate_dt(dx, abg, xmin, factor = 5.) S = FPMultiPhiSolver(theta, phis, dx, dt, Tf, xmin); Fs = S.solve(abg) ts = S._ts; iG = squeeze(Fs[:, :,-1]) g = -diff(iG)/ S._dt; t_mids = (S._ts[1:]+S._ts[:-1])/2.0 return g, S._ts ,t_mids
def MixedEstimator(abg_init, binnedTrain, dp_tol = 1e-2): phis = binnedTrain.bins.keys(); theta = binnedTrain.theta dp = dp_tol*2.0; abg = abg_init while dp > dp_tol: Tf = binnedTrain.getTf() xmin = FPMultiPhiSolver.calculate_xmin(Tf, abg) dx = FPMultiPhiSolver.calculate_dx(abg, xmin) dt = FPMultiPhiSolver.calculate_dt(dx, abg, xmin, factor = 8.) S = FPMultiPhiSolver(theta, phis, dx, dt, Tf, xmin) Fs = S.solve(abg, visualize=False) Ss = S.transformSurvivorData(binnedTrain) Ls = Fs[:,:,-1] - Ss Nus = S.solveAdjoint(abg, Ls) dGdp = S.estimateParameterGradient(abg, Fs, Nus) from numpy.linalg.linalg import norm dG_normalized = dGdp/ norm(dGdp) dp = FortetLineEstimator(binnedTrain, abg, dG_normalized, dp_tol) abg = abg - dp*dG_normalized print 'dG = ', dG_normalized print 'dp = ', dp print 'abg = (%.3g, %.3g, %.3g)'%(abg[0],abg[1],abg[2]) print '-' return abg