# Programmer en R/Estimer un modèle de régression linéaire

* Introduction
** Faire ses premiers pas
** Installer R
** Choisir son environnement de travail
** Installer des librairies
** Se documenter
* Manipulation et mise en forme des données
** Manipuler les nombres
** Manipuler les vecteurs
** Manipuler les chaînes de caractères
** Manipuler les facteurs
** Manipuler les dates et les heures
** Manipuler un tableau de données
** Manipuler une liste
* Importation et exportation des données
** Importer un fichier CSV
** Résoudre les problèmes d'encodage des caractères
** Importer un fichier TSV
** Importer un fichier texte à largeur fixe
** Importer des données depuis un tableur
** Import un fichier JSON
** Extraire des données d'une page web
* Visualisation de données
** Comprendre la grammaire des graphiques
** Représenter une carte
** Visualiser une carte choroplèthe
* Modélisation statistique
** Estimer un modèle de régression linéaire
** Estimer un modèle de régression circulaire
* Communication
* Programmation avancée
** Programmer une boucle
** Programmer une fonction
* Outils mathématiques
** Optimiser une fonction
** Manipuler les matrices
** Les fonctions statistiques de base
** Les loi de probabilités, ajustement et test
* Introduction
** Faire ses premiers pas
** Installer R
** Choisir son environnement de travail
** Installer des librairies
** Se documenter
* Manipulation et mise en forme des données
** Manipuler les nombres
** Manipuler les vecteurs
** Manipuler les chaînes de caractères
** Manipuler les facteurs
** Manipuler les dates et les heures
** Manipuler un tableau de données
** Manipuler une liste
* Importation et exportation des données
** Importer un fichier CSV
** Résoudre les problèmes d'encodage des caractères
** Importer un fichier TSV
** Importer un fichier texte à largeur fixe
** Importer des données depuis un tableur
** Import un fichier JSON
** Extraire des données d'une page web
* Visualisation de données
** Comprendre la grammaire des graphiques
** Représenter une carte
** Visualiser une carte choroplèthe
* Modélisation statistique
** Estimer un modèle de régression linéaire
** Estimer un modèle de régression circulaire
* Communication
* Programmation avancée
** Programmer une boucle
** Programmer une fonction
* Outils mathématiques
** Optimiser une fonction
** Manipuler les matrices
** Les fonctions statistiques de base
** Les loi de probabilités, ajustement et test
[ Modifier le sommaire ]

#### Manière simple

Considérons une loi affine à deux dimensions,
    y = a + bx.
Le plus simple pour faire la régression consiste à utiliser la commande line (au singulier).
Commençons par générer les données :
La régression se fait simplement par
ce qui donne
Le modèle est donc
    y = - 0,015,80 + 2,024,39·x
Puis, nous traçons les données et la droite de régression :

#### Manière complète

La manière « complète » permet d'étendre la régression à des dimensions supplémentaires (régression multilinéaire), et donne plus d'informations.
Pour effectuer une régression, il faut créer une structure de données (data frame) et un modèle. Le modèle est une formule symbolique :
    y ~ x pour un modèle affine (droite avec ordonnée à l'origine) du type y = a + bx ;
    y ~ x + 0 pour un modèle linéaire (ordonnée à l'origine nulle) du type y = bx.
La régression linéaire se fait avec la fonction lm(formule, structure de données) (linear model).
À partir du même jeu de données
nous construisons la structure de données et effectuons la régression
ce qui donne
Le modèle établi par régression est donc
    u$_2$ = 2,024,39·u$_1$ - 0,015,80
avec un écart quadratique de 0,101,6.
Puis nous traçons les points et la droite de régression (ici en rouge) :
Nous pouvons ensuite utiliser ce modèle pour calculer de nouvelles valeurs de y pour des valeurs de x données, avec un intervalle de confiance. Par exemple, pour avoir y en 0,3, 0,5 et 0,7 avec un intervalle de confiance de 0,95 (95 %) :

### Procédure simple

Considérons deux jeux de données u$_1$ et u$_2$ que nous supposons corrélées par une loi affine
    u$_2$ = a + b×u$_1$ + ε
où ε est l'écart, qui suit une variable aléatoire centrée sur 0 et d'écart type uniforme.
La première étape consiste à calculer le coefficient de corrélation linéaire pour vérifier notre hypothèse. Cela se fait avec la fonction cor :
L'interprétation de ce coefficient dépend du domaine étudié, mais plus la valeur absolue est proche de 1, plus les données « collent » au modèle affine. On s'attache souvent à avoir une valeur absolue supérieure à 0,8 ; elle doit être en tous cas supérieure à 0,5.
La régression proprement dite se fait ensuite avec la fonction line :
Cette fonction utilise la méthode médiane-médiane, dite aussi « droite robuste de Tukey ».
Par exemple :
donne (aux variations du tirage aléatoire près) :
Le modèle est donc ici :
    u$_2$ = 0,030,07 + 1,939,65×u$_1$ + ε.
Nous pouvons extraire les paramètres avec modele$coefficients, qui est un vecteur, ou la fonction coef(modele) qui retourne également un vecteur. Cela permet tracer les données en superposant la droite aux données :
On peut extraire les coefficients de la manière suivante :

### Procédure complète

Une fois cette régression faite, il faut poursuivre par les tests de nullité : les coefficients a et b sont-ils significativement non nuls ? Cela nécessite de calculer l'estimateur de la variance sur a et b, puis, le cas échéant, de faire une régression en forçant le passage de la droite par l'origine.
Pour cela, on fait appel à la fonction lm, qui utilise elle la méthode des moindres carrés. Cette fonction nécessite de définir le modèle utilisé sous la forme d'une « formule », une description symbolique du modèle. Une formule est introduite par le tilde ~. Les deux formules que nous utilisons ici sont :
La régression se fait de la manière suivante :
Au passage, on remarque que les coefficients obtenus sont légèrement différents. Puis, on effectue le test de non nullité de b et de a (coefficient 3 pour un intervalle de confiance de 99,7 %) :
ce qui nous donne ici :
On refait donc une régression linéaire en forçant a = 0 :
Puis, on calcule les erreur standard sur a, b, et sur l'estimation des y si l'on utilise le modèle (en considérant un grand nombre de valeurs et un intervalle de confiance de 99,7 %) :
ce qui donne
On peut afficher différents graphiques de synthèse avec
qui comprend :
* les résidus en fonction de x ;
* les résidus normalisés en fonctions de x ;
* la droite de Henry (quantiles-quantiles) des résidus (permet de vérifier si le résidu suit une loi normale centrée) ;
* les résidus normalisés en fonction du levier (x - x).

### Comparaison avec un modèle a priori

Nous avons vérifié si les paramètres obtenus étaient différents de zéro de manière significative. Mais on peut aussi vérifier s'ils sont différent d'une valeur a priori. La commande
donne la fonction de répartition de la loi de Student à n degrés de liberté (voir Les loi de probabilités, ajustement et test), c'est-à-dire la probabilité d'avoir une valeur inférieure ou égale à x, et la fonction
calcule la probabilité complémentaire. Le paramètre β$_i$ est estimé par la valeur b$_i$, avec
    β$_i$ = b$_i$ ± t$_{1-α/2,n}$×s$_i$
on peut donc calculer le coefficient de student
    $t={\frac {|\beta _{i}-b_{i}|}{s_{i}}}$
la fonction pt nous renvoyant la valeur de 1-α/2, ou de α/2 avec l'option lower.tail = FALSE. Ici, nous savons que la valeur théorique est 2, donc

### Utilisation du modèle

Au delà du calcul des paramètres du modèle, R permet d'exploiter ce modèle, c'est-à-dire qu'il calcule la valeur de y pour un x donné, et fournit avec l'intervalle de confiance. Cela se fait avec la commande
où
* donnees_X est un data.frame ;
* la valeur de l'attribut level est le niveau de confiance (0.9 pour 90 %).
Par exemple, pour avoir la valeur de y en 0,3, 0,5 et 0,7 avec un inetrvalle d econfiance de 95 % :

### Autres fonctions utiles

Une fois le modèle établi, on peut récupérer :
* les résidus avec resid(modele) ;
* les valeurs prédites par le modèle avec fitted(modele).
Lorsque le modèle est linéaire pour les coefficients mais pas pour les fonctions des variables explicatives, on peut vérifier graphiquement l'adéquation du modèle avec fitted(modele). Par exemple, pour un modèle de type
    u$_2$ = a + b⋅u$_1$$^2$ + ε

### Modèle à plusieurs variables

Le modèle linéaire peut être à plusieurs variables. Le data.frame utilisé doit avoir une colonne par variable. Considérons par exemple un modèle à deux variables
    y = β$_0$ + β$_1$⋅x$_1$ + β$_1$⋅x$_2$ + ε
alors les vecteurs x$_1$, x$_2$ et y doivent avoir même dimension et
    y[i ] = β$_0$ + β$_1$⋅x$_1$[i ] + β$_1$⋅x$_2$[i ] + ε[i ].
Par exemple :
donne