Introdução
Neste laboratório, você aprenderá a calcular os parâmetros da regressão linear, incluindo a inclinação (m) e o intercepto (b), usando a linguagem C. O laboratório cobre o processo passo a passo de leitura de pontos de dados (x,y), cálculo da inclinação e intercepto, e impressão da equação de regressão linear no formato y = mx + b. Este laboratório fornece uma abordagem prática para análise e modelagem de dados estatísticos usando C, uma linguagem de programação amplamente utilizada.
Leitura de Pontos de Dados (x,y)
Neste passo, você aprenderá a ler pontos de dados (x,y) para análise de regressão linear em C. Criaremos um programa que permite a entrada de múltiplos pontos de dados e os armazena para cálculos posteriores.
Primeiro, vamos criar um arquivo C para implementar a leitura dos pontos de dados:
cd ~/project
nano linear_regression.c
Agora, adicione o seguinte código ao arquivo:
#include <stdio.h>
#define MAX_POINTS 100
typedef struct {
double x;
double y;
} DataPoint;
int main() {
DataPoint points[MAX_POINTS];
int num_points = 0;
printf("Digite as coordenadas x e y (digite -1 -1 para finalizar):\n");
while (num_points < MAX_POINTS) {
double x, y;
scanf("%lf %lf", &x, &y);
if (x == -1 && y == -1) {
break;
}
points[num_points].x = x;
points[num_points].y = y;
num_points++;
}
printf("\nPontos de Dados Digitados:\n");
for (int i = 0; i < num_points; i++) {
printf("Ponto %d: (%.2f, %.2f)\n", i+1, points[i].x, points[i].y);
}
return 0;
}
Compile o programa:
gcc -o linear_regression linear_regression.c
Execute o programa e digite alguns pontos de dados de exemplo:
./linear_regression
Saída de exemplo:
Digite as coordenadas x e y (digite -1 -1 para finalizar):
1 2
2 4
3 5
4 4
5 5
-1 -1
Pontos de Dados Digitados:
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 analisar os componentes-chave deste código:
- Definimos uma estrutura
DataPointpara armazenar as coordenadas x e y. MAX_POINTSlimita o número de pontos de dados para evitar estouro.- O programa usa um loop
whilepara ler as coordenadas. - Os usuários podem inserir pontos de dados e terminar a entrada digitando
-1 -1. - O programa imprime todos os pontos de dados inseridos para verificação.
Cálculo da Inclinação (m) e Intercepto (b)
Neste passo, você aprenderá a calcular a inclinação (m) e o intercepto (b) para regressão linear usando o método dos mínimos quadrados.
Primeiro, atualize o arquivo linear_regression.c anterior:
cd ~/project
nano linear_regression.c
Substitua o código anterior pela seguinte implementação:
#include <stdio.h>
#include <math.h>
#define MAX_POINTS 100
typedef struct {
double x;
double y;
} DataPoint;
// Função para calcular os parâmetros da regressão linear
void computeLinearRegression(DataPoint points[], int num_points, double *m, double *b) {
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_x_squared = 0;
for (int i = 0; i < num_points; i++) {
sum_x += points[i].x;
sum_y += points[i].y;
sum_xy += points[i].x * points[i].y;
sum_x_squared += points[i].x * points[i].x;
}
double n = num_points;
// Cálculo da inclinação (m)
*m = (n * sum_xy - sum_x * sum_y) / (n * sum_x_squared - sum_x * sum_x);
// Cálculo do intercepto (b)
*b = (sum_y - (*m) * sum_x) / n;
}
int main() {
DataPoint points[MAX_POINTS];
int num_points = 0;
printf("Digite as coordenadas x e y (digite -1 -1 para finalizar):\n");
while (num_points < MAX_POINTS) {
double x, y;
scanf("%lf %lf", &x, &y);
if (x == -1 && y == -1) {
break;
}
points[num_points].x = x;
points[num_points].y = y;
num_points++;
}
double slope, intercept;
computeLinearRegression(points, num_points, &slope, &intercept);
printf("\nResultados da Regressão Linear:\n");
printf("Número de pontos: %d\n", num_points);
printf("Inclinação (m): %.4f\n", slope);
printf("Intercepto (b): %.4f\n", intercept);
printf("Equação: y = %.4fx + %.4f\n", slope, intercept);
return 0;
}
Compile o programa com a biblioteca matemática:
gcc -o linear_regression linear_regression.c -lm
Execute o programa com pontos de dados de exemplo:
./linear_regression
Saída de exemplo:
Digite as coordenadas x e y (digite -1 -1 para finalizar):
1 2
2 4
3 5
4 4
5 5
-1 -1
Resultados da Regressão Linear:
Número de pontos: 5
Inclinação (m): 0.6000
Intercepto (b): 2.2000
Equação: y = 0.6000x + 2.2000
Pontos-chave sobre o cálculo da regressão linear:
- Usamos o método dos mínimos quadrados para calcular a inclinação e o intercepto.
- A fórmula para a inclinação é: m = (n _ Σ(xy) - Σx _ Σy) / (n * Σ(x²) - (Σx)²)
- A fórmula para o intercepto é: b = (Σy - m * Σx) / n
- A função
computeLinearRegression()calcula esses parâmetros. - A função principal imprime a equação de regressão.
Imprimir a Equação y = mx + b
Neste passo, você aprenderá a imprimir a equação de regressão linear e prever valores de y usando a inclinação e o intercepto calculados.
Atualize o arquivo linear_regression.c para adicionar a funcionalidade de previsão:
cd ~/project
nano linear_regression.c
Substitua o código anterior pela seguinte implementação:
#include <stdio.h>
#include <math.h>
#define MAX_POINTS 100
typedef struct {
double x;
double y;
} DataPoint;
void computeLinearRegression(DataPoint points[], int num_points, double *m, double *b) {
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_x_squared = 0;
for (int i = 0; i < num_points; i++) {
sum_x += points[i].x;
sum_y += points[i].y;
sum_xy += points[i].x * points[i].y;
sum_x_squared += points[i].x * points[i].x;
}
double n = num_points;
*m = (n * sum_xy - sum_x * sum_y) / (n * sum_x_squared - sum_x * sum_x);
*b = (sum_y - (*m) * sum_x) / n;
}
// Função para prever o valor de y
double predictY(double m, double b, double x) {
return m * x + b;
}
int main() {
DataPoint points[MAX_POINTS];
int num_points = 0;
printf("Digite as coordenadas x e y (digite -1 -1 para finalizar):\n");
while (num_points < MAX_POINTS) {
double x, y;
scanf("%lf %lf", &x, &y);
if (x == -1 && y == -1) {
break;
}
points[num_points].x = x;
points[num_points].y = y;
num_points++;
}
double slope, intercept;
computeLinearRegression(points, num_points, &slope, &intercept);
printf("\nEquação de Regressão Linear:\n");
printf("y = %.4fx + %.4f\n", slope, intercept);
// Imprimir previsões para valores de x de amostra
printf("\nValores de y previstos:\n");
double test_x_values[] = {0, 2.5, 6, 10};
for (int i = 0; i < 4; i++) {
double predicted_y = predictY(slope, intercept, test_x_values[i]);
printf("Quando x = %.2f, y = %.4f\n", test_x_values[i], predicted_y);
}
return 0;
}
Compile o programa:
gcc -o linear_regression linear_regression.c -lm
Execute o programa com pontos de dados de exemplo:
./linear_regression
Saída de exemplo:
Digite as coordenadas x e y (digite -1 -1 para finalizar):
1 2
2 4
3 5
4 4
5 5
-1 -1
Equação de Regressão Linear:
y = 0.6000x + 2.2000
Valores de y previstos:
Quando x = 0.00, y = 2.2000
Quando x = 2.50, y = 3.7000
Quando x = 6.00, y = 5.8000
Quando x = 10.00, y = 8.2000
Pontos-chave sobre a impressão da equação de regressão:
- Adicionamos uma função
predictY()para calcular y para qualquer x dado. - A função principal imprime a equação completa: y = mx + b.
- Demonstramos a previsão mostrando valores de y para diferentes entradas de x.
- A saída fornece uma visualização clara do modelo de regressão linear.
Resumo
Neste laboratório, você aprendeu como ler pontos de dados (x, y) para análise de regressão linear em C. Você criou um programa que permite a entrada de múltiplos pontos de dados e os armazena para cálculos posteriores. Também aprendeu como imprimir os pontos de dados inseridos para verificação.
Em seguida, você aprenderá como calcular a inclinação (m) e o intercepto (b) da linha de regressão linear e, em seguida, imprimir a equação na forma de y = mx + b.



