Berechnung des Pearson-Korrelationskoeffizienten in C

CCBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernen wir, wie man den Pearson-Korrelationskoeffizienten in C berechnet. Das Lab umfasst drei Hauptphasen: das Einlesen von gepaarten (x,y)-Daten, die Berechnung der notwendigen Summen und die Verwendung der Formel zur Berechnung des Korrelationskoeffizienten. Wir erstellen ein C-Programm, das es Benutzern ermöglicht, Datenpunkte einzugeben, und das Programm führt dann die Korrelationsanalyse durch und gibt das Ergebnis aus.

Das Lab bietet eine schrittweise Anleitung, beginnend mit der Implementierung der Daten-Eingabe-Funktionalität, gefolgt von der Berechnung der für die Korrelationsformel benötigten Summen und schließlich der Ausgabe des Korrelationskoeffizienten.

Paarige (x,y)-Daten einlesen

In diesem Schritt lernen wir, wie man gepaarte (x,y)-Daten zum Berechnen des Pearson-Korrelationskoeffizienten in C einliest. Wir erstellen ein Programm, das es Benutzern erlaubt, gepaarte numerische Daten einzugeben und diese für weitere Analysen zu speichern.

Erstellen wir zunächst eine C-Quelldatei für unsere Daten-Eingabe-Funktionalität:

cd ~/project
nano correlation_input.c

Fügen Sie nun folgenden Code in die Datei ein:

#include <stdio.h>
#define MAX_POINTS 100

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

    printf("Geben Sie die Anzahl der Datenpunkte ein (max %d): ", MAX_POINTS);
    scanf("%d", &n);

    printf("Geben Sie die x- und y-Koordinaten ein:\n");
    for (i = 0; i < n; i++) {
        printf("Punkt %d (x y): ", i + 1);
        scanf("%lf %lf", &x[i], &y[i]);
    }

    printf("\nEingetragene Datenpunkte:\n");
    for (i = 0; i < n; i++) {
        printf("Punkt %d: (%.2f, %.2f)\n", i + 1, x[i], y[i]);
    }

    return 0;
}

Kompilieren Sie das Programm:

gcc -o correlation_input correlation_input.c

Führen Sie das Programm aus und geben Sie einige Beispieldaten ein:

./correlation_input

Beispielausgabe:

Geben Sie die Anzahl der Datenpunkte ein (max 100): 5
Geben Sie die x- und y-Koordinaten ein:
Punkt 1 (x y): 1 2
Punkt 2 (x y): 2 4
Punkt 3 (x y): 3 5
Punkt 4 (x y): 4 4
Punkt 5 (x y): 5 5

Eingetragene Datenpunkte:
Punkt 1: (1.00, 2.00)
Punkt 2: (2.00, 4.00)
Punkt 3: (3.00, 5.00)
Punkt 4: (4.00, 4.00)
Punkt 5: (5.00, 5.00)

Zerlegung des Codes:

  1. Wir definieren eine maximale Anzahl von Datenpunkten (MAX_POINTS), um einen Speicherüberlauf zu vermeiden.
  2. Das Programm fordert den Benutzer auf, die Anzahl der Datenpunkte einzugeben.
  3. Anschließend kann der Benutzer die x- und y-Koordinaten für jeden Punkt eingeben.
  4. Schließlich gibt es die eingegebenen Datenpunkte aus, um die Eingabe zu bestätigen.

Summen berechnen und Formel für die Korrelation verwenden

In diesem Schritt erweitern wir unser vorheriges Programm, um die notwendigen Summen zur Berechnung des Pearson-Korrelationskoeffizienten zu berechnen. Wir modifizieren die Datei correlation_input.c, um die Berechnungen für die Korrelationsformel einzubeziehen.

Öffnen Sie die vorherige Datei:

cd ~/project
nano correlation_input.c

Aktualisieren Sie den Code mit folgender Implementierung:

#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;

    // Notwendige Summen berechnen
    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];
    }

    // Formel für den Pearson-Korrelationskoeffizienten
    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("Geben Sie die Anzahl der Datenpunkte ein (max %d): ", MAX_POINTS);
    scanf("%d", &n);

    printf("Geben Sie die x- und y-Koordinaten ein:\n");
    for (i = 0; i < n; i++) {
        printf("Punkt %d (x y): ", i + 1);
        scanf("%lf %lf", &x[i], &y[i]);
    }

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

    printf("\nEingetragene Datenpunkte:\n");
    for (i = 0; i < n; i++) {
        printf("Punkt %d: (%.2f, %.2f)\n", i + 1, x[i], y[i]);
    }

    printf("\nPearson-Korrelationskoeffizient: %.4f\n", correlation);

    return 0;
}

Kompilieren Sie das Programm mit der Mathematikbibliothek:

gcc -o correlation_input correlation_input.c -lm

Führen Sie das Programm mit Beispieldaten aus:

./correlation_input

Beispielausgabe:

Geben Sie die Anzahl der Datenpunkte ein (max 100): 5
Geben Sie die x- und y-Koordinaten ein:
Punkt 1 (x y): 1 2
Punkt 2 (x y): 2 4
Punkt 3 (x y): 3 5
Punkt 4 (x y): 4 4
Punkt 5 (x y): 5 5

Eingetragene Datenpunkte:
Punkt 1: (1.00, 2.00)
Punkt 2: (2.00, 4.00)
Punkt 3: (3.00, 5.00)
Punkt 4: (4.00, 4.00)
Punkt 5: (5.00, 5.00)

Pearson-Korrelationskoeffizient: 0.8528

Wichtige Punkte zur Berechnung der Pearson-Korrelation:

  1. Wir berechnen die notwendigen Summen: x, y, xy, x², y²
  2. Anwendung der Pearson-Korrelationskoeffizienten-Formel
  3. Verwendung von sqrt() aus math.h für die Berechnung
  4. Rückgabe des Korrelationskoeffizienten zwischen -1 und 1

Ausgabe des Korrelationskoeffizienten

In diesem letzten Schritt erweitern wir unser Programm, um eine umfassende Interpretation des Pearson-Korrelationskoeffizienten zu liefern und eine benutzerfreundlichere Ausgabe zu erstellen.

Öffnen Sie die vorherige Datei:

cd ~/project
nano correlation_input.c

Aktualisieren Sie den Code mit folgender Implementierung:

#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("\nInterpretation des Korrelationskoeffizienten:\n");
    printf("Korrelationswert: %.4f\n", correlation);

    if (correlation > 0.8) {
        printf("Starke positive Korrelation\n");
    } else if (correlation > 0.5) {
        printf("Moderate positive Korrelation\n");
    } else if (correlation > 0.3) {
        printf("Schwache positive Korrelation\n");
    } else if (correlation > -0.3) {
        printf("Keine lineare Korrelation\n");
    } else if (correlation > -0.5) {
        printf("Schwache negative Korrelation\n");
    } else if (correlation > -0.8) {
        printf("Moderate negative Korrelation\n");
    } else {
        printf("Starke negative Korrelation\n");
    }
}

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

    printf("Pearson Korrelationskoeffizienten-Rechner\n");
    printf("----------------------------------------\n");
    printf("Geben Sie die Anzahl der Datenpunkte ein (max %d): ", MAX_POINTS);
    scanf("%d", &n);

    printf("Geben Sie die x- und y-Koordinaten ein:\n");
    for (i = 0; i < n; i++) {
        printf("Punkt %d (x y): ", i + 1);
        scanf("%lf %lf", &x[i], &y[i]);
    }

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

    printf("\nEingetragene Datenpunkte:\n");
    for (i = 0; i < n; i++) {
        printf("Punkt %d: (%.2f, %.2f)\n", i + 1, x[i], y[i]);
    }

    interpretCorrelation(correlation);

    return 0;
}

Kompilieren Sie das Programm:

gcc -o correlation_calculator correlation_input.c -lm

Führen Sie das Programm mit Beispieldaten aus:

./correlation_calculator

Beispielausgabe:

Pearson Korrelationskoeffizienten-Rechner
----------------------------------------
Geben Sie die Anzahl der Datenpunkte ein (max 100): 5
Geben Sie die x- und y-Koordinaten ein:
Punkt 1 (x y): 1 2
Punkt 2 (x y): 2 4
Punkt 3 (x y): 3 5
Punkt 4 (x y): 4 4
Punkt 5 (x y): 5 5

Eingetragene Datenpunkte:
Punkt 1: (1.00, 2.00)
Punkt 2: (2.00, 4.00)
Punkt 3: (3.00, 5.00)
Punkt 4: (4.00, 4.00)
Punkt 5: (5.00, 5.00)

Interpretation des Korrelationskoeffizienten:
Korrelationswert: 0.8528
Starke positive Korrelation

Wichtige Verbesserungen:

  1. Hinzufügen der Funktion interpretCorrelation()
  2. Detaillierte Erklärung der Korrelationsstärke
  3. Kategorisierung der Korrelation in verschiedene Stufen
  4. Verbesserte Benutzeroberfläche mit Titel und klarer Ausgabe

Zusammenfassung

In diesem Labor haben wir gelernt, wie man gepaarte (x, y)-Daten zum Berechnen des Pearson-Korrelationskoeffizienten in C liest. Wir haben ein Programm erstellt, das es Benutzern ermöglicht, gepaarte numerische Daten einzugeben und diese für weitere Analysen zu speichern. Wir haben das Programm auch erweitert, um die notwendigen Summen zur Berechnung des Pearson-Korrelationskoeffizienten mithilfe der Formel zu berechnen.

Die wichtigsten Schritte in diesem Labor umfassen das Lesen von gepaarten (x, y)-Daten, die Berechnung der für die Korrelationsformel erforderlichen Summen und die Ausgabe des endgültigen Korrelationskoeffizienten. Durch die Durchführung dieser Schritte können Sie die Pearson-Korrelationsberechnung in Ihren eigenen C-Programmen implementieren.