Implémentation avancée de l’analyse de corrélation des données, Excel VBA
Voici une implémentation avancée de l’analyse de corrélation des données dans Excel en utilisant VBA, avec des explications détaillées.
Objectif de la tâche :
L’objectif est de créer un code VBA dans Excel permettant d’analyser et de calculer les corrélations entre plusieurs ensembles de données. Cela impliquera le calcul du coefficient de corrélation de Pearson, qui quantifie la relation linéaire entre deux variables. Le code inclura également une option pour analyser les corrélations de plusieurs colonnes de données, générer une matrice de corrélation et visualiser les résultats à l’aide d’une carte thermique (heatmap).
Étapes impliquées dans l’implémentation :
1. Calcul du Coefficient de Corrélation de Pearson :
- Le coefficient de corrélation de Pearson (r) mesure la force et la direction de la relation linéaire entre deux variables. La formule du coefficient de Pearson est la suivante :
r = ∑(Xi − Xˉ)(Yi − Yˉ)∑(Xi − Xˉ)2∑(Yi − Yˉ)2
Où :
- Xi et Yi sont les valeurs individuelles des deux variables.
- Xˉ et Yˉ sont les moyennes des variables X et Y.
2. Générer une Matrice de Corrélation :
- Si vous avez plusieurs colonnes de données, la matrice de corrélation affichera le coefficient de corrélation de Pearson pour chaque paire de colonnes.
3. Créer une Carte Thermique pour la Visualisation :
- Une carte thermique des corrélations permet de visualiser la force et la direction des corrélations entre les variables.
Code VBA pour l’Analyse de Corrélation :
Option Explicit ' Cette fonction calcule la corrélation de Pearson entre deux tableaux de données. Function PearsonCorrelation(arrX As Range, arrY As Range) As Double Dim i As Long Dim n As Long Dim sumX As Double, sumY As Double Dim sumXY As Double, sumX2 As Double, sumY2 As Double Dim correlation As Double n = arrX.Count If n <> arrY.Count Then MsgBox "Les plages doivent avoir le même nombre de lignes.", vbCritical Exit Function End If ' Initialisation des sommes sumX = 0 sumY = 0 sumXY = 0 sumX2 = 0 sumY2 = 0 ' Boucle à travers chaque valeur pour calculer les sommes nécessaires à la formule de Pearson For i = 1 To n sumX = sumX + arrX.Cells(i, 1).Value sumY = sumY + arrY.Cells(i, 1).Value sumXY = sumXY + arrX.Cells(i, 1).Value * arrY.Cells(i, 1).Value sumX2 = sumX2 + arrX.Cells(i, 1).Value ^ 2 sumY2 = sumY2 + arrY.Cells(i, 1).Value ^ 2 Next i ' Formule de la corrélation de Pearson correlation = (n * sumXY - sumX * sumY) / _ Sqr((n * sumX2 - sumX ^ 2) * (n * sumY2 - sumY ^ 2)) PearsonCorrelation = correlation End Function ' Cette sous-routine calcule la matrice de corrélation pour une plage de colonnes. Sub CorrelationMatrixAnalysis() Dim dataRange As Range Dim i As Long, j As Long Dim numColumns As Long Dim correlationResult As Double Dim matrixRange As Range ' Spécifier la plage de données (on suppose que les données commencent en cellule A1) Set dataRange = Range("A1").CurrentRegion numColumns = dataRange.Columns.Count ' En-tête pour la matrice de corrélation With dataRange.Worksheet ' Créer l'en-tête pour la matrice de corrélation Set matrixRange = .Range("G1").Resize(numColumns, numColumns) matrixRange.Cells(1, 1).Value = "Matrice de Corrélation" ' Boucle à travers chaque combinaison de colonnes pour calculer la corrélation de Pearson For i = 1 To numColumns For j = 1 To numColumns ' Ignorer les éléments diagonaux (la corrélation d'une colonne avec elle-même est toujours 1) If i = j Then matrixRange.Cells(i + 1, j + 1).Value = 1 Else ' Calculer la corrélation de Pearson entre les colonnes i et j correlationResult = PearsonCorrelation(dataRange.Columns(i), dataRange.Columns(j)) matrixRange.Cells(i + 1, j + 1).Value = correlationResult End If Next j Next i End With MsgBox "Matrice de Corrélation Calculée avec Succès" End Sub ' Cette sous-routine crée une carte thermique colorée pour la matrice de corrélation. Sub CreateHeatmap() Dim matrixRange As Range Dim cell As Range Dim correlationValue As Double Dim color As Long ' Définir la plage pour la matrice de corrélation (sortie de CorrelationMatrixAnalysis) Set matrixRange = Range("G2").CurrentRegion ' Boucle à travers chaque cellule de la matrice et appliquer une couleur en fonction de la valeur de corrélation For Each cell In matrixRange correlationValue = cell.Value ' Appliquer des couleurs en fonction de la valeur de corrélation If correlationValue > 0.8 Then color = RGB(0, 255, 0) ' Vert pour forte corrélation positive ElseIf correlationValue > 0.5 Then color = RGB(255, 255, 0) ' Jaune pour corrélation positive modérée ElseIf correlationValue < -0.8 Then color = RGB(255, 0, 0) ' Rouge pour forte corrélation négative ElseIf correlationValue < -0.5 Then color = RGB(255, 165, 0) ' Orange pour corrélation négative modérée Else color = RGB(200, 200, 200) ' Gris pour corrélation faible End If cell.Interior.Color = color Next cell MsgBox "Carte Thermique Créée avec Succès" End Sub
Explication détaillée du code :
1. Fonction PearsonCorrelation :
- Cette fonction calcule le coefficient de corrélation de Pearson pour deux plages de données (tableaux).
- Elle vérifie d’abord si les plages de données ont le même nombre de lignes.
- Elle calcule ensuite les sommes nécessaires (somme de X, somme de Y, somme de XY, somme de X^2 et somme de Y^2).
- Enfin, elle utilise ces sommes pour calculer la corrélation de Pearson en utilisant la formule mathématique du coefficient de Pearson.
2. Sous-routine CorrelationMatrixAnalysis :
- Cette sous-routine calcule la matrice de corrélation pour un ensemble de colonnes de données.
- La plage de données est supposée commencer à la cellule A1 et couvrir toutes les lignes et colonnes adjacentes.
- Le code parcourt chaque paire de colonnes dans l’ensemble de données, calcule la corrélation pour chaque paire à l’aide de la fonction PearsonCorrelation et stocke le résultat dans une nouvelle plage (commençant à G1).
- Les éléments diagonaux (corrélations d’une colonne avec elle-même) sont définis à 1, car la corrélation d’une variable avec elle-même est toujours égale à 1.
3. Sous-routine CreateHeatmap :
- Cette sous-routine applique un code couleur à la matrice de corrélation en fonction des valeurs de corrélation.
- Le vert est utilisé pour les corrélations positives fortes (supérieures à 0.8), le rouge pour les corrélations négatives fortes (inférieures à -0.8), et différentes nuances de jaune, orange ou gris pour d’autres niveaux de corrélation.
- Cela permet de visualiser facilement la force et la direction des corrélations entre les colonnes de données.
Utilisation :
1. Exécution de l’analyse :
- Ouvrez Excel et appuyez sur ALT + F11 pour ouvrir l’éditeur VBA.
- Insérez un nouveau module, puis collez le code dans celui-ci.
- Pour exécuter l’analyse, appuyez sur F5 lorsque la sous-routine CorrelationMatrixAnalysis ou CreateHeatmap est sélectionnée.
2. Données d’entrée :
- Les données doivent être organisées en colonnes, chaque colonne représentant une variable ou un ensemble de données différent.
- Le code calculera les corrélations entre ces variables.
3. Sortie :
- La matrice de corrélation sera placée dans une nouvelle plage, à partir de la cellule G1.
- La carte thermique colorée affichera visuellement la force des corrélations entre les colonnes.
Conclusion :
Ce code VBA avancé permet de calculer et de visualiser les corrélations entre plusieurs ensembles de données dans Excel. Il est hautement personnalisable et peut être étendu pour inclure d’autres types de corrélations (par exemple, la corrélation de rang de Spearman) ou ajouter des fonctionnalités de visualisation supplémentaires. La carte thermique est particulièrement utile pour identifier visuellement les relations fortes entre les variables.