library(tidyverse) # Pour manipuler les data
library(mlogit) # de Yves Croissant pour estimer les paramètres des modèles
library(Ecdat) # library qui contient le jeu de données Yogurt
library(kableExtra)
library(ggthemes)p2
Introduction
L’étude empirique des choix des consommateurs et des déterminants de ces choix est un sujet d’intérêt pour les chercheurs en marketing depuis les travaux pionniers de Guadani et Little (1982).
Au cours de la dernière decennie, plusieurs modèles alernatifs ont été proposés, mis en oeuvre et analysés. Une grande proportion de ces modèle correspond à des variantes dérivées du cadre de la Valeur Extrême Généralisée, proposé par McFadden (1978). Le modèle logit multinomial (MNL) est probablement le plus populaire d’entre eux, pour sa simplicité analytique, notamment. Et, bien que certaines de ses propriétés, dont celle de l’indépendance des alternatives non pertinentes (IIA) , soient considérées comme limitantes, il demeure un modèle de choix.
Chargement des packages nécessaires
Chargement des données Yogurt
data("Yogurt",package = "Ecdat")
# data() # pour avoir la liste de tous les data frames disponibles dans vos packages installés
# help(Yogurt) #va afficher le dictionnaire des donnéesdf<-Yogurt # df contient les données brutes
# Le tableau en raison des intitulés de viriables ne tient pas dans la page. On va changer ces intitulés
names(df) #affiche le nom des viriables [1] "id" "feat.yoplait" "feat.dannon" "feat.hiland"
[5] "feat.weight" "price.yoplait" "price.dannon" "price.hiland"
[9] "price.weight" "choice"
names(df)<-gsub("^feat\\.","",names(df))
names(df)<-gsub("^price\\.","",names(df))
df%>%head(10)%>%knitr::kable(caption = "Le tableau de données brutes Yogurt (les 10 premières lignes")| id | yoplait | dannon | hiland | weight | yoplait | dannon | hiland | weight | choice |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | 0 | 0 | 0 | 10.8 | 8.1 | 6.1 | 7.9 | weight |
| 1 | 0 | 0 | 0 | 0 | 10.8 | 9.8 | 6.4 | 7.5 | dannon |
| 1 | 0 | 0 | 0 | 0 | 10.8 | 9.8 | 6.1 | 8.6 | dannon |
| 1 | 0 | 0 | 0 | 0 | 10.8 | 9.8 | 6.1 | 8.6 | dannon |
| 1 | 0 | 0 | 0 | 0 | 12.5 | 9.8 | 4.9 | 7.9 | dannon |
| 1 | 0 | 0 | 0 | 0 | 10.8 | 9.2 | 5.0 | 7.9 | dannon |
| 1 | 0 | 0 | 0 | 0 | 10.3 | 8.1 | 4.9 | 7.9 | dannon |
| 1 | 0 | 0 | 0 | 0 | 10.8 | 8.6 | 5.4 | 7.9 | weight |
| 2 | 0 | 0 | 0 | 0 | 10.8 | 9.8 | 5.0 | 7.9 | yoplait |
| 2 | 0 | 0 | 0 | 0 | 10.8 | 9.8 | 5.0 | 7.9 | yoplait |
head(df) id yoplait dannon hiland weight yoplait dannon hiland weight choice
1 1 0 0 0 0 10.8 8.1 6.1 7.9 weight
2 1 0 0 0 0 10.8 9.8 6.4 7.5 dannon
3 1 0 0 0 0 10.8 9.8 6.1 8.6 dannon
4 1 0 0 0 0 10.8 9.8 6.1 8.6 dannon
5 1 0 0 0 0 12.5 9.8 4.9 7.9 dannon
6 1 0 0 0 0 10.8 9.2 5.0 7.9 dannon
# Rajouter une ligne pour spécifier les variables feat et price qui ont été perdues
#fct summarise de tidyverse, dataframe en wide ->format long, pivot_longer(passer en format long)
#prix moyen par marque/option "group by" dans tidyverse##Mettre les données de Yogurt en format long via la fonction \(pivot_longer\) et rajouter la colonne choiceid au tableau pour avoir un index unique.
names(Yogurt) [1] "id" "feat.yoplait" "feat.dannon" "feat.hiland"
[5] "feat.weight" "price.yoplait" "price.dannon" "price.hiland"
[9] "price.weight" "choice"
head(Yogurt,11) id feat.yoplait feat.dannon feat.hiland feat.weight price.yoplait
1 1 0 0 0 0 10.8
2 1 0 0 0 0 10.8
3 1 0 0 0 0 10.8
4 1 0 0 0 0 10.8
5 1 0 0 0 0 12.5
6 1 0 0 0 0 10.8
7 1 0 0 0 0 10.3
8 1 0 0 0 0 10.8
9 2 0 0 0 0 10.8
10 2 0 0 0 0 10.8
11 2 0 0 0 0 10.8
price.dannon price.hiland price.weight choice
1 8.1 6.1 7.9 weight
2 9.8 6.4 7.5 dannon
3 9.8 6.1 8.6 dannon
4 9.8 6.1 8.6 dannon
5 9.8 4.9 7.9 dannon
6 9.2 5.0 7.9 dannon
7 8.1 4.9 7.9 dannon
8 8.6 5.4 7.9 weight
9 9.8 5.0 7.9 yoplait
10 9.8 5.0 7.9 yoplait
11 9.8 5.0 7.9 yoplait
Convertir le format wide en long via \(pivot_longer\)
Yl<-pivot_longer(Yogurt,cols=2:9,names_to=c(".value","brand"),names_sep="\\.")
Yl<-Yl%>%mutate(Yl,choice=ifelse(choice==brand,1,0))
Yl<-Yl%>%mutate(choiceid=row_number())Afficher le résultat
names(Yl)[1] "id" "choice" "brand" "feat" "price" "choiceid"
print(subset(Yl,price<0.5))
ggplot(subset(Yl,choice==1),aes(x="",fill=factor(brand),group=brand))+geom_bar(width = 1)+coord_polar("y",start = 0)+scale_fill_manual(values=c("blue","red","green","orange"))# Couleurs pour les choix(1:bleu,0:rouge)labs(x=NULL,y=NULL,fill="choice",
title="Parts de marché")+theme_void()+#supprimer les axes et les grilles
theme(legend.position="bottom",legend.direction="horizontal")+ guides(fill=guide_legend(title.position="top"))+theme_economist()NULL