Imprimir el Valor de R²
En este paso final, crearemos un programa completo que lee datos de un archivo, calcula los parámetros de regresión e imprime el valor de R² con una interpretación detallada.
Primero, crea un archivo de datos de muestra:
cd ~/project
nano regression_data.txt
Agrega datos de regresión de muestra:
1.0 2.0
2.0 4.0
3.0 5.0
4.0 4.0
5.0 5.0
Ahora, crea el programa final para calcular R²:
nano r_squared_print.c
Ingrese el siguiente código:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// Función para calcular los parámetros de regresión lineal
void calculateRegressionParameters(double *x, double *y, int n,
double *pendiente, double *intercepto) {
double suma_x = 0, suma_y = 0, suma_xy = 0, suma_x_cuadrado = 0;
for (int i = 0; i < n; i++) {
suma_x += x[i];
suma_y += y[i];
suma_xy += x[i] * y[i];
suma_x_cuadrado += x[i] * x[i];
}
// Calcular la pendiente y el intercepto usando el método de mínimos cuadrados
*pendiente = (n * suma_xy - suma_x * suma_y) / (n * suma_x_cuadrado - suma_x * suma_x);
*intercepto = (suma_y - *pendiente * suma_x) / n;
}
// Función para calcular R-cuadrado
double computeRSquared(double *x, double *y, int n, double pendiente, double intercepto) {
double variacion_total = 0.0;
double variacion_explicada = 0.0;
double media_y = 0.0;
// Calcular la media de y
for (int i = 0; i < n; i++) {
media_y += y[i];
}
media_y /= n;
// Calcular las variaciones
for (int i = 0; i < n; i++) {
variacion_total += pow(y[i] - media_y, 2);
double y_predicha = pendiente * x[i] + intercepto;
variacion_explicada += pow(y[i] - y_predicha, 2);
}
// Calcular R-cuadrado
return 1 - (variacion_explicada / variacion_total);
}
// Función para interpretar el valor de R-cuadrado
void interpretRSquared(double r_squared) {
printf("\nInterpretación de R²:\n");
if (r_squared < 0.3) {
printf("Ajuste del modelo débil: El modelo explica menos del 30%% de la varianza.\n");
} else if (r_squared < 0.5) {
printf("Ajuste del modelo moderado: El modelo explica entre el 30-50%% de la varianza.\n");
} else if (r_squared < 0.7) {
printf("Buen ajuste del modelo: El modelo explica entre el 50-70%% de la varianza.\n");
} else {
printf("Excelente ajuste del modelo: El modelo explica más del 70%% de la varianza.\n");
}
}
int main() {
FILE *archivo;
int n = 0, max_lineas = 100;
double x[100], y[100];
double pendiente, intercepto, r_cuadrado;
// Abrir el archivo de datos
archivo = fopen("regression_data.txt", "r");
if (archivo == NULL) {
printf("Error al abrir el archivo!\n");
return 1;
}
// Leer datos del archivo
while (fscanf(archivo, "%lf %lf", &x[n], &y[n]) == 2) {
n++;
if (n >= max_lineas) break;
}
fclose(archivo);
// Calcular los parámetros de regresión
calculateRegressionParameters(x, y, n, &pendiente, &intercepto);
// Calcular R-cuadrado
r_cuadrado = computeRSquared(x, y, n, pendiente, intercepto);
// Imprimir resultados
printf("Resultados del Análisis de Regresión:\n");
printf("Número de Puntos de Datos: %d\n", n);
printf("Pendiente: %.4f\n", pendiente);
printf("Intercepto: %.4f\n", intercepto);
printf("R-cuadrado (R²): %.4f\n", r_cuadrado);
// Interpretar R-cuadrado
interpretRSquared(r_cuadrado);
return 0;
}
Compila el programa:
gcc -o r_squared_print r_squared_print.c -lm
Ejecuta el programa:
./r_squared_print
Salida de ejemplo:
Resultados del Análisis de Regresión:
Número de Puntos de Datos: 5
Pendiente: 0.6000
Intercepto: 1.5000
R-cuadrado (R²): 0.5600
Interpretación de R²:
Buen ajuste del modelo: El modelo explica entre el 50-70% de la varianza.
Puntos clave:
- Lee datos de un archivo externo.
- Calcula los parámetros de regresión usando el método de mínimos cuadrados.
- Calcula el valor de R².
- Proporciona una interpretación del valor de R².
- Ayuda a comprender el poder predictivo del modelo.