Quick-R: régression multiple


R fournit un support complet pour la régression linéaire multiple. Les rubriques ci-dessous sont présentées par ordre croissant de complexité.

Montage 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

Tracés de diagnostic

Les tracés 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)

tracés diagnostiques de régression clique pour voir

Pour une évaluation plus complète de l’ajustement du modèle, voir les diagnostics de régression ou les exercices de ce cours interactif sur la régression.

Comparaison des modèles

Vous pouvez comparer des modèles imbriqués avec la fonction anova (). Le code suivant fournit un test simultané que x3 et x4 ajoutent à la prédiction linéaire au-dessus et au-delà 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 à l’aide de 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 le MSE pour chaque pli, divisez par le nombre d’observations et prenez la racine carrée pour obtenir l’erreur standard d’estimation croisée.

Vous pouvez évaluer Retrait R2 via la validation croisée K-fold. En utilisant le crossval () fonction du amorcer package, procédez comme suit:

# Assessing R2 shrinkage using 10-Fold Cross-Validation

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

bibliothèque (bootstrap)
# définir les fonctions
theta.fit <- fonction (x, y) {lsfit (x, y)}
theta.predict <- fonction (fit, x) {cbind (1, x)% *% fit $ coef}

# matrice de prédicteurs
X
            <- as.matrix (mydata[c("x1","x2","x3")])
# vecteur de valeurs prédites
et <- as.matrix (mydata[c("y")])

résultats <- crossval (X, y, theta.fit, theta.predict, ngroup = 10)
cor (y, fit $ fit.values) ** 2 # raw R2
cor (y, résultats $ cv.fit) ** 2 # R2 avec validation croisée

Sélection variable

La sélection d’un sous-ensemble de variables prédictives à partir d’un ensemble plus large (par exemple, une sélection pas à pas) est un sujet controversé. Vous pouvez effectuer une sélection pas à pas (avant, arrière, les deux) en utilisant stepAIC () fonction du MASSE paquet. stepAIC () effectue la sélection de modèle pas à pas 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 pour tous les sous-ensembles à l’aide du paramètre sauts () fonction du paquet de sauts. Dans le code suivant, nbest indique le nombre de sous-ensembles de chaque taille à signaler. Ici, les dix meilleurs modèles seront rapporté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")

tous les sous-ensembles régression 1 tous les sous-ensembles régression 2 clique pour voir

Autres options pour terrain () sont bic, Cp et adjr2. Autres options de traçage avec
sous-ensemble ()
sont bic, cp, adjr2 et rss.

Importance relative

Le paquet relaimpo fournit des mesures d’importance relative pour chacun des prédicteurs du modèle. Voir l’aide (calc.relimp) pour plus de détails sur les quatre mesures d’importance relative fournies.

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

# Mesures d’amorçage d’importance relative (1000 échantillons)
boot <- boot.relimp (fit, b = 1000, type = c ("lmg",
« dernier », « premier », « pratt »), rank = TRUE,
diff = TRUE, rela = TRUE)
booteval.relimp (boot) # résultat d’impression
plot (booteval.relimp (boot, sort = TRUE)) # résultat du tracé

importance relative bootstrapped clique pour voir

Améliorations graphiques

Le package de voiture offre une grande variété de tracés de régression, y compris des tracés variables ajoutés et des tracés de diagnostic et de dispersion améliorés.

Aller plus loin

Régression non linéaire

le nls package fournit des fonctions de régression non linéaire. Voir Régression non linéaire et moindres carrés non linéaires de John Fox pour un aperçu. Les outils statistiques de Huet et ses collègues pour la régression non linéaire: un guide pratique avec des exemples S-PLUS et R est un ouvrage de référence précieux.

Régression robuste

Il existe de nombreuses fonctions dans R pour faciliter une régression robuste. Par exemple, vous pouvez effectuer une régression robuste avec le rlm () fonction dans le MASSE paquet. La régression robuste de John Fox (qui d’autre?) Fournit un bon aperçu de départ. Le site Web UCLA Statistical Computing contient des exemples de régression robuste.

Le package robuste fournit une bibliothèque complète de méthodes robustes, y compris la régression. Le package robustbase fournit également des statistiques robustes de base, y compris des méthodes de sélection de modèle. Et David Olive a fourni un examen en ligne détaillé des statistiques robustes appliquées avec un exemple de code R.

S’entraîner

Ce cours d’apprentissage automatique en R comprend des exercices de régression multiple et de validation croisée.



Source link

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *