Calcular el Coeficiente de Correlación de Pearson en C

CBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderemos a calcular el coeficiente de correlación de Pearson en C. El laboratorio cubre tres pasos principales: leer datos emparejados (x, y), calcular las sumas necesarias y utilizar la fórmula para calcular el coeficiente de correlación. Crearemos un programa en C que permita a los usuarios introducir puntos de datos y, a continuación, el programa realizará el análisis de correlación y mostrará el resultado.

El laboratorio proporciona una guía paso a paso, comenzando con la implementación de la funcionalidad de entrada de datos, seguida del cálculo de las sumas necesarias para la fórmula de correlación y, finalmente, la impresión del coeficiente de correlación.

Lectura de Datos Emparejados (x,y)

En este paso, aprenderemos a leer datos emparejados (x, y) para calcular el coeficiente de correlación de Pearson en C. Crearemos un programa que permita a los usuarios introducir datos numéricos emparejados y almacenarlos para su posterior análisis.

Primero, creemos un archivo fuente C para nuestra funcionalidad de entrada de datos:

cd ~/project
nano correlation_input.c

Ahora, agregue el siguiente código al archivo:

#include <stdio.h>
#define MAX_POINTS 100

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

    printf("Ingrese el número de puntos de datos (máximo %d): ", MAX_POINTS);
    scanf("%d", &n);

    printf("Ingrese las coordenadas x e y:\n");
    for (i = 0; i < n; i++) {
        printf("Punto %d (x y): ", i + 1);
        scanf("%lf %lf", &x[i], &y[i]);
    }

    printf("\nPuntos de Datos Ingresados:\n");
    for (i = 0; i < n; i++) {
        printf("Punto %d: (%.2f, %.2f)\n", i + 1, x[i], y[i]);
    }

    return 0;
}

Compile el programa:

gcc -o correlation_input correlation_input.c

Ejecute el programa e ingrese algunos datos de muestra:

./correlation_input

Salida de ejemplo:

Ingrese el número de puntos de datos (máximo 100): 5
Ingrese las coordenadas x e y:
Punto 1 (x y): 1 2
Punto 2 (x y): 2 4
Punto 3 (x y): 3 5
Punto 4 (x y): 4 4
Punto 5 (x y): 5 5

Puntos de Datos Ingresados:
Punto 1: (1.00, 2.00)
Punto 2: (2.00, 4.00)
Punto 3: (3.00, 5.00)
Punto 4: (4.00, 4.00)
Punto 5: (5.00, 5.00)

Desglose del código:

  1. Definimos un número máximo de puntos de datos (MAX_POINTS) para evitar desbordamiento de memoria.
  2. El programa solicita al usuario que ingrese el número de puntos de datos.
  3. Luego, permite al usuario ingresar las coordenadas x e y para cada punto.
  4. Finalmente, imprime los puntos de datos ingresados para confirmar la entrada.

Cálculo de Sumas y Uso de la Fórmula para la Correlación

En este paso, ampliaremos nuestro programa anterior para calcular las sumas necesarias para el cálculo del coeficiente de correlación de Pearson. Modificaremos el archivo correlation_input.c para incluir los cálculos de la fórmula de correlación.

Abra el archivo anterior:

cd ~/project
nano correlation_input.c

Actualice el código con la siguiente implementación:

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

    // Calcular las sumas necesarias
    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];
    }

    // Fórmula del coeficiente de correlación 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("Ingrese el número de puntos de datos (máximo %d): ", MAX_POINTS);
    scanf("%d", &n);

    printf("Ingrese las coordenadas x e y:\n");
    for (i = 0; i < n; i++) {
        printf("Punto %d (x y): ", i + 1);
        scanf("%lf %lf", &x[i], &y[i]);
    }

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

    printf("\nPuntos de Datos Ingresados:\n");
    for (i = 0; i < n; i++) {
        printf("Punto %d: (%.2f, %.2f)\n", i + 1, x[i], y[i]);
    }

    printf("\nCoeficiente de Correlación de Pearson: %.4f\n", correlation);

    return 0;
}

Compile el programa con la biblioteca matemática:

gcc -o correlation_input correlation_input.c -lm

Ejecute el programa con datos de muestra:

./correlation_input

Salida de ejemplo:

Ingrese el número de puntos de datos (máximo 100): 5
Ingrese las coordenadas x e y:
Punto 1 (x y): 1 2
Punto 2 (x y): 2 4
Punto 3 (x y): 3 5
Punto 4 (x y): 4 4
Punto 5 (x y): 5 5

Puntos de Datos Ingresados:
Punto 1: (1.00, 2.00)
Punto 2: (2.00, 4.00)
Punto 3: (3.00, 5.00)
Punto 4: (4.00, 4.00)
Punto 5: (5.00, 5.00)

Coeficiente de Correlación de Pearson: 0.8528

Puntos clave sobre el cálculo de la correlación de Pearson:

  1. Calculamos las sumas necesarias: x, y, xy, x², y².
  2. Aplicamos la fórmula del coeficiente de correlación de Pearson.
  3. Usamos sqrt() de math.h para el cálculo.
  4. Devolvemos el coeficiente de correlación entre -1 y 1.

Impresión del Coeficiente de Correlación

En este paso final, mejoraremos nuestro programa para proporcionar una interpretación completa del coeficiente de correlación de Pearson y crear una salida más amigable para el usuario.

Abra el archivo anterior:

cd ~/project
nano correlation_input.c

Actualice el código con la siguiente implementación:

#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("\nInterpretación del Coeficiente de Correlación:\n");
    printf("Valor de Correlación: %.4f\n", correlation);

    if (correlation > 0.8) {
        printf("Correlación Positiva Fuerte\n");
    } else if (correlation > 0.5) {
        printf("Correlación Positiva Moderada\n");
    } else if (correlation > 0.3) {
        printf("Correlación Positiva Débil\n");
    } else if (correlation > -0.3) {
        printf("No existe Correlación Lineal\n");
    } else if (correlation > -0.5) {
        printf("Correlación Negativa Débil\n");
    } else if (correlation > -0.8) {
        printf("Correlación Negativa Moderada\n");
    } else {
        printf("Correlación Negativa Fuerte\n");
    }
}

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

    printf("Calculadora de Coeficiente de Correlación de Pearson\n");
    printf("----------------------------------------------------\n");
    printf("Ingrese el número de puntos de datos (máximo %d): ", MAX_POINTS);
    scanf("%d", &n);

    printf("Ingrese las coordenadas x e y:\n");
    for (i = 0; i < n; i++) {
        printf("Punto %d (x y): ", i + 1);
        scanf("%lf %lf", &x[i], &y[i]);
    }

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

    printf("\nPuntos de Datos Ingresados:\n");
    for (i = 0; i < n; i++) {
        printf("Punto %d: (%.2f, %.2f)\n", i + 1, x[i], y[i]);
    }

    interpretCorrelation(correlation);

    return 0;
}

Compile el programa:

gcc -o correlation_calculator correlation_input.c -lm

Ejecute el programa con datos de muestra:

./correlation_calculator

Salida de ejemplo:

Calculadora de Coeficiente de Correlación de Pearson
----------------------------------------------------
Ingrese el número de puntos de datos (máximo 100): 5
Ingrese las coordenadas x e y:
Punto 1 (x y): 1 2
Punto 2 (x y): 2 4
Punto 3 (x y): 3 5
Punto 4 (x y): 4 4
Punto 5 (x y): 5 5

Puntos de Datos Ingresados:
Punto 1: (1.00, 2.00)
Punto 2: (2.00, 4.00)
Punto 3: (3.00, 5.00)
Punto 4: (4.00, 4.00)
Punto 5: (5.00, 5.00)

Interpretación del Coeficiente de Correlación:
Valor de Correlación: 0.8528
Correlación Positiva Fuerte

Mejoras clave:

  1. Se agregó la función interpretCorrelation().
  2. Proporciona una explicación detallada de la fuerza de la correlación.
  3. Categoriza la correlación en diferentes niveles.
  4. Interfaz de usuario mejorada con un título y una salida clara.

Resumen

En este laboratorio, aprendimos a leer datos emparejados (x, y) para calcular el coeficiente de correlación de Pearson en C. Creamos un programa que permite a los usuarios introducir datos numéricos emparejados y almacenarlos para su posterior análisis. También ampliamos el programa para calcular las sumas necesarias para calcular el coeficiente de correlación de Pearson utilizando la fórmula.

Los pasos clave cubiertos en este laboratorio incluyen la lectura de datos emparejados (x, y), el cálculo de las sumas necesarias para la fórmula de correlación y la impresión del coeficiente de correlación final. Siguiendo estos pasos, puedes implementar el cálculo de la correlación de Pearson en tus propios programas en C.