bonsoir à tous,
Voilà j'essai de programmer une fonction sous VBA qui me servira à calculer les résidus d'une régression. Ma fonction ci dessous s'exécute bien et j'utilise des tableaux pour les calculs:
comme vous pouvez le constater, j'ai bien essayé de déclarer comme il se doit les arguments des tableaux. Cependant pour Calculer les "residuals", j'ai créer une fonction Madd (addition de matrice) comme suit:
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 option base 1 Function OLSStderror(Y As Variant, X As Variant) ' Computes OLS Standard Error under the equation Y = a + B1(t)+...+Bk(t) ' Works for Simple and Multiple Regression ' '# of Rows & # of columns Dim nr, nc As Integer nr = X.rows.Count nc = X.Columns.Count ' Dim Xb(), betas(), Xbetas(), residuals() As Variant ReDim Xb(1 To nc + 1, 1 To nr), betas(1 To nc + 1, 1 To 1), Xbetas(1 To nr, 1 To 1), residuals(1 To nr, 1 To 1) As Variant Xb = RegMatrix(X) betas = OLS(Y, X) Xbetas = Application.MMult(Xb, betas) Debug.Print TypeName(Xbetas) ' residuals = MAdd(Y, Xbetas, -1) ' End Function
Or la procédure s'arrête à ce niveau (ci dessous au moment du dénombrement) dans la fonction Madd et je ne trouve pas pourquoi:
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 Function MAdd(X As Variant, Y As Variant, Coeff As Single) As Variant ' Add or Substract two matrix depending on coeff(-1,1) ' The usual matrix addition is defined for two matrices of the same dimensions ' 'Check if the two Matrix have the same size If X.rows.Count = Y.rows.Count Then If X.Columns.Count = Y.Columns.Count Then Else: MAdd = "Discrepancy in # C" Exit Function End If Else: MAdd = "Discrepancy in # R" Exit Function End If ' Dim nr, nc, i, j As Integer nr = Y.rows.Count nc = Y.Columns.Count Dim Temp As Variant ReDim Temp(nr, nc) ' 'Compute Matrix For i = 1 To nr For j = 1 To nc Temp(i, j) = X(i, j) + Coeff * Y(i, j) Next j Next i ' MAdd = Temp End Function
D'ailleurs, la fonction Madd fonctionne très bien si je sélectionne des range sous Excel. Pourquoi ne fonctionne t'elle pas avec des tableaux sous VBA? Sachant que lorsque je lui demande le type de variable de Xbetas il me donne bien un variant et il m'affiche que le vartype est 8204 ce qui correspond à une array.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 'Check if the two Matrix have the same size If X.rows.Count = Y.rows.Count Then
Any ideas?
Merci d'avance
Anthony
Partager