Annexe B Annexe B : Rappel sur RStudio pour la science des données
R est un outil d'analyse statistique largement utilisé dans le domaine de la science des données. R offre de nombreux outils pour l'exploration, la visualisation et l'analyse statistique des données. Il est disponible sous la forme d'un logiciel libre et gratuit (open source) et propose une suite intégrée de fonctions pour l'analyse des données, la création de graphiques et la programmation statistique. R est de plus en plus utilisé par les spécialistes de la science des données comme outil d'analyse de données et d'analyse statistique, en partie parce qu'il s'agit d'un langage open source auquel de nouvelles fonctionnalités sont constamment ajoutées par la communauté des utilisateurs. Cet outil peut être utilisé sur de nombreuses plateformes informatiques différentes et peut être téléchargé sur le site web du projet R.
Une fois R installé et lancé sur votre ordinateur, vous devriez voir au bas de la console R le symbole >, qui indique que R est prêt à accepter des commandes.
Pour un utilisateur novice dans R, taper help.start() dans l'invite de commande de R affiche un menu de manuels et de documents de référence, comme le montre la Figure B1.
help.start()
R propose de nombreuses ressources d'aide intégrées. Lorsqu'un utilisateur tape help() dans l'invite de R, une liste de ressources d'aide est fournie. Par exemple, taper help(median) affichera des éléments de documentation sur la fonction médiane intégrée dans R.
De plus, si un utilisateur tape demo() dans l'invite de R, diverses options de démonstration s'affichent. Par exemple, taper demo(graphics) fournira des exemples de différents tracés graphiques.
Analyse élémentaire des données avec R
R est un langage orienté commandes, ce qui signifie que l'utilisateur saisit des commandes dans l'invite, que R exécute ensuite une à une. R peut également exécuter un programme contenant plusieurs commandes. Il existe des moyens d'ajouter une interface graphique utilisateur (GUI) à R. Un exemple d'outil d'interface graphique pour R est RStudio.
La ligne de commande de R peut être utilisée pour effectuer n'importe quel calcul numérique, à l'instar d'une calculatrice de poche. Par exemple, pour évaluer l'expression , entrez l'expression suivante dans l'invite de la ligne de commande et appuyez sur Entrée. Le résultat numérique 31 s'affiche alors :
> 10+3*7
[1] 31
La plupart des calculs dans R sont gérés par des fonctions. Pour la science des données et l'analyse statistique, R propose de nombreuses fonctions prédéfinies pour calculer la moyenne, la médiane, l'écart type, les quartiles, etc. Il est possible de nommer des variables et de leur affecter des valeurs à l'aide de l'opérateur d'assignation <-. Par exemple, les commandes R suivantes assignent la valeur 20 à la variable nommée x et la valeur 30 à la variable nommée y :
> x <- 20
> y <- 30
Ces noms de variables peuvent être utilisés dans n'importe quel calcul, par exemple en multipliant x par y pour obtenir le résultat 600 :
> x*y
[1] 600
La méthode classique pour utiliser des fonctions dans des applications statistiques consiste à créer d'abord un vecteur de valeurs de données. Il existe plusieurs façons de créer des vecteurs dans R. Par exemple, la fonction c est souvent utilisée pour combiner des valeurs en un vecteur. La commande R suivante génère un vecteur appelé salaries qui contient les valeurs de données 40000, 50000, 75000 et 92000 :
> salaries <- c(40000, 50000, 75000, 92000)
Ce vecteur salaries peut ensuite être utilisé dans des fonctions statistiques telles que mean, median, min, max, etc., comme illustré ci-dessous :
> mean(salaries)
[1] 64250
> median(salaries)
[1] 62500
> min(salaries)
[1] 40000
> max(salaries)
[1] 92000
Une autre option pour générer un vecteur dans R consiste à utiliser la fonction seq, qui génère automatiquement une séquence de nombres. Par exemple, nous pouvons générer une séquence de nombres de 1 à 5, avec un incrément de 0,5, et appeler ce vecteur example1, de la façon suivante :
> example1 <- seq(1, 5, by=0.5)
Si nous tapons ensuite le nom du vecteur et appuyons sur Entrée, R affichera la liste des valeurs numériques associées à ce nom de vecteur.
> salaries
[1] 40000 50000 75000 92000
> example1
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0
Bien souvent, un spécialiste de la science des données souhaite générer un résumé statistique rapide d'un jeu de données sous la forme de sa moyenne, sa médiane, ses quartiles, son minimum et son maximum. La commande R summary fournit ces résultats.
> summary(salaries)
Min. 1st Qu. Median Mean 3rd Qu. Max.
40000 47500 62500 64250 79250 92000
Pour les mesures de dispersion, R inclut une commande pour l'écart type, appelée sd(), et une commande pour la variance, appelée var(). L'écart type et la variance sont calculés en supposant que le jeu de données provient d'un échantillon.
> sd(salaries)
[1] 23641.42
> var(salaries)
[1] 558916667
Pour calculer une moyenne pondérée dans R, créez deux vecteurs, l'un contenant les valeurs de données et l'autre contenant les poids associés. Entrez ensuite la commande R weighted.mean(values, weights).
Voici un exemple de calcul de moyenne pondérée dans R :
EXEMPLE B.1
Énoncé
Supposons qu'un portefeuille financier contienne 1 000 actions de la société XYZ, achetées à trois dates différentes, comme le montre le Tableau B1. Utilisez R pour calculer la moyenne pondérée du prix d'achat, où les poids sont basés sur le nombre d'actions dans le portefeuille.
| Date d'achat | Prix d'achat ($) |
Nombre d'actions achetées |
|---|---|---|
| 17 janvier | 78 | 200 |
| 10 février | 122 | 300 |
| 23 mars | 131 | 500 |
| Total | 1000 |
Solution
Voici comment créer deux vecteurs dans R : le vecteur price contiendra le prix d'achat, et le vecteur shares contiendra le nombre d'actions. Exécutez ensuite la commande R weighted.mean(price, shares), comme suit :
> price <- c(78, 122, 131)
> shares <- c(200, 300, 500)
> weighted.mean(price, shares)
[1] 117.7
Une liste des commandes statistiques courantes de R est présentée dans le Tableau B2.
| Commande R | Résultat |
|---|---|
mean() |
Calcule la moyenne arithmétique |
median() |
Calcule la médiane |
min() |
Calcule la valeur minimale |
max() |
Calcule la valeur maximale |
weighted.mean() |
Calcule la moyenne pondérée |
sum() |
Calcule la somme des valeurs |
summary() |
Calcule la moyenne, la médiane, les quartiles, le min et le max |
sd() |
Calcule l'écart type échantillonnal |
var() |
Calcule la variance échantillonnale |
IQR() |
Calcule l'écart interquartile |
barplot() |
Trace un diagramme à barres de données non numériques |
boxplot() |
Trace une boîte à moustaches de données numériques |
hist() |
Trace un histogramme de données numériques |
plot() |
Trace divers graphiques, notamment un nuage de points |
freq() |
Crée un tableau de distribution de fréquences |
Visualisation élémentaire et graphiques avec R
R offre de nombreuses fonctions intégrées pour la visualisation de données et la création de graphiques, et confère au spécialiste de la science des données une grande souplesse ainsi que de multiples options de personnalisation pour les graphiques et autres visualisations de données.
Il existe de nombreuses applications statistiques dans R, et de multiples représentations graphiques sont possibles, telles que les diagrammes à barres, les histogrammes, les graphiques de séries temporelles, les nuages de points, etc.
À titre d'exemple simple de diagramme à barres, supposons qu'un enseignant universitaire souhaite créer un diagramme à barres pour afficher les effectifs inscrits dans différents cours tels que les cours de statistiques, d'histoire, de physique et de chimie.
Le Tableau B3 présente les données d'inscription :
| Cours universitaire | Nombre d'étudiants inscrits |
|---|---|
| Statistiques | 375 |
| Histoire | 302 |
| Physique | 294 |
| Chimie | 193 |
La commande de base pour créer un diagramme à barres dans R est la commande barchart().
Tout d'abord, créez un dataframe appelé enrollment pour contenir les données (un dataframe peut être considéré comme une table ou une matrice pour stocker le jeu de données).
enrollment <- data.frame(course=c("Statistics", "History", "Physics", "Chemistry"),
enrolled=c(375, 302, 294, 193))
Ensuite, utilisez la fonction barplot pour créer le diagramme à barres et ajouter des étiquettes pour l'axe des x, l'axe des y et le titre général.
barplot(enrollment$enrolled, names.arg=enrollment$course,
main="Student Enrollment at the College", xlab="Course Name",
ylab = "Enrollment")
Le résultat obtenu est présenté ci-dessous dans la Figure B2 :
La commande de base pour créer un nuage de points dans R est la commande plot, plot(x, y), où x est un vecteur contenant les valeurs de x du jeu de données et y est un vecteur contenant les valeurs de y du jeu de données.
Le format général de la commande est le suivant :
>plot(x, y, main="text for title of graph",
xlab="text for x-axis label", ylab="text for y-axis label")
Par exemple, nous souhaitons créer un nuage de points pour examiner la corrélation entre la valeur du S&P 500 et le cours de l'action Nike. Supposons que nous disposions des données présentées dans le Tableau B4, recueillies sur une période d'un an.
| Date | S&P 500 | Cours de l'action Nike ($) |
|---|---|---|
| 4/1/2020 | 2912.43 | 87.18 |
| 5/1/2020 | 3044.31 | 98.58 |
| 6/1/2020 | 3100.29 | 98.05 |
| 7/1/2020 | 3271.12 | 97.61 |
| 8/1/2020 | 3500.31 | 111.89 |
| 9/1/2020 | 3363.00 | 125.54 |
| 10/1/2020 | 3269.96 | 120.08 |
| 11/1/2020 | 3621.63 | 134.70 |
| 12/1/2020 | 3756.07 | 141.47 |
| 1/1/2021 | 3714.24 | 133.59 |
| 2/1/2021 | 3811.15 | 134.78 |
| 3/1/2021 | 3943.34 | 140.45 |
| 3/12/2021 | 3943.34 | 140.45 |
| (source : https://finance.yahoo.com/) | ||
Notez que les données peuvent être importées dans R à partir d'un fichier texte, d'un fichier Excel ou du presse-papiers à l'aide de diverses commandes R. Supposons que les valeurs du S&P 500 aient été chargées dans le vecteur SP500 et que les cours de l'action Nike aient été chargés dans le vecteur Nike. Dès lors, pour générer le nuage de points, nous pouvons utiliser la commande R suivante :
>plot(SP500, Nike, main="Scatter Plot of Nike Stock Price vs. S&P 500",
xlab="S&P 500", ylab="Nike Stock Price")
À l'issue de ces commandes, R génère le nuage de points présenté dans la Figure B3.
Analyse des distributions de probabilité avec R
Comme mentionné précédemment, un résumé statistique rapide peut être généré à l'aide de la commande summary() dans R, dont la syntaxe est summary(data_vector).
R dispose de bibliothèques intégrées complètes pour calculer des intervalles de confiance, tester des hypothèses et manipuler diverses distributions de probabilité telles que les lois binomiale, de Poisson, normale, du khi-deux et d'autres distributions de probabilité.
Comme nous l'avons vu dans Mesures de tendance centrale, les spécialistes de la science des données s'intéressent souvent à diverses distributions de probabilité telles que la distribution normale, la loi binomiale et la loi de Poisson. Excel fournit des fonctions intégrées pour analyser de nombreuses distributions de probabilité.
R utilise la commande pnorm pour trouver l'aire sous la courbe normale située à gauche d'une valeur spécifiée :
Syntaxe : pnorm(x_value, mean, standard_deviation)
où pnorm renvoie la probabilité qu'une variable aléatoire ayant une moyenne et un écart type donnés soit inférieure à x_value.
EXEMPLE B.2
Énoncé
Le poids de naissance des nouveau-nés aux États-Unis suit une distribution normale avec une moyenne de 3 400 grammes et un écart type de 500 grammes.
- Utilisez R pour déterminer la probabilité qu'un nouveau-né choisi au hasard pèse moins de 4 000 grammes.
- Utilisez R pour déterminer la probabilité qu'un nouveau-né choisi au hasard pèse plus de 3 000 grammes.
Solution
Pour la partie (a), utilisez la commande pnorm comme suit :
pnorm(4000, 3400, 500)
qui renvoie le résultat de probabilité suivant :
[1] 0.8849303
Pour la partie (b), une option de la commande pnorm, « lower.tail=FALSE », permet de calculer l'aire à droite d'une valeur x donnée :
pnorm(3000, 3400, 500, lower.tail=FALSE)
qui renvoie le résultat de probabilité suivant :
[1] 0.7881446
R fournit également une fonction intégrée pour la loi binomiale, comme suit :
Loi binomiale :
Syntaxe : pbinom(k, n, p)
où n est le nombre d'épreuves, p est la probabilité de succès et k est le nombre de succès pour lequel la probabilité est recherchée.
EXEMPLE B.3
Énoncé
Un spécialiste de la science des données réalise un sondage auprès d'un échantillon de 20 personnes et pose la question suivante : « Avez-vous trouvé le site web de l'entreprise ABC facile à parcourir ? » D'après les données antérieures, la probabilité qu'une personne choisie au hasard trouve le site web facile à parcourir était de 65 %. Utilisez R pour trouver la probabilité que 13 personnes sur les 20 répondent qu'elles trouvent le site web facile à parcourir.
Solution
Utilisez la commande pbinom comme suit :
pbinom(13, 20, 0.65)
qui renvoie le résultat de probabilité suivant :
[1] 0.5833746
R fournit également une fonction intégrée pour la loi binomiale, comme suit :
Loi binomiale :
Syntaxe : dbinom(k, n, p)
où n est le nombre d'épreuves, p est la probabilité de succès et k est le nombre de succès pour lequel la probabilité est recherchée.
EXEMPLE B.4
Énoncé
Un spécialiste de la science des données réalise un sondage auprès d'un échantillon de 20 personnes et pose la question suivante : « Avez-vous trouvé le site web de l'entreprise ABC facile à parcourir ? » D'après les données antérieures, la probabilité qu'une personne choisie au hasard trouve le site web facile à parcourir était de 65 %. Utilisez R pour trouver la probabilité que 13 personnes sur les 20 répondent qu'elles trouvent le site web facile à parcourir.
Solution
Utilisez la commande dbinom comme suit :
dbinom(13, 20, 0.65)
qui renvoie le résultat de probabilité suivant :
[1] 0.1844012
R fournit également une fonction intégrée pour la loi de Poisson, comme suit :
Loi de Poisson :
Syntaxe : dpois(k, mu)
où mu est la moyenne de la loi de Poisson et k est le nombre de succès pour lequel la probabilité est recherchée.
EXEMPLE B.5
Énoncé
Un ingénieur de la circulation étudie une certaine intersection qui enregistre en moyenne 3 accidents par mois. Utilisez R pour déterminer la probabilité qu'il y ait 5 accidents au cours d'un mois donné.
Solution
Utilisez la commande ppois comme suit :
dpois(5, 3)
qui renvoie le résultat de probabilité suivant :
[1] 0.1008188
Analyse de corrélation et de régression élémentaire avec R
Rappelez-vous la présentation de l'analyse de corrélation et de régression dans Statistiques inférentielles et analyse de régression. Une première étape de l'analyse de corrélation consiste à calculer le coefficient de corrélation (r) pour les données (x, y). R fournit une fonction intégrée cor() pour calculer le coefficient de corrélation de données bivariées.
À titre d'exemple, considérons le jeu de données du Tableau B5 qui suit le rendement du S&P 500 par rapport au rendement de l'action Coca-Cola sur une période de sept mois.
| Mois | Rendement mensuel du S&P 500 (%) | Rendement mensuel de Coca-Cola (%) |
|---|---|---|
| Janv | 8 | 6 |
| Févr | 1 | 0 |
| Mars | 0 | -2 |
| Avr | 2 | 1 |
| Mai | -3 | -1 |
| Juin | 7 | 8 |
| Juil | 4 | 2 |
Pour calculer le coefficient de corrélation pour ce jeu de données, créez d'abord deux vecteurs dans R : un premier vecteur pour les rendements du S&P 500 et un second vecteur pour les rendements de Coca-Cola :
> SP500 <- c(8,1,0,2,-3,7,4)
> CocaCola <- c(6,0,-2,1,-1,8,2)
La commande R appelée cor renvoie le coefficient de corrélation pour le vecteur de données x et le vecteur de données y :
> cor(SP500, CocaCola)
[1] 0.9123872
Ainsi, le coefficient de corrélation pour ce jeu de données est d'environ 0,912.
Modèles de régression linéaire avec R
Pour créer un modèle linéaire dans R, en supposant que la corrélation soit significative, la commande lm() (pour « linear model ») fournit la pente et l'ordonnée à l'origine (y-intercept) de l'équation de régression linéaire.
Le format de la commande R est
lm(dependent_variable_vector ~ independent_variable_vector)
Remarquez l'utilisation du symbole tilde comme séparateur entre le vecteur de la variable dépendante et le vecteur de la variable indépendante.
Nous utilisons les rendements de l'action Coca-Cola comme variable dépendante et les rendements du S&P 500 comme variable indépendante, la commande R est donc :
> lm(CocaCola ~ SP500)
Call:
lm(formula = CocaCola ~ SP500)
Coefficients:
(Intercept) SP500
-0.3453 0.8641
La sortie de R donne une valeur de -0,3453 pour l'ordonnée à l'origine et une valeur de 0,8641 pour la pente. Sur cette base, le modèle linéaire s'écrit :
où x représente la valeur du rendement du S&P 500 et y représente la valeur du rendement de l'action Coca-Cola.
Les résultats peuvent également être enregistrés sous forme d'objet et nommés « model » à l'aide de la commande R suivante. Pour obtenir des résultats plus détaillés pour la régression linéaire, la commande summary peut être utilisée comme suit :
> model <- lm(CocaCola ~ SP500)
> summary(model)
Call:
lm(formula = CocaCola ~ SP500)
Residuals:
1 2 3 4 5 6 7
-0.5672 -0.5188 -1.6547 -0.3828 1.9375 2.2969 -1.1109
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.3453 0.7836 -0.441 0.67783
SP500 0.8641 0.1734 4.984 0.00416 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.658 on 5 degrees of freedom
Multiple R-squared: 0.8325, Adjusted R-squared: 0.7989
F-statistic: 24.84 on 1 and 5 DF, p-value: 0.004161
Dans cette sortie, l'ordonnée à l'origine et la pente sont fournies, ainsi que les résidus pour chaque valeur de x. La sortie comprend des détails statistiques supplémentaires concernant l'analyse de régression.
Les valeurs prédites et les intervalles de prédiction peuvent également être générés dans R. Tout d'abord, nous pouvons créer une structure dans R appelée dataframe pour contenir les valeurs de la variable indépendante pour lesquelles nous souhaitons générer une prédiction. Par exemple, nous souhaitons générer le rendement prédit pour l'action Coca-Cola, sachant que le rendement du S&P 500 est de 6.
Nous utilisons la commande R appelée predict().
Pour générer une prédiction pour l'équation de régression linéaire appelée model, à l'aide du dataframe où la valeur du S&P 500 est 6, les commandes R sont les suivantes :
> a <- data.frame(SP500=6)
> predict(model, a)
1
4.839062
La sortie de la commande predict indique que le rendement prédit pour l'action Coca-Cola sera de 4,8 % lorsque le rendement du S&P 500 est de 6 %.
Nous pouvons étendre cette analyse pour générer un intervalle de prédiction à 95 % pour ce résultat en utilisant la commande R suivante, qui ajoute une option à la commande predict pour générer un intervalle de prédiction :
> predict(model, a, interval="predict")
fit lwr upr
1 4.839062 0.05417466 9.62395
Ainsi, l'intervalle de prédiction à 95 % pour le rendement de Coca-Cola est [0,05 %, 9,62 %] lorsque le rendement du S&P 500 est de 6 %.
Modèles de régression multiple avec R
R comprend également de nombreux outils permettant au spécialiste de la science des données de réaliser une régression multiple, où une variable dépendante est prédite à partir de plusieurs variables indépendantes. Par exemple, nous pourrions obtenir un meilleur modèle de prédiction pour le rendement mensuel de l'action Coca-Cola si nous prenions en compte non seulement le rendement mensuel du S&P 500, mais également les ventes mensuelles des produits Coca-Cola.
Voici plusieurs exemples où un modèle de régression multiple pourrait offrir un modèle de prédiction supérieur à celui d'un modèle de régression ne comportant qu'une seule variable indépendante :
- Le salaire des employés peut être prédit en fonction des années d'expérience et du niveau d'études.
- Le prix des logements peut être prédit en fonction de la superficie d'une maison, du nombre de chambres et du nombre de salles de bains.
La forme générale du modèle de régression multiple est :
où :
sont les variables indépendantes,
sont les coefficients, où chaque coefficient représente la variation de y lorsque la variable indépendante varie d'une unité et que toutes les autres variables indépendantes sont maintenues constantes,
a est l'ordonnée à l'origine, qui est la valeur de y lorsque tous les .
Comme nous l'avons vu dans un exemple précédent, la syntaxe de l'analyse de régression linéaire dans R lorsqu'il n'y a qu'une seule variable indépendante se présentait comme suit :
> model <- lm(y ~ x)
où y est la variable dépendante et x est la variable indépendante.
Pour « ajouter » des variables indépendantes supplémentaires dans l'approche de régression multiple, nous utilisons le format suivant :
> model <- lm(y ~ x1 + x2 + x3)
où sont les variables indépendantes.
Exemple :
Utilisez R pour créer un modèle de régression multiple afin de prédire le prix d'un logement en fonction des variables indépendantes superficie (en pieds carrés) et nombre de chambres à partir du jeu de données suivant. Utilisez ensuite le modèle de régression multiple pour prédire le prix d'une maison de 3 000 pieds carrés comportant 3 chambres (voir le Tableau B6).
| Prix du logement | Superficie en pieds carrés | Nombre de chambres |
|---|---|---|
| 466000 | 4668 | 6 |
| 355000 | 3196 | 5 |
| 405900 | 3998 | 5 |
| 415000 | 4022 | 5 |
| 206000 | 1834 | 2 |
| 462000 | 4668 | 6 |
| 290000 | 2650 | 3 |
Tout d'abord, créez trois vecteurs dans R, un vecteur pour chacun des éléments suivants : prix du logement, superficie et nombre de chambres :
> price <- c(466000, 355000, 405900, 415000, 206000, 462000, 290000)
> square_footage <- c(4668, 3196, 3998, 4022, 1834, 4668, 2650)
> bedrooms <- c(6, 5, 5, 5, 2, 6, 3)
Ensuite, exécutez le modèle de régression multiple à l'aide de la commande lm :
> model <- lm(price ~ square_footage + bedrooms)
> summary(model)
Call:
lm(formula = price ~ square_footage + bedrooms)
Residuals:
1 2 3 4 5 6 7
-1704.6 1438.4 -606.9 6908.7 -6747.4 -5704.6 6416.5
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 57739.887 9529.693 6.059 0.00375 **
square_footage 66.017 8.924 7.398 0.00178 **
bedrooms 16966.536 6283.183 2.700 0.05408 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 6563 on 4 degrees of freedom
Multiple R-squared: 0.9968, Adjusted R-squared: 0.9953
F-statistic: 630.6 on 2 and 4 DF, p-value: 9.996e-06
Dans la sortie de R, notez que la colonne intitulée « Estimate » fournit les estimations des coefficients et de l'ordonnée à l'origine.
L'ordonnée à l'origine est donnée comme étant 57740 (en arrondissant à l'entier le plus proche).
Le coefficient pour la variable « square footage » (superficie) est de 66.
Le coefficient pour la variable « bedrooms » (chambres) est de 16967.
Sur la base de ces valeurs, le modèle de régression multiple est :
Nous pouvons désormais utiliser le modèle de régression multiple pour prédire le prix d'un logement de 3 000 pieds carrés avec 3 chambres en posant et , de la manière suivante :
Ainsi, le prix prédit pour une maison de 3 000 pieds carrés et 3 chambres est de 306 641 $.