Accéder au contenu principal
Documents
Partager
LinkedIn
Facebook
Twitter
Copy
R DocumentationEntrée de données en RGestion des données en RGraphiques en RR InterfaceStatistiques en R

Régression multiple (linéaire) dans R

R offre un support complet pour la régression linéaire multiple. Les thèmes ci-dessous sont présentés par ordre de complexité croissante.

Ajustement du modèle

# Multiple Linear Regression Example

fit <- lm(y ~ x1 + x2 + x3, data=mydata)
summary(fit) # show results
# Other useful functions
coefficients(fit) # model coefficients
confint(fit, level=0.95) # CIs for model parameters

fitted(fit) # predicted values
residuals(fit) # residuals
anova(fit) # anova table
vcov(fit) # covariance matrix for model parameters
influence(fit) # regression diagnostics

Plots de diagnostic

Les graphiques de diagnostic permettent de vérifier l'hétéroscédasticité, la normalité et les observations influentes.

# diagnostic plots
layout(matrix(c(1,2,3,4),2,2)) # optional 4 graphs/page
plot(fit)

diagrammes de diagnostic de régression

Pour une évaluation plus complète de l'adéquation du modèle, consultez les diagnostics de régression ou les exercices de ce cours interactif</a > sur l'apprentissage supervisé en R : Régression.

Comparaison des modèles

Vous pouvez comparer des modèles imbriqués à l'aide de la fonction anova( ). Le code suivant permet de tester simultanément que x3 et x4 ajoutent à la prédiction linéaire en plus de x1 et x2.

# compare models
fit1 <- lm(y ~ x1 + x2 + x3 + x4, data=mydata)
fit2 <- lm(y ~ x1 + x2)
anova(fit1, fit2)

Validation croisée

Vous pouvez effectuer une validation croisée K-Fold</a > en utilisant la fonction cv.lm( ) dans le package DAAG.

# K-fold cross-validation
library(DAAG)
cv.lm(df=mydata, fit, m=3) # 3 fold cross-validation

Additionnez l'EQM pour chaque pli, divisez-la par le nombre d'observations et prenez la racine carrée pour obtenir l'erreur standard d'estimation validée croisée.

Vous pouvez évaluer le rétrécissement de R2 au moyen de la validation croisée K-fold. En utilisant la fonction crossval() du paquetage bootstrap</a ></strong >, procédez comme suit :

# Assessing R2 shrinkage using 10-Fold Cross-Validation

fit <- lm(y~x1+x2+x3,data=mydata)

library(bootstrap)
# define functions
theta.fit <- function(x,y){lsfit(x,y)}
theta.predict <- function(fit,x){cbind(1,x)%*%fit$coef}

# matrix of predictors
X
<- as.matrix(mydata[c("x1","x2","x3")])
# vector of predicted values
y <- as.matrix(mydata[c("y")])

results <- crossval(X,y,theta.fit,theta.predict,ngroup=10)
cor(y, fit$fitted.values)**2 # raw R2
cor(y,results$cv.fit)**2 # cross-validated R2

Sélection des variables

La sélection d'un sous-ensemble de variables prédictives à partir d'un ensemble plus large (par exemple, la sélection par étapes) est un sujet controversé. Vous pouvez effectuer une sélection par étapes (vers l'avant, vers l'arrière, les deux) à l'aide de la fonction stepAIC( ) du progiciel MASS. stepAIC( ) effectue une sélection de modèle par étapes par AIC exact.

# Stepwise Regression
library(MASS)
fit <- lm(y~x1+x2+x3,data=mydata)
step <- stepAIC(fit, direction="both")
step$anova # display results

Vous pouvez également effectuer une régression sur tous les sous-ensembles à l'aide de la fonction leaps( ) du package leaps. Dans le code suivant, nbest indique le nombre de sous-ensembles de chaque taille à déclarer. Ici, les dix meilleurs modèles seront présentés pour chaque taille de sous-ensemble (1 prédicteur, 2 prédicteurs, etc.).

# All Subsets Regression
library(leaps)
attach(mydata)
leaps<-regsubsets(y~x1+x2+x3+x4,data=mydata,nbest=10)
# view results
summary(leaps)
# plot a table of models showing variables in each model.
#
models are ordered by the selection statistic.
plot(leaps,scale="r2")
# plot statistic by subset size
library(car)
subsets(leaps, statistic="rsq")

régression de tous les sous-ensembles 1 tous les sous-ensembles régression 2

Les autres options de plot( ) sont bic, Cp et adjr2. Les autres options de tracé avecsubset( ) sont bic, cp, adjr2 et rss.

Importance relative

Le paquet relaimpo</a > fournit des mesures d'importance relative pour chacun des prédicteurs du modèle. Voir help(calc.relimp) pour plus de détails sur les quatre mesures d'importance relative proposées.

# Calculate Relative Importance for Each Predictor
library(relaimpo)
calc.relimp(fit,type=c("lmg","last","first","pratt"),
   rela=TRUE)

# Bootstrap Measures of Relative Importance (1000 samples)
boot <- boot.relimp(fit, b = 1000, type = c("lmg",
  "last", "first", "pratt"), rank = TRUE,
  diff = TRUE, rela = TRUE)
booteval.relimp(boot) # print result
plot(booteval.relimp(boot,sort=TRUE)) # plot result

importance relative bootstrapée

Améliorations graphiques

Le package car offre une grande variété de tracés pour la régression, y compris des tracés à variables ajoutées, et des diagrammes de diagnostic et de dispersion améliorés.

Aller plus loin

Régression non linéaire

Le paquet nls fournit des fonctions pour la régression non linéaire. Voir le site de John Fox Nonlinear Regression and Nonlinear Least Squares</a > pour une vue d'ensemble. Huet et ses collègues Statistical Tools for Nonlinear Regression (Outils statistiques pour la régression non linéaire) : A Practical Guide with S-PLUS and R Examples</a > est un ouvrage de référence précieux.

Régression robuste

Il existe de nombreuses fonctions dans R pour faciliter la régression robuste. Par exemple, vous pouvez effectuer une régression robuste avec la fonction rlm( ) du package MASS. John Fox (qui d'autre ?) Robust Regression</a > offre une bonne vue d'ensemble. Le site Web de l'UCLA Statistical Computing propose Robust Regression Examples</a >.

Le package robust fournit une bibliothèque complète de méthodes robustes, y compris la régression. Le paquet robustbase</a > fournit également des statistiques robustes de base, y compris des méthodes de sélection de modèles. Et David Olive a fourni un examen en ligne détaillé de Applied Robust Statistics</a > avec un exemple de code R.

Pratiquer

Ce cours d'apprentissage automatique en R</a > comprend des exercices de régression multiple et de validation croisée .