Affichage de la valeur de R²
Dans cette étape finale, nous créerons un programme complet qui lit les données d'un fichier, calcule les paramètres de régression et affiche la valeur de R² avec une interprétation détaillée.
Tout d'abord, créez un fichier de données d'exemple :
cd ~/project
nano regression_data.txt
Ajoutez les données de régression d'exemple :
1.0 2.0
2.0 4.0
3.0 5.0
4.0 4.0
5.0 5.0
Maintenant, créez le programme de calcul final de R² :
nano r_squared_print.c
Entrez le code suivant :
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
// Fonction pour calculer les paramètres de régression linéaire
void calculateRegressionParameters(double *x, double *y, int n,
double *slope, double *intercept) {
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_x_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];
}
// Calcul de la pente et de l'ordonnée à l'origine en utilisant la méthode des moindres carrés
*slope = (n * sum_xy - sum_x * sum_y) / (n * sum_x_squared - sum_x * sum_x);
*intercept = (sum_y - *slope * sum_x) / n;
}
// Fonction pour calculer R-carré
double computeRSquared(double *x, double *y, int n, double slope, double intercept) {
double variation_totale = 0.0;
double variation_expliquee = 0.0;
double moyenne_y = 0.0;
// Calcul de la moyenne de y
for (int i = 0; i < n; i++) {
moyenne_y += y[i];
}
moyenne_y /= n;
// Calcul des variations
for (int i = 0; i < n; i++) {
variation_totale += pow(y[i] - moyenne_y, 2);
double predicted_y = slope * x[i] + intercept;
variation_expliquee += pow(y[i] - predicted_y, 2);
}
// Calcul de R-carré
return 1 - (variation_expliquee / variation_totale);
}
// Fonction pour interpréter la valeur de R-carré
void interpretRSquared(double r_squared) {
printf("\nInterprétation de R² :\n");
if (r_squared < 0.3) {
printf("Modèle faiblement ajusté : le modèle explique moins de 30 % de la variance.\n");
} else if (r_squared < 0.5) {
printf("Modèle modérément ajusté : le modèle explique 30 à 50 % de la variance.\n");
} else if (r_squared < 0.7) {
printf("Bon ajustement du modèle : le modèle explique 50 à 70 % de la variance.\n");
} else {
printf("Excellent ajustement du modèle : le modèle explique plus de 70 % de la variance.\n");
}
}
int main() {
FILE *file;
int n = 0, max_lignes = 100;
double x[100], y[100];
double pente, ordonnee_a_lorigine, r_squared;
// Ouverture du fichier de données
file = fopen("regression_data.txt", "r");
if (file == NULL) {
printf("Erreur lors de l'ouverture du fichier !\n");
return 1;
}
// Lecture des données du fichier
while (fscanf(file, "%lf %lf", &x[n], &y[n]) == 2) {
n++;
if (n >= max_lignes) break;
}
fclose(file);
// Calcul des paramètres de régression
calculateRegressionParameters(x, y, n, &pente, &ordonnee_a_lorigine);
// Calcul de R-carré
r_squared = computeRSquared(x, y, n, pente, ordonnee_a_lorigine);
// Affichage des résultats
printf("Résultats de l'analyse de régression :\n");
printf("Nombre de points de données : %d\n", n);
printf("Pente : %.4f\n", pente);
printf("Ordonnée à l'origine : %.4f\n", ordonnee_a_lorigine);
printf("R-carré (R²) : %.4f\n", r_squared);
// Interprétation de R-carré
interpretRSquared(r_squared);
return 0;
}
Compilez le programme :
gcc -o r_squared_print r_squared_print.c -lm
Exécutez le programme :
./r_squared_print
Sortie d'exemple :
Résultats de l'analyse de régression :
Nombre de points de données : 5
Pente : 0.6000
Ordonnée à l'origine : 1.5000
R-carré (R²) : 0.5600
Interprétation de R² :
Bon ajustement du modèle : le modèle explique 50 à 70 % de la variance.
Points clés :
- Lit les données d'un fichier externe.
- Calcule les paramètres de régression à l'aide de la méthode des moindres carrés.
- Calcule la valeur de R².
- Fournit une interprétation de la valeur de R².
- Aide à comprendre le pouvoir prédictif du modèle.