[docs]defestimate(self,fraction_eigenvectors:float=0.2)->float:"""estimate Estimate Args: fraction_eigenvectors (float, optional): The fraction of eigenvectors used to calculate the absorption ratio. Defaults to 0.2 as in the paper. Returns: float: Absorption ratio for the market """n_assets,_=self.asset_returns.shapeeig_sorted=sorted(self.eigvals)# fmt: offnum_eigenvalues=int(Decimal(fraction_eigenvectors*n_assets).to_integral_value(rounding=ROUND_HALF_UP))returnsum(eig_sorted[len(eig_sorted)-num_eigenvalues:])/np.trace(self.asset_covariance)
@cached_propertydefasset_covariance(self)->np.ndarray:"""asset_covariance Asset returns covariance (cached) Returns: np.ndarray: covariance of asset returns """returnnp.cov(self.asset_returns)@cached_propertydefeigvals(self)->np.ndarray:"""eigvals Eigenvalues of :func:`asset_covariance` (cached) Returns: np.ndarray: eigenvalues """returnnp.linalg.eigvals(self.asset_covariance)