Calcular o Coeficiente de Correlação de Pearson em C

CBeginner
Pratique Agora

Introdução

Neste laboratório, aprenderemos a calcular o coeficiente de correlação de Pearson em C. O laboratório cobre três etapas principais: leitura de dados em pares (x,y), cálculo das somas necessárias e utilização da fórmula para calcular o coeficiente de correlação. Criaremos um programa em C que permite aos utilizadores introduzir pontos de dados e, em seguida, o programa realizará a análise de correlação e produzirá o resultado.

O laboratório fornece um guia passo a passo, começando com a implementação da funcionalidade de entrada de dados, seguido pelo cálculo das somas necessárias para a fórmula de correlação e, finalmente, a impressão do coeficiente de correlação.

Ler Dados em Pares (x,y)

Nesta etapa, aprenderemos a ler dados em pares (x,y) para calcular o coeficiente de correlação de Pearson em C. Criaremos um programa que permite aos utilizadores introduzir dados numéricos em pares e armazená-los para análise posterior.

Primeiro, vamos criar um ficheiro de origem C para a nossa funcionalidade de entrada de dados:

cd ~/project
nano correlation_input.c

Agora, adicione o seguinte código ao ficheiro:

#include <stdio.h>
#define MAX_POINTS 100

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

    printf("Introduza o número de pontos de dados (máximo %d): ", MAX_POINTS);
    scanf("%d", &n);

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

    printf("\nPontos de Dados Introduzidos:\n");
    for (i = 0; i < n; i++) {
        printf("Ponto %d: (%.2f, %.2f)\n", i + 1, x[i], y[i]);
    }

    return 0;
}

Compile o programa:

gcc -o correlation_input correlation_input.c

Execute o programa e introduza alguns dados de exemplo:

./correlation_input

Exemplo de saída:

Introduza o número de pontos de dados (máximo 100): 5
Introduza as coordenadas x e y:
Ponto 1 (x y): 1 2
Ponto 2 (x y): 2 4
Ponto 3 (x y): 3 5
Ponto 4 (x y): 4 4
Ponto 5 (x y): 5 5

Pontos de Dados Introduzidos:
Ponto 1: (1.00, 2.00)
Ponto 2: (2.00, 4.00)
Ponto 3: (3.00, 5.00)
Ponto 4: (4.00, 4.00)
Ponto 5: (5.00, 5.00)

Vamos decompor o código:

  1. Definimos um número máximo de pontos de dados (MAX_POINTS) para evitar estouro de memória.
  2. O programa solicita ao utilizador que introduza o número de pontos de dados.
  3. Em seguida, permite ao utilizador introduzir as coordenadas x e y para cada ponto.
  4. Finalmente, imprime os pontos de dados introduzidos para confirmar a entrada.

Calcular Somas e Utilizar a Fórmula para Correlação

Nesta etapa, estenderemos o nosso programa anterior para calcular as somas necessárias para o cálculo do coeficiente de correlação de Pearson. Modificaremos o ficheiro correlation_input.c para incluir os cálculos para a fórmula de correlação.

Abra o ficheiro anterior:

cd ~/project
nano correlation_input.c

Atualize o código com a seguinte implementação:

#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 as somas necessárias
    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 do coeficiente de correlação 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("Introduza o número de pontos de dados (máximo %d): ", MAX_POINTS);
    scanf("%d", &n);

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

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

    printf("\nPontos de Dados Introduzidos:\n");
    for (i = 0; i < n; i++) {
        printf("Ponto %d: (%.2f, %.2f)\n", i + 1, x[i], y[i]);
    }

    printf("\nCoeficiente de Correlação de Pearson: %.4f\n", correlation);

    return 0;
}

Compile o programa com a biblioteca matemática:

gcc -o correlation_input correlation_input.c -lm

Execute o programa com dados de exemplo:

./correlation_input

Exemplo de saída:

Introduza o número de pontos de dados (máximo 100): 5
Introduza as coordenadas x e y:
Ponto 1 (x y): 1 2
Ponto 2 (x y): 2 4
Ponto 3 (x y): 3 5
Ponto 4 (x y): 4 4
Ponto 5 (x y): 5 5

Pontos de Dados Introduzidos:
Ponto 1: (1.00, 2.00)
Ponto 2: (2.00, 4.00)
Ponto 3: (3.00, 5.00)
Ponto 4: (4.00, 4.00)
Ponto 5: (5.00, 5.00)

Coeficiente de Correlação de Pearson: 0.8528

Pontos chave sobre o cálculo da correlação de Pearson:

  1. Calculamos as somas necessárias: x, y, xy, x², y²
  2. Aplicamos a fórmula do coeficiente de correlação de Pearson
  3. Usamos sqrt() de math.h para o cálculo
  4. Devolve o coeficiente de correlação entre -1 e 1

Imprimir o Coeficiente de Correlação

Nesta etapa final, melhoraremos o nosso programa para fornecer uma interpretação abrangente do coeficiente de correlação de Pearson e criar uma saída mais amigável ao utilizador.

Abra o ficheiro anterior:

cd ~/project
nano correlation_input.c

Atualize o código com a seguinte implementação:

#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("\nInterpretação do Coeficiente de Correlação:\n");
    printf("Valor da Correlação: %.4f\n", correlation);

    if (correlation > 0.8) {
        printf("Forte Correlação Positiva\n");
    } else if (correlation > 0.5) {
        printf("Correlação Positiva Moderada\n");
    } else if (correlation > 0.3) {
        printf("Correlação Positiva Fraca\n");
    } else if (correlation > -0.3) {
        printf("Sem Correlação Linear\n");
    } else if (correlation > -0.5) {
        printf("Correlação Negativa Fraca\n");
    } else if (correlation > -0.8) {
        printf("Correlação Negativa Moderada\n");
    } else {
        printf("Forte Correlação Negativa\n");
    }
}

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

    printf("Calculadora de Coeficiente de Correlação de Pearson\n");
    printf("-------------------------------------------------\n");
    printf("Introduza o número de pontos de dados (máximo %d): ", MAX_POINTS);
    scanf("%d", &n);

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

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

    printf("\nPontos de Dados Introduzidos:\n");
    for (i = 0; i < n; i++) {
        printf("Ponto %d: (%.2f, %.2f)\n", i + 1, x[i], y[i]);
    }

    interpretCorrelation(correlation);

    return 0;
}

Compile o programa:

gcc -o correlation_calculator correlation_input.c -lm

Execute o programa com dados de exemplo:

./correlation_calculator

Exemplo de saída:

Calculadora de Coeficiente de Correlação de Pearson
-------------------------------------------------
Introduza o número de pontos de dados (máximo 100): 5
Introduza as coordenadas x e y:
Ponto 1 (x y): 1 2
Ponto 2 (x y): 2 4
Ponto 3 (x y): 3 5
Ponto 4 (x y): 4 4
Ponto 5 (x y): 5 5

Pontos de Dados Introduzidos:
Ponto 1: (1.00, 2.00)
Ponto 2: (2.00, 4.00)
Ponto 3: (3.00, 5.00)
Ponto 4: (4.00, 4.00)
Ponto 5: (5.00, 5.00)

Interpretação do Coeficiente de Correlação:
Valor da Correlação: 0.8528
Forte Correlação Positiva

Melhorias chave:

  1. Adicionada a função interpretCorrelation()
  2. Fornece uma explicação detalhada da força da correlação
  3. Categoriza a correlação em diferentes níveis
  4. Interface de utilizador melhorada com um título e saída clara

Resumo

Neste laboratório, aprendemos a ler dados em pares (x,y) para calcular o coeficiente de correlação de Pearson em C. Criámos um programa que permite aos utilizadores introduzir dados numéricos em pares e armazená-los para análise posterior. Também estendemos o programa para calcular as somas necessárias para calcular o coeficiente de correlação de Pearson utilizando a fórmula.

Os passos principais abordados neste laboratório incluem a leitura de dados em pares (x,y), o cálculo das somas necessárias para a fórmula de correlação e a impressão do coeficiente de correlação final. Seguindo estes passos, pode implementar o cálculo da correlação de Pearson nos seus próprios programas em C.