Calcul du coefficient de corrélation de Pearson en C

CBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, nous apprendrons à calculer le coefficient de corrélation de Pearson en C. Le laboratoire couvre trois étapes principales : la lecture des données appariées (x,y), le calcul des sommes nécessaires et l'utilisation de la formule pour calculer le coefficient de corrélation. Nous créerons un programme C qui permettra aux utilisateurs d'entrer des points de données, puis le programme effectuera l'analyse de corrélation et affichera le résultat.

Le laboratoire fournit un guide étape par étape, commençant par la mise en œuvre de la fonctionnalité d'entrée des données, suivi du calcul des sommes nécessaires à la formule de corrélation, et enfin de l'impression du coefficient de corrélation.

Lecture des données appariées (x,y)

Dans cette étape, nous allons apprendre à lire les données appariées (x,y) pour calculer le coefficient de corrélation de Pearson en C. Nous créerons un programme permettant aux utilisateurs d'entrer des données numériques appariées et de les stocker pour une analyse ultérieure.

Tout d'abord, créons un fichier source C pour notre fonctionnalité d'entrée de données :

cd ~/project
nano correlation_input.c

Maintenant, ajoutez le code suivant au fichier :

#include <stdio.h>
#define MAX_POINTS 100

int main() {
    double x[MAX_POINTS], y[MAX_POINTS];
    int n, i;

    printf("Entrez le nombre de points de données (max %d) : ", MAX_POINTS);
    scanf("%d", &n);

    printf("Entrez les coordonnées x et y :\n");
    for (i = 0; i < n; i++) {
        printf("Point %d (x y) : ", i + 1);
        scanf("%lf %lf", &x[i], &y[i]);
    }

    printf("\nPoints de données saisis :\n");
    for (i = 0; i < n; i++) {
        printf("Point %d : (%.2f, %.2f)\n", i + 1, x[i], y[i]);
    }

    return 0;
}

Compilez le programme :

gcc -o correlation_input correlation_input.c

Exécutez le programme et entrez des données d'exemple :

./correlation_input

Sortie d'exemple :

Entrez le nombre de points de données (max 100) : 5
Entrez les coordonnées x et y :
Point 1 (x y) : 1 2
Point 2 (x y) : 2 4
Point 3 (x y) : 3 5
Point 4 (x y) : 4 4
Point 5 (x y) : 5 5

Points de données saisis :
Point 1 : (1.00, 2.00)
Point 2 : (2.00, 4.00)
Point 3 : (3.00, 5.00)
Point 4 : (4.00, 4.00)
Point 5 : (5.00, 5.00)

Décomposons le code :

  1. Nous définissons un nombre maximal de points de données (MAX_POINTS) pour éviter le dépassement de mémoire.
  2. Le programme invite l'utilisateur à entrer le nombre de points de données.
  3. Il permet ensuite à l'utilisateur d'entrer les coordonnées x et y pour chaque point.
  4. Enfin, il affiche les points de données saisis pour confirmer l'entrée.

Calcul des sommes et utilisation de la formule de corrélation

Dans cette étape, nous allons étendre notre programme précédent pour calculer les sommes nécessaires au calcul du coefficient de corrélation de Pearson. Nous allons modifier le fichier correlation_input.c pour inclure les calculs de la formule de corrélation.

Ouvrez le fichier précédent :

cd ~/project
nano correlation_input.c

Mettez à jour le code avec la mise en œuvre suivante :

#include <stdio.h>
#include <math.h>
#define MAX_POINTS 100

double calculatePearsonCorrelation(double x[], double y[], int n) {
    double sum_x = 0, sum_y = 0, sum_xy = 0;
    double sum_x_squared = 0, sum_y_squared = 0;

    // Calcul des sommes nécessaires
    for (int i = 0; i < n; i++) {
        sum_x += x[i];
        sum_y += y[i];
        sum_xy += x[i] * y[i];
        sum_x_squared += x[i] * x[i];
        sum_y_squared += y[i] * y[i];
    }

    // Formule du coefficient de corrélation de Pearson
    double numerator = n * sum_xy - sum_x * sum_y;
    double denominator = sqrt((n * sum_x_squared - sum_x * sum_x) *
                               (n * sum_y_squared - sum_y * sum_y));

    return numerator / denominator;
}

int main() {
    double x[MAX_POINTS], y[MAX_POINTS];
    int n, i;

    printf("Entrez le nombre de points de données (max %d) : ", MAX_POINTS);
    scanf("%d", &n);

    printf("Entrez les coordonnées x et y :\n");
    for (i = 0; i < n; i++) {
        printf("Point %d (x y) : ", i + 1);
        scanf("%lf %lf", &x[i], &y[i]);
    }

    double correlation = calculatePearsonCorrelation(x, y, n);

    printf("\nPoints de données saisis :\n");
    for (i = 0; i < n; i++) {
        printf("Point %d : (%.2f, %.2f)\n", i + 1, x[i], y[i]);
    }

    printf("\nCoefficient de corrélation de Pearson : %.4f\n", correlation);

    return 0;
}

Compilez le programme avec la bibliothèque mathématique :

gcc -o correlation_input correlation_input.c -lm

Exécutez le programme avec des données d'exemple :

./correlation_input

Sortie d'exemple :

Entrez le nombre de points de données (max 100) : 5
Entrez les coordonnées x et y :
Point 1 (x y) : 1 2
Point 2 (x y) : 2 4
Point 3 (x y) : 3 5
Point 4 (x y) : 4 4
Point 5 (x y) : 5 5

Points de données saisis :
Point 1 : (1.00, 2.00)
Point 2 : (2.00, 4.00)
Point 3 : (3.00, 5.00)
Point 4 : (4.00, 4.00)
Point 5 : (5.00, 5.00)

Coefficient de corrélation de Pearson : 0.8528

Points clés concernant le calcul de la corrélation de Pearson :

  1. Nous calculons les sommes nécessaires : x, y, xy, x², y²
  2. Nous appliquons la formule du coefficient de corrélation de Pearson
  3. Nous utilisons sqrt() de math.h pour le calcul
  4. Nous retournons le coefficient de corrélation compris entre -1 et 1

Affichage du coefficient de corrélation

Dans cette dernière étape, nous allons améliorer notre programme pour fournir une interprétation complète du coefficient de corrélation de Pearson et créer une sortie plus conviviale.

Ouvrez le fichier précédent :

cd ~/project
nano correlation_input.c

Mettez à jour le code avec la mise en œuvre suivante :

#include <stdio.h>
#include <math.h>
#define MAX_POINTS 100

double calculatePearsonCorrelation(double x[], double y[], int n) {
    double sum_x = 0, sum_y = 0, sum_xy = 0;
    double sum_x_squared = 0, sum_y_squared = 0;

    for (int i = 0; i < n; i++) {
        sum_x += x[i];
        sum_y += y[i];
        sum_xy += x[i] * y[i];
        sum_x_squared += x[i] * x[i];
        sum_y_squared += y[i] * y[i];
    }

    double numerator = n * sum_xy - sum_x * sum_y;
    double denominator = sqrt((n * sum_x_squared - sum_x * sum_x) *
                               (n * sum_y_squared - sum_y * sum_y));

    return numerator / denominator;
}

void interpretCorrelation(double correlation) {
    printf("\nInterprétation du coefficient de corrélation :\n");
    printf("Valeur de corrélation : %.4f\n", correlation);

    if (correlation > 0.8) {
        printf("Corrélation positive forte\n");
    } else if (correlation > 0.5) {
        printf("Corrélation positive modérée\n");
    } else if (correlation > 0.3) {
        printf("Corrélation positive faible\n");
    } else if (correlation > -0.3) {
        printf("Pas de corrélation linéaire\n");
    } else if (correlation > -0.5) {
        printf("Corrélation négative faible\n");
    } else if (correlation > -0.8) {
        printf("Corrélation négative modérée\n");
    } else {
        printf("Corrélation négative forte\n");
    }
}

int main() {
    double x[MAX_POINTS], y[MAX_POINTS];
    int n, i;

    printf("Calculateur de coefficient de corrélation de Pearson\n");
    printf("----------------------------------------\n");
    printf("Entrez le nombre de points de données (max %d) : ", MAX_POINTS);
    scanf("%d", &n);

    printf("Entrez les coordonnées x et y :\n");
    for (i = 0; i < n; i++) {
        printf("Point %d (x y) : ", i + 1);
        scanf("%lf %lf", &x[i], &y[i]);
    }

    double correlation = calculatePearsonCorrelation(x, y, n);

    printf("\nPoints de données saisis :\n");
    for (i = 0; i < n; i++) {
        printf("Point %d : (%.2f, %.2f)\n", i + 1, x[i], y[i]);
    }

    interpretCorrelation(correlation);

    return 0;
}

Compilez le programme :

gcc -o correlation_calculator correlation_input.c -lm

Exécutez le programme avec des données d'exemple :

./correlation_calculator

Sortie d'exemple :

Calculateur de coefficient de corrélation de Pearson
----------------------------------------
Entrez le nombre de points de données (max 100) : 5
Entrez les coordonnées x et y :
Point 1 (x y) : 1 2
Point 2 (x y) : 2 4
Point 3 (x y) : 3 5
Point 4 (x y) : 4 4
Point 5 (x y) : 5 5

Points de données saisis :
Point 1 : (1.00, 2.00)
Point 2 : (2.00, 4.00)
Point 3 : (3.00, 5.00)
Point 4 : (4.00, 4.00)
Point 5 : (5.00, 5.00)

Interprétation du coefficient de corrélation :
Valeur de corrélation : 0.8528
Corrélation positive forte

Améliorations clés :

  1. Fonction interpretCorrelation() ajoutée
  2. Explication détaillée de la force de la corrélation fournie
  3. Catégorisation de la corrélation en différents niveaux
  4. Interface utilisateur améliorée avec un titre et une sortie claire.

Résumé

Dans ce laboratoire, nous avons appris à lire des données appariées (x, y) pour calculer le coefficient de corrélation de Pearson en C. Nous avons créé un programme permettant aux utilisateurs d'entrer des données numériques appariées et de les stocker pour une analyse ultérieure. Nous avons également étendu le programme pour calculer les sommes nécessaires au calcul du coefficient de corrélation de Pearson à l'aide de la formule.

Les étapes clés abordées dans ce laboratoire incluent la lecture de données appariées (x, y), le calcul des sommes nécessaires à la formule de corrélation et l'impression du coefficient de corrélation final. En suivant ces étapes, vous pouvez implémenter le calcul de la corrélation de Pearson dans vos propres programmes C.