Bonjour,
Je suis un petit débutant en VBA et j'ai des difficultés à comprendre un code.
Est ce que quelqu'un peu m'aider SVP en me disant les principales étapes de ce code.
Voici le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
Function foo(y As Range, x As Range)
 
'compter les variables
Dim i As Long, j As Long, jj As Long
'dimensions des donn�es
 
Dim K As Long, N As Long
N = y.Rows.Count
K = x.Columns.Count
 
'initialisation des vecteurs coeff b et score bx avec la moyenne de y
Dim b() As Double, bx() As Double, ybar As Double
ReDim b(1 To K)   ' les 6 coefficients du score
ReDim bx(1 To N)  ' score en soi par emprunteur
ybar = Application.WorksheetFunction.Average(y)
b(1) = Log(ybar / (1 - ybar))
    For i = 1 To N
        bx(i) = b(1)
    Next i
 
'Definir variables dans  Newton
Dim sens As Double, maxiter As Integer, iter As Integer, delta As Double
Dim lambda() As Double, logV() As Double, dlogV() As Double, hesse() As Double, hinv(), hinvg()
ReDim lambda(1 To N)
 
'Parametrage de boucle
sens = 1 * 10 ^ (-11): maxiter = 50
ReDim logV(1 To maxiter)
delta = sens + 1: iter = 1: logV(1) = 0
 
 
'Boucle pour iterations de Newton sur iter
 
Do While Abs(delta) > sens And iter < maxiter
    iter = iter + 1
 
    'Mise � Zero deriv�e premi�re et seconde
    Erase dlogV, hesse
    ReDim dlogV(1 To K): ReDim hesse(1 To K, 1 To K)
 
'calculer prediction Lambda, gradient dlogV, Hessien hesse, et log vraisembl logV
For i = 1 To N
lambda(i) = 1 / (1 + Exp(-bx(i)))
'calcul de la d�riv�e premi�re
    For j = 1 To K
        dlogV(j) = dlogV(j) + (y(i) - lambda(i)) * x(i, j)
 
            ' calcul de la d�riv�e seconde
            For jj = 1 To K
                hesse(jj, j) = hesse(jj, j) - lambda(i) * (1 - lambda(i)) * x(i, jj) * x(i, j)
            Next jj
    Next j
'Calcul du Log de la vraisemblance pour cette iteration
    logV(iter) = logV(iter) + y(i) * Log(1 / (1 + Exp(-bx(i)))) + (1 - y(i)) * Log(1 - 1 / (1 + Exp(-bx(i))))
    Next i
 
'calcul de l'inverse du Hessien ( = hinv) et le multiplier avec dlogV
hinv = Application.WorksheetFunction.MInverse(hesse)
hinvg = Application.WorksheetFunction.MMult(dlogV, hinv)
 
' Si converge, sortie et garder le b avec le hessien estim�
delta = logV(iter) - logV(iter - 1)
If Abs(delta) <= sens Then Exit Do
 
'appliquer Newton schema pour mise a jour coeff b
For j = 1 To K
    b(j) = b(j) - hinvg(j)
Next j
 
'Calcul nouveau score (bx)
    For i = 1 To N
        bx(i) = 0
        For j = 1 To K
            bx(i) = bx(i) + b(j) * x(i, j)
        Next j
    Next i
 
' Fin de la boucle While
Loop
 
foo = b
End Function
Merci