Projet : une analyse complète

L3 économie-finance

Auteur·rice
Affiliation

Elias Bouacida

Université Paris 8

Date de publication

12 octobre 2026

Reprise du chapitre 4

Le code suivant représente l’âge et le nombre d’heures de télévision par jour des enquêtés de l’enquête Histoire de vie (d, comme dans les chapitres précédents). Regardez le graphique qu’il produit :

ggplot(d) + geom_point(aes(x = age, y = heures.tv))

Qu’est-ce que ce graphique cache, ou exagère ? Comment le corriger ? Écrivez votre réponse, puis le code du graphique corrigé, avant d’ouvrir la correction.

ggplot(d) + geom_jitter(aes(x = age, y = heures.tv), alpha = 0.15)

Les 2000 points sont opaques, et beaucoup se superposent exactement. Le premier graphique donne donc l’impression que les enquêtés sont répartis uniformément, alors qu’ils se concentrent dans certaines zones. geom_jitter() sépare les points superposés en les décalant légèrement, et la transparence (alpha) fait apparaître plus foncées les zones où ils s’accumulent.

Si vous n’aviez pas identifié le problème, relisez la partie « Croiser deux variables » du chapitre 4.

Ce qui est attendu

Ce dernier chapitre est consacré à un projet personnel : une analyse complète de l’enquête Histoire de vie, qui mobilise tout ce que vous avez appris.

Vous rendrez un script R commenté qui répond à deux ou trois questions de votre choix sur ces données. Pour chaque question, le script doit contenir :

  • la question, écrite en français, en commentaire ;
  • le code qui y répond ;
  • au moins un tableau ou un graphique ;
  • une phrase qui dit ce que vous y lisez.

Cette page rappelle d’abord les outils à votre disposition, puis vous guide pour choisir vos questions, écrire le script et le rendre.

Ce que vous savez faire

Manipuler un tableau

Fonction Ce qu’elle fait
select() choisit des colonnes
filter() choisit des lignes
arrange() trie les lignes
mutate() crée ou modifie une colonne
d |>
  filter(age < 30) |>
  select(age, sexe, qualif) |>
  arrange(age)

Voir le chapitre 2.

Décrire

Fonction Ce qu’elle fait
summarise() calcule des indicateurs
count() compte les modalités
group_by() découpe en groupes
n() donne l’effectif du groupe
d |>
  group_by(qualif) |>
  summarise(
    effectif = n(),
    age_moyen = mean(age)
  ) |>
  arrange(desc(age_moyen))

Voir le chapitre 3.

Représenter

Géométrie Pour quoi
geom_histogram() distribution d’une variable quantitative
geom_bar() effectifs d’une variable qualitative
geom_point(), geom_jitter() deux variables quantitatives
geom_boxplot() une quantitative selon une qualitative
facet_wrap() le même graphique par groupe
ggplot(d) +
  geom_boxplot(aes(x = heures.tv, y = qualif)) +
  labs(x = "Heures de télévision par jour", y = NULL)

Voir le chapitre 4.

Choisir ses questions

Une bonne question

Le choix des questions est l’étape la plus importante du projet. Une bonne question remplit trois conditions :

  • elle porte sur des variables qui existent dans le jeu de données (vérifiez avec glimpse(d)) ;
  • elle est assez précise pour qu’on sache quel calcul faire ;
  • elle a une réponse vérifiable : un chiffre, une comparaison, une forme.

Quelques exemples :

Trop vague Utilisable
« Étudier les loisirs » « Les cadres lisent-ils plus de bandes dessinées que les ouvriers ? »
« Analyser la télévision » « Le temps passé devant la télévision diminue-t-il avec le niveau d’études ? »
« Voir les différences hommes-femmes » « À âge et qualification comparables, les femmes déclarent-elles moins pratiquer un sport ? »

Si vous ne savez pas par où commencer

Voici quelques pistes :

  • Qui pratique un sport ? Est-ce lié à l’âge, au diplôme, à la qualification ?
  • Le sentiment d’appartenance à une classe sociale (clso) varie-t-il selon la qualification ?
  • Le nombre de frères et sœurs est-il lié à la pratique religieuse (relig) ?
  • Qui déclare que le travail est important (trav.imp) ? Et qui en est satisfait (trav.satisf) ?
  • Les activités de loisir (cuisine, bricol, peche.chasse, cinema) se répartissent-elles différemment selon le sexe ?

Prenez-en une, et posez-vous ensuite la question qui vient naturellement après.

Écrivez-les d’abord

Important

Écrivez vos deux ou trois questions en français, dans votre script, avant d’écrire la moindre ligne de code.

Sinon, vous produirez des calculs sans savoir ce que vous cherchez, et vous ne pourrez pas dire si le résultat est bon.

Écrire le script

La structure

Votre script doit suivre la structure suivante :

# Projet M3P — Prénom Nom — numéro d'étudiant
# Analyse de l'enquête Histoire de vie 2003

# Préparation ------------------------------------------------

library(tidyverse)
library(questionr)

data(hdv2003)
d <- as_tibble(hdv2003)


# Question 1 : les cadres regardent-ils moins la télévision ? ----

# ...


# Question 2 : ... ----

# ...

Les sections

Un commentaire terminé par au moins quatre tirets crée une section :

# Question 1 : la pratique sportive selon l'âge ----

RStudio affiche alors un plan du script, qui permet de passer d’une section à l’autre. Ctrl + Shift + O affiche ou masque ce plan. Les sections ne changent rien à l’exécution : ce sont des commentaires ordinaires.

Faites une section par question. C’est ce qui rend un script lisible, pour moi qui le corrigerai, et pour vous quand vous le relirez dans trois semaines.

Commenter utilement

Commentez ce que vous cherchez et ce que vous trouvez, pas ce que fait la ligne :

# Inutile
# calcule la moyenne
mean(d$age)

# Utile
# On écarte les 5 non-répondants sur les heures de télévision.
# La moyenne porte donc sur 1995 personnes.
d |> summarise(
  effectif = sum(!is.na(heures.tv)),
  moyenne = mean(heures.tv, na.rm = TRUE)
)

Les réflexes

Quatre réflexes, vus au fil des chapitres, font la différence entre un script qui tourne et une analyse juste :

  1. Prédisez l’ordre de grandeur avant de lancer un calcul. Un résultat qui surprend est soit une découverte, soit une erreur.
  2. Affichez l’effectif à côté de chaque indicateur. Une moyenne sur six personnes ne se compare pas à une moyenne sur huit cents.
  3. Nommez vos axes. heures.tv n’est pas un titre d’axe.
  4. Relancez tout depuis le début avant de rendre. Redémarrez R avec Ctrl + Shift + F10, puis exécutez le script en entier (Ctrl + Shift + Entrée). Il doit tourner sans erreur dans une session vierge : c’est la seule façon de vérifier qu’il ne dépend pas d’un objet que vous avez créé dans la console et oublié.

Quand vous êtes bloqués

  1. Lisez la dernière ligne du message d’erreur. Le nom cité entre guillemets est presque toujours la faute.
  2. Ouvrez l’aide de la fonction avec ?nom_de_la_fonction, et regardez la rubrique Examples, tout en bas.
  3. Réduisez le problème. Exécutez votre enchaînement étape par étape, en ajoutant les |> un à un, pour voir à quelle étape le résultat cesse d’être celui que vous attendez.
  4. Revenez au chapitre où la notion a été présentée : les tableaux de rappel ci-dessus indiquent lequel.

Le point 3 est le plus efficace.

Rendu

Ce que vous déposez

Un fichier .R, nommé Nom_Prenom.R, à déposer sur Moodle.

Il doit :

  • s’exécuter en entier, sans erreur, dans une session vierge ;
  • contenir vos questions, écrites en français ;
  • produire au moins deux graphiques aux axes nommés ;
  • contenir vos commentaires de lecture des résultats.

Critères d’évaluation

Critère Ce que je regarde
Le script tourne exécution complète sans erreur
Questions posées explicitement, précises
Pertinence le calcul répond bien à la question posée
Prudence effectifs affichés, valeurs manquantes traitées
Graphiques lisibles, axes nommés
Lecture une phrase de commentaire par résultat
Note

Deux questions bien traitées valent mieux que cinq survolées.

Pour aller plus loin

RStudio sait transformer un script en document, sans rien apprendre de nouveau : les lignes qui commencent par #' sont interprétées comme du texte.

#' # Analyse de la pratique sportive
#'
#' On commence par regarder la répartition par sexe.

d |> count(sport, sexe)

Ctrl + Shift + K produit alors un document HTML qui mêle texte, code et résultats.

Note

C’est facultatif, et cela ne rapporte rien de plus. Mais si le mécanisme vous intéresse, c’est le point d’entrée vers Quarto et les documents reproductibles.

Et après ce cours

Vous savez maintenant charger des données, les décrire, les représenter, et rendre un travail reproductible.

Vous retrouverez ces outils en économétrie, en séries temporelles et dans votre projet tutoré. Les leçons swirl facultatives restent disponibles si vous voulez aller plus loin : conditions, boucles, écriture de fonctions, tirages aléatoires… La liste complète est dans LECONS_OPTIONNELLES.md. Le manuel de Julien Barnier, Introduction à R et au tidyverse, couvre largement ce que nous n’avons pas eu le temps d’aborder.

Et si vous vous faites aider par un assistant IA, vous avez désormais de quoi juger ce qu’il vous répond.