Bonjour
Je ne sais pas comment réaliser une requête en VBA qui calculerait le coefficient de correlation entre 2 tables de données Access (il n'existe pas de fonction CORR)
Merci d'avance pour vos réponses
Bonjour
Je ne sais pas comment réaliser une requête en VBA qui calculerait le coefficient de correlation entre 2 tables de données Access (il n'existe pas de fonction CORR)
Merci d'avance pour vos réponses
Heu, ben là, je ne comprend même pas la question...
Qu'est-ce qu'un coefficient de corrélation entre 2 tables?
Le coefficient de correlation entre 2 séries de données est égal à la covariance entre les 2 séries sur le produit de la variance des 2 séries. Si il est proche de + ou -1 , les 2 séries ont un lien de linéarité. Si il est proche de 0, les 2 séries sont linéairement indépendantes.
En SQL access, il existe la fonction StDev pour la variance, mais il n'y a rien sur la covariance et je ne vois donc pas comment faire ma requete.
Merci d'avance
Pffff..... on a déjà de la peine à se comprendre en parlant le langage VB6, mais là, tu pousses un peuEnvoyé par fredkrug
On est pas tous mathématicien ou statisticien![]()
Bon alors ça sert pour savoir si 2 séries se ressemblent ou pas. Le site suivant détaille la formule :
http://rfv.insa-lyon.fr/~jolion/STAT/node40.html
Mais c'est sûr que tout cela est très mathématique![]()
Je peux te proposer de regarder si cette fonction existe dans Excel. Tu pourrais alors récupérer tes 2 séries de données dans Excel, puis appliquer cette formule. Sinon, ben... Tu vas devoir faire le calcul...
soit une table access
avec deux champs contenant des nombres
la fonction suivante
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 Function coeffcorr(champ1 As String, champ2 As String, nomtable As String) As Single Dim base As DAO.Database Dim data As Recordset Dim moy1 As Single Dim moy2 As Single Dim car1 As Single Dim car2 As Single Dim covar As Single Dim nbdata As Long Dim ecart1 As Single Dim ecart2 As Single Set base = CurrentDb() Set data = base.OpenRecordset("select " & champ1 & "," & champ2 & " from " & nomtable & ";") data.MoveLast nbdata = data.RecordCount data.MoveFirst Do Until data.EOF moy1 = moy1 + data(champ1) moy2 = moy2 + data(champ2) data.MoveNext Loop moy1 = moy1 / nbdata moy2 = moy2 / nbdata data.MoveFirst Do Until data.EOF ecart1 = data(champ1) - moy1 ecart2 = data(champ2) - moy2 car1 = car1 + (ecart1 * ecart1) car2 = car2 + (ecart2 * ecart2) covar = covar + (ecart1 * ecart2) data.MoveNext Loop car1 = Sqr(car1 / nbdata) car2 = Sqr(car2 / nbdata) coeffcorr = (1 / nbdata) * covar / car1 / car2 End Function
devrait faire ton bonheur
pour l'utiliser
select coeffcorr("nomduchamp1";"nomduchamp2";"nom de la table"
nb je te laisse le soin de gèrer les erreurs valeurs nulles ou autres
Et bien ça m'a l'air tout bon. Je m'empresse de tester cette fonction.
Merci beaucoup
on peut aussi tester en sql
soit une table matable avec deux valeurs val1 val2
la requête suivante donne le résultatSELECT Sum(([val1]-(SELECT Avg(val1) AS M1 FROM matable;))^2) AS ec1, Sum(([val2]-(SELECT Avg(val2) AS M2 FROM matable;))^2) AS ec2, Sum(([val1]-(SELECT Avg(val1) AS M1 FROM matable;))*([val2]-(SELECT Avg(val2) AS M2 FROM matable;))) AS var, (SELECT Count(val1) AS nb FROM matable;) AS nombre, [var]/[nombre]/Sqr([ec1]/[nombre])/Sqr([ec2]/[nombre]) AS coeffcorr
FROM matable;
Partager