aegis_sim.utilities.analysis.leslie
1import numpy as np 2 3 4def leslie_matrix(s, r): 5 leslie = np.diag(s, k=-1) 6 leslie[0] = r 7 leslie[np.isnan(leslie)] = 0 8 return leslie 9 10 11def interval_leslie(interval_life_table, interval_birth_table, index): 12 lt = interval_life_table[index] 13 s = (1 + lt.pct_change())[1:] 14 bt = interval_birth_table[index] 15 r = (bt / lt).fillna(0) 16 return leslie_matrix(s, r) 17 18 19def intrinsic_leslie(intrinsic_mortality, intrinsic_fertility, index): 20 """ 21 Hypothetical Leslie matrix that ignores extrinsic mortality. 22 """ 23 m = intrinsic_mortality.iloc[index] 24 s = 1 - m 25 r = intrinsic_fertility.iloc[index] 26 return leslie_matrix(s[:-1], r) 27 28 29def leslie_breakdown(leslie): 30 eigenvalues, eigenvectors = np.linalg.eig(leslie) 31 dominant_index = np.argmax(np.abs(eigenvalues)) 32 dominant_eigenvector = eigenvectors[:, dominant_index] 33 return { 34 "growth_rate": np.max(np.abs(eigenvalues)), 35 "stable_age_structure": dominant_eigenvector / dominant_eigenvector.sum(), 36 }
def
leslie_matrix(s, r):
def
interval_leslie(interval_life_table, interval_birth_table, index):
def
intrinsic_leslie(intrinsic_mortality, intrinsic_fertility, index):
20def intrinsic_leslie(intrinsic_mortality, intrinsic_fertility, index): 21 """ 22 Hypothetical Leslie matrix that ignores extrinsic mortality. 23 """ 24 m = intrinsic_mortality.iloc[index] 25 s = 1 - m 26 r = intrinsic_fertility.iloc[index] 27 return leslie_matrix(s[:-1], r)
Hypothetical Leslie matrix that ignores extrinsic mortality.
def
leslie_breakdown(leslie):
30def leslie_breakdown(leslie): 31 eigenvalues, eigenvectors = np.linalg.eig(leslie) 32 dominant_index = np.argmax(np.abs(eigenvalues)) 33 dominant_eigenvector = eigenvectors[:, dominant_index] 34 return { 35 "growth_rate": np.max(np.abs(eigenvalues)), 36 "stable_age_structure": dominant_eigenvector / dominant_eigenvector.sum(), 37 }