• Nenhum resultado encontrado

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().

Documentos relacionados