Dans le cadre de ce tutoriel, nous utiliserons le dataframe hdv2003
du package questionr
. Celui-ci est issu de l’enquête “Histoire de Vie” de l’INSEE. Vous pouvez télécharger ces données en cliquant sur ce lien.
install.packages("questionr", dep=TRUE)
library(questionr)
Puisque le dataframe est inclus dans le package, nous n’avons pas besoin d’utiliser la commande read.csv2
pour charger le dataframe dans une variable (data <- read.csv2("votre_dataframe.csv")
). Au lieu de cela, nous appellerons le dataframe hdv2003
dans RStudio comme suit :
Celui-ci apparait maintenant dans votre fenêtre Environnement.
Cette enquête regroupe des informations sur 2000 individus et sur une vingtaine de variables. Regardons un peu la nature de celles-ci en utilisant la commande str()
et leurs noms avec names()
:
names(hdv2003)
## [1] "id" "age" "sexe" "nivetud"
## [5] "poids" "occup" "qualif" "freres.soeurs"
## [9] "clso" "relig" "trav.imp" "trav.satisf"
## [13] "hard.rock" "lecture.bd" "peche.chasse" "cuisine"
## [17] "bricol" "cinema" "sport" "heures.tv"
str(hdv2003)
## 'data.frame': 2000 obs. of 20 variables:
## $ id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ age : int 28 23 59 34 71 35 60 47 20 28 ...
## $ sexe : Factor w/ 2 levels "Homme","Femme": 2 2 1 1 2 2 2 1 2 1 ...
## $ nivetud : Factor w/ 8 levels "N'a jamais fait d'etudes",..: 8 NA 3 8 3 6 3 6 NA 7 ...
## $ poids : num 2634 9738 3994 5732 4329 ...
## $ occup : Factor w/ 7 levels "Exerce une profession",..: 1 3 1 1 4 1 6 1 3 1 ...
## $ qualif : Factor w/ 7 levels "Ouvrier specialise",..: 6 NA 3 3 6 6 2 2 NA 7 ...
## $ freres.soeurs: int 8 2 2 1 0 5 1 5 4 2 ...
## $ clso : Factor w/ 3 levels "Oui","Non","Ne sait pas": 1 1 2 2 1 2 1 2 1 2 ...
## $ relig : Factor w/ 6 levels "Pratiquant regulier",..: 4 4 4 3 1 4 3 4 3 2 ...
## $ trav.imp : Factor w/ 4 levels "Le plus important",..: 4 NA 2 3 NA 1 NA 4 NA 3 ...
## $ trav.satisf : Factor w/ 3 levels "Satisfaction",..: 2 NA 3 1 NA 3 NA 2 NA 1 ...
## $ hard.rock : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
## $ lecture.bd : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
## $ peche.chasse : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 2 2 1 1 ...
## $ cuisine : Factor w/ 2 levels "Non","Oui": 2 1 1 2 1 1 2 2 1 1 ...
## $ bricol : Factor w/ 2 levels "Non","Oui": 1 1 1 2 1 1 1 2 1 1 ...
## $ cinema : Factor w/ 2 levels "Non","Oui": 1 2 1 2 1 2 1 1 2 2 ...
## $ sport : Factor w/ 2 levels "Non","Oui": 1 2 2 2 1 2 1 1 1 2 ...
## $ heures.tv : num 0 1 0 2 3 2 2.9 1 2 2 ...
Variable : Description
id
: Identifiant (numéro de ligne)poids
: Variable de pondérationage
: Âgesexe
: Sexenivetud
: Niveau d’études atteintoccup
: Occupation actuellequalif
: Qualification de l’emploi actuelfreres.soeurs
: Nombre total de frères, soeurs, demi-frères et demi-soeursclso
: Sentiment d’appartenance à une classe socialerelig
: Pratique et croyance religieusetrav.imp
: Importance accordée au travailtrav.satisf
: Satisfaction ou insatisfaction au travailhard.rock
: Ecoute du Hard rock ou assimiléslecture.bd
: Lecture de bandes dessinéespeche.chasse
: Pêche ou chasse pour le plaisir au cours des 12 derniers moiscuisine
: Cuisine pour le plaisir au cours des 12 derniers moisbricol
: Bricolage ou mécanique pour le plaisir au cours des 12 derniers moiscinema
: Cinéma au cours des 12 derniers moissport
: Sport ou activité physique pour le plaisir au cours des 12 derniers moisheures.tv
: Nombre moyen d’heures passées àregarder la télévision par jourNous avons ici un mélange de variables qualitatives et quantitatives qui nous serviront à illustrer plusieurs grands classiques en terme d’outils statistiques.
L’âge
, le poids
, le nombre de frères et soeurs
ainsi que le nombre d'heures
passées devant la télévision sont numériques (num
dans RStudio) sous la forme de facteurs, ou sous la forme d’un nombre entier (int
).
Les autres variables, sont quant à elles, des variables qualitatives ordonnées (appelées factor
)
On supprime la variable id
qui corresponds à l’identifiant des personnes interviewées suivant le numéro de ligne. Elle a beau être identifiée comme numérique, elle est en réalité qualitative, et n’apporte ici aucun renseignement si ce n’est le nombre d’observations totale. Voici 3 manières de supprimer une variable :
# Option 1
hdv2003.bis <- hdv2003[,-1] # efface variable id (colonne 1)
# Option 2
hdv2003$id <- NULL # ATTENTION, cette instruction modifie de manière permanente votre dataframe d'origine
# Option 3
hdv2003.ter <- subset(hdv2003, select = c(age, sexe, nivetud, poids, occup, qualif,freres.soeurs, clso,
relig, trav.imp, trav.satisf, hard.rock, lecture.bd, peche.chasse, cuisine, bricol,cinema, sport, heures.tv ))
La troisième méthode, avec la fonction subset()
est plus rapide car il n’est pas utile de préfixer les variables du nom du dataframe (ici hdv2003
).Dans notre cas de figure, on choisit la première proposition (plus rapide à écrire et qui crée une variable provisoire) : hdv2003.bis <- hdv2003[,-1]
Que ce soit pour une variable qualitative ou numérique, je vous conseille de commencer avec la fonction summary()
, qui donne les effectifs des variables qualitatives et, pour les variables numériques, des indicateurs de centralité et de dispersion comme la moyenne et les quartiles.
summary(hdv2003.bis)
## age sexe
## Min. :18.00 Homme: 899
## 1st Qu.:35.00 Femme:1101
## Median :48.00
## Mean :48.16
## 3rd Qu.:60.00
## Max. :97.00
##
## nivetud
## Enseignement technique ou professionnel court :463
## Enseignement superieur y compris technique superieur:441
## Derniere annee d'etudes primaires :341
## 1er cycle :204
## 2eme cycle :183
## (Other) :256
## NA's :112
## poids occup
## Min. : 78.08 Exerce une profession:1049
## 1st Qu.: 2221.82 Chomeur : 134
## Median : 4631.19 Etudiant, eleve : 94
## Mean : 5535.61 Retraite : 392
## 3rd Qu.: 7626.53 Retire des affaires : 77
## Max. :31092.14 Au foyer : 171
## Autre inactif : 83
## qualif freres.soeurs clso
## Employe :594 Min. : 0.000 Oui : 936
## Ouvrier qualifie :292 1st Qu.: 1.000 Non :1037
## Cadre :260 Median : 2.000 Ne sait pas: 27
## Ouvrier specialise :203 Mean : 3.283
## Profession intermediaire:160 3rd Qu.: 5.000
## (Other) :144 Max. :22.000
## NA's :347
## relig trav.imp
## Pratiquant regulier :266 Le plus important : 29
## Pratiquant occasionnel :442 Aussi important que le reste:259
## Appartenance sans pratique :760 Moins important que le reste:708
## Ni croyance ni appartenance:399 Peu important : 52
## Rejet : 93 NA's :952
## NSP ou NVPR : 40
##
## trav.satisf hard.rock lecture.bd peche.chasse cuisine
## Satisfaction :480 Non:1986 Non:1953 Non:1776 Non:1119
## Insatisfaction:117 Oui: 14 Oui: 47 Oui: 224 Oui: 881
## Equilibre :451
## NA's :952
##
##
##
## bricol cinema sport heures.tv
## Non:1147 Non:1174 Non:1277 Min. : 0.000
## Oui: 853 Oui: 826 Oui: 723 1st Qu.: 1.000
## Median : 2.000
## Mean : 2.247
## 3rd Qu.: 3.000
## Max. :12.000
## NA's :5
Evidemment, il existe aussi une fonction pour chaque paramètre :
median(hdv2003.bis$age) # médiane
## [1] 48
mean(hdv2003.bis$age) # moyenne
## [1] 48.157
quantile(hdv2003.bis$age) # quantiles
## 0% 25% 50% 75% 100%
## 18 35 48 60 97
sd(hdv2003.bis$age) # écart-type
## [1] 16.94181
var(hdv2003.bis$age) # variance
## [1] 287.0249
Pour représenter une variable numérique, on réalise communément un histogramme.On en crée ici deux :
Le premier, sans modifier le nombre de classes et en indiquant les effectifs de celles-ci :
hist(hdv2003.bis$age, col = "purple", border = "white",
main = paste("Ages des", nrow(hdv2003.bis), "interviewés"),
xlab = "âge[années]", ylab = "Effectifs",
ylim = c(0, 250),
xlim = c(0,100),
labels = TRUE)
Le second indique les fréquences relatives grâce à l’argument proba = TRUE
qui nous permet de rajouter une ligne de densité. Observez que nous avons aussi changé le nombre de classes avec l’option nclass=x
:
hist(hdv2003.bis$age, nclass=8,
col = "purple", border = "white",
main = paste("Ages des", nrow(hdv2003.bis), "interviewés") ,
xlab = "âges[années]", ylab = "Densité",
ylim = c(0,0.025),
xlim = c(0,100),
proba = TRUE)
lines(density(hdv2003.bis$age, na.rm = TRUE), lwd = 2, col = "orange" )
Dans un premier temps, on fait un tri à plat des effectifs de la variable “qualification” à l’aide de la fonction table()
ou de la fonction summary()
vu précédemment (l’avantage est qu’il affiche les valeurs manquantes (N/A
) :
summary(hdv2003.bis$qualif)
## Ouvrier specialise Ouvrier qualifie Technicien
## 203 292 86
## Profession intermediaire Cadre Employe
## 160 260 594
## Autre NA's
## 58 347
Ici on a peu de modalités, mais je vous conseille, si vous en avez un grand nombre, de les classer avec la fonction sort() + decreasing =TRUE
pour y voir plus clair ! Grâce à cette fonction on calcule le mode de notre variable :
sort(table(hdv2003.bis$qualif), decreasing = TRUE)
##
## Employe Ouvrier qualifie Cadre
## 594 292 260
## Ouvrier specialise Profession intermediaire Technicien
## 203 160 86
## Autre
## 58
L’option decreasing=TRUE
affiche les modalités par ordre décroissant d’effectifs On note que l’on a beaucoup de valeurs manquantes dans ce jeu de données : 347 N/A pour la variable qualification de notre dataframe. De manière décoissante, on obtient les effectifs des employés, des ouvriers qualifiés, suivi des cadres.
A partir de la fonction table()
, nous pouvons obtenir les fréquences relatives et absolues :
unique(hdv2003.bis$cinema)#la fonction unique renvoit à l'ensemble des modalités de la variable
## [1] Non Oui
## Levels: Non Oui
effectifs <- table(hdv2003.bis$cinema)
sum(effectifs) # nombre totale d'observations
## [1] 2000
effectifs
##
## Non Oui
## 1174 826
Le tableau des fréquences (en pourcentage) s’obtient en divisant les effectifs par la taille de l’´echantillon
frequence <- effectifs*100/sum(effectifs)
frequence
##
## Non Oui
## 58.7 41.3
Vous pouvez aussi utiliser la commande prop.table()
:
prop.table(effectifs) # fréquences relatives
##
## Non Oui
## 0.587 0.413
prop.table(effectifs)* 100 # fréquence absolues
##
## Non Oui
## 58.7 41.3
Pour obtenir les effectifs cumulés, on utilise la fonction cumsum()
effcum <- cumsum(effectifs)
effcum
## Non Oui
## 1174 2000
On représente les effectifs en réalisant un diagramme en batons avec la fonction barplot
barplot(table(hdv2003.bis$occup),
horiz = TRUE,las=1,
col = "purple",
border = "white",
main ="Effectif par situation professionelle",
xlab = "Effectifs")
L’utilisation des tests statistiques, ne peut se faire qu’en vérifiant certaines conditions : cette phase est appelée le diagnostique de régression (le plus souvent ayant trait au fait que la/les variable(s) suivent un loi dite Normale). Si c’est le cas on utilise les tests paramétriques. Si les conditions ne sont pas réunies , on effectue le test non-paramétrique associé.
Pour faire un tableau de contingence (ou tableau croisé) sous R, on utilise la fonction table()
vue précédemment en indiquant les deux variables qui nous intéressent. Croisons les gens qui sont allés au cinéma et ceux qui ont eu lu des bandes dessinées ces douzes derniers mois.
On regarde la répartition des sexe en fonction de leur pratique de sport. modèle :table(var1,var2,deparse.level=2,useNA= «always»)
table(dataframe$var1,dataframe$var2)
table(hdv2003.bis$cinema,hdv2003.bis$lecture.bd,deparse.level = 2, useNA = "always")
## hdv2003.bis$lecture.bd
## hdv2003.bis$cinema Non Oui <NA>
## Non 1156 18 0
## Oui 797 29 0
## <NA> 0 0 0
# on place le résultat de la fonction table() dans un objet appelé "effectif" pour calculer rapidement la fréquence relative par la suite
effectifs <- table(hdv2003.bis$cinema,hdv2003.bis$lecture.bd,deparse.level = 2, useNA = "always")
effectifs # on obtient les effectifs
## hdv2003.bis$lecture.bd
## hdv2003.bis$cinema Non Oui <NA>
## Non 1156 18 0
## Oui 797 29 0
## <NA> 0 0 0
prop.table(effectifs) # fréquences relatives
## hdv2003.bis$lecture.bd
## hdv2003.bis$cinema Non Oui <NA>
## Non 0.5780 0.0090 0.0000
## Oui 0.3985 0.0145 0.0000
## <NA> 0.0000 0.0000 0.0000
prop.table(effectifs)* 100 # fréquence absolues (pourcentage)
## hdv2003.bis$lecture.bd
## hdv2003.bis$cinema Non Oui <NA>
## Non 57.80 0.90 0.00
## Oui 39.85 1.45 0.00
## <NA> 0.00 0.00 0.00
Les résultats sont ici très contrastés. Nous avons 57,8%, et 39,9% de personnes qui n’ont pas lu cette année, ou été au cinéma.
Notes : vous pouvez remplacer la fonction table()
par xtabs()
. L’avantage de cette commande est de ne pas avoir à préfixer le nom des variables par le nom du dataframe.
Pour tester le lien entre deux variables qualitatives on utilise le test du Khi-2 (test paramétrique), ou, si les conditions du diagnostic de régression ne sont pas remplies, on utilise le test exact de Fisher (test non-paramétrique). Ces deux tests sont pratique pour comparer des pourcentages.
Existe-t’il un lien entre les variables cinéma et lecture BD ?
chisq.test(hdv2003.bis$cinema ,hdv2003.bis$lecture.bd)
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: hdv2003.bis$cinema and hdv2003.bis$lecture.bd
## X-squared = 7.4246, df = 1, p-value = 0.006434
Le résultat de p est 0.006. Il est donc très largement inférieur à 5%. Le hasard ne peut expliquer à lui tout seul la différence qu’il existe entre ces deux variables : la différence est vraiment significative, on a bien un lien potentiel.
bientôt : Ho / H1
fisher.test()
Pour représenter les différents rapports entre les effectifs des modalités de deux variables qualitatives, on crée un schéma en forme de mosaïque avec la fonction mosaicplot
. On prend l’exemple ici
mosaicplot(sport ~ nivetud, data = hdv2003.bis, shade = TRUE,main ="Graphique en mosaïque", las=1)
Lorsque l’on croise deux variables, qualitative et quantitative, c’est souvent pour exprime la variable quantitative (ici l’âge), en fonction des modalités de la variable qualitative (ic, le fait d’être aller au cinéma).
Tout d’abord il est intéressant de les représenter graphiquements au moyen de boîtes à moustaches côte à côte, pour mieux comparer les dispersions des chaques modalités de la variable qualitative.
boxplot(hdv2003.bis$age ~ hdv2003.bis$cinema,
col = "purple", border = "black",
main = "Cinéma en fonction de l'âge",
ylab = "âges[années]"
)
La “boîte” corresponds à 50% des observations (délimitée par le 1er et 3ème quartile). Les “moustaches”, représentent les limites au delà lequel on trouve des valeurs aberrantes (erreurs de saisie) ou des valeurs extrêmes.
Nous allons nous intéresser au lien qui existe, peut-être, entre l’âge et le fait d’être allé au cinéma . Je vais croiser mes variables, indiquer ma fonction (ici mean
), et je rajoute l’option na.rm=TRUE
pour ne pas prendre en compte les valeurs manquantes :
tapply(hdv2003.bis$age, hdv2003.bis$cinema, mean, na.rm=TRUE)
## Non Oui
## 54.07666 39.74334
Ceux qui ne sont pas allés au cinéma ces douzes derniers mois ont en moyenne 54 ans, contre 40 ans pour ceux qui y sont allés. La différence de moyenne d’âge est assez importante. La question est maintenant de savoir si cette **différence est vraiment significative ou si elle est le fruit du hasard?*.
Pour comparer des moyennes issues d’une variable numérique et catégorielle, on utilise soit le test de Student, soit le test de Wilcoxon.
1 / Suivent-elles une loi normale?
hist(hdv2003.bis$age) # oui, cette variable suit une loi normale
On peut être plus précis encore, pour aprécier la distribution en utilisant les fonctions qqnorm()
et qqline()
:
qqnorm(hdv2003.bis$age) ; qqline(hdv2003.bis$age)
2 / Les variances sont-elles égales? On calcul l’écart-type de l’âge selon que l’on aille ou pas au cinéma. L’écart-type, est plus simple à interpréter que la variance.On utilise la fonction by()
selon ce modèle :
by(var.étudié,var.sous.groupe, notre fonction (ici sd), na.rm=TRUE)
by(hdv2003.bis$age,hdv2003.bis$cinema, sd, na.rm=TRUE)
## hdv2003.bis$cinema: Non
## [1] 16.24039
## --------------------------------------------------------
## hdv2003.bis$cinema: Oui
## [1] 14.13234
var.test(hdv2003.bis$age ~ hdv2003.bis$cinema) #demander interprétation
##
## F test to compare two variances
##
## data: hdv2003.bis$age by hdv2003.bis$cinema
## F = 1.3206, num df = 1173, denom df = 825, p-value = 1.858e-05
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 1.163401 1.496893
## sample estimates:
## ratio of variances
## 1.32058
# c'est le ratio entre les deux variances qui a l'intervalle de confiance
# 95% des ration entre les 2 variances sont compris entre 1.16 - 1.4
Les conditions de validité pour effectuer le test T de Student sont réuni. Passons maintenant à la réalisation du test avec la fonction t.test()
:
t.test(age ~ cinema, data=hdv2003.bis, var.equal=TRUE)
##
## Two Sample t-test
##
## data: age by cinema
## t = 20.488, df = 1998, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 12.96129 15.70535
## sample estimates:
## mean in group Non mean in group Oui
## 54.07666 39.74334
On rajoute l’argument var.equal=TRUE
sinon, par défaut, R va utiliser l’approximation de Welch,qui permet d’avoir un test t même quand les variances sont inégales, mais qui est moins “robuste”.
Le test est très significatif avec un p-value bien inférieure à 5%
Paragraphe sur le petit p-value Comment le lire Quescequ’il ve dire
Si les conditions de validités n’avait pas été respectées, on aurait utiliser le test de Wilcoxon la particularité de ce test est qu’il compare des “rangs” d’individus, et non une moyenne, comme dans le test de Student (ce qui le rend, intrasèquement, moins pratique à interpréter).
wilcox.test(hdv2003.bis$age~hdv2003.bis$cinema, conf.int=TRUE)
##
## Wilcoxon rank sum test with continuity correction
##
## data: hdv2003.bis$age by hdv2003.bis$cinema
## W = 722110, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
## 95 percent confidence interval:
## 13.00003 16.00005
## sample estimates:
## difference in location
## 14.99996
# Remarque : l'arg conf.int=TRUE rajoute un intervalle de confiance à notre résultat
Passons au domaine du petit écran ! On s’intéresse toujours à notre variable âge, mais liée cette fois-ci, à la variable numérique heures.tv
.
Réaliser un tableau d’effectifs croisé est illisible sur des variables numériques. On préfère à cela créer un nuage de points à l’aide de la fonction plot()
:
plot(hdv2003.bis$age,hdv2003.bis$heures.tv, col="cornflowerblue")
Ce diagramme apporte des informations intéressantes, mais il n’y a pas l’air d’avoir 2000 observations.
Pourquoi? Il a sans doute beaucoup de couples de valeurs similaires qui, une fois superposés, apparaissent comme une seule observation.Pour éviter cela on utilise la fonction jitter()
qui décale légèrement les points de façon à faire apparaitre l’ensemble des observations.
plot(jitter(hdv2003.bis$age),jitter(hdv2003.bis$heures.tv), col="cornflowerblue")
# On est bien loin d'une relation linéaire !
Interprétation: on observe que le nombre d’heures de télévision en massivement entre 0h et 4h par jour A première vu, il n’y a pas de corrélation entre ces deux variables. Au vue de l’aspect du nuage de points.
Deux variables sont dites dépendantes quand la connaissance de l’une donne une indication sur la valeur de l’autre. On parle de «force» de liaison. Pour calculer cette force entre deux variables quantitatives, on utilise la corrélation de Pearson.
Le résultat appelé r, varie entre -1 et 1.
Attention il y a une différence entre causalité et liaison Ce n’est pas parcequ’il y a une liaison statistique entre deux variables qu’il y a forcément un lien de causalité.
On calcul le coefficient de corrélation de Pearson avec la fonction cor()
cor.test()
:
cor(hdv2003.bis$age, hdv2003.bis$heures.tv, use = "complete.obs")
## [1] 0.1776249
cor.test(hdv2003.bis$age, hdv2003.bis$heures.tv)
##
## Pearson's product-moment correlation
##
## data: hdv2003.bis$age and hdv2003.bis$heures.tv
## t = 8.0578, df = 1993, p-value = 1.324e-15
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.1347898 0.2197974
## sample estimates:
## cor
## 0.1776249
# La fonction cor.test() permet d'avoir en même temps l'intervalle de confiance
Comme on pouvait s’en douter d’après le graphique précédent, on observe une très faible corrélation entre ces variables : 0.17.
Dans le cas où les variables ne suivent pas une loi normale on utilise le test de nullité de corrélation ou corrélation de Spearman.
cor.test(hdv2003.bis$poids,hdv2003.bis$heures.tv, method="spearman")
## Warning in cor.test.default(hdv2003.bis$poids, hdv2003.bis$heures.tv,
## method = "spearman"): Cannot compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: hdv2003.bis$poids and hdv2003.bis$heures.tv
## S = 1388400000, p-value = 0.02821
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## -0.04913082
Nous allons changer de dataframe pour le prochain excercice. Prenons une autre étude rp99 du package questionr. Celui-ci regroupe des informations démographiques et sociologique sur plusieurs villes du Rhône.
Regardons s’il existe une dépendance entre le fait d’être cadre et l’obtention de diplômes supérieur.
cor(rp99$dipl.sup, rp99$cadres)
## [1] 0.8975282
Ah, voilà une corrélation qui se rapproche de 1, ce qui indique une liaison assez forte entre ces deux variables on va plus loin en la représantant avec plot()
plot(rp99$dipl.sup, rp99$cadres, ylab = "Part des cadres", xlab = "Part des diplomês du supérieur")
On effectue la régression linéaire avec la commande lm()
:
regression.li <- lm(cadres ~ dipl.sup, data = rp99)
summary(regression.li)
##
## Call:
## lm(formula = cadres ~ dipl.sup, data = rp99)
##
## Residuals:
## Min 1Q Median 3Q Max
## -9.6905 -1.9010 -0.1823 1.4913 17.0866
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.24088 0.32988 3.762 0.000203 ***
## dipl.sup 1.38352 0.03931 35.196 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 3.281 on 299 degrees of freedom
## Multiple R-squared: 0.8056, Adjusted R-squared: 0.8049
## F-statistic: 1239 on 1 and 299 DF, p-value: < 2.2e-16
Pour un rendu plus éloquant on peut rajouter une ligne de régression sur le diagramme à points avec la fonction abline() :
plot(rp99$dipl.sup, rp99$cadres, ylab = "Part des cadres", xlab = "Part des diplomês du supérieur", col="cornflowerblue")
abline(regression.li, col = "deepskyblue4")
Voilà ! c’est terminé pour ce premier tutoriel de découverte sur la manipulation de données avec le logiciel RStudio! Vous savez maintenant faire une première analyse et représentation de vos données pour trouver mettre en évidence les liens et tester les dépendances potentielle de vos variable. Nous avons vu ici une bonne partie des tests paramétriques et non-paramétrique les plus couramment utilisés et effectuer notre première régression linéaire!
……………….