Source code for djura.record_selection.correlations
# SPDX-License-Identifier: AGPL-3.0-or-later
# Copyright (C) 2025-2026 Djura | Risk - Data - Engineering S.r.l.
from typing import List
from numpy import zeros
from . import correlation_models
[docs]
class Correlations:
def __init__(self) -> None:
"""Performs calculations of correlations among various IM types
"""
pass
[docs]
def get_correlation(self, period_i: float, period_j: float,
correlation_model: str) -> float:
"""Compute the inter-period correlation for any two Sa(T) values
Parameters
----------
period_i : float
first period
period_j : float
second period
correlation_model : str
Correlation model name, supported 'baker_jayaram', 'akkar'
Returns
-------
float
Predicted correlation coefficient
Raises
------
ValueError
Not a valid correlation function if wront GCIM.corr_func is
provided
"""
correlation_function_handles = {
'baker_jayaram': correlation_models.baker_jayaram,
'akkar': correlation_models.akkar,
}
# Check for existing correlation function
if correlation_model not in correlation_function_handles:
raise ValueError('Not a valid correlation function')
else:
rho = correlation_function_handles[correlation_model](
period_i, period_j)
return rho
[docs]
def get_correlation_matrix(self, periods: List, model: str):
"""Get correlation matrix
Parameters
----------
periods : List
Periods
model : str
Name of correlation model
Returns
-------
np.ndarray
Correlation matrix
"""
corr = zeros((len(periods), len(periods)))
for i, period_i in enumerate(periods):
for j, period_j in enumerate(periods):
corr[i, j] = self.get_correlation(period_i, period_j, model)
return corr