112
113 Parameters
114
---115 c_intermediate_components : array_type
116 Intermediate components of C matrix.
117 W : array_type
118 A weight matrix.
119 Returns
120
---121 array_type : A sensitivity matrix
122 """
123 ...
O método chaser step()usa do vetorscoree da matriz de sensitividade para a atualização dos valores de dispersão. O parâmetrotuning, definido na instânciação do objeto MCGLMestabelece o tamanho do passo adicionado à cada execução. O código a seguir registra a implementação do método.
Listagem 5.9: Algoritmo de otimizaçãoChaser.
1 def __chaser_step(self, score, sensitivity):
2 return self._tuning * solve(sensitivity, score)
A função de variância é aplicada no cálculo dos componentes da matrizΣ. O método retorna os valores do sigma bruto, do resultado da decomposiçãoCholeskye o inverso dessa decomposição. A biblioteca usa dos métodoscholesky()einv()do pacotenumpypara a execução. No cenário de variânciaconstant, oΣbruto assume o valor doΩintegralmente.
Para os cenários da variância pertencente a lista: tweedie, binomialP, binomialPQ, power, o cálculo doΣbruto é resultante da operaçãosandwichentre oΩe a raiz da função de variância aplicada aos valores esperados. Finalmente, para os casos depoisson tweedie ou geom tweedie, o Σ bruto segue a operação do caso anterior com a adição da matrix diagonal com os valores esperados. Página com as operações de álgebra linear numpy:
https://numpy.org/doc/stable/reference/routines.linalg.html.
Listagem 5.11: Método para operações no𝜎.
1 def _calculate_sigma(
2 self, mu, power, omega, variance, Ntrial, covariance="identity"
3 ):
4 """Base method to calculate sigma
5
6 Parameters
7
---8 mu : array_like
9 A vector with expected values.
10 power : float
11 A power parameter.
12 omega : array_like
13 The omega resulted matrix.
14 variance : str
15 The variance function.
16 Ntrial : int
17 The number of trial. Parameter for Binomial distribution.
18 Returns
19
---20 array_like : A matrix with Sigma values.
21 """
22 ...
A matriz de variância-covariância entre respostas é calculado pela criação de uma matriz diagonal com os valores do vetorrho.
A matriz inversa de𝐶é calculada pelo método generate c inverse and blocks().
Os parâmetros utilizados pelo método são: A decomposiçãocholeskydo variância-covariância;
o inverso dela; e o variância-covariância entre respostas. Esse método conta com o auxílio de dois métodos terceiros: block diag(), doscipy, para a criação de matrizes bloco diagonal ekron()donumpy, para o produtoKronecker. O método prepara a execução construindo duas matrizes bloco diagonal, a partir das matrizessigma cholesigma chol inv; gera a matrix inversa daΣentre respostas; obtém o inverso de𝐶aplicando a multiplicação encadeada de matrizes, descrito na sequência. A seguir, o código desse método.
Listagem 5.12: Método que gera o inverso da Matriz𝐶.
1 def __generate_c_inverse_and_blocks(
2 self,
3 sigma_chol,
4 sigma_chol_inv,
5 sigma_between,
6 diagonal_matrix,
7 ):
8 """Base method to calculate derivatives related to correlation
9 parameters.
10
11 Parameters
12
---13 sigma_chol : array_like
14 The sigma matrix decomposed by Cholesky.
15 sigma_chol_inv : array_like
16 The inverse of sigma matrix decomposed by Cholesky.
17 sigma_between : array_like
18 The inner-matrix among sigmas.
19 diagonal_matrix : array_like
20 A diagonal matrix.
21 Returns
22
---23 array_like : A matrix with derivatives related to the C Matrix.
24 """
25 ...
Esse método calcula os três componentes de𝐶: inverso de𝐶, derivadas de𝐶 e o𝐶 bruto. Foi produzido para suportar o ajuste do segundo momento.
Após gerar o 𝐶 inverso com o método generate c inverse(), descrito na subseção anterior, a matriz derivada de𝐶é obtida pelo cálculo da derivada do sigma e derivida de𝐶. A matriz𝐶 bruta é gerada no fim do processo. Segue o método que implementa todos os componentes de𝐶:
Listagem 5.13: Método para processar os métodos da matriz𝐶.
1 def c_complete(self, mu, power, rho, tau):
2 """
3 A method to generate the whole list of C components, explicitly made
4 for the variance treatment step. This method interacts with sigma and
5 omega crafting practices, passing the list of each parameter.
6
7 Parameters
8
---9 mu : array_like
10 A vetor with mean parameters.
11 power : float
12 Power parameter.
13 rho : float
14 Correlation parameter.
15 tau : float
16 Dispersion parameter.
17 Returns
18
---19 tuple : A tuple with every component of C.
20 """
21 ...
O método generate sigma derivatives()gera as derivadas de𝜎. O cálculo é semelhante ao calculo do𝜎, adicionado a um tratamento especial aopower, caso o usuário requisite o ajuste dopower. O cálculo envolve a operaçãosanduiche powercom oΩ, raiz da variância nos valores esperados e a sua derivada. O método é apresentado a seguir.
Listagem 5.14: Método com o cálculo das derivadas de𝜎.
1 def _calculate_sigma_derivatives(
2 self, mu, power, variance, z, power_fixed, Ntrial, omegas,
3 covariance="identity"
4 ):
5 """
6 Base method for computing variance-covariance matrix, based on
7 variance function and omega matrix. This method will implement for
8 cases where covariance is equal to identity, and variance falls in the
9 list:
10 [’constant’, ’tweedie’, ’binomialP’, ’binomialPQ’, ’power’,
11 ’geom_tweedie’, ’poisson_tweedie’]
12
13 Parameters
14
---15 mu : array_like
16 A vector with expected values.
17 power : float
18 A power parameter.
19 variance : str
20 The variance function.
21 z : list
22 The list with z matrices for dependencies specification.
23 power_fixed : boolean
24 The specification of power estimation.
25 Ntrial : int
26 The number of trial. Parameter for Binomial distribution.
27 omegas : list
28 a list with omegas.
29 """
30 ...
O método generate derivative c() calcula a derivada da matriz 𝐶. Esta operação faz uso de matrizes esparsas para aprimoramento de perfor-mancehttps://docs.scipy.org/doc/scipy/reference/generated/scipy.
sparse.csr_matrix.html.
No fim, a matriz𝐶com suas derivadas é retornada como uma matrixnumpypadrão.
O primeiro passo é calcular as derivadas daΣdecomposta pela operaçãoCholeskyatravés do método derivative cholesky(). É um cálculo iterativo, operacionalizado por cada matriz da derivada deΣ, gerando matrizes diagonais e finalizando com a multiplicação com a matrizΣCholesky. O pós-operatório envolve a construção de matrizes bloco diagonal da matriz Cholesky, implementado no método mc transform list bdiag().
Listagem 5.15: Método para cálculo das derivadas Cholesky.
1 def __derivative_cholesky(self, d_sigma, inv_chol, chol):
2 ...
As derivadas da matriz 𝐶 são calculadas pela operação sanduiche power entre as matrizes: sigma-entre-respostas, a matriz bloco diagonal derivada sigmacholesky e a matrix bloco diagonalΣ cholesky. Finalmente, para o caso de mais de uma resposta, calcula-se e adiciona-se a derivada dosrhoà matriz𝐶 derivada com o método derivative rho().