SlideShare une entreprise Scribd logo
1  sur  101
Télécharger pour lire hors ligne
+
Data Analysis
La première phase d’une enquête est celle de sa
conception c’est-à-dire de sa raison d’être.
+ L’étude est une démarche scientifique de
fabrication de la vérité
 L’enquête est un concept ambigu signifiant quête d'information,
collecte de témoignages, recherches pour savoir quelque chose, il
se fonde sur la pratique inquisitoriale émergeant au haut
Moyen-âge (et plus loin du travail de l’historien grec Herodote).
 On préfère le mot étude qui souligne une démarche rationnelle
essayant de réduire la part de subjectivité dans la représentation
simplifiée d’une réalité. Elle est le fondement de la vérité
scientifique.
 C’est une recherche d'information réalisée par observation
systématique d’une problématique sur une population déterminée,
pour décrire, comparer ou expliquer une pratique.
 Les 4 grandes étapes de l’étude sont : La construction de la
problématique (I) La collecte de données (II) Analyse de résultat (III)
l’interprétation théorique (IV)
+
8 étapes pour le design d’étude
 ÉTAPE À : Problématiser l’étude.
 Définir les objectifs : la première étape consiste à
définir l'objectif général. C'est l'énoncé du problème
qui nécessite le recours à l'enquête, la question de
départ et les grands objectifs du projet.
 Lire l’état de l’art : il s’agit d’utiliser de nombreuses
sources d’information pour se renseigner sur le
phénomène à étudier. Web, Presse, Revues
spécialisées, Revues scientifiques, Livre…une somme
de connaissances stables doit être mobilisée pour
mieux appréhender le phénomène en dégageant les
concepts et les hypothèses à étudier.
 Mobiliser l’expérience : la réflexion avancée peut être
nourrie par des brainstormings avec des experts sur
le domaine. Un réseau doit être constitué fait de
chercheurs, de professionnel très expérimenté, mais
aussi d’acteur ou de témoins privilégiés voire d’un pré-
échantillon.
 Définir les Hypothèses : la seconde étape consiste à
décomposer l'objectif général en objectifs ou questions
plus limités. Ces questions mettent en relation des
concepts ou notions pas un mode de corrélation. Les
objectifs spécifiques peuvent aussi être énoncés sous
forme d'hypothèses.
 ÉTAPE B : Designer l’étude
 Constituer le set de variables : la troisième étape est la préparation de
l'instrument d'observation par l'élaboration du questionnaire en concepts
opérationnalisés en indicateurs.
 Constituer de l’échantillonnage : quelle population va être interrogée, qui est
soumis à l'enquête, ET quelle est la taille de l'échantillon, comment seront choisis
les répondants, quelle est la modalité d’échantillonnage ?
 Organiser le Plan de collecte : dans la cinquième étape, on tente de définir le
plan de collecte, c'est-à-dire la façon d'organiser le déroulement de l'enquête par
les différents acteurs de l’ étude. Il comprend aussi l'élaboration d'un pré test
 ÉTAPE C : conduire l’étude
 Recueillir les données : la sixième étape est le recueil de l'information proprement
dit. Le questionnement des sujets et la réalisation sur le terrain selon la modalité
choisie dans une démarche de pilotage assurant la qualité de l’observation.
 Nettoyer et recoder des données : s’en suit la préparation des données. Les
données sont non seulement nettoyées, mais une série d’opérations en génèrent
de nouvelles. On réalise le codage des données en prévision d'analyse statistique.
 ÉTAPE D : Analyser les données
 La septième étape consiste à analyser les données. Les informations sont traitées
en fonction de la nature des données et les objectifs de l'étude (description,
comparaison ou vérification d'hypothèses). On se préoccupe aussi de la qualité des
données recueillies.
 L’interprétation des analyses : Les différentes analyses servent de preuves à une
interprétation du phénomène et à la réponse aux différentes hypothèses émises.
On décrit, compare, répond aux hypothèses et ouvre vers de nouvelles
interrogations.
Communiquer le Rapport final est le moment stratégique des études. C’est un vrai projet de
communication, tant dans sa conception que dans sa diffusion. S’il n’est pas rattaché à la
fabrication du support, il est à lui seul un projet qu’il faut appréhender dans sa globalité.
+
Etape A - Comprendre le
problème
Fabriquer des hypothèses de travail pour l’étude
+
Planifier ses études:
 Le premier moment d’une
enquête est dit descriptif ou
transversal en ce qu’elle décrit
la population des individus en les
discriminant selon les indicateurs
normés. Elle peut aboutir à une
clustérisassions en sociotype.
 Puis peut venir un second
temps des explications des
phénomènes en faisant corréler
un ou plusieurs facteurs les uns
avec les autres tout en essayant
d’interpréter cette corrélation. Les
différentes régressions sont les
outils clés de cette approche.
 La comparaison permet de distinguer deux
échantillons d’une population selon un ou
plusieurs critères discriminants
 Comparaison expérimentale : on
compare un groupe qui a subi des
expériences au regard d’un groupe
ayant les mêmes caractéristiques, mais
qui ne les a pas subies [UNE Variable
binaire].
 Comparaison cas-témoins : comparer
des groupes qui se distingue selon les
[Les modalités d’UNE variable kali].
 Etude longitudinale : Comparer un même
groupe après et avant l’intervention d’un
facteur causal. [DEUX OU PLUSIEURS
MESURES d’UNE variable]
 Les études de tendances visent à tirer
périodiquement des échantillons d’une
même population à travers plusieurs
enquêtes.
 Quand il s’agit exactement du même
échantillon, on parle d’étude de panel.
+
Définition des objectifs de l’étude
 Il s’agit d’essayer de cadrer
le problème sur une étude
réalisable dans le temps et
le budget imparti.
 On distingue des enquêtes
descriptives,
explicatives,
comparatives et/ou
longitudinales
 La mise en place d’un
comité d’expert peut
permettre de faire un rendu
intermédiaire et par des
méthodologies de
brainstorming, tester le
travail préalable et les
hypothèses émergentes
 Il faut pouvoir se documenter
et s’informer pour élaborer
des hypothèses réalistes
 Information
documentaire : on
cherche dans la
documentation préalable
des descriptions du
phénomène, des théories,
des explications, etc.
 On recherche du plus
général au plus
spécifique par rapport au
sujet
 Parfois on établit une
préenquête qualitative et
ouverte auprès d’experts,
auprès de témoins
privilégiés ou auprès de la
population cible en petit
échantillon non
représentatif
 On n’oublie pas de se
documenter sur
l’existence d’études
préexistantes.
 Quand le budget le
permet, on peut préparer
son étude par une
préétude qualitative
ouverte
 Parfois on établit une
préenquête qualitative
et ouverte auprès
d’experts, auprès de
témoins privilégiés ou
auprès de la population
cible en petit échantillon
non représentatif
 La préétude n’est pas
une mini-étude, mais
bien une recherche de
la plus grande
variabilité du
phénomène sur un
échantillon moindre
(notamment avec la
question
ouverte"autre").
+
Choisir le type d’étude : variables
qualitatives ou quantitatives
 On dit des variables d’une enquête qu’elles sont ouvertes ou fermées, qualitatives ou quantitatives, mais
par extension (et abus de langage) on parle d’un projet d’étude"qualitative"ou"quantitative":
 Étude qualitative : Une enquête possédant de nombreuses questions ouvertes qualitatives d’ordre
textuelles ou images qui subiront un traitement postérieur par thématisation, synthèse et résumé. Ce sens
des enquêtes à"large maille"pour appréhender des phénomènes complexes, mal connus ou en phase
préparatoire d’une enquête. On aborde souvent les représentations, les modes de vie, les types de
discours par une enquête qualitative. On traite aussi les situations nouvelles, les innovations ou les
pratiques marginales ou atypiques…
 Études quantitatives : Une enquête possédant de nombreuses questions fermées (pas nécessairement)
quantitatives, mais qui subiront des analyses et des traitements quantitatifs de dénombrement pour
décrire, trier, comparer et évaluer des facteurs d’un phénomène. Cette approche extensive est
nécessaire sur des grands nombres afin de réduire l’observation d’une réalité à des marqueurs précis
qui sont corrélés aux phénomènes étudiés. Cette construction de la réalité doit être mise à l’épreuve
d’une discussion scientifique.
 On distingue aussi l’approche individuelle de l’approche de population. c’est à dire la logique de l’étude
de cas ou étude clinique ou l’on s’intéresse à l’individu de manière extensive et l’étude de population qui
s’intéresse à un phénomène précis et à ses facteurs déterminants
 L’échelle de distinction entre les différentes approches repose sur la capacité à réduire la réalité à une grille
de facteurs précis. Plus la réalité est complexe, inconnue et subjective plus l’étude sera globale et ouverte.
Plus le phénomène sera étudié et connu plus on tendra vers des approches quantitatives et fermées.
+
Fabriquer les hypothèses
On doit choisir les hypothèses les plus utiles et les plus plausibles au regard de l’étude préalable. On
essaye d’avoir un juste équilibre entre l’utilité de l’étude (au regard de la problématique et des possibilités de
trouver une réponse pertinente).
Facteurs (ou concepts) Les relation Indicateur
Définir les concepts qui décrivent
le phénomène étudié et qui sont
susceptible de l’influencer
La relation permet de définir le lien
de corrélation qui devrait lier les
facteurs entre eux
C’est une variable observable qui
permet de donner sens à la
variation du concept. Elle doit être
facilement observable et corrélée
aux états du concept
Donner des exemples clair et
anticiper sa variation.
Donner des relations qui sont
plausible et logique. Ex. plus le
niveau d’étude est élevé, plus le
salaire est élevé
Ex. Température est un indicateur
corrélé à la chaleur du climat ou à
l’état de santé d’un patient…
Facteur
explicatif Indicateur 1
Indicateur 2
Indicateur 3
…
Concept
expliqué Indicateur 1
Indicateur 2
Indicateur 3
…
Relation
Pour étudier les notions qui constituent l'objet de l’enquête, il faut trouver les
indicateurs empiriques, des moyens de les approcher, de les mesurer. On distingue donc
le niveau théorique de la notion, le niveau intermédiaire des indicateurs, et le niveau de réalité
des questions-réponses.
+ Système de documentation et reproductibilité
des résultats
 Journal de recherche
 Dispositif d’annotation
+
Etape B - Extraire les
données
S’assurer de la qualité des données
+
Choisir sa méthode d’enquête selon
les cas à observer
 Il existe plusieurs méthodes qui se distinguent par la méthode de
collecte de données et l’objet étudié.
 L’analyse de données permet bien souvent l'observation de traces
recueillies indépendamment du projet de l’étude, mais qui ont la
particularité d’être des marqueurs des phénomènes étudiés.
 Observation directe permet de relever des données directement en
contact avec les phénomènes étudiés. Ils sont enregistrables. Ce qui
n’empêche que l’observateur peut être engagé ou pas dans la
situation voire médiatiser son observation.
 L’expérimentation (ou expérience) consiste à modifier
intentionnellement un facteur dans le phénomène étudié pour
observer ses conséquences sur les autres facteurs. La méthode peut
être plus ou moins contrainte dans un"laboratoire".
 Le questionnaire d’enquête vise à relever des témoignages du
phénomène auprès des acteurs en lien avec le phénomène pour qu’ils
nous rapportent, nous représente une réalité vécue, une opinion, une
croyance, des imaginaires.
+
Observer un phénomène
directement
 Le cas de l’étude directe de
données.
 On peut utiliser des données non
standardisées déjà existantes et
appliquer une standardisation
par codage
 Les données dites primaires
peuvent être de plusieurs
natures : Mesures quantitatives,
texte, vidéos, images.
 Elles sont recodées selon une
règle de transformation des
données transparente et
repliable.
 Les données peuvent être
recodées de manière
algorithmique ce qui limite les
risques d’erreurs
 On parle d’observation directe
quand l’enquêteur est en prise
directe avec le phénomène étudié.
 Une observation directe exige lui
aussi un codage rigoureux d’où
souvent la nécessité d’une préétude
préalable pour maitriser la
variabilité du phénomène et le type
de traitement nécessaire.
 On dit que l’observation est
participante (située) ou non en
fonction de la relation entre
l’enquêteur et l’échantillon étudié.
 L’observation humaine, mais selon
des grilles de codage très claires. En
cas de pluralité des observateurs, il
faut pouvoir doubler les observations
et tester la variabilité de résultats.
+
Fabriquer une enquête faisable
Il existe un cout financier à l’unité d’enquête payée par le client et il faut pouvoir le quantifier. Mais il existe
aussi un coût cognitif pour l’enquêté qui est un être vivant et il faut pouvoir aussi l’évaluer. Les deux coûts
sont fondamentaux pour mesurer la faisabilité de l’étude. Il faut toujours être sûr que les coûts sont
supportés par le client et les interviewés.
 Le coût cognitif est une inéquation entre la
motivation moins le dérangement.
 Motivation : le coût cognitif disponible au
début de l’entretien dépend de la
motivation de l’enquête qui est variable
selon les objectifs de l’enquête, la légitimité
de l’enquêteur, les conditions
d’administration de l’enquête.
 Dérangement : chaque question mène à un
dérangement qui dépend :
 De la durée pour y répondre
 Ouverte ou fermée
 Difficile à se remémorer
 Gênante, intime, voire personnelle,
dans la prise de position
 Désirabilité : diminuer le risque que les
réponses soient biaisées par une norme
supposée attendue par l’enquêteur (par ex
à l’associer avec des opinions légitimes ou
illégitimes d’une personne connue ou
moralement connoté)
 On distingue les parties de l’enquête sur les
comportements, sur les représentations et
sur la description de l’individu.
 Astuce pour faire baisser le coût cognitif du
questionnaire
 Préférer les questions fermées aux questions
ouvertes
 Poser des questions ciblées et concrètes autour
d’éléments/indicateurs simples
 Ne pas utiliser un vocabulaire autre que courant
dans l’univers de vos interlocuteurs
 Faire des questions courtes avec peu d’items (5-
6 au plus)
 Toujours placer les échelles dans le même sens
et changer le moins possible d’échelles
 Les échelles doivent avoir un nombre suffisant de
nuances (en général 4 ou 5 items)
 Ne pas faire appel à des souvenirs de la
mémoire longue ou moyenne (sinon avec une
assistance mémorielle ou une
recontextualisation)
 Éviter les questions qui obligent à refuser, à
négativiser, à demander le changement
 Une question qui à une modalité qui dépasse 80%
est une question mal construite
+
La qualité de l‘extraction de
données : guide de l’enquêteur
 De nombreux biais peuvent se glisser dans
l’administration d’un questionnaire de
mauvaise qualité.
 Un questionnaire faisable : les
conditions d’administration déterminent la
charge cognitive demandée
 Le questionnaire à 1) une présentation
brise-glace qui campe un contrat de
communication rassurant et motivant,
l’accroche (2) des questions claires
avec des instructions pour les enquêteurs
ayant levé toutes les ambiguïtés (3) les
remerciements, formules de politesse et
suite…
 Le questionnaire sera toujours testé et
analysé sur un échantillon pilote de 20 ou
50 individus en condition réelle
d’extraction. Il s’agit d’évaluer les
représentations de l’enquêteur et de
l’enquêté Pd la passation (complexité,
gênes, ruptures, incohérence).
Le coût cognitif doit être compensé par
un contexte de mise en confiance
 Les Biais introduits par le [manque]
de sérieux des enquêteurs durant
l’enquête.
 Motivation et pugnacité gérées par
des réunions de motivation et
d’explication.
 Guide de l’enquêteur ou on
explique les enjeux du
questionnaire et le sens de chaque
question
 La méthode d’extraction à une
influence sur le coût cognitif
possible. Face à face, téléphone,
auto administrée, observation
directe ?
+
Fabriquer son échantillon
représentatif
 Un échantillon représentatif : étudier une
partie de la population en s’assurant
d’une homologie des deux.
 Population parente : somme totale
des individus (unité statistique) définis
par des caractéristiques structurales,
comportementales ou
représentationnelles
 La représentativité doit assurer des
réponses plus ou moins identiques
entre échantillons et population
parente
 Une enquête exhaustive est non
seulement souvent impossible, mais
sa réalisation serait très difficile et
donc emplie d’erreur.
Un échantillon doit être défini en taille (n
vers 1000 à 10000) et selon la méthode
d’échantillonnage.
 La meilleure méthode :"chaque individu a une
égale chance d’être présent dans l’échantillon"
 Techniques probabilistes ou aléatoires : Pour
supprimer tous les biais, le tirage systématique
et/ou aléatoire est le meilleur moyen. Cas de
population instituée (en entreprise par exemple).
La population peut être tirée au hasard en
strates (tirage au hasard à chaque niveau) ou
par grappe (tirage en strates avec exhaustivité
de la dernière strate dite grappe)
 http://www.statcan.gc.ca/edu/power-
pouvoir/ch13/prob/5214899-fra.htm.
 Méthode des quotas : Reconstituer une
population ayant des critères donnés (variables
contrôlées).Cet échantillon peut être redressé a
posteriori pour correspondre aux quotas.
 À l’inverse un échantillon peut être un
prisme dans le sens où il définit une population
selon ses critères ou ses techniques de
constitutions. Population qu’on découvrira à
postériorité (cas des populations définies par
leurs comportements ou leur représentation)
 Il reste l’échantillonnage par boule de neige
dans les réseaux d’individus connectés jusqu’à
épuisement du réseau.
Pour l’analyse, on doit connaître les caractéristiques
de l’échantillon, vérifier la représentativité, évaluer
les non-réponses aux questions.
+
Etape D – Nettoyer et recoder
ses données
Comparer des variables deux à deux.
+
TD – Installer son espace de travail
dans R.
 Installer R et R Studio
 Installer les packages
 instables.packages("plots", dep=TRUE)
 installe.packages("epitools")
 etc.
 Charger les packages avant utilisation
 library(epitools)
 library(prettyR)
 Etc.
 Sauvegarder le Travail
 Les Datas :
save(dataset,
file=”xxxx.Rdata”)/load("xxxx.Rdata")
 Les instructions :
savehistory(“myfile.R”)
 L’espace de travail complet :
sache.image(file ="myfile.Rdata")
 Écrire un fichier csv
write.table(MyData, file
="MyData.csv",row.names=FALSE,
na="",col.names=FALSE, sep=",")
ou write.csv(MyData, file
="MyData.csv",row.names=FALSE, na="")
 Importer des données d’un fichier
 Chemin de base :
setwd("D:/moque")
 readR ::smp <- read.csv("D:/moque/smp1.csv")
 haven :: pour SAS ou SPSS ou Stata
 foreign:: read.dbf("fichier.dbf") pour Dbase
 Importer ses données d’une BD
 library(DBI)
 library(RSQLite)
 con <- DBI::dbConnect(RSQLite::SQLite(), dbname =
"bdd.sqlite")
 dbListTables(con)
 dbListFields(con, "mtcars")
 cars <- dbReadTable(con, "mtcars")
 cars <- dbGetQuery(con, "SELECT * FROM mtcars WHERE cyl
= 4")
 dbDisconnect(con)
 Importer d'un Google SpreadSheet
 googlesheets4 :: test <-
read_sheet("1KJgGhd4mVuutfsudnj-
zd7wXskM2Djg104JK9hcTx44", sheet ="YOUTUBEChannel",
na="")
 Supprimer des objet
 Hells.search("fonction")
Pour aller plus loin https://cran.r-project.org/doc/manuals/r-release/R-
data.html#Image-files
+
L’intervalle de confiance des
résultats
Une règle veut que le taux de réponse d’un
échantillon représentatif soit d’au moins
80%. À partir de là on peut estimer les
chances d’avoir une réponse représentative
:
 le passage du particulier, l'échantillon,
vers le général, la population se fait par
inférence. Cette inférence était un
risque qu'il faut prendre à partir d'un
calcul rationnel l'échantillon reste une
estimation de la population.
 Les résultats obtenus dans l’échantillon
permettent de calculer la chance que
nous avons de connaître le véritable
résultat dans une fourchette probable
 On appelle cette fourchette l’intervalle
de confiance qui est restreint
proportionnellement à la taille de
l’échantillon
 On doit fixer son niveau de
confiance, et en tirer une
constante de confiance pour
avoir la marge +/- du résultat
(90%, 95%, 99%)
 P le pourcentage et ne la
taille de l’échantillon
ICx
c
= C
p*(1- p)
n
+
Préparation des données avec
Open Refine
 Encodage et agrégation : Il faut
nettoyer les données de toutes les
erreurs, les manquements et les
erreurs de remplissage.
 Décider d’une valeur aux non-
réponse
 Agréger les réponses en
modalités aux réponses
suffisantes
 Encoder les variables en
variables plus synthétiques ou
plus combinées (type indice)
 Changement de nature entre
variables qualitatives et
variables quantitatives
On distingue les variables primaires
présentent lors de l’observation, des
variables synthétiques issues
d’opération d’agrégation
 Il faut produire un dictionnaire
de codes qui résume la nature
des variables primaires et des
variables synthétiques
 Les sets de données
contenant toutes les réponses
s’appellent le tableau de
données
 Il faut penser à parcourir
entièrement le set de
données pour vérifier les
incohérences et les erreurs.
+
TD – Manipuler ses données dans
R  Variable 1 dim = vecteur
 taille <- c(1.88, 1.65, 1.92,
1.76)
 class (vec)
 length(vec)
 rep(c("a","b"), 3) (répète en
boucle)
 sec(from, to, by=n) (ou
raccourcis from:to)
 name(vec)|unname(vec) <-
c("toto", etc.) #pour vecteur
nommé
 vecteur[n] or [n:n] or [c(1, 3,
5)] ou [c(-3, -6)] ou !(13, 24)
 vecteur[c("Mary", "Michael",
"John")] #pour les nommés
 Vecteur[vecteur comme condition
== ou != etc.)] avec & ou |
(shift ale L)
 Le cas de !is.na(vecteur)
pour"qui ne sont pas NA"
 which (v == valeur)
 subset(dataset, condition & |
(shift+alt+l) condition 2)
 Les facteurs : un vecteur nommé
fermés
 levels(d$var)
 v <- factor(c("H", "H", "F",
"H"), levels = c("H", "F"))
 Questionr : iorder(d, "qualif")
 d$qualif.abr <- factor(d$qualif,
levels = c("Ouvrier specialise",
"Ouvrier qualifie", "Employe",
"Technicien", "Profession
intermediaire", "Cadre",
"Autre"), labels = c("OS", "OQ",
"Empl", "Tech", "Interm",
"Cadre", "Autre")) ||
table(d$qualif, d$qualif.abr) #
renmmoer les labels
 var_label(femmes$id_menage)<-
"blablabla blaa" #description de
la variable
+
TD – Manipuler ses données dans
R  Manipuler le tableau de donnée
 view(smp)
 dim(smp); nrow(smp), ncol(smp)
 names(smp)
 str(smp); summary(smp)
 smp$variable; head(smp$variable,
n); tail(smp$variable, n),
sort(smp$variable,
decreasing=TRUE)
 length(v)
 subset()
 newdata <- smp[order(var1, -
var2),]
 cbind (d1, d2) #pour coller
deux tableau ou rbind (d1, d2)
pour ajouter des lignes
 merge(d1, d2, by="id") (voir et
là)
 Y a-t-il des points manquants
dans nos données ?
// na_records = apply(data, 1,
function (x) any(is.na(x))) //
data[na_records,]
 Avec questionr
 library(questionr)
 lookfor(d, "trav")
 describe(d, c("age",
"trav.satisf"))
 Les listes (objet disparates)
 mylist <- list(1:5, c("bonjour",
"aurevoir"))
 length(lylist) #nombre d'elem
 Ces elem peuvent être nommé
 mylist <- list(deschifffres =
1:5, etdeslettres= c("bonjour",
"aurevoir"))
 largeliste <- append(l1, l2)
#une seuleliste et non pas une
liste avec deux liste de la
fonction list
 mylist[n] renvoie une liste avec
n l'élem
 mylist[[n]] renvoie UN element
(son contenu)
 mylist$elem
+
TD – Manipuler ses données dans
R : Dplyr et Tidyr
 Construire une variable calculée
 tbl_df(smp) #convertie en Tibble
 glimpse(smp) #résumé
 rename(tb, newcol=oldcol)
 separate(smp, col, sep="", remove=TRUE,
convert=TRUE) #separe une colonne
 unite(data, col, cols, sep ="_", remove = TRUE)
uni des colonnes en une seule
 mutate(smp, newcol = window_operation(cols)) OR
transmute(smp, newcol = window_operation(cols))
#fait disparaître les anciennes
 Fonction indviduelle
 row_number() #numéro de ligne
 min_rank()|dense_rank() # rang exact ou compacté
 percent_rank | cum_dist() % du rang sur 1
 ntile(x, n) # n tile
 lead()|lag() # celui de devant ou celui d'avant
 Sélection dans le Dplyr du tidyverse
 Sélectionner des lignes
 arrange(smp, col | desc(col), col2…) #tri
de données
 filter(smp, condition, condition2)
 distinct(smp) #dédoublonne ! mettre toute
les variable comme dans un subset
 slice(smp,n:n) / sample_frac(tbl, o.n,
replace = TRUE) / sample_n(tbl, n | -n,
replace = TRUE) / top_n
 Sélectionner des colonnes
 select(smp, everything() | nomcols |
col1:colN | -nomcols | contains("") |
start_with("") |end_with("") |
matches("xpreg") | one_of(c("1","2")))
+
TD – Regrouper les données avec
dplyr
 Grouper les données
 tbl_df(smp)
 databy <- group_by(tbl, cols) #nom de
la colonne sans guillemet ni adressage
juste le nom
 ungroup(tbl, cols)
 Fusionner les lignes
 summarize (tbl, newcol=fonction(col))
 summarize_each(tbl, funs(fonction))
 count(XXXXXX)
 Fonctions summarize
 first())|last()|nth() #enième
 n() #count | n_distinct()
 Sum() | min() | max() | mean() |
median() | var() | sd()
 IQR ()
 paste0(keywords, collapse = ", ") #
concatenation
 Joindre 2 tableaux
 left_join (tbl1, tbl2, by ="") Ajout
du tbl2 si clés communes
 right_join (…) Ajout de tbl1 si clés
commune
 inner_join (…) que les lignes
communes et supprime le reste
 full_join(…) garde les deux tableaux
en un seul même si pas de clés
commune
+
Recoder les variables dans R
 Renommer
 names(bd)[names(d)=="emitter_type"] <-"emit"
 Supprimer
 remove(D)
 basedonnees$variable <- NULL
 BD[-16, c(-12, -16)]
 Subset (BD, condition 1)
 Recoder
 To bin
 var <- ifelse(test, 1, 0)
 To character/numérique
 v.char <- as.charactere(v)
 V.nom <- as.numerique(v.char)
 ="seconds|minutes|etc")
 To Class
 range(d$âge) pour avoir les min
et max // d$age20 <- cut(d$âge,
c(min, 20, 40, 60, 80, max) ou un
Nb de classes, include.lowest =
TRUE et/ou right = FALSE, labels
= c("<20ans","21-40 ans","41-
60ans","61-80ans",">80ans")) //
table(d$age20)
 library(questionr) // icut(d,
var)
 d$age6cl <- quant.cut(d$age, 6)
pour des classes à eff égal
 quantile(var, prob=c(0.1,0.2))
 To factor
 v<- factor(v, levels =, labels =)
 levels(d$fs.fac)
 Compacter factor
 v.comp <- as.character(v) //
v.comp[v =="Ouvrier spécialise"|
v =="Ouvrier qualifie"] <-
"Ouvrier"// v com[v =="Profession
intermédiaire"| v =="Technicien"]
<-"Intermediaire"// v.comp <-
factor(v.comp)
 library(questionr) // irec(d,
qualif)
 V.distr <- interaction(v1, v2)
 Normaliser une variable
 scale(as.numeric(vr.quanti),
center = TRUE, scale = FALSE)
#scaler une variable centrée sur
la moyenne
 Pour qualifier les Na
 V.sansNA <- as.character(v) //
v.sansNA[is.na(v)] <-"Manquant"//
v.sansNA<- factor(v sansNA)
+
La gestion des dates
 To date
 library("lubridate")/library("magrittr")
 Lire txt to date : , ymd(), ydm(),
ymd_hms("2011-06-04 12:00:00", tz =
"Pacific/Auckland"), hms("03:22:14"),
today() ou now()
 Mettre à jour la date :
update(this_moment, hours = 8, minutes =
34, seconds = 55)
 Extraire une partie de date :
year(date)/month(date,
label=TRUE)/mday(date)/wday(date,
label=TRUE)/yday(date)
 Calculs des intervalles
 Calculer un intervalle :
time_length(interval(start = ymd(date),
end = today()), unit
="seconds|minutes|etc")
Ou
time_length(arrive %--% leave, unit
="seconds|minutes|etc") OR as.period()
 Chevachement ? int_overlaps(inter1,
inter2)
 Calculs sur date: une date +/- years(n),
months(n), days(n). Ex : meetings <-
meeting + weeks(0:5)
 with_tz(date, "Asia/Hong_Kong")
Liste des tz :
https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
 Rank
 rank(var,
na.last = TRUE|FALSE|NA| "keep",
#la gestion des NA en dernier, en
premier ou faire disparaitre ou
garder en NA
ties.method =
"average"|"first"|"random"|"max"|
"min")
 Rang décroissant : max(rank(var,
ties.method="max"))+1-rank(var,
ties.method="max")
 Les 25 premiers :
domaines$url[max(rank(domaines$Hu
b, ties.method="max"))+1-
rank(domaines$Hub,
ties.method="max") < 25]
 Valeurs aberrante
 boxplot(var)$out #les valeurs
 which(var %in% boxplot(var)$out)
#les indices
 domaines[domaines$sumfbshare %in%
boxplot(domaines$sumfbshare[domai
nes$sumfbshare >1])$out,]
 domaines[!(domaines$sumfbshare
%in%
boxplot(domaines$sumfbshare[domai
nes$sumfbshare >1])$out),]
+
Analyse des réseaux sociaux
+
La relation au cœur des facteurs
comportementaux
 Deux tables : Des nœuds et
des relations
 Des qualifications du réseau
et de ses sous réseau
 Des qualifications structurales
des nœuds
 Analyse du comportement
relationnel comme facteurs
expliquant ou expliquer
 Des visualisations de réseaux
heuristiques
 Analyser les réseaux
(comparaison ou longitudinal)
 Sum Nœud, Sum Degré,
Statistiques des degrés
(Moyenne, Quartiles, Déciles,
etc.), Statistiques des
propriétés qualité et qu’anti
 Plus court Chemin, Diamètre,
Chemin Moyen, Coefficient
de clustering, Densité
 Composante connexe;
Modularity (w Resolution),
NB Communautés
+
Analyse de la situation du nœud
 [degree] Eccentricity ou HarmonicCloseness : l’isolement ou la
centralité d’un noeud dans le réseau (basé sur la somme des
distance à tous les nœuds)
 [clustering] : degré d’intégration dans une communauté dense du
style « small world ». Effet membre d’une secte.
 [indegree] Eigencentrality or Page Rank Or Authority : l‘autorité
base sur le calcul des liens entrants
 [outdegree] Hub = La qualité de vigie d’un noeud
 (Strong)Component Number OR Modularity Class : groupe de
nœud autonome et Groupe de nœud par clustérisation de
proximité
 Composante connexe/Coefficient de clustering
+
Analyse du comportement de lien
 Type de lien (directed – undirected )
 Source – destinataire et leurs attributs respectifs
 Poids des liens
 Propriétés des liens et multiplexité
 Durée de vie du lien (Intervalle de dates)
+
Les grandes lois des réseaux
 Rôles : Similarités des comportements envers les autres
[équivalence structurale]
 Effet Saint Mathieu: ce qui attirent beaucoup attirent encore
plus
 6 degrés de connexions
 La limite des 148 contacts actifs (690 max)
 La taille compte (pour l’accès aux ressources)
 Relation influence / sélection dans la Network théorie
+
À voir
 Intervalle de confiance
 Moyenne :
t test(d$heures.tv, conf.lever = 0.9)
 D’une pro pour variablebinaire:
prop.test(table(relevel(d$sport,"Oui")), conf.lever = 0.9)
 Ou encore :
library(binom) / binom.confine(x,ne méthode=”all”)
+
Text Mining et Text analysis
R et Iramutec
+
Manipulation de charactères
 String et library(stringer)
 str_length()#nb caractères
 tolower(), toupper()
OU
stringr:: str_to_lower(), str_to_upper() et str_to_title()
 str_count(numberstring, "3") #compte le mot ET
str_detect(d$adresse, "Libération")
 str_locate_all(numberstring, "3")
 str_subset(d$adresse, "Libération") #ne garde que ceux
qui ont le mot recherche
 str_sub(d$ville, 1, 3) #découpe ou -3,-1 pour arrière
 str_extract(d$adresse, "^d+") #extraire
OU
str_extract_all(d$adresse, "d+")
OU
library(tidyr)
OU
extract(adresse, "type_rue", "^d+ (.*?) ", remove =
FALSE)
 strs_plit("Graphs and Histograms", " -", simplify = TRUE)
#couper une chaine de caractère
OU
tidyr::separate(chaine, c("genre", "prenom", "nom")) en n
variables
 sub() et gsub() #remplace 1fois ou tous
OU
str_replace(numberstring, "d", "") et
str_replace_all(numberstring, "d", "")
str_replace_na(x)
 paste() #concatene avec "sep=" pour deux variable ou
"collapse=" pour la même variable en 1 seul champs
OU
str_c(c(numberstring, teststring), sep=" ") #concatene
 whitespace :: str_trim(string, side = c("both", "left", "right"))
OR str_squish(string)
les option fixed("h") annule les regex pour prendre la lettre
littéralement
le caractère "" bloque l'interpretation du code comme """ pour 1
guullemet ou encore "" pour un backslash ou "u00b5" pour un
caractère spécial
 Regex
 "." un caractère MAIS ALORS
"." pour un point et "" pour
un .
 d un chiffre ou s un espace
 "^" ou "$" expression est au
début ou à la fin du mot DONC
"^un mot$" donne le mot
seulement
 [] ou et [^] ni, comme [abc] ou
[^abc]. On peut utiliser aussi |
 répétition de la lettre : ?(0;1) / +(1
et plus) / * (0 et plus) /{n}: exactly
n /{n,}: n or more/ {,m}: at most m
/ {n,m}: between n and m
Simulateur : https://regex101.com/
+
+
Etape 1 - Obtenir un corpus
 #Corpus à partir d'un vecteur
 library(tm)
 CorpusVect <- VCorpus (VectorSource(txt$excerpt))
 #corpus à partir d'un repertoire de PDF
 listdoc <-dir(file.path (".", "Histoire"))
 listdoc
 corpus.source <- Corpus(DirSource(file.path (".", "Histoire")), readerControl = list(reader=readPDF)) # readDOC pour du
word | readPlain pour du txt | readXML pour de l'XML
 #corpus à partir d'une list d'url
 corpus.source <- Corpus(URISource("http://edutechwiki.unige.ch/fr/Tutoriel_tm_text_mining_package"))
+
Etape 2 - Lire un corpus
 # Lire un document
 inspect(CorpusVect[[4]])
 CorpusVect[[4]]$content
 CorpusVect[[4]]$meta
 CorpusVect[[4]]$meta$author
 meta(CorpusVect[[4]], "author")
 # Une liste de documents
 inspect(CorpusVect[1:6])
 CorpusVect[meta(reuters,"id") == "n" & meta(reuters,"heading") == "letitre"]
 #appliquer une fonction sur tous les docs
 lapply(CorpusVect[1:2], as.character)
 #occurence d'un mot ou d'une liste de mot
 tm_term_score(CorpusVect[[1]], c("la"))
 inspect(DomCorpus[tm_term_score(CorpusVect[[1]], c("Twitter")) >0])
+
Etape 3 – Transformer le corpus
 CorpusVect <- tm_map(CorpusVect, content_transformer(tolower)) # et toutes les fonction text usuelle de
R
 CorpusVect <- tm_map(CorpusVect, removeWords, stopwords("french"))
 CorpusVect <- tm_map(CorpusVect, removePunctuation)
 CorpusVect <- tm_map(CorpusVect, stripWhitespace)
 CorpusVect <- tm_map(CorpusVect, removeNumbers)
 CorpusVect <- tm_map(CorpusVect, stemDocument, language="french")
 CorpusVext <- tm_map(CorpusVect, PlainTextDocument)
 dfOriginal$texttransform <- lapply(CorpusVect, as.character)
 Wordcloud:: wordcloud(CorpusVect,…)
+
Etape 4 – Générer la matrice de
Mots # Create a document term matrix.
 tdm <- DocumentTermMatrix(CorpusVect, list(dictionary=leDictionnaire))
 library(RWeka ) Library(textmineR) AND TrigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 1, max = 3)) AND tdm <-
DocumentTermMatrix(CorpusVect, control = list(tokenize = TrigramTokenizer))
 inspect(tdm)
 tdm$dimnames$Docs
 tdm$dimnames$Terms
 # Chercher les termes du corpus
 findFreqTerms(tdm, 15, 100) #min et max
 findAssocs(tdm, "thermal", 0.5)
 tdm2 <- removeSparseTerms(tdm, 0.9) #garde les mots qui ont moins de N vide ces à dire les plus fréquents
 # Chercher les termes les plus frequent par document
 Termes <- findMostFreqTerms(tdm, n=10) AND names(termes[[1]]) OR lapply(termes, names)
 sort(colSums(as.matrix(tdm)), decreasing = TRUE)[1:20]
 plot(sort(colSums(as.matrix(tdm)), decreasing = TRUE)[1:20])
 names(sort(colSums(as.matrix(tdm)), decreasing = TRUE)[1:20])
 # clusterisation rapide
 tdm2 <- scale(tdm2)
 tdmdist <- dist(tdm2, method="euclidean")
 tdmfit <- hclust(tdmdist, k=6, border ="red")
 plot(tdmfit)
 #transforme la matrice de mots en df
 dftdm <- as.data.frame(as.matrix(tdm))
+
Analyser un corpus avec Iramuteq
 Le format texte
 **** (index à 4 chiffres-
 *nomvarX_modaliteX
 Corpus
 Convertir un dataframe en texte iramuteq
 iram_text<- subset(bhnum, select=c(itemtype,
contenus))
 iram_text$var1 <- paste("**** *var1_",
iram_text$var1, sep ="") #la première variable
 iram_text$varN <- paste("*varN_",
iram_text$varN, sep ="") #les autres variables
 iram_text$contenus <- gsub("[^[:alnum:],]","",
iram_text$contenus) #enlève ponctuation
 iram_text$contenus <-
tolower(iram_text$contenus)
 iram_text$contenus <-
paste("n",iram_text$contenus,"n", sep="")
#retour à la ligne
write.table(iram_text, file="tutoramuteq.txt", sep="",
quote=FALSE, row.names=FALSE, col.names=FALSE)
+
Etape D – Analyse Mono
Varié des données
Comparer des variables deux à deux.
+
Analyser une variable qualitative
 Il s’agit ici d’étudier des variables
selon leurs modalités soit
quantitatives soit qualitatives.
 Quand la modalité est qualitative,
l’échelle des modalités est soit
nominale ou soit ordinale
 Une variable qualitative a pour
fonction de discriminer une
population, ses comportements et
ses représentations selon ses
qualités.
 L’observation peut amener à une
recodification de la variable voire à
la fabrication d’indice.
 On repère le mode et sa part dans la
population (la modalité la plus présente)
 Dans les variables qualitatives
nominales, on tris les modalités par
ordre ASC ou desc pour regrouper les
modalités par taille et observer si ces
regroupements cachent d’autres
variables
 Dans les variables qualitatives
ordinales, l’ordre ne peut être changé,
car c’est la répartition qui est
signifiante. On peut y repérer la
médiane.
 Une variable qualitative prend tout son
sens dans un ensemble de variables
autour d’un thème donné ou en
comparaison d’autres études de
référence.
+
Analyser une Quantitative
quantitative
 Il s’agit ici d’étudier des variables
selon leurs modalités soit
quantitatives soit qualitatives.
 Quand la modalité est quantitative,
l’échelle des modalités est soit
discrète (séparation stricte) soit
continue (infinie décimale)
 Une variable quantitative vise à
mesurer l’intensité d’un
phénomène selon une variable
mesurable
 On repère le mode, la médiane et la
moyenne. C’est l’étude entre ces trois
chiffres qui peut être très instructive sur
la variable.
 On calcule aussi l’écart type de la
moyenne, l’étendue, les quartiles et
les déciles pour mieux comprendre la
répartition
 On peut encoder une variable
quantitative en classes qualitatives
(ex. âge)
 La notion de test paramétrique ou non
paramétrique est essentielle
+
Analyse Monovariée dans R
 Variable Quali
 table(v,
useNA=”always/ifany/no”) ou
summary(v); sort(table(v),
decreasing = TRUE);
freq(d$qualif, cum = TRUE,
total = TRUE, sort ="inc",
digits = 2, exclude = NA)
 which (v == valeur)
 pro.table(tab, margin=1 OR
2)*100 pour proportion des
effectifs en % ou sur la la
ligne ou la colonne
 Variable Quanti ,
 summary(v)
 mean(v, na.rm=true)
 median(v)
 min(v)
 max(v)
 sd(v)
 range(v)
 quantile(v,prob=c(0.1,0.2))
 La plage interquartile est souvent
utilisée pour rechercher des valeurs
aberrantes (outlier) dans les données
: <Q1 - 1.5 IQR ou > Q3 + 1.5 IQR.
 IQR <- (quantile(var, prob=0.75,
na.rm = TRUE)-quantile(var,
prob=0.25, na.rm = TRUE))
 absup <- quantile(var, prob=0.75,
na.rm = TRUE)+IQR*1.5
 abmin <- quantile(var, prob=0.25,
na.rm = TRUE)-IQR*1.5
 Variables à réponses multiples
library("questionr")
 multirep <- multi.split(var,
split.char ="")
 multitable <-
multi.table(multirep, freq =
TRUE)
+
Graphique de base
 plot(fonction(var.quanti ou
var.quali) | var1, var2 |var1 ~var2
|table(var1, var2)
, main ="titre"
, sub = "sous titre"
, xlab = "titre des x"
, ylab = "titre des y"
, las= 0|1|2|3 #le style
, asp = 0.02
, type =
"p"|"l"|"b"|"c"|"o"|"h"|
"s"|"S"
, pch = n #typedepoint
, cex = n|varquanti
#tailledupoint
, col =
unepalette(indices|varqu
ali))
 text(var2, var1,
var_text, pos=1|2|3 )
 boxplot(var.quanti, main
="Nombre d'heures passées
devant la télé parnjour",
xlab="test", ylab
="Heures")
 hist(d$heures.tv, main
="Nombre d'heures passées
devant la télé par jour",
xlab ="Heures", ylab
="Effectif",
probability=TRUE, class=n,
col="blue")
+
Ggplot2 dans R
 library("ggplot2")
 ggplot(data = labd, aes(x = var.x, y = var.y, col =
var.multiple))+ geom_point(colour = var.coul, alpha = .n, size=n,
shape = var.shpe , fill = ) # si variables enfermer param dans aes(
colour = var, etc)
 ggplot(data = labd, aes(x = var.quanti, y = var.quanti)) +
geom_point() + geom_smooth(method ="lm", level = 0.9))
 ggplot(data = labd, aes(x = var.x, y = var.y, group|col =
var.multiple)) + geom_lines()
 ggplot(data = labd, aes(x = var.quali|factor(1), y = var.quanti,
fill = var.couleur)) + geom_boxplot()
 ggplot(data = labd, aes(x = var.quali, y = var.quanti, col =
var.quali)) + geom_jitter()
 ggplot(data = labd, aes(x = var, fill = country))+
geom_histogram(binwidth = 0.1, colour ="dark grey")
+ Etape E - Corrélation et
prédiction d'une variables
QUANTIATIVE
Kh2 et Regressions
+
Corréler deux variables qualitatives
: Tris croisés et Khi2
 On peut rechercher les corrélations
entre deux variables qualitatives en
faisant un tri croisé en tableau
 La variable en colonne est la
variable à expliquer, la variable en
ligne est la variable explicative
 On considère que les variables sont
indépendantes si le tableau
observé est proche du tableau
théorique de répartition.
 S’il est différent, alors le test du Khi2
permet de montrer si cette différence
est suffisamment significative pour
deviner une corrélation
 On calcule donc un écart absolu quand on
fait la différence entre l'effectif observé et
l'effectif théorique. Ces écarts absolus
montrent quand ils sont positifs qu'il y a x
individus en trop par rapport à la
situation d'indépendance (phénomène
d'attraction) et quand les valeurs sont
négatives (phénomène de répulsion) qu'il
manque des individus par rapport à la
situation d’indépendance.
 On calculera l'écart relatif en rapportant
l'écart absolu sur l'effectif théorique afin de
pouvoir exprimer l'intensité de la
répulsion ou de l'attraction entre
modalités de deux variables.
 La distance Khi2 est la somme des Khi2
de chaque case calculée comme l’écart
relatif multiplié par l’écart absolu
+
Analyse quali dans R
 Table (v1, v2) ou xtabs(~v1+v2,
dataset)
 prop.table(tab, margin=1 OR 2)*100
 Graphique
 barplot(prop.table(table(dab$med
ia_type, dab$emitter_type)),
legend.text = TRUE, col =
rainbow(9))
 library(vcd)/ mosaic(~ sport +
cuisine + sexe, data = Bd,
highlighting ="sexe", main
="Exemple de graphique en
mosaïque à 3 dimensions")
 Test de Chi2
 Tab <- table(v1, v2)
khi <- chisq.test (tab)
khi$residuals (résidus de pearsons)
khi$stdres (résidus de Haberman ou
Peason ajusté)
 mosaicplot(v1~ v2, data = d, shade =
TRUE, main ="Graphe en mosaïque")
+
Corréler deux variables quantitatives :
corrélation et régressions
 On peut comparer la variance de deux
variables d’un même échantillon si elles
sont de même nature. On dit alors que les
échantillons sont appariées. On utilise le
Test de Student pour les P (même
variance ?) ou de Wilcoxon/Mann-
Whitney pour les non-P.
 Deux variables quantitatives forment un
nuage de points qui peuvent entretenir
une relation qui signifierait une
corrélation entre les phénomènes
 On peut aussi utilisé la comparaison linéaire
de deux variables même si elles sont
différentes. On utilise alors les coefficients
de Corrélation de Pearson (Pour les
NON-P. la Corrélation de Spearman).
 Cette corrélation peut être approchée par
une régression dites linéaire (qd la fonction
est une droite) ou muliple ou polynomiale
(asymptotique, exponentielle, etc).
 Le coef. de corrélation r compris
entre -1 et +1 montre le sens d’un
corrélation
 Test T (p) donne la validité d’une
corrélation significative
 r2 (coefficient de détermination)
donne l’intensité de la corrélation soit
la part de Y expliqué par X
rXY =
(Xi - X)´(Yi -Y)
i=1
n
å
(Xi - X)2
i=1
n
å ´ (Yi -Y)2
i=1
n
å
+
Analyse quanti dans R
 Tests de deux var appariées
 t.test(v1, v2) (si normal
shapiro.test(v) et même variance
var.test(v1~v2))
 wilcox.test(V1, V2, paired = TRUE) pour
les non-p
 t.test(v, mu=valeur de référence)
 Graphique
 plot(rp99$dipl.sup, rp99$cadres, ylab
="Part des cadres", xlab ="Part des
diplômés du supérieur", pch = 19, col =
rgb(1, 0, 0, 0.1))
 plot(jitter(smp$age, factor=n),
jitter(smp$n enfant, factor=n)) jitter
pour décaler les points et tous les
noirs
 plots(rp99$diple.aucun, rp99$tx.chom,
cex = rp99$pop.tot/10^4) (pour 3e
variable)
 plotmeans(variable~temps)/interaction.p
lot(temps, individus, variables)
 Corrélation et Regression
 cor(v.quanti1, v.quanti2, method =
c("pearson","kendall","spearman"), use
="complete.obs")
 Sinon cor.test(x,y, method=”spearman”) pour
les non-p
 Matrice de correlation
 library(corrplot) // mcor <- cor(mtcars)//
 corrplot(mcor, type="upper", order="hclust",
tl.col="black", tl.srt=45)
 col<- colorRampPalette(c("blue", "white",
"red"))(20) || heatmap(x = mcor, col = col,
symm = TRUE)
https://www.youtube.com/watch?v=ys4Q8R9yRxk
https://www.youtube.com/watch?v=nzIL8sQ3auI
+
Regression linéaire simple et
multiple
 Régression linéaire multiple
 reg <- lm(v.quanti1~ v.quanti2 + vQuanti3 + v.quanti…, data = dataset) // summary(reg)
 On peut aussi tester la synergie (avec *) entre deux variables pour voir si le modèle
additif est simple
reg <- lm(v1~v2+V3*V4..., data=dataset)
 https://odr.inra.fr/intranet/carto/cartowiki/index.php/Regression_lin%C3%A9aire_avec_R#Re
gression_lin.C3.A9aire_simple
 Evaluation du modèle : normalité des résidus, homoscédasticité de l’erreur ET valeurs aberrantes.
 summary(reg) // coef(reg) //
 confint(reg) # intervalle de confiance du modèle // fitted(reg) # les valeurs prédites
//resid(reg) #les différences de prédiction.
 plot(residuals(reg) ~ fitted(reg), xlab="Valeurs ajustées", ylab="Résidus") //abline(h=0)
 Condition d’utilisation et de validité
 Normalité du bruit et pas d’autocorrélation des erreur qui prennent une forme hasardeuse.
(le bruit est indépendant et sans corrélation) : res<-resid(reg) // plot(res,main="Résidus")//
abline(h=0,col="red") // hist(resid(reg), col=« grey »)
 Homogénéité des variances.
 Chasser les points aberrant qui font levier. Distance de Cook = les coef changent-il
beaucoup si on retire certains individus
 hist(resid(reg), col=”grey”, main) et plot(reg) et shapiro.test(resid(reg)) et
plot(cooks.distance(reg)) ET which.max(cooks.distance(reg))
 Interprétation
 Interpréter le p pour connaître la significativité de la variable explicative et le p
globale du modèle
 Le R2 et le R2 adjusté dans les modèles multivariés(et pour comparé les modèle avec R2a)
+
Regression et predictibilité
 Préparer un subset d’apprentissage et un subset de
validation
 # Splitting the dataset into the Training
set and Test set - #
install.packages('caTools')
 library(caTools)
 set.seed(123) #fixer le moteur aléatoire
pour reproductibilité
 split = sample.split(dataset$Profit,
SplitRatio = 0.8) #créer un facteur de
split sur la variable dépendante
 training_set = subset(dataset, split ==
TRUE)
 test_set = subset(dataset, split == FALSE)
 Faire le modèle
 Modl = lm(formula = Profit ~ .,data =
training_set)
 Interpréter
 summary(modl)
 Prédire
 y_pred = predict(regressor, newdata =
test_set)
 OU y_pred <- predict(regressor, newdata =
test_set, interval="pred", level=0.95)
 Optimisation des choix de variables
 Step(modl, direction
="backward")
 Ou library(leaps)//choixOptim
<- regsubset(var ~., data=d)/
plot(choixOptm, scale="bic")
#"bic"ou"Cp"[C de mallow],
ou"adjR2"
 Pour réussir une prédiction,
les variables explicatives ne
doivent pas être
intercorrélées tout en étant
fortement corrélées à la
variable expliquée.
 On peut avoir recours à des
ACP voir des PLS (Partial
Least Squares Regression)
pour faire des corrélation
sur des facteurs qui par
nature ne devraient pas être
corrélés
+
ANOVA - Corrélation entre une variable
quali et une variable quanti
 Une variable quantitative peut être
comparée en classes ou sous-
groupes selon les modalités d’une
variable qualitative. On utilise pour
cela des tests d’échantillons
indépendant.
 Quand la variable qualitative est
binaire, on utilise le Test T de
Student non appariée (Pour P
Normale et Variance)ou les tests de
Kolmogorov-Smirnov ou Mann-
Whitney (pour Non-P).
 Quand la variable qualitative a plus de
deux modalités on utilise le test de
l’ANOVA (ou analyse de la variance)
pour P et test de KrustalWallis pour
Non-P
 La variable p permet de
connaître les risques d’erreurs
à rejeter H0 : Les deux
échantillons ont le même
comportement.
 Chaque test a ses propres
paramètres qui permettent de
compléter les informations pour
analyser les différences.
 Chaque groupe est défini selon
l’effet différentiel sur la
moyenne"a"propre à chaque
groupe
+ ANOVA - Analyse Quanti/Quali dans R
 Test
 Test T de student en loi normale
 qqnorm(var.quanti) ou
shapiro.test(v) #normalité
 By(var.quanti, var.binaire, sd,
na.rm=TRUE) # égalité de variance
(+-50%)
 t.test(var.quanti~var.binaire,
var.equal =TRUE) si variance égal
sinon rien
 var.test(Vdegroupe1~ Vdegroupe2)
#même variance
 wilcox.test(Vdegroupe1, Vdegroupe2)
pour les non-p
 Test de Mann Whitney/Wicoxon pour les
non P
 wilcox.test(Var.quanti ~Var.binaire)
 Kolmogorov-Smirnov
 Ks.test (var.quanti[var.quali=1],
var.quanti[var.quali=2]
 Graphique
 boxplot(var.quanti ~ var.quali, data =
d)
 Tapply(var.quanti, INDEX = var.quali,
FUN = mean)
 ATTENTION avec des V.QUALi, R recode toutes les
variables.quali en variables.bin et fait une régression
multiple quanti.
 Anova dans R :
 aovmodl <- aov(var.quanti ~ var.quali + var.quali
+var.quali:var.quali, data=dataset)
 modl <- lm(v.quanti1~ v.quali, data = dataset)
 summary(modl)
 drop1(modl, .~., test=”F”) #pour regrouper les var.quali
 library(car) // Anova(modl, type = 2 | 3)
 TukeyHSD(aov_modl) et plot(TukeyHSD(aov_modl))
 Les contraintes des modèles
 [Par défaut] la modalité de référence est la base (intercept):
 vQuali <- relevel(vQuali, ref=”modalitechoisie”) ##changer
la modalité de référence
 contrast(var.quali) = "contr.sum » (différence à la moyenne)
|| "cont.treatement"
 La contrainte à somme nulle s’arrange pour que tous les alpha =
à 0 sur la base de la moyenne en général
 contrast(var.quali) ="cont.sum"
 Condition d’utilisation et de validité
 Normalité du bruit et pas d’autocorrélation des erreur qui
prennent une forme hasardeuse. (le bruit est indépendant et sans
corrélation) shapiro.test(resid(reg)) ou tapply(resid, INDEX =
var.quanti, FUN=shapiro.test)
 Homogénéité des variances. Boxplot(var.quanti ~ var.quali, data
= d) // tapply(var.quanti, INDEX = var.quali, FUN=var)//
bartlett.test(var.quanti ~ var.quali, data=d)
 Chasser les points aberrant qui font levier. Distance de Cook =
les coef changent-il beaucoup si on retire certains individus
 hist(resid(modl), col=”grey”, main="") et plot(reg) et et
which.max(cook.distance(reg))
+
Le test de Kruskal Wallis
pour les variables non-P
 kruskal.test( var.quanti ~ var.quali)
 OU library ("agricolae") // kruskal(y=var.quanti, trt = var.quali,
p.adj="holm", console = TRUE)
 Test de Validité
 library(coin) // pairwise.wilcox.test(var.qnati, var.quali, paired=FALSE,
p.adj="holm")
 library(FSA) //dunnTest(quanti ~ quali, paired = FALSE, p.adj ="holm")
 (voir les test avec"bonferroni")
 bartlett.test(var.quanti ~ var.quali, data = d) Homogeneité de la variance
+
ANOVA à deux facteurs
 Test
 interaction(Fact1,Fact2) || interaction.plot(exp$Auth,
exp$partnerStatus,response=exp$Conformity)
 Normalité
 tapply(X,interaction(Fact1,Fact2), mean) OU tapply(X,Fact1:Fact2,mean)
 tapply(X,interaction(Fact1,Fact2),shapiro.test) OU tapply(X,Fact1:Fact2,shapiro.test)
 Homogénéité de variance
 tapply(X,interaction(Fact1,Fact2),var) OU …
 bartlett.test(split(X,list(Fact1,Fact2))) OU …
 # Validation synthétique du modèle :
 par(mfrow=c(2,2))
 plot(modMK)
 Anova à 2 facteur (il ne faut lire que le p de L’INTERACTION)
 summary(aov(X~Fact1*Fact2)) Ou summary(aov(X~Fact1+Fact2+Fact1:Fact2))
 modMK <- lm(Conformity ~ Auth*partnerStatus, data=exp) ou [X~Fact1+Fact2+Fact1:Fact2)}
 # Table d'ANOVA de type II (l’effet de A après avoir retirer effet de B):
 library(car) // Anova(modMK, type = II) //summary(modMK)
 # Table d'ANOVA de type III (effet de A après avoir retirer effet de B et
Interaction):
 contrasts(exp$partnerStatus) ="contr.sum » et contrasts(exp$Auth) ="contr.sum » # on
redéfinit les contrastes (nécessaire pour le type III !)
 contrasts(exp$Auth) ="contr.sum"
 modMK3 <- lm(Conformity ~ Auth*partnerStatus, data=exp)
 summary(modMK3)
 Anova(modMK3, type="III")
+
Analyse multidimensionnelle
Réduction dimensionnelle
+
Principes généraux de clusterisation
 Trouver des similarités structurales entre les individus
regroupés selon leur proximité : clusters.
 La clusterisation passe bien souvent par des méthodes de
redimensionement du set de données selons les structures de
relations entres variables.
 Les algorithmes non supérvisés servent de compréhension de
la structure des données et à ce titre, ils sont très utiles AVANT
l'usage des algorithmes supervisés.
+
Analyse des Composantes
principales : Variables Quanti
 Partition de groupes d’individus homogènes selon les valeurs
des Variables centrées réduites (fonction scale dans R) :
Valeur - moyenne/écart-type (% de l’écart-type, 1,96 est 95% de la
normale)
 On fait un nuage de point d’individus à K variables dimensions. La
Ressemblance égale faible distance entre individus
 On réduit cet espace complexe en 2 facteurs qui sont les
coordonnées des individus sur ces 2 dimensions (F1 et F2)
 Liaisons linéaires entre variables (matrice de corrélation). On fait un
Cercle des corrélations : On lit le coef des variables à l’axe(1) puis le
cos entre variables (attention proche du cercle avec d=Racine[2(1-r)])
 Variables et individus sont liés et s’explicite l’un l’autre
 https://www.youtube.com/watch?v=KrNbyM925wI&list=PLnZgp6e
pRBbRn3FeMdaQgVsFh9Kl0fjqX
+
ACP In R
 Matrice de corrélation de v
quanti
 Éliminer les données manquantes.
use="complete.obs"
use="pairwise.complete.obs"
 modl <- c("name.v1","name.v2", etc.) ou names (d[,
n:n])
 Tableau de cor : round(cor(Ast[,
modl],use="complete.obs") , digits=2) #digits pour les
virgule
 library(corrplot)//corrplot(cor(d[,modl],use="complete.
obs"), method="circle")
 heatmap(cor(d[,modl],use="pairwise.complete.obs"),
col=gray(seq(1,0, length=16)))
 ACP
 modl <- c("name.v1","name.v2", etc.)
 library(psy)
 mdspca(d[,modl])
 sphpca(d[,modl]) #pour la 3D
 ACP avec factominer
 library(FactoMineR)
 ACPModel <- PCA (d, quanti.sup=n:n, quali.sup=n, ncp=inf
ou 5 par défaut)
 Summary (ACPModel, nbelements=Inf, file="essais.txt")
 Plot(ACPModel, cex=0.8, habillage:v, select="cos2 0.7"))
 dimdesc(ACPModel)
 ACP dans Factoshiny
 Library(Factoshiny)
 ACPModel =PCAshiny(d)
 PCAshiny(ACPModel)
 ACPModel
 ACP Focalisée : Cas d’une
variable à expliquer par
d’autres variables
 modl.plique <-"name.vplique"
 modl.catif <- c("name.v1","name.v2", etc.)
 library(psy)
 fpca(data=d, y=modl.que, x=modl.catif, partial="No")
 Très utiles pour la régression multiple
https://www.youtube.com/watch?v=-
9NUzhdMbEo&list=PLnZgp6epRBbRn3FeMdaQgVsFh9Kl0fjqX&index=5
+
ACP : Interprétations
 Intérpreter le graph des variables pour comprendre les axes
 Intérpreter le graph des individus
 Lire somme des % d’inertie de chaque axe pour voir (au regard d’un
tableau d’inertie) si la représentation est de qualité suffisante.
 Lire la somme des contributions des variables sur axes pour
comprendre comment chaque axe est construit (il représente quelles
variables)
 Lire la somme des contributions des individus pour voir si des
individus ne pesent pas trop sur l’axe (a exclure ?)
 Lire la qualité de représentation des individus et/ou variables par somme
des Cos2 sur deux axes montre si on peut interpréter la variable ou s’il
elle est mal projeter et donc être prudent.
 Au final toujours revenir aux données brutes pour interpréter
+
Analyse des correspondances
multiples : Variables Quali
 Tableau disjonctif complet : Ligne X modalités (0,1)
 Chaque modalité est une variable qu’anti 1/0 que l’on pondère
par la rareté : 1/p
 Cette pondération forme une coordonnée dans un espace à
K dimension pour le tableau d’individus
 Tout le reste proche de ACP
 Nuages des modalités : constituée au barycentre des
individus qui la possède
 https://www.youtube.com/watch?v=bihScz3OXbw&list=PLnZgp
6epRBbTvk5fznOuiZSz8ZC6aS5sz
+
ACM dans R
 ACM avec FactomineR
 library (FactoMineR)
 res <- MCA (d, quanti.sup=v, quali.sup=v, ncp=inf ou 5)
 summary(res, nbelements=Inf)
 plot(res, invisible= c("ind","quali","quanti","quali.sup","quanti.sup","var"),
label=c("ind","quali","quanti","quali.sup","quanti.sup","var"), autolab="y", cex=0.7, selectMod=critère )
 dimdesc(res)
 Factoshiny
 library(Factoshiny)
 MCAshiny(Mydata)
+
ACM : Interprétations
 Intérpreter le graph des variables pour comprendre les axes
 Intérpreter le graph des individus
 Lire somme des % d’inertie de chaque axe pour voir (au regard
d’un tableau d’inertie) si la représentation est de qualité suffisante.
 Lire la somme des contributions des variables sur axes pour
comprendre la nature de chaque axe
 Lire la somme des contributions des individus pour vori si des
individus ne pesent pas trop sur l’axe (a exclure ?)
 Lire la qualité de représentation des individus et/ou variables par
somme des Cos2 sur deux axes
 Au final toujours revenir aux données brutes pour interpréter
+
Analyse des Facteurs des Données
Mixte (FAMD).
 Library(FactoMineR)
 res <- FAMD (myData, sup.var=c(""))
 Le reste pareil à ACP et ACM
+
Analyse des Facteurs Multiples
(FAM).
 Cas très particulier d'une études sur un même individu de K
études/K thèmes de questionnaires/ K années d'études ou K
enquêteurs répétées avec leurs propres variables.
 Pour réaliser l'AFM, il faut voir comment chaque groupe de
variables pèse sur l'étude et pouvoir rééquilibrer ce poids.
Pour équilibrer le poids de chaque groupe on divise ses
valeurs de variables par la valeur la plus importante du
groupe
 A l'ACP/ACM, on peut ajouter l'AFM
 1 - l'étude des ressemblances inter-groupe au niveau du groupe
 2 – L'étude de chaque individu selon une vision inter-groupe ou
selon les différents groupes(2)
 3 - des typologies (3)
 https://www.youtube.com/watch?v=wCTaFaVKGAM
+
Analyse des Facteurs Multiples
(FAM).
 Library(FactoMineR)
 res <- MFA(myData, group=(n1, n2, n3 etc), type=c("c", "s", "n", "f"), ncp=5, name.group=
c("toto", coucou", etc), num.group.sup=c(1,6))
 group= #le découpage par nombre de variables dans le set. 2 premère, 5 suivantes, puis 3 suivantes, etc.
 type = # pour chaque groupe "c":continue, "s":scaled, "n":nominatives, "f":fréqences
 num.group.sup # parmis els groups certain sont sup. et donc participe pas
 summary(res, ncp=n, nbelements=n|inf)
 ctr et cos2 s'interprète comme les ACP et ACM
 dimdesc(res)
 Graphes
 icône vide =sup et icône pleine = actifs
 [choix="group"] Graph des groupes
 [choix="ind"] Graphes des individus
 [choix="ind", partiel="all"] Graphes des indivdus éclaté par groupes
 [choix="var"]Cercle de correlation pour les quanti
 [choix="???", invisible="row"] Graphe des modalités qualtitatives
 [choix="axes"]Cercles de corrélation de toutes les dimentions des ACP et ACM partiel / AFM
 plot(res, [choix = "var",] [invisible="quali", cex=0.8, habillage= n|"namequali",
partiel="all"|c("name", "name"…), palette=palette(c("black", blue, "transparent",…)), select="cos2
0.4"|"contrib 5", unselect=0to1|"gray70")
+
t-SNE : t-Distributed Stochastic
Neighbour Embedding
 library("Rtsne")
 uiris <- unique(iris[, 1:5])
 iristsne <- iristsne <-
Rtsne(uiris[, 1:4], dims = 2,
perplexity = 15, max_iter = 50)
 plot(iristsne$Y, col =
uiris$Species)
+
Profilisation des individus
CLUSTERISATION ou
l'Unsupervised Machine
Learning
+
Préparer les données non PCA/MCA
 Training Set
 library(caTools)
 set.seed(123)
 split =
sample.split(dataset$Depende
ntVariable, SplitRatio = 0.8)
 training_set = subset(dataset,
split == TRUE)
 test_set = subset(dataset, split
== FALSE)
 Scaling
 training_set =
scale(training_set)
 test_set = scale(test_set)
 Distance
 dist.eucl <- dist(my_data, method = "euclidean")
#«euclidien», «maximum», «manhattan», «canberra»,
«binaire», «minkowski».
 dist.eucl <- as.dist(round(as.matrix(dist.eucl), 2))
 fviz_dist(dist.eucl, gradient = list(low = "#00AFBB",
mid = "white", high = "#FC4E07"))
 Distance de correlation
 dist.cor <- get_dist(my_data, method = "pearson")
 dist.cor <- as.dist(round(as.matrix(dist.cor), 2))
 fviz_dist(dist.cor, gradient = list(low = "#00AFBB", mid
= "white", high = "#FC4E07"))
 Distance Mixte - #daisy () [ cluster package]: capable de
gérer d'autres types de variables (par exemple,
nominales, ordinales, (a) binaires symétriques). Dans ce
cas, le coefficient de Gower sera automatiquement utilisé
comme métrique.
 library(cluster)
 dd <- daisy(flower)
 dd <- round(as.matrix(dd), 1)
 fviz_dist(dd, gradient = list(low = "#00AFBB", mid =
"white", high = "#FC4E07"))
Scaling Distance Matrix
+
Evaluer les cluster
 Tendance des données au regroupement
 Indice de Hopkins (si h <0.5 peu de grappe significative, à partir
de >0.75 très cluster) avec le graph de similarité on voit la qualité
des cluster le long de la diagonale
 factoextra::get_clust_tendency(my_data, n = 49, gradient = list(low
= "steelblue", high = "white"), seed = 123)
voir : https://www.datanovia.com/en/lessons/assessing-clustering-tendency/
 Les silhouettes de point et leur proximité avec le cluster. Positif et sup
moy. alors bien placé, sinon mal placé voir erreur si negatif
 res.hc <- eclust(my_data, "hclust", k =3, graph = FALSE)
 fviz_silhouette(res.hc)
 fviz_cluster(res.hc)
 Quel sont les points mal classé (silhouette négative) ?
 # Silhouette width of observations
 sil <- res.hc$silinfo$widths
 # Objects with negative silhouette
 neg_sil_index <- which(sil[, 'sil_width'] < 0)
 sil[neg_sil_index, , drop = FALSE]
 Comparer les méthodes de clusterisation
 library("clValid")
 intern <- clValid(my_data, nClust = 2:6, clMethods =
c("hierarchical","kmeans","pam","diana","fanny","sota","clara","ag
nes"), validation = "internal"| "stability" | "biological")
 summary(intern)
voir : https://www.jstatsoft.org/article/view/v025i04
 NbClust
 fviz_nbclust(ACPText, hcut,
method = "silhouette", k.max =
60) # kmeans, cluster::pam,
cluster::clara, cluster::fanny,
hcut
ou
 set.seed(123)
 library("NbClust")
 res.nbclust <-
NbClust(my_data, distance =
"euclidean", min.nc = 2,
max.nc = 10, method =
"complete", index ="all")
 fviz_nbclust(res.nbclust)+
theme_minimal()
Nombre de clusters Qualité des clusters
+ Classification
ascendante|descendante
Hierarchique
 Il faut une mesure de proximité ou de similarité entre individus
(distance entre valeur d’une variable, distance euclidienne ou
indice spécifique métier). On produit alors un dendogramme.
 Par itération, on regroupe deux à deux la plus petite distance en
un groupe…
 Ratio Inertie Inter/Inertie Total donne la qualité de la partition (0
à 1). On choisit le nombre de groupe selon l’inertie conservée
après partition (InerInter/InerTotal > inertie d’Axe 1)
 Dans la méthode hybride, une ACM/ACP transforme le tableau en
facteurs quantitatifs moindres. On peut ensuite faire une CAH sur
ces dimensions.
 https://www.youtube.com/watch?v=SE_4dLh5vXY&list=PLnZgp6e
pRBbRwGBLnM8GEmcxuQGM0_oIk
+
CAH in R
 CAH de variables
 modl <- c("name.v1","name.v2", etc.)
 cah<- hclust(dist(scale(d[,modl])),method="ward") #pour
une classification des variables
 clust = cutree(cah, k OR h=5)
 Graphiques
 plot(cah, xlab="", ylab="", main ="CAH de variables")
 Matricecor <- cor(data[,varS], use="pairwise.complete.obs")
 heatmap(Matricecor, col =red|blue|gray(1, 2, 3…))
 library(cluster) // clusplot(dataset)
 plot(datas, col = clust , main = "HClust with 3 clusters", xlab
= "", ylab = "")
 library(pheatmap) // pheatmap(t(x), cutree_cols = 3)
 fviz_dend(hclust.out, cex = 0.5, k = 4, palette = "jco")
 CAH avec FactomineR à pâtir
de ACP ou ACM
 res.hcpc <- HCPC(res.ACP
ou ACM, nb.clust=n, )
 res.hcpc$data.clust (la bd
avec les clusters)
 res.hcpc§desc.var (décris le
rapport variable et classes)
 res.hcpc$desc.ind (les
parangons)
 Factoshiny
 library(Factoshiny)
 MCAshiny(Mydata)
+
Partitionnement en classes par les
K-Means
 Par itérations, on choisit nombre de classes et on rassemble les
individus par proximité des barycentres. Le kmean travaillant sur
des données quanti, nécessite bien souvent une méthode de
réduction des dimentions [méthode hybride]
 Une ACM transforme le tableau en facteurs quantitatifs moindres. On
peut ensuite faire un K Means sur ces dimensions.
 On peut faire aussi une partition par CAH en initialisation et
consolider par K-Means ou l’inverse.
 Puis lire
 (1) parangon de chaque classe = individu le plus proche
 (2) on peut chercher les p par ANOVA de chaque variable sur les
classes. Plus le p est petit, plus la variable a pesé sur la classe. (pour
quali on fait un Khi2 et on utilise aussi p)
 (3) v test pour valeur test (>1,96 pour la normale) caractérise le poids
de la variable sur la classe. Pour les modalités :on regarde aussi les p
et les v tests
+
K Mean dans R
 Trouver le nombre de cluster
 set.seed(6)
 wcss = vector()
 for (i in 1:10) wcss[i] =
sum(kmeans(dataset,
i)$withinss) OR wss[i] <-
km.out$tot.withinss
 plot(1:10, wcss, type = 'b', main
= paste('The Elbow Method'),
xlab = 'Number of clusters',
ylab = 'WCSS')
 Vérifier la sensibilité au hasard
 # Set up 2 x 3 plotting grid
 par(mfrow = c(2, 3))
 for(i in 1:6) {
km.out <- kmeans(iris[,3:4],
centers = 3, nstart = 10)
plot(iris[,3:4], col =
km.out$cluster, main =
km.out$tot.withinss,)
}
 K-Means
 set.seed(29)
 kmeans = kmeans(x = dataset, centers = 5)
 y_kmeans = kmeans$cluster
 fviz_cluster(kclust, data = ACP_df)
 Kmean PAM
 pam.res <- pam(x, 3, metric = "euclidean", stand
= FALSE) #"manhattan"
 fviz_cluster(pam.res)
 lesclusters = pam.res$clustering
 K-Mean Clara
 res.clara <- clara(x, k, metric = "euclidean",
stand = FALSE, samples = 15, pamLike =
TRUE)
 fviz_cluster(res.clara)
 Kmean Hybride
 library(factoextra)
 res.hk <- hkmeans(myData3)
 Visualising the clusters
 library(cluster)
 clusplot(dataset, kmeans, lines = 0, shade =
TRUE, color = TRUE, labels = 2, plotchar =
FALSE, span = TRUE)
+ DBSCAN: Density-Based Clustering Essentials
 Idéal pour les set complex avec de nombreux comportements
atypiques et non-linéairs. L'idée fondamentale, c'est que chaque
point doit avoir un minimum n de voisin pour être clustériser. Deux
paramètre sont important : le rayon epsilon (eps) et le nb de point
voisin minimum (MinPts)? Attention, (1) MinPts: Plus le jeu de
données est grand, plus la valeur des minPts doit être grande. Les
minPts doivent être choisis au moins 3.
 Compute DBSCAN using fpc package
 library("dbscan")
 set.seed(123)
 db <- dbscan(my_data, eps = 1.4, minPts =3)
 fviz_cluster(db, data = my_data, stand = FALSE, ellipse = FALSE,
show.clust.cent = FALSE, geom = "point",palette = "jco", ggtheme =
theme_classic())
 eps optimisation
 kNNdistplot(my_data, k = 3)
+ Concept of model-based clustering
 Un agrégat de point est considéré comme un sous groupe réparti
selon une courbe normale autour d'un point moyen. Le meilleur
modèle est sélectionné à l'aide du critère d'information bayésien
ou BIC . Un score BIC élevé indique des preuves solides pour le
modèle correspondant.
 Model-based-clustering
 library("mclust")
 mc <- Mclust(myData)
 summary(mc)
 fviz_cluster(mc, data = myData, stand = FALSE, ellipse = FALSE,
show.clust.cent = FALSE, geom = "point",palette = "jco", ggtheme =
theme_classic())
 MC Optimisation
 fviz_mclust(mc, "BIC", palette = "jco")
 fviz_mclust(mc, "classification", geom = "point", pointsize = 1.5, palette
= "jco")
 fviz_mclust(mc, "uncertainty", palette = "jco")
+ Fuzzy Clustering
 Dans ce type de clustering, chaque point peut appartenir à plusieurs
cluster en fonction d'un coeficient d'appartenance.
 Fanny clustering
 library(cluster)
 resfan <- fanny(myData, k=3, metric = "euclidean", stand = FALSE)
 head(resfan$membership, 10)
 resfan$coeff #coeficient de DUNN de 0 (très flou) à 1 (très net)
 resfan$clusteri
 fviz_cluster(resfan, ellipse.type = "norm", repel = TRUE, palette = "jco", ggtheme
= theme_minimal(),legend = "right")
 Optimisation
 fviz_silhouette(resfan, palette = "jco", ggtheme = theme_minimal())
 Fuzzy Cmean Clustering
 library(e1071) // funmean <- cmeans(myData, 3, iter.max = 100, dist =
"euclidean", m = 2)
 head(funmean$membership) // funmean$cluster
 fviz_cluster(list(data = iris[,-5], cluster=funmean$cluster), ellipse.type = "norm",
ellipse.level = 0.68, palette = "jco", ggtheme = theme_minimal())
+
Corrélation et prédire une
variables QUALITATIVE
Supervised
CLASSIFICATION
+
Template Classification : data
préparation
 Prepare Data (factor)
 myData <- source
 str(myData)
 summary(myData)
 myData <- as.factor(var_que)
 Partition train/valid
 set.seed(1234) #machine
aléatoire
 pd <-samle(2, nrow(myData),
replace=TRUE; prob=c(0.7;
0.3))
 train <-myData[pd=1,]
 test <- myData[pd=2,]
 Encoding the target feature as factor
 dataset$Purchased =
factor(dataset$Purchased, levels =
c(0, 1))
 Splitting the dataset into the Training
set and Test set
 library(caTools)
 set.seed(123)
 split =
sample.split(dataset$Purchased,
SplitRatio = 0.75)
 train = subset(dataset, split ==
TRUE)
 test = subset(dataset, split ==
FALSE)
Data preparation_1 Data preparation_Bis
 #Feature Scaling
 training_set[-3] = scale(training_set[-3]) //test_set[-3] = scale(test_set[-3])
+ Analyse binaire des var qualitative : la
régression logistique
 Variable expliquée binaire s’explique comme le log des probabilités
des réponses de variable binaire ou ordonnée ou libre
 vQuali <- relevel(vQuali, ref=”modalitechoisie”) ##changer la modalité de référence
 modl <- glm(v1~v2+V3+V4..., data=dataset, family=”binomial”)
 summary(modl)
 Et drop1(modl, .~., test=”Chisq”) ## donne le test avec variable quali compactée
 On peut aussi tester la synergie (avec *) entre deux variable pour voir si le modèle additif est simple :
modl <- glm(v1~v2+V3*V4..., data=dataset, family=”binomial”)
 Odd ration pour une variable binaire ou ordonnée
 ensuite sort(exp(coefficients(modl))) donne l’odd ratio de ces facteurs (augmentation de probabilité) :
pour binaire ou ordinal (à chaque cran de l’ordre !!!).
 sort(exp(coefficients(glm(formula = ast$bin_indegree ~ ast$emitter_type, family ="binomial", data =
ast))), decreasing = TRUE)
 Condition de validité : au moins 5 à 10 événements(individus) dans chaque variable
explicative
https://www.youtube.com/watch?v=fUmDPVHah1U
https://www.youtube.com/watch?v=hzwLWbngzVo
+
SVM Support Vector Machine
 Le SVM est un algorithme de classification qui permet de séparer
des individus en n catégories selon leur n variable dans un
espace à n dimension. Proche de la régression logistique dans
son usage, il lui est supérieur dans les modèles complexes.
 On recherche l’équation d’une courbe (hyperplan) qui sépare le mieux
les deux catégories du set de données de sorte qu’elle maximise la
distance marginal (marge distance) des points les plus proches de deux
catégories (les vecteurs [points]) supports)
 Une répartition difficilement séparable peut être projeté sur des
dimension n+ grâce au kernel ou suivre des séparations non-linéaires
 Ainsi on peut prédire la catégorie d’un nouvel élément en fonction de sa
position (positive ou négative par rapoprt au plan) dans l’espace à n
dimension
https://fr.wikipedia.org/wiki/Machine_%C3%A0_vecteurs_de_support
https://en.wikipedia.org/wiki/Support-vector_machine
+
SVM dans R
 library(e1071)
 svmmodel <- svm(var ~.,
data=mydata, type ="c-
classification|…", kernel="linear|
radial |polynomial|sigmoid",
cost=0.1, scale=FALSE|TRUE)
 Predire :
 var_pred<- predict(svmmodel,
mydata, type="class")
 tab <- table (Predicted =
var_pred, Real =
mytable$var_reel)
 Taux d’erreur
 mean(var_pred ==
mytable$var_reel) #%identique
 1- sum(diag(tab))/sum(tab) #%
erreurs
 On peut optimiser le cost avec
la fonction tune :
 tmodel <- tune(svm, var ~.,
data=mydata, type ="c-
classification",
kernel="linear", range =
list(epsilon=seq(0,1,0.1),
cost=c(0.01, 0.1, 1, 10, 100)))
 summary(tmodel)
 plot (tmodel)
 tsvmmodel <-
tmodel$best.model
+
K-Nearest Neighbors algorithm
 KNN classe les individus selon K éléments les plus proches
avec un vote sur K (racine carré de n individus). Ensuite on test
les valeur de K proche avec le taux d'erreur
 Si K=1 alors KNN peut servir de partitionnement de l'espace à
N variables et donc servir à la culterisation (Voronoi tesselation
: les lignes d'équidistance entre les points)
 KNN est sensible au variable expliqué à forte entropie, aux
outliers et aux grands set de données. C'est une méthodes
simple.
https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm
+
KNN with R
 library(class)
 nrow(train)
 k=sqrt(nrow(train))
 #scale data
 knnpred<- knn(train=train, test=test,
cl=var.expliqué, k=k(+/-n), prob = TRUE)
 Tuned K
 i=1
 k.optm = 1for (i in 1:n){
knnpred<- knn(train=train, test=test,
cl=var.expliqué, k=i))
k.optim[i]<-
100*sum(var.expliqué==knnpred)/NROW
(var.expliqué)
k=i
}
 plot(k.optm, type="b")
 Knn bis
 library (caret)
 trControl <-
trainControl(method =
"repeatedcv, number = 10,
repeat = 3)
 set.seed(222)
 fit <- train(var.ex~., method
='knn', tuneLength=20,
trControl=trControl,
preProc=c("center", "scale"),
metric="ROC",
tuneGrid=expand.grid(k=1:n) )
 plot(fit)
 varImp(fit)
 knnpred <- predict(fit,
newdata=test)
+
Decision Tree Classification
 Il s’agit pour chaque variable explicative (appelé nœud de l'arbre)
du modèle de la diviser en deux sous groupe ayant une plus faible
entropie(p<0.001 de ?????) possible. Quel seuil de la variable
vous fait entrer dans un monde qualitatif différent et homogène
?(voir calcul d'impureté de gini : 1-prob(mod ou valeur interind)2-
prob(mod ou valeur ind)2)
 On construit ensuite un arbre des variables du modèle en
hiérarchisant les variables à forte diminution d’entropie pour avoir
plusieurs typologies d’individus(nodes) donnant les probabilités,
pour chaque type, d’avoir tel ou tel mode de la variable qualitative.
 La prédiction choisit alors le mode le plus probable. On peut y
ajouter des cout d'erreur de classement.
https://fr.wikipedia.org/wiki/Arbre_de_d%C3%A9cision_(apprentissage)
https://en.wikipedia.org/wiki/Decision_tree_learning
+
Decision Tree in R
 Decision tree with party
 library(party)
 treemodel <- ctree(varquali~var1+var2+var3,
data=train,
controls=ctree_control(mincriterion=0.9,
minsplit=50))
 treemodel
 print(treemodel)
 plot(treemodel,type="simple")
 Decision tree with rpart
 library(rpart)
 treemodel <- rpart(varquali~var1+var2+var3,
data= train, method="class")
 treemodel
 print(treemodel)
 library (rpart.plot)
 rpart.plot(treemodel, type=[c(1,2,3,4)],
extra=[c(1,2,3,4)])
 Predict
 predict(treemodel, test, [type="prob"|"class"])
#sans l'option il choisit la qualité sinon donne les
probabilités
 Tune
 nombre minimum
d'observation pour fractionner
 Nombre maximum de nœud
 cv_tree =
cv.tree(treemodel, FUN =
prune.misclass)
 plot ( cv_tree$size,
cv_tree$dev)
 tunedmodel =
prune.misclass(treemodel,
best=9)
https://www.youtube.com/watch?v=opQ49Xr748k
+
Random Forest Classification
 Le Random Forest est une forêt de model en Decision Tree
obtenant des résultants probant. On choisit N individus du
dataset avec M variables du modèle pour produire T arbres de
décisions
 Le résultat de prédiction final est une élection des T arbres
entre ces résultats partiels (bagging) .
 La validation de ces modèles est par principe l’algorithme. Et
on peut comparer des RF par une comparaison des meilleurs
modèles en testant les individus non utilisé dans la construction
dit Out-of-Bag (oob) : Out-Of-Bag Error
http://r.benavent.fr/MM.html
https://en.wikipedia.org/wiki/Random_forest
https://www.youtube.com/watch?v=IJgR7n-VqSo
+
Random Forest With R
 library("randomForest")
 dataNAImputed <-
rfImpute(var_pliqué~.,
data=myData, iter=n)
#remplace les NA
 rfmodel <-
randomForest(var_pliqué~.,
data=dataNAImputed,
proximity=TRUE)
 Distance Matrix
 dist(x, method =
"euclidean"|"maximum",
"manhattan"|"canberra"|"binar
y"|"minkowski", diag =
FALSE, upper = FALSE, p =
2)
 Error tune
 oob.error.data <-
data.frame(Trees=rep(1:nrow(model$err.rate
), times=3), type=rep(c("OOB", "Healthy",
"Unhealthy"), each=nrow(model$err.rate)),
Error=c(model$err.rate[,"OOB"],
model$err.rate[,"Healthy"],
model$err.rate[,"Unhealthy"]))
 ggplot(data=oob.error.data, aes(x=Trees,
y=Error)) +geom_line(aes(color=Type))
 ggsave("oob_error_rate_1000_trees.pdf")
 oob.values <- vector(length=10)
 for(i in 1:10) {
temp.model <- randomForest(hd ~ .,
data=data.imputed, mtry=i, ntree=1000)
oob.values[i] <-
temp.model$err.rate[nrow(temp.model$err.r
ate),1]
}
 oob.values
+
Naives Bayes Theorem
p de la modalité de
var.cative si la modalité
de var.que est C
p d'une modalité de
var.que
p d'une modalité
var.cativep de la modalité de la
var.que si la modalité
de la var.cative est X
Probalité d'une d'une modalité de réponse si on connaît une autre
modalité de réponse
+
Naives Bayes with R
 library(e1071)
 nbmodel <-
naivesBayes(var.que~.,
data=train, usekernel=TRUE)
 varpred <- predict(nbmodel,
test, type='prob'|'raw"|'class')
 Tuned model
 p <.05
 Kappa = accuracy
 Laplace correction
 Normalisation
+
Gradient boosting
https://en.wikipedia.org/wiki/Gradient_boosting
+
Artificial neural network
https://en.wikipedia.org/wiki/Artificial_neural_network
+
Collaborative filtering
https://en.wikipedia.org/wiki/Collaborative_filtering
+
Autoregressive integrated moving
average
https://en.wikipedia.org/wiki/Autoregressive_integrated_moving_average
+
ROC Analysis
+
Optimisation de la prédiction
 model$variable.importance
 Misclassification error
 tab<-table(predict(treemodel),
myData$var_reel)
 tab
 1-sum(diag(tab))/sum(tab)
 mean(var_pred ==
myData$var_reel)
#%identique
 confusionmatrix(var_pred,
myData$var_reel)
+
Optimisation de la prédiction
 Global
 Accuracy: (TP+TN)/total =
(100+50)/165 = 0.91 #% de
prédits
 Misclassification Rate:
(FP+FN)/total = (10+5)/165 = 0.09
ou 1-accuracy #taux d’erreur
 Détection des vrais cas
 Sensivity : TP/Total Yes #%de
detection des vrais Yes
 Specificity : TN/Total No #% de
détection des vrais No
 Qualité des prédiction
 Positive predictive
value(PPV), Precision = Σ True
positive/Σ Predicted condition positi
ve
 Negative predictive value (NPV) =
Σ True negative/Σ Predicted
condition negative
 Prevalence = Total Yes/Total #%
d’entropie
 true positives : yes réels – yes prédits
 true negatives : no réels – no prédits
 false positives : no réels – yes prédits
 false négatives : yes réels – no prédits

Contenu connexe

Tendances

Introduction to Machine learning
Introduction to Machine learningIntroduction to Machine learning
Introduction to Machine learningQuentin Ambard
 
Traitement des données manquantes et aberrantes sous R
Traitement des données manquantes et aberrantes sous RTraitement des données manquantes et aberrantes sous R
Traitement des données manquantes et aberrantes sous RMohamed Ali KHOUAJA
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopLilia Sfaxi
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceLilia Sfaxi
 
Data mining - ACP Analyse en Composantes Principales
Data mining - ACP Analyse en Composantes PrincipalesData mining - ACP Analyse en Composantes Principales
Data mining - ACP Analyse en Composantes PrincipalesMohamed Heny SELMI
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : SparkLilia Sfaxi
 
5.1 K plus proches voisins
5.1 K plus proches voisins5.1 K plus proches voisins
5.1 K plus proches voisinsBoris Guarisma
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1Amal Abid
 
5.2 Régression linéaire
5.2 Régression linéaire5.2 Régression linéaire
5.2 Régression linéaireBoris Guarisma
 
logistic_regression_ml.pdf
logistic_regression_ml.pdflogistic_regression_ml.pdf
logistic_regression_ml.pdfSidiAbdallah1
 
Data mining - Classification - arbres de décision
Data mining - Classification - arbres de décisionData mining - Classification - arbres de décision
Data mining - Classification - arbres de décisionMohamed Heny SELMI
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataLilia Sfaxi
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2Amal Abid
 

Tendances (20)

Introduction to Machine learning
Introduction to Machine learningIntroduction to Machine learning
Introduction to Machine learning
 
Traitement des données manquantes et aberrantes sous R
Traitement des données manquantes et aberrantes sous RTraitement des données manquantes et aberrantes sous R
Traitement des données manquantes et aberrantes sous R
 
arbres de decision.ppt
arbres de decision.pptarbres de decision.ppt
arbres de decision.ppt
 
Chapitre 2 hadoop
Chapitre 2 hadoopChapitre 2 hadoop
Chapitre 2 hadoop
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans Hadoop
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-Reduce
 
Data mining - ACP Analyse en Composantes Principales
Data mining - ACP Analyse en Composantes PrincipalesData mining - ACP Analyse en Composantes Principales
Data mining - ACP Analyse en Composantes Principales
 
BigData_TP3 : Spark
BigData_TP3 : SparkBigData_TP3 : Spark
BigData_TP3 : Spark
 
Une introduction à Hive
Une introduction à HiveUne introduction à Hive
Une introduction à Hive
 
5.1 K plus proches voisins
5.1 K plus proches voisins5.1 K plus proches voisins
5.1 K plus proches voisins
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1
 
Clustering
ClusteringClustering
Clustering
 
Partie2BI-DW2019
Partie2BI-DW2019Partie2BI-DW2019
Partie2BI-DW2019
 
5.2 Régression linéaire
5.2 Régression linéaire5.2 Régression linéaire
5.2 Régression linéaire
 
logistic_regression_ml.pdf
logistic_regression_ml.pdflogistic_regression_ml.pdf
logistic_regression_ml.pdf
 
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka StreamsTraitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
 
Data mining - Classification - arbres de décision
Data mining - Classification - arbres de décisionData mining - Classification - arbres de décision
Data mining - Classification - arbres de décision
 
Hive ppt (1)
Hive ppt (1)Hive ppt (1)
Hive ppt (1)
 
BigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big DataBigData_Chp1: Introduction à la Big Data
BigData_Chp1: Introduction à la Big Data
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 

Similaire à Data Analyse pas à pas avec R

Data Analysis pas à pas avec R
Data Analysis pas à pas avec RData Analysis pas à pas avec R
Data Analysis pas à pas avec RAmar LAKEL, PhD
 
Méthodologies dans le renseignement
Méthodologies dans le renseignement Méthodologies dans le renseignement
Méthodologies dans le renseignement Nicolae Sfetcu
 
545066266-La-Methodologie-de-Recherche-en-Sic-Enregistrement-Automatique.pptx
545066266-La-Methodologie-de-Recherche-en-Sic-Enregistrement-Automatique.pptx545066266-La-Methodologie-de-Recherche-en-Sic-Enregistrement-Automatique.pptx
545066266-La-Methodologie-de-Recherche-en-Sic-Enregistrement-Automatique.pptxsara2510
 
Démarche de la recherche scientifique
Démarche de la recherche scientifiqueDémarche de la recherche scientifique
Démarche de la recherche scientifiqueMATENE ELHACENE
 
Enraciner les résultats de sa recherche dans le terrain: un exercice d'équili...
Enraciner les résultats de sa recherche dans le terrain: un exercice d'équili...Enraciner les résultats de sa recherche dans le terrain: un exercice d'équili...
Enraciner les résultats de sa recherche dans le terrain: un exercice d'équili...Magloire Akogbéto
 
Méthodologie de recherche_en_technologies_de_l'éducation (1)
Méthodologie de recherche_en_technologies_de_l'éducation (1)Méthodologie de recherche_en_technologies_de_l'éducation (1)
Méthodologie de recherche_en_technologies_de_l'éducation (1)BayremJEMMALI
 
FR.pdf
FR.pdfFR.pdf
FR.pdfPfFv1
 
3- La méthode de l’autoconfrontation : une méthode bien adaptée à l’investiga...
3- La méthode de l’autoconfrontation : une méthode bien adaptée à l’investiga...3- La méthode de l’autoconfrontation : une méthode bien adaptée à l’investiga...
3- La méthode de l’autoconfrontation : une méthode bien adaptée à l’investiga...espenel
 
Les etudes marketing
Les etudes marketingLes etudes marketing
Les etudes marketingTaha Can
 
Cours méthodes -M1 unil.pptx
Cours méthodes -M1 unil.pptxCours méthodes -M1 unil.pptx
Cours méthodes -M1 unil.pptxMatuTiznit
 
Le Mémoire professionnel
Le Mémoire professionnelLe Mémoire professionnel
Le Mémoire professionnelS/Abdessemed
 
Cours methodo kr (2)
Cours methodo kr (2)Cours methodo kr (2)
Cours methodo kr (2)pitou42
 
L’analyse par théorisation ancrée (grounded theory)
L’analyse par théorisation ancrée (grounded theory)L’analyse par théorisation ancrée (grounded theory)
L’analyse par théorisation ancrée (grounded theory)Magloire Akogbéto
 
Etude Qualitative.pdf
Etude Qualitative.pdfEtude Qualitative.pdf
Etude Qualitative.pdfnajwa2053
 
Techniques d'investigation en Sociologie
Techniques d'investigation en SociologieTechniques d'investigation en Sociologie
Techniques d'investigation en SociologieImane SBAI
 

Similaire à Data Analyse pas à pas avec R (20)

Data Analysis pas à pas avec R
Data Analysis pas à pas avec RData Analysis pas à pas avec R
Data Analysis pas à pas avec R
 
Méthodologies dans le renseignement
Méthodologies dans le renseignement Méthodologies dans le renseignement
Méthodologies dans le renseignement
 
545066266-La-Methodologie-de-Recherche-en-Sic-Enregistrement-Automatique.pptx
545066266-La-Methodologie-de-Recherche-en-Sic-Enregistrement-Automatique.pptx545066266-La-Methodologie-de-Recherche-en-Sic-Enregistrement-Automatique.pptx
545066266-La-Methodologie-de-Recherche-en-Sic-Enregistrement-Automatique.pptx
 
Démarche de la recherche scientifique
Démarche de la recherche scientifiqueDémarche de la recherche scientifique
Démarche de la recherche scientifique
 
Enraciner les résultats de sa recherche dans le terrain: un exercice d'équili...
Enraciner les résultats de sa recherche dans le terrain: un exercice d'équili...Enraciner les résultats de sa recherche dans le terrain: un exercice d'équili...
Enraciner les résultats de sa recherche dans le terrain: un exercice d'équili...
 
Méthodologie de recherche_en_technologies_de_l'éducation (1)
Méthodologie de recherche_en_technologies_de_l'éducation (1)Méthodologie de recherche_en_technologies_de_l'éducation (1)
Méthodologie de recherche_en_technologies_de_l'éducation (1)
 
FR.pdf
FR.pdfFR.pdf
FR.pdf
 
3- La méthode de l’autoconfrontation : une méthode bien adaptée à l’investiga...
3- La méthode de l’autoconfrontation : une méthode bien adaptée à l’investiga...3- La méthode de l’autoconfrontation : une méthode bien adaptée à l’investiga...
3- La méthode de l’autoconfrontation : une méthode bien adaptée à l’investiga...
 
Introduction rq exercer
Introduction rq exercerIntroduction rq exercer
Introduction rq exercer
 
Les etudes marketing
Les etudes marketingLes etudes marketing
Les etudes marketing
 
Cours méthodes -M1 unil.pptx
Cours méthodes -M1 unil.pptxCours méthodes -M1 unil.pptx
Cours méthodes -M1 unil.pptx
 
Le Mémoire professionnel
Le Mémoire professionnelLe Mémoire professionnel
Le Mémoire professionnel
 
Cours methodo kr (2)
Cours methodo kr (2)Cours methodo kr (2)
Cours methodo kr (2)
 
81
8181
81
 
Entretiens Méthodo psychologie sociale
Entretiens Méthodo psychologie socialeEntretiens Méthodo psychologie sociale
Entretiens Méthodo psychologie sociale
 
L’analyse par théorisation ancrée (grounded theory)
L’analyse par théorisation ancrée (grounded theory)L’analyse par théorisation ancrée (grounded theory)
L’analyse par théorisation ancrée (grounded theory)
 
Avis savoir ou_on_va
Avis savoir ou_on_vaAvis savoir ou_on_va
Avis savoir ou_on_va
 
Etude Qualitative.pdf
Etude Qualitative.pdfEtude Qualitative.pdf
Etude Qualitative.pdf
 
FUCaM
FUCaMFUCaM
FUCaM
 
Techniques d'investigation en Sociologie
Techniques d'investigation en SociologieTechniques d'investigation en Sociologie
Techniques d'investigation en Sociologie
 

Plus de Amar LAKEL, PhD

Aux origines de la sociologie : du XIXème au début XX ème siècle
Aux origines de la sociologie : du XIXème au début XX ème siècleAux origines de la sociologie : du XIXème au début XX ème siècle
Aux origines de la sociologie : du XIXème au début XX ème siècleAmar LAKEL, PhD
 
Introduction au Data Marketing
Introduction au Data MarketingIntroduction au Data Marketing
Introduction au Data MarketingAmar LAKEL, PhD
 
Paradigme Structiro - Fonctionnaliste - Le paradigme linguisitique, Introduct...
Paradigme Structiro - Fonctionnaliste - Le paradigme linguisitique, Introduct...Paradigme Structiro - Fonctionnaliste - Le paradigme linguisitique, Introduct...
Paradigme Structiro - Fonctionnaliste - Le paradigme linguisitique, Introduct...Amar LAKEL, PhD
 
[Update 2022] Elaborer la stratégie de communication - tout ce qu'il faut savoir
[Update 2022] Elaborer la stratégie de communication - tout ce qu'il faut savoir[Update 2022] Elaborer la stratégie de communication - tout ce qu'il faut savoir
[Update 2022] Elaborer la stratégie de communication - tout ce qu'il faut savoirAmar LAKEL, PhD
 
Enjeux de la recherche en SHS à l'ère des digital studies
Enjeux de la recherche en SHS à l'ère des digital studiesEnjeux de la recherche en SHS à l'ère des digital studies
Enjeux de la recherche en SHS à l'ère des digital studiesAmar LAKEL, PhD
 
Nouveaux régimes de vérité à l'heure des réseaux sociaux
Nouveaux régimes de vérité à l'heure des réseaux sociauxNouveaux régimes de vérité à l'heure des réseaux sociaux
Nouveaux régimes de vérité à l'heure des réseaux sociauxAmar LAKEL, PhD
 
Stratégie marketing digitale de A à Z
Stratégie marketing digitale de A à ZStratégie marketing digitale de A à Z
Stratégie marketing digitale de A à ZAmar LAKEL, PhD
 
L1 Cours Numérique & Société
 L1 Cours Numérique & Société L1 Cours Numérique & Société
L1 Cours Numérique & SociétéAmar LAKEL, PhD
 
L1 TD Numérique et Société
L1 TD Numérique et SociétéL1 TD Numérique et Société
L1 TD Numérique et SociétéAmar LAKEL, PhD
 
Absorber les web pour constituer un corpus internet : My Web intelligence.
Absorber les web pour constituer un corpus internet : My Web intelligence.Absorber les web pour constituer un corpus internet : My Web intelligence.
Absorber les web pour constituer un corpus internet : My Web intelligence.Amar LAKEL, PhD
 
Approches méthodologique d’analyse du web : en finir avec la division quali ...
Approches méthodologique d’analyse du web :  en finir avec la division quali ...Approches méthodologique d’analyse du web :  en finir avec la division quali ...
Approches méthodologique d’analyse du web : en finir avec la division quali ...Amar LAKEL, PhD
 
Juan Branco, une stratégie marketing d'un nouvel intellectuel numérique
Juan Branco, une stratégie marketing d'un nouvel intellectuel numériqueJuan Branco, une stratégie marketing d'un nouvel intellectuel numérique
Juan Branco, une stratégie marketing d'un nouvel intellectuel numériqueAmar LAKEL, PhD
 
Pour une documentologie digitale : La vie numérique de Robert Escarpit de 200...
Pour une documentologie digitale : La vie numérique de Robert Escarpit de 200...Pour une documentologie digitale : La vie numérique de Robert Escarpit de 200...
Pour une documentologie digitale : La vie numérique de Robert Escarpit de 200...Amar LAKEL, PhD
 
Amar Lakel - Patrimonialisation numérique et avenir digital du document.
Amar Lakel - Patrimonialisation numérique et avenir digital du document.Amar Lakel - Patrimonialisation numérique et avenir digital du document.
Amar Lakel - Patrimonialisation numérique et avenir digital du document.Amar LAKEL, PhD
 
Du néolithique à la smart city : généalogie de l'espace public au coeur des p...
Du néolithique à la smart city : généalogie de l'espace public au coeur des p...Du néolithique à la smart city : généalogie de l'espace public au coeur des p...
Du néolithique à la smart city : généalogie de l'espace public au coeur des p...Amar LAKEL, PhD
 
La méthode Foucault : De l’énoncé à l’archive, enjeux du pouvoir dans la comm...
La méthode Foucault : De l’énoncé à l’archive, enjeux du pouvoir dans la comm...La méthode Foucault : De l’énoncé à l’archive, enjeux du pouvoir dans la comm...
La méthode Foucault : De l’énoncé à l’archive, enjeux du pouvoir dans la comm...Amar LAKEL, PhD
 
Transition digitale et Espaces publics numérics
Transition digitale et Espaces publics numéricsTransition digitale et Espaces publics numérics
Transition digitale et Espaces publics numéricsAmar LAKEL, PhD
 
Stratégie marketing digitale
Stratégie marketing digitaleStratégie marketing digitale
Stratégie marketing digitaleAmar LAKEL, PhD
 
L'univers du Web Analytics
L'univers du Web AnalyticsL'univers du Web Analytics
L'univers du Web AnalyticsAmar LAKEL, PhD
 

Plus de Amar LAKEL, PhD (20)

Aux origines de la sociologie : du XIXème au début XX ème siècle
Aux origines de la sociologie : du XIXème au début XX ème siècleAux origines de la sociologie : du XIXème au début XX ème siècle
Aux origines de la sociologie : du XIXème au début XX ème siècle
 
Introduction au Data Marketing
Introduction au Data MarketingIntroduction au Data Marketing
Introduction au Data Marketing
 
Paradigme Structiro - Fonctionnaliste - Le paradigme linguisitique, Introduct...
Paradigme Structiro - Fonctionnaliste - Le paradigme linguisitique, Introduct...Paradigme Structiro - Fonctionnaliste - Le paradigme linguisitique, Introduct...
Paradigme Structiro - Fonctionnaliste - Le paradigme linguisitique, Introduct...
 
[Update 2022] Elaborer la stratégie de communication - tout ce qu'il faut savoir
[Update 2022] Elaborer la stratégie de communication - tout ce qu'il faut savoir[Update 2022] Elaborer la stratégie de communication - tout ce qu'il faut savoir
[Update 2022] Elaborer la stratégie de communication - tout ce qu'il faut savoir
 
Enjeux de la recherche en SHS à l'ère des digital studies
Enjeux de la recherche en SHS à l'ère des digital studiesEnjeux de la recherche en SHS à l'ère des digital studies
Enjeux de la recherche en SHS à l'ère des digital studies
 
Nouveaux régimes de vérité à l'heure des réseaux sociaux
Nouveaux régimes de vérité à l'heure des réseaux sociauxNouveaux régimes de vérité à l'heure des réseaux sociaux
Nouveaux régimes de vérité à l'heure des réseaux sociaux
 
Stratégie marketing digitale de A à Z
Stratégie marketing digitale de A à ZStratégie marketing digitale de A à Z
Stratégie marketing digitale de A à Z
 
L1 Cours Numérique & Société
 L1 Cours Numérique & Société L1 Cours Numérique & Société
L1 Cours Numérique & Société
 
L1 TD Numérique et Société
L1 TD Numérique et SociétéL1 TD Numérique et Société
L1 TD Numérique et Société
 
Data Analyse
Data AnalyseData Analyse
Data Analyse
 
Absorber les web pour constituer un corpus internet : My Web intelligence.
Absorber les web pour constituer un corpus internet : My Web intelligence.Absorber les web pour constituer un corpus internet : My Web intelligence.
Absorber les web pour constituer un corpus internet : My Web intelligence.
 
Approches méthodologique d’analyse du web : en finir avec la division quali ...
Approches méthodologique d’analyse du web :  en finir avec la division quali ...Approches méthodologique d’analyse du web :  en finir avec la division quali ...
Approches méthodologique d’analyse du web : en finir avec la division quali ...
 
Juan Branco, une stratégie marketing d'un nouvel intellectuel numérique
Juan Branco, une stratégie marketing d'un nouvel intellectuel numériqueJuan Branco, une stratégie marketing d'un nouvel intellectuel numérique
Juan Branco, une stratégie marketing d'un nouvel intellectuel numérique
 
Pour une documentologie digitale : La vie numérique de Robert Escarpit de 200...
Pour une documentologie digitale : La vie numérique de Robert Escarpit de 200...Pour une documentologie digitale : La vie numérique de Robert Escarpit de 200...
Pour une documentologie digitale : La vie numérique de Robert Escarpit de 200...
 
Amar Lakel - Patrimonialisation numérique et avenir digital du document.
Amar Lakel - Patrimonialisation numérique et avenir digital du document.Amar Lakel - Patrimonialisation numérique et avenir digital du document.
Amar Lakel - Patrimonialisation numérique et avenir digital du document.
 
Du néolithique à la smart city : généalogie de l'espace public au coeur des p...
Du néolithique à la smart city : généalogie de l'espace public au coeur des p...Du néolithique à la smart city : généalogie de l'espace public au coeur des p...
Du néolithique à la smart city : généalogie de l'espace public au coeur des p...
 
La méthode Foucault : De l’énoncé à l’archive, enjeux du pouvoir dans la comm...
La méthode Foucault : De l’énoncé à l’archive, enjeux du pouvoir dans la comm...La méthode Foucault : De l’énoncé à l’archive, enjeux du pouvoir dans la comm...
La méthode Foucault : De l’énoncé à l’archive, enjeux du pouvoir dans la comm...
 
Transition digitale et Espaces publics numérics
Transition digitale et Espaces publics numéricsTransition digitale et Espaces publics numérics
Transition digitale et Espaces publics numérics
 
Stratégie marketing digitale
Stratégie marketing digitaleStratégie marketing digitale
Stratégie marketing digitale
 
L'univers du Web Analytics
L'univers du Web AnalyticsL'univers du Web Analytics
L'univers du Web Analytics
 

Data Analyse pas à pas avec R

  • 1. + Data Analysis La première phase d’une enquête est celle de sa conception c’est-à-dire de sa raison d’être.
  • 2. + L’étude est une démarche scientifique de fabrication de la vérité  L’enquête est un concept ambigu signifiant quête d'information, collecte de témoignages, recherches pour savoir quelque chose, il se fonde sur la pratique inquisitoriale émergeant au haut Moyen-âge (et plus loin du travail de l’historien grec Herodote).  On préfère le mot étude qui souligne une démarche rationnelle essayant de réduire la part de subjectivité dans la représentation simplifiée d’une réalité. Elle est le fondement de la vérité scientifique.  C’est une recherche d'information réalisée par observation systématique d’une problématique sur une population déterminée, pour décrire, comparer ou expliquer une pratique.  Les 4 grandes étapes de l’étude sont : La construction de la problématique (I) La collecte de données (II) Analyse de résultat (III) l’interprétation théorique (IV)
  • 3. + 8 étapes pour le design d’étude  ÉTAPE À : Problématiser l’étude.  Définir les objectifs : la première étape consiste à définir l'objectif général. C'est l'énoncé du problème qui nécessite le recours à l'enquête, la question de départ et les grands objectifs du projet.  Lire l’état de l’art : il s’agit d’utiliser de nombreuses sources d’information pour se renseigner sur le phénomène à étudier. Web, Presse, Revues spécialisées, Revues scientifiques, Livre…une somme de connaissances stables doit être mobilisée pour mieux appréhender le phénomène en dégageant les concepts et les hypothèses à étudier.  Mobiliser l’expérience : la réflexion avancée peut être nourrie par des brainstormings avec des experts sur le domaine. Un réseau doit être constitué fait de chercheurs, de professionnel très expérimenté, mais aussi d’acteur ou de témoins privilégiés voire d’un pré- échantillon.  Définir les Hypothèses : la seconde étape consiste à décomposer l'objectif général en objectifs ou questions plus limités. Ces questions mettent en relation des concepts ou notions pas un mode de corrélation. Les objectifs spécifiques peuvent aussi être énoncés sous forme d'hypothèses.  ÉTAPE B : Designer l’étude  Constituer le set de variables : la troisième étape est la préparation de l'instrument d'observation par l'élaboration du questionnaire en concepts opérationnalisés en indicateurs.  Constituer de l’échantillonnage : quelle population va être interrogée, qui est soumis à l'enquête, ET quelle est la taille de l'échantillon, comment seront choisis les répondants, quelle est la modalité d’échantillonnage ?  Organiser le Plan de collecte : dans la cinquième étape, on tente de définir le plan de collecte, c'est-à-dire la façon d'organiser le déroulement de l'enquête par les différents acteurs de l’ étude. Il comprend aussi l'élaboration d'un pré test  ÉTAPE C : conduire l’étude  Recueillir les données : la sixième étape est le recueil de l'information proprement dit. Le questionnement des sujets et la réalisation sur le terrain selon la modalité choisie dans une démarche de pilotage assurant la qualité de l’observation.  Nettoyer et recoder des données : s’en suit la préparation des données. Les données sont non seulement nettoyées, mais une série d’opérations en génèrent de nouvelles. On réalise le codage des données en prévision d'analyse statistique.  ÉTAPE D : Analyser les données  La septième étape consiste à analyser les données. Les informations sont traitées en fonction de la nature des données et les objectifs de l'étude (description, comparaison ou vérification d'hypothèses). On se préoccupe aussi de la qualité des données recueillies.  L’interprétation des analyses : Les différentes analyses servent de preuves à une interprétation du phénomène et à la réponse aux différentes hypothèses émises. On décrit, compare, répond aux hypothèses et ouvre vers de nouvelles interrogations. Communiquer le Rapport final est le moment stratégique des études. C’est un vrai projet de communication, tant dans sa conception que dans sa diffusion. S’il n’est pas rattaché à la fabrication du support, il est à lui seul un projet qu’il faut appréhender dans sa globalité.
  • 4. + Etape A - Comprendre le problème Fabriquer des hypothèses de travail pour l’étude
  • 5. + Planifier ses études:  Le premier moment d’une enquête est dit descriptif ou transversal en ce qu’elle décrit la population des individus en les discriminant selon les indicateurs normés. Elle peut aboutir à une clustérisassions en sociotype.  Puis peut venir un second temps des explications des phénomènes en faisant corréler un ou plusieurs facteurs les uns avec les autres tout en essayant d’interpréter cette corrélation. Les différentes régressions sont les outils clés de cette approche.  La comparaison permet de distinguer deux échantillons d’une population selon un ou plusieurs critères discriminants  Comparaison expérimentale : on compare un groupe qui a subi des expériences au regard d’un groupe ayant les mêmes caractéristiques, mais qui ne les a pas subies [UNE Variable binaire].  Comparaison cas-témoins : comparer des groupes qui se distingue selon les [Les modalités d’UNE variable kali].  Etude longitudinale : Comparer un même groupe après et avant l’intervention d’un facteur causal. [DEUX OU PLUSIEURS MESURES d’UNE variable]  Les études de tendances visent à tirer périodiquement des échantillons d’une même population à travers plusieurs enquêtes.  Quand il s’agit exactement du même échantillon, on parle d’étude de panel.
  • 6. + Définition des objectifs de l’étude  Il s’agit d’essayer de cadrer le problème sur une étude réalisable dans le temps et le budget imparti.  On distingue des enquêtes descriptives, explicatives, comparatives et/ou longitudinales  La mise en place d’un comité d’expert peut permettre de faire un rendu intermédiaire et par des méthodologies de brainstorming, tester le travail préalable et les hypothèses émergentes  Il faut pouvoir se documenter et s’informer pour élaborer des hypothèses réalistes  Information documentaire : on cherche dans la documentation préalable des descriptions du phénomène, des théories, des explications, etc.  On recherche du plus général au plus spécifique par rapport au sujet  Parfois on établit une préenquête qualitative et ouverte auprès d’experts, auprès de témoins privilégiés ou auprès de la population cible en petit échantillon non représentatif  On n’oublie pas de se documenter sur l’existence d’études préexistantes.  Quand le budget le permet, on peut préparer son étude par une préétude qualitative ouverte  Parfois on établit une préenquête qualitative et ouverte auprès d’experts, auprès de témoins privilégiés ou auprès de la population cible en petit échantillon non représentatif  La préétude n’est pas une mini-étude, mais bien une recherche de la plus grande variabilité du phénomène sur un échantillon moindre (notamment avec la question ouverte"autre").
  • 7. + Choisir le type d’étude : variables qualitatives ou quantitatives  On dit des variables d’une enquête qu’elles sont ouvertes ou fermées, qualitatives ou quantitatives, mais par extension (et abus de langage) on parle d’un projet d’étude"qualitative"ou"quantitative":  Étude qualitative : Une enquête possédant de nombreuses questions ouvertes qualitatives d’ordre textuelles ou images qui subiront un traitement postérieur par thématisation, synthèse et résumé. Ce sens des enquêtes à"large maille"pour appréhender des phénomènes complexes, mal connus ou en phase préparatoire d’une enquête. On aborde souvent les représentations, les modes de vie, les types de discours par une enquête qualitative. On traite aussi les situations nouvelles, les innovations ou les pratiques marginales ou atypiques…  Études quantitatives : Une enquête possédant de nombreuses questions fermées (pas nécessairement) quantitatives, mais qui subiront des analyses et des traitements quantitatifs de dénombrement pour décrire, trier, comparer et évaluer des facteurs d’un phénomène. Cette approche extensive est nécessaire sur des grands nombres afin de réduire l’observation d’une réalité à des marqueurs précis qui sont corrélés aux phénomènes étudiés. Cette construction de la réalité doit être mise à l’épreuve d’une discussion scientifique.  On distingue aussi l’approche individuelle de l’approche de population. c’est à dire la logique de l’étude de cas ou étude clinique ou l’on s’intéresse à l’individu de manière extensive et l’étude de population qui s’intéresse à un phénomène précis et à ses facteurs déterminants  L’échelle de distinction entre les différentes approches repose sur la capacité à réduire la réalité à une grille de facteurs précis. Plus la réalité est complexe, inconnue et subjective plus l’étude sera globale et ouverte. Plus le phénomène sera étudié et connu plus on tendra vers des approches quantitatives et fermées.
  • 8. + Fabriquer les hypothèses On doit choisir les hypothèses les plus utiles et les plus plausibles au regard de l’étude préalable. On essaye d’avoir un juste équilibre entre l’utilité de l’étude (au regard de la problématique et des possibilités de trouver une réponse pertinente). Facteurs (ou concepts) Les relation Indicateur Définir les concepts qui décrivent le phénomène étudié et qui sont susceptible de l’influencer La relation permet de définir le lien de corrélation qui devrait lier les facteurs entre eux C’est une variable observable qui permet de donner sens à la variation du concept. Elle doit être facilement observable et corrélée aux états du concept Donner des exemples clair et anticiper sa variation. Donner des relations qui sont plausible et logique. Ex. plus le niveau d’étude est élevé, plus le salaire est élevé Ex. Température est un indicateur corrélé à la chaleur du climat ou à l’état de santé d’un patient… Facteur explicatif Indicateur 1 Indicateur 2 Indicateur 3 … Concept expliqué Indicateur 1 Indicateur 2 Indicateur 3 … Relation Pour étudier les notions qui constituent l'objet de l’enquête, il faut trouver les indicateurs empiriques, des moyens de les approcher, de les mesurer. On distingue donc le niveau théorique de la notion, le niveau intermédiaire des indicateurs, et le niveau de réalité des questions-réponses.
  • 9. + Système de documentation et reproductibilité des résultats  Journal de recherche  Dispositif d’annotation
  • 10. + Etape B - Extraire les données S’assurer de la qualité des données
  • 11. + Choisir sa méthode d’enquête selon les cas à observer  Il existe plusieurs méthodes qui se distinguent par la méthode de collecte de données et l’objet étudié.  L’analyse de données permet bien souvent l'observation de traces recueillies indépendamment du projet de l’étude, mais qui ont la particularité d’être des marqueurs des phénomènes étudiés.  Observation directe permet de relever des données directement en contact avec les phénomènes étudiés. Ils sont enregistrables. Ce qui n’empêche que l’observateur peut être engagé ou pas dans la situation voire médiatiser son observation.  L’expérimentation (ou expérience) consiste à modifier intentionnellement un facteur dans le phénomène étudié pour observer ses conséquences sur les autres facteurs. La méthode peut être plus ou moins contrainte dans un"laboratoire".  Le questionnaire d’enquête vise à relever des témoignages du phénomène auprès des acteurs en lien avec le phénomène pour qu’ils nous rapportent, nous représente une réalité vécue, une opinion, une croyance, des imaginaires.
  • 12. + Observer un phénomène directement  Le cas de l’étude directe de données.  On peut utiliser des données non standardisées déjà existantes et appliquer une standardisation par codage  Les données dites primaires peuvent être de plusieurs natures : Mesures quantitatives, texte, vidéos, images.  Elles sont recodées selon une règle de transformation des données transparente et repliable.  Les données peuvent être recodées de manière algorithmique ce qui limite les risques d’erreurs  On parle d’observation directe quand l’enquêteur est en prise directe avec le phénomène étudié.  Une observation directe exige lui aussi un codage rigoureux d’où souvent la nécessité d’une préétude préalable pour maitriser la variabilité du phénomène et le type de traitement nécessaire.  On dit que l’observation est participante (située) ou non en fonction de la relation entre l’enquêteur et l’échantillon étudié.  L’observation humaine, mais selon des grilles de codage très claires. En cas de pluralité des observateurs, il faut pouvoir doubler les observations et tester la variabilité de résultats.
  • 13. + Fabriquer une enquête faisable Il existe un cout financier à l’unité d’enquête payée par le client et il faut pouvoir le quantifier. Mais il existe aussi un coût cognitif pour l’enquêté qui est un être vivant et il faut pouvoir aussi l’évaluer. Les deux coûts sont fondamentaux pour mesurer la faisabilité de l’étude. Il faut toujours être sûr que les coûts sont supportés par le client et les interviewés.  Le coût cognitif est une inéquation entre la motivation moins le dérangement.  Motivation : le coût cognitif disponible au début de l’entretien dépend de la motivation de l’enquête qui est variable selon les objectifs de l’enquête, la légitimité de l’enquêteur, les conditions d’administration de l’enquête.  Dérangement : chaque question mène à un dérangement qui dépend :  De la durée pour y répondre  Ouverte ou fermée  Difficile à se remémorer  Gênante, intime, voire personnelle, dans la prise de position  Désirabilité : diminuer le risque que les réponses soient biaisées par une norme supposée attendue par l’enquêteur (par ex à l’associer avec des opinions légitimes ou illégitimes d’une personne connue ou moralement connoté)  On distingue les parties de l’enquête sur les comportements, sur les représentations et sur la description de l’individu.  Astuce pour faire baisser le coût cognitif du questionnaire  Préférer les questions fermées aux questions ouvertes  Poser des questions ciblées et concrètes autour d’éléments/indicateurs simples  Ne pas utiliser un vocabulaire autre que courant dans l’univers de vos interlocuteurs  Faire des questions courtes avec peu d’items (5- 6 au plus)  Toujours placer les échelles dans le même sens et changer le moins possible d’échelles  Les échelles doivent avoir un nombre suffisant de nuances (en général 4 ou 5 items)  Ne pas faire appel à des souvenirs de la mémoire longue ou moyenne (sinon avec une assistance mémorielle ou une recontextualisation)  Éviter les questions qui obligent à refuser, à négativiser, à demander le changement  Une question qui à une modalité qui dépasse 80% est une question mal construite
  • 14. + La qualité de l‘extraction de données : guide de l’enquêteur  De nombreux biais peuvent se glisser dans l’administration d’un questionnaire de mauvaise qualité.  Un questionnaire faisable : les conditions d’administration déterminent la charge cognitive demandée  Le questionnaire à 1) une présentation brise-glace qui campe un contrat de communication rassurant et motivant, l’accroche (2) des questions claires avec des instructions pour les enquêteurs ayant levé toutes les ambiguïtés (3) les remerciements, formules de politesse et suite…  Le questionnaire sera toujours testé et analysé sur un échantillon pilote de 20 ou 50 individus en condition réelle d’extraction. Il s’agit d’évaluer les représentations de l’enquêteur et de l’enquêté Pd la passation (complexité, gênes, ruptures, incohérence). Le coût cognitif doit être compensé par un contexte de mise en confiance  Les Biais introduits par le [manque] de sérieux des enquêteurs durant l’enquête.  Motivation et pugnacité gérées par des réunions de motivation et d’explication.  Guide de l’enquêteur ou on explique les enjeux du questionnaire et le sens de chaque question  La méthode d’extraction à une influence sur le coût cognitif possible. Face à face, téléphone, auto administrée, observation directe ?
  • 15. + Fabriquer son échantillon représentatif  Un échantillon représentatif : étudier une partie de la population en s’assurant d’une homologie des deux.  Population parente : somme totale des individus (unité statistique) définis par des caractéristiques structurales, comportementales ou représentationnelles  La représentativité doit assurer des réponses plus ou moins identiques entre échantillons et population parente  Une enquête exhaustive est non seulement souvent impossible, mais sa réalisation serait très difficile et donc emplie d’erreur. Un échantillon doit être défini en taille (n vers 1000 à 10000) et selon la méthode d’échantillonnage.  La meilleure méthode :"chaque individu a une égale chance d’être présent dans l’échantillon"  Techniques probabilistes ou aléatoires : Pour supprimer tous les biais, le tirage systématique et/ou aléatoire est le meilleur moyen. Cas de population instituée (en entreprise par exemple). La population peut être tirée au hasard en strates (tirage au hasard à chaque niveau) ou par grappe (tirage en strates avec exhaustivité de la dernière strate dite grappe)  http://www.statcan.gc.ca/edu/power- pouvoir/ch13/prob/5214899-fra.htm.  Méthode des quotas : Reconstituer une population ayant des critères donnés (variables contrôlées).Cet échantillon peut être redressé a posteriori pour correspondre aux quotas.  À l’inverse un échantillon peut être un prisme dans le sens où il définit une population selon ses critères ou ses techniques de constitutions. Population qu’on découvrira à postériorité (cas des populations définies par leurs comportements ou leur représentation)  Il reste l’échantillonnage par boule de neige dans les réseaux d’individus connectés jusqu’à épuisement du réseau. Pour l’analyse, on doit connaître les caractéristiques de l’échantillon, vérifier la représentativité, évaluer les non-réponses aux questions.
  • 16. + Etape D – Nettoyer et recoder ses données Comparer des variables deux à deux.
  • 17. + TD – Installer son espace de travail dans R.  Installer R et R Studio  Installer les packages  instables.packages("plots", dep=TRUE)  installe.packages("epitools")  etc.  Charger les packages avant utilisation  library(epitools)  library(prettyR)  Etc.  Sauvegarder le Travail  Les Datas : save(dataset, file=”xxxx.Rdata”)/load("xxxx.Rdata")  Les instructions : savehistory(“myfile.R”)  L’espace de travail complet : sache.image(file ="myfile.Rdata")  Écrire un fichier csv write.table(MyData, file ="MyData.csv",row.names=FALSE, na="",col.names=FALSE, sep=",") ou write.csv(MyData, file ="MyData.csv",row.names=FALSE, na="")  Importer des données d’un fichier  Chemin de base : setwd("D:/moque")  readR ::smp <- read.csv("D:/moque/smp1.csv")  haven :: pour SAS ou SPSS ou Stata  foreign:: read.dbf("fichier.dbf") pour Dbase  Importer ses données d’une BD  library(DBI)  library(RSQLite)  con <- DBI::dbConnect(RSQLite::SQLite(), dbname = "bdd.sqlite")  dbListTables(con)  dbListFields(con, "mtcars")  cars <- dbReadTable(con, "mtcars")  cars <- dbGetQuery(con, "SELECT * FROM mtcars WHERE cyl = 4")  dbDisconnect(con)  Importer d'un Google SpreadSheet  googlesheets4 :: test <- read_sheet("1KJgGhd4mVuutfsudnj- zd7wXskM2Djg104JK9hcTx44", sheet ="YOUTUBEChannel", na="")  Supprimer des objet  Hells.search("fonction") Pour aller plus loin https://cran.r-project.org/doc/manuals/r-release/R- data.html#Image-files
  • 18. + L’intervalle de confiance des résultats Une règle veut que le taux de réponse d’un échantillon représentatif soit d’au moins 80%. À partir de là on peut estimer les chances d’avoir une réponse représentative :  le passage du particulier, l'échantillon, vers le général, la population se fait par inférence. Cette inférence était un risque qu'il faut prendre à partir d'un calcul rationnel l'échantillon reste une estimation de la population.  Les résultats obtenus dans l’échantillon permettent de calculer la chance que nous avons de connaître le véritable résultat dans une fourchette probable  On appelle cette fourchette l’intervalle de confiance qui est restreint proportionnellement à la taille de l’échantillon  On doit fixer son niveau de confiance, et en tirer une constante de confiance pour avoir la marge +/- du résultat (90%, 95%, 99%)  P le pourcentage et ne la taille de l’échantillon ICx c = C p*(1- p) n
  • 19. + Préparation des données avec Open Refine  Encodage et agrégation : Il faut nettoyer les données de toutes les erreurs, les manquements et les erreurs de remplissage.  Décider d’une valeur aux non- réponse  Agréger les réponses en modalités aux réponses suffisantes  Encoder les variables en variables plus synthétiques ou plus combinées (type indice)  Changement de nature entre variables qualitatives et variables quantitatives On distingue les variables primaires présentent lors de l’observation, des variables synthétiques issues d’opération d’agrégation  Il faut produire un dictionnaire de codes qui résume la nature des variables primaires et des variables synthétiques  Les sets de données contenant toutes les réponses s’appellent le tableau de données  Il faut penser à parcourir entièrement le set de données pour vérifier les incohérences et les erreurs.
  • 20. + TD – Manipuler ses données dans R  Variable 1 dim = vecteur  taille <- c(1.88, 1.65, 1.92, 1.76)  class (vec)  length(vec)  rep(c("a","b"), 3) (répète en boucle)  sec(from, to, by=n) (ou raccourcis from:to)  name(vec)|unname(vec) <- c("toto", etc.) #pour vecteur nommé  vecteur[n] or [n:n] or [c(1, 3, 5)] ou [c(-3, -6)] ou !(13, 24)  vecteur[c("Mary", "Michael", "John")] #pour les nommés  Vecteur[vecteur comme condition == ou != etc.)] avec & ou | (shift ale L)  Le cas de !is.na(vecteur) pour"qui ne sont pas NA"  which (v == valeur)  subset(dataset, condition & | (shift+alt+l) condition 2)  Les facteurs : un vecteur nommé fermés  levels(d$var)  v <- factor(c("H", "H", "F", "H"), levels = c("H", "F"))  Questionr : iorder(d, "qualif")  d$qualif.abr <- factor(d$qualif, levels = c("Ouvrier specialise", "Ouvrier qualifie", "Employe", "Technicien", "Profession intermediaire", "Cadre", "Autre"), labels = c("OS", "OQ", "Empl", "Tech", "Interm", "Cadre", "Autre")) || table(d$qualif, d$qualif.abr) # renmmoer les labels  var_label(femmes$id_menage)<- "blablabla blaa" #description de la variable
  • 21. + TD – Manipuler ses données dans R  Manipuler le tableau de donnée  view(smp)  dim(smp); nrow(smp), ncol(smp)  names(smp)  str(smp); summary(smp)  smp$variable; head(smp$variable, n); tail(smp$variable, n), sort(smp$variable, decreasing=TRUE)  length(v)  subset()  newdata <- smp[order(var1, - var2),]  cbind (d1, d2) #pour coller deux tableau ou rbind (d1, d2) pour ajouter des lignes  merge(d1, d2, by="id") (voir et là)  Y a-t-il des points manquants dans nos données ? // na_records = apply(data, 1, function (x) any(is.na(x))) // data[na_records,]  Avec questionr  library(questionr)  lookfor(d, "trav")  describe(d, c("age", "trav.satisf"))  Les listes (objet disparates)  mylist <- list(1:5, c("bonjour", "aurevoir"))  length(lylist) #nombre d'elem  Ces elem peuvent être nommé  mylist <- list(deschifffres = 1:5, etdeslettres= c("bonjour", "aurevoir"))  largeliste <- append(l1, l2) #une seuleliste et non pas une liste avec deux liste de la fonction list  mylist[n] renvoie une liste avec n l'élem  mylist[[n]] renvoie UN element (son contenu)  mylist$elem
  • 22. + TD – Manipuler ses données dans R : Dplyr et Tidyr  Construire une variable calculée  tbl_df(smp) #convertie en Tibble  glimpse(smp) #résumé  rename(tb, newcol=oldcol)  separate(smp, col, sep="", remove=TRUE, convert=TRUE) #separe une colonne  unite(data, col, cols, sep ="_", remove = TRUE) uni des colonnes en une seule  mutate(smp, newcol = window_operation(cols)) OR transmute(smp, newcol = window_operation(cols)) #fait disparaître les anciennes  Fonction indviduelle  row_number() #numéro de ligne  min_rank()|dense_rank() # rang exact ou compacté  percent_rank | cum_dist() % du rang sur 1  ntile(x, n) # n tile  lead()|lag() # celui de devant ou celui d'avant  Sélection dans le Dplyr du tidyverse  Sélectionner des lignes  arrange(smp, col | desc(col), col2…) #tri de données  filter(smp, condition, condition2)  distinct(smp) #dédoublonne ! mettre toute les variable comme dans un subset  slice(smp,n:n) / sample_frac(tbl, o.n, replace = TRUE) / sample_n(tbl, n | -n, replace = TRUE) / top_n  Sélectionner des colonnes  select(smp, everything() | nomcols | col1:colN | -nomcols | contains("") | start_with("") |end_with("") | matches("xpreg") | one_of(c("1","2")))
  • 23. + TD – Regrouper les données avec dplyr  Grouper les données  tbl_df(smp)  databy <- group_by(tbl, cols) #nom de la colonne sans guillemet ni adressage juste le nom  ungroup(tbl, cols)  Fusionner les lignes  summarize (tbl, newcol=fonction(col))  summarize_each(tbl, funs(fonction))  count(XXXXXX)  Fonctions summarize  first())|last()|nth() #enième  n() #count | n_distinct()  Sum() | min() | max() | mean() | median() | var() | sd()  IQR ()  paste0(keywords, collapse = ", ") # concatenation  Joindre 2 tableaux  left_join (tbl1, tbl2, by ="") Ajout du tbl2 si clés communes  right_join (…) Ajout de tbl1 si clés commune  inner_join (…) que les lignes communes et supprime le reste  full_join(…) garde les deux tableaux en un seul même si pas de clés commune
  • 24. + Recoder les variables dans R  Renommer  names(bd)[names(d)=="emitter_type"] <-"emit"  Supprimer  remove(D)  basedonnees$variable <- NULL  BD[-16, c(-12, -16)]  Subset (BD, condition 1)  Recoder  To bin  var <- ifelse(test, 1, 0)  To character/numérique  v.char <- as.charactere(v)  V.nom <- as.numerique(v.char)  ="seconds|minutes|etc")  To Class  range(d$âge) pour avoir les min et max // d$age20 <- cut(d$âge, c(min, 20, 40, 60, 80, max) ou un Nb de classes, include.lowest = TRUE et/ou right = FALSE, labels = c("<20ans","21-40 ans","41- 60ans","61-80ans",">80ans")) // table(d$age20)  library(questionr) // icut(d, var)  d$age6cl <- quant.cut(d$age, 6) pour des classes à eff égal  quantile(var, prob=c(0.1,0.2))  To factor  v<- factor(v, levels =, labels =)  levels(d$fs.fac)  Compacter factor  v.comp <- as.character(v) // v.comp[v =="Ouvrier spécialise"| v =="Ouvrier qualifie"] <- "Ouvrier"// v com[v =="Profession intermédiaire"| v =="Technicien"] <-"Intermediaire"// v.comp <- factor(v.comp)  library(questionr) // irec(d, qualif)  V.distr <- interaction(v1, v2)  Normaliser une variable  scale(as.numeric(vr.quanti), center = TRUE, scale = FALSE) #scaler une variable centrée sur la moyenne  Pour qualifier les Na  V.sansNA <- as.character(v) // v.sansNA[is.na(v)] <-"Manquant"// v.sansNA<- factor(v sansNA)
  • 25. + La gestion des dates  To date  library("lubridate")/library("magrittr")  Lire txt to date : , ymd(), ydm(), ymd_hms("2011-06-04 12:00:00", tz = "Pacific/Auckland"), hms("03:22:14"), today() ou now()  Mettre à jour la date : update(this_moment, hours = 8, minutes = 34, seconds = 55)  Extraire une partie de date : year(date)/month(date, label=TRUE)/mday(date)/wday(date, label=TRUE)/yday(date)  Calculs des intervalles  Calculer un intervalle : time_length(interval(start = ymd(date), end = today()), unit ="seconds|minutes|etc") Ou time_length(arrive %--% leave, unit ="seconds|minutes|etc") OR as.period()  Chevachement ? int_overlaps(inter1, inter2)  Calculs sur date: une date +/- years(n), months(n), days(n). Ex : meetings <- meeting + weeks(0:5)  with_tz(date, "Asia/Hong_Kong") Liste des tz : https://en.wikipedia.org/wiki/List_of_tz_database_time_zones  Rank  rank(var, na.last = TRUE|FALSE|NA| "keep", #la gestion des NA en dernier, en premier ou faire disparaitre ou garder en NA ties.method = "average"|"first"|"random"|"max"| "min")  Rang décroissant : max(rank(var, ties.method="max"))+1-rank(var, ties.method="max")  Les 25 premiers : domaines$url[max(rank(domaines$Hu b, ties.method="max"))+1- rank(domaines$Hub, ties.method="max") < 25]  Valeurs aberrante  boxplot(var)$out #les valeurs  which(var %in% boxplot(var)$out) #les indices  domaines[domaines$sumfbshare %in% boxplot(domaines$sumfbshare[domai nes$sumfbshare >1])$out,]  domaines[!(domaines$sumfbshare %in% boxplot(domaines$sumfbshare[domai nes$sumfbshare >1])$out),]
  • 27. + La relation au cœur des facteurs comportementaux  Deux tables : Des nœuds et des relations  Des qualifications du réseau et de ses sous réseau  Des qualifications structurales des nœuds  Analyse du comportement relationnel comme facteurs expliquant ou expliquer  Des visualisations de réseaux heuristiques  Analyser les réseaux (comparaison ou longitudinal)  Sum Nœud, Sum Degré, Statistiques des degrés (Moyenne, Quartiles, Déciles, etc.), Statistiques des propriétés qualité et qu’anti  Plus court Chemin, Diamètre, Chemin Moyen, Coefficient de clustering, Densité  Composante connexe; Modularity (w Resolution), NB Communautés
  • 28. + Analyse de la situation du nœud  [degree] Eccentricity ou HarmonicCloseness : l’isolement ou la centralité d’un noeud dans le réseau (basé sur la somme des distance à tous les nœuds)  [clustering] : degré d’intégration dans une communauté dense du style « small world ». Effet membre d’une secte.  [indegree] Eigencentrality or Page Rank Or Authority : l‘autorité base sur le calcul des liens entrants  [outdegree] Hub = La qualité de vigie d’un noeud  (Strong)Component Number OR Modularity Class : groupe de nœud autonome et Groupe de nœud par clustérisation de proximité  Composante connexe/Coefficient de clustering
  • 29. + Analyse du comportement de lien  Type de lien (directed – undirected )  Source – destinataire et leurs attributs respectifs  Poids des liens  Propriétés des liens et multiplexité  Durée de vie du lien (Intervalle de dates)
  • 30. + Les grandes lois des réseaux  Rôles : Similarités des comportements envers les autres [équivalence structurale]  Effet Saint Mathieu: ce qui attirent beaucoup attirent encore plus  6 degrés de connexions  La limite des 148 contacts actifs (690 max)  La taille compte (pour l’accès aux ressources)  Relation influence / sélection dans la Network théorie
  • 31. + À voir  Intervalle de confiance  Moyenne : t test(d$heures.tv, conf.lever = 0.9)  D’une pro pour variablebinaire: prop.test(table(relevel(d$sport,"Oui")), conf.lever = 0.9)  Ou encore : library(binom) / binom.confine(x,ne méthode=”all”)
  • 32. + Text Mining et Text analysis R et Iramutec
  • 33. + Manipulation de charactères  String et library(stringer)  str_length()#nb caractères  tolower(), toupper() OU stringr:: str_to_lower(), str_to_upper() et str_to_title()  str_count(numberstring, "3") #compte le mot ET str_detect(d$adresse, "Libération")  str_locate_all(numberstring, "3")  str_subset(d$adresse, "Libération") #ne garde que ceux qui ont le mot recherche  str_sub(d$ville, 1, 3) #découpe ou -3,-1 pour arrière  str_extract(d$adresse, "^d+") #extraire OU str_extract_all(d$adresse, "d+") OU library(tidyr) OU extract(adresse, "type_rue", "^d+ (.*?) ", remove = FALSE)  strs_plit("Graphs and Histograms", " -", simplify = TRUE) #couper une chaine de caractère OU tidyr::separate(chaine, c("genre", "prenom", "nom")) en n variables  sub() et gsub() #remplace 1fois ou tous OU str_replace(numberstring, "d", "") et str_replace_all(numberstring, "d", "") str_replace_na(x)  paste() #concatene avec "sep=" pour deux variable ou "collapse=" pour la même variable en 1 seul champs OU str_c(c(numberstring, teststring), sep=" ") #concatene  whitespace :: str_trim(string, side = c("both", "left", "right")) OR str_squish(string) les option fixed("h") annule les regex pour prendre la lettre littéralement le caractère "" bloque l'interpretation du code comme """ pour 1 guullemet ou encore "" pour un backslash ou "u00b5" pour un caractère spécial  Regex  "." un caractère MAIS ALORS "." pour un point et "" pour un .  d un chiffre ou s un espace  "^" ou "$" expression est au début ou à la fin du mot DONC "^un mot$" donne le mot seulement  [] ou et [^] ni, comme [abc] ou [^abc]. On peut utiliser aussi |  répétition de la lettre : ?(0;1) / +(1 et plus) / * (0 et plus) /{n}: exactly n /{n,}: n or more/ {,m}: at most m / {n,m}: between n and m Simulateur : https://regex101.com/
  • 34. +
  • 35. + Etape 1 - Obtenir un corpus  #Corpus à partir d'un vecteur  library(tm)  CorpusVect <- VCorpus (VectorSource(txt$excerpt))  #corpus à partir d'un repertoire de PDF  listdoc <-dir(file.path (".", "Histoire"))  listdoc  corpus.source <- Corpus(DirSource(file.path (".", "Histoire")), readerControl = list(reader=readPDF)) # readDOC pour du word | readPlain pour du txt | readXML pour de l'XML  #corpus à partir d'une list d'url  corpus.source <- Corpus(URISource("http://edutechwiki.unige.ch/fr/Tutoriel_tm_text_mining_package"))
  • 36. + Etape 2 - Lire un corpus  # Lire un document  inspect(CorpusVect[[4]])  CorpusVect[[4]]$content  CorpusVect[[4]]$meta  CorpusVect[[4]]$meta$author  meta(CorpusVect[[4]], "author")  # Une liste de documents  inspect(CorpusVect[1:6])  CorpusVect[meta(reuters,"id") == "n" & meta(reuters,"heading") == "letitre"]  #appliquer une fonction sur tous les docs  lapply(CorpusVect[1:2], as.character)  #occurence d'un mot ou d'une liste de mot  tm_term_score(CorpusVect[[1]], c("la"))  inspect(DomCorpus[tm_term_score(CorpusVect[[1]], c("Twitter")) >0])
  • 37. + Etape 3 – Transformer le corpus  CorpusVect <- tm_map(CorpusVect, content_transformer(tolower)) # et toutes les fonction text usuelle de R  CorpusVect <- tm_map(CorpusVect, removeWords, stopwords("french"))  CorpusVect <- tm_map(CorpusVect, removePunctuation)  CorpusVect <- tm_map(CorpusVect, stripWhitespace)  CorpusVect <- tm_map(CorpusVect, removeNumbers)  CorpusVect <- tm_map(CorpusVect, stemDocument, language="french")  CorpusVext <- tm_map(CorpusVect, PlainTextDocument)  dfOriginal$texttransform <- lapply(CorpusVect, as.character)  Wordcloud:: wordcloud(CorpusVect,…)
  • 38. + Etape 4 – Générer la matrice de Mots # Create a document term matrix.  tdm <- DocumentTermMatrix(CorpusVect, list(dictionary=leDictionnaire))  library(RWeka ) Library(textmineR) AND TrigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 1, max = 3)) AND tdm <- DocumentTermMatrix(CorpusVect, control = list(tokenize = TrigramTokenizer))  inspect(tdm)  tdm$dimnames$Docs  tdm$dimnames$Terms  # Chercher les termes du corpus  findFreqTerms(tdm, 15, 100) #min et max  findAssocs(tdm, "thermal", 0.5)  tdm2 <- removeSparseTerms(tdm, 0.9) #garde les mots qui ont moins de N vide ces à dire les plus fréquents  # Chercher les termes les plus frequent par document  Termes <- findMostFreqTerms(tdm, n=10) AND names(termes[[1]]) OR lapply(termes, names)  sort(colSums(as.matrix(tdm)), decreasing = TRUE)[1:20]  plot(sort(colSums(as.matrix(tdm)), decreasing = TRUE)[1:20])  names(sort(colSums(as.matrix(tdm)), decreasing = TRUE)[1:20])  # clusterisation rapide  tdm2 <- scale(tdm2)  tdmdist <- dist(tdm2, method="euclidean")  tdmfit <- hclust(tdmdist, k=6, border ="red")  plot(tdmfit)  #transforme la matrice de mots en df  dftdm <- as.data.frame(as.matrix(tdm))
  • 39. + Analyser un corpus avec Iramuteq  Le format texte  **** (index à 4 chiffres-  *nomvarX_modaliteX  Corpus  Convertir un dataframe en texte iramuteq  iram_text<- subset(bhnum, select=c(itemtype, contenus))  iram_text$var1 <- paste("**** *var1_", iram_text$var1, sep ="") #la première variable  iram_text$varN <- paste("*varN_", iram_text$varN, sep ="") #les autres variables  iram_text$contenus <- gsub("[^[:alnum:],]","", iram_text$contenus) #enlève ponctuation  iram_text$contenus <- tolower(iram_text$contenus)  iram_text$contenus <- paste("n",iram_text$contenus,"n", sep="") #retour à la ligne write.table(iram_text, file="tutoramuteq.txt", sep="", quote=FALSE, row.names=FALSE, col.names=FALSE)
  • 40. + Etape D – Analyse Mono Varié des données Comparer des variables deux à deux.
  • 41. + Analyser une variable qualitative  Il s’agit ici d’étudier des variables selon leurs modalités soit quantitatives soit qualitatives.  Quand la modalité est qualitative, l’échelle des modalités est soit nominale ou soit ordinale  Une variable qualitative a pour fonction de discriminer une population, ses comportements et ses représentations selon ses qualités.  L’observation peut amener à une recodification de la variable voire à la fabrication d’indice.  On repère le mode et sa part dans la population (la modalité la plus présente)  Dans les variables qualitatives nominales, on tris les modalités par ordre ASC ou desc pour regrouper les modalités par taille et observer si ces regroupements cachent d’autres variables  Dans les variables qualitatives ordinales, l’ordre ne peut être changé, car c’est la répartition qui est signifiante. On peut y repérer la médiane.  Une variable qualitative prend tout son sens dans un ensemble de variables autour d’un thème donné ou en comparaison d’autres études de référence.
  • 42. + Analyser une Quantitative quantitative  Il s’agit ici d’étudier des variables selon leurs modalités soit quantitatives soit qualitatives.  Quand la modalité est quantitative, l’échelle des modalités est soit discrète (séparation stricte) soit continue (infinie décimale)  Une variable quantitative vise à mesurer l’intensité d’un phénomène selon une variable mesurable  On repère le mode, la médiane et la moyenne. C’est l’étude entre ces trois chiffres qui peut être très instructive sur la variable.  On calcule aussi l’écart type de la moyenne, l’étendue, les quartiles et les déciles pour mieux comprendre la répartition  On peut encoder une variable quantitative en classes qualitatives (ex. âge)  La notion de test paramétrique ou non paramétrique est essentielle
  • 43. + Analyse Monovariée dans R  Variable Quali  table(v, useNA=”always/ifany/no”) ou summary(v); sort(table(v), decreasing = TRUE); freq(d$qualif, cum = TRUE, total = TRUE, sort ="inc", digits = 2, exclude = NA)  which (v == valeur)  pro.table(tab, margin=1 OR 2)*100 pour proportion des effectifs en % ou sur la la ligne ou la colonne  Variable Quanti ,  summary(v)  mean(v, na.rm=true)  median(v)  min(v)  max(v)  sd(v)  range(v)  quantile(v,prob=c(0.1,0.2))  La plage interquartile est souvent utilisée pour rechercher des valeurs aberrantes (outlier) dans les données : <Q1 - 1.5 IQR ou > Q3 + 1.5 IQR.  IQR <- (quantile(var, prob=0.75, na.rm = TRUE)-quantile(var, prob=0.25, na.rm = TRUE))  absup <- quantile(var, prob=0.75, na.rm = TRUE)+IQR*1.5  abmin <- quantile(var, prob=0.25, na.rm = TRUE)-IQR*1.5  Variables à réponses multiples library("questionr")  multirep <- multi.split(var, split.char ="")  multitable <- multi.table(multirep, freq = TRUE)
  • 44. + Graphique de base  plot(fonction(var.quanti ou var.quali) | var1, var2 |var1 ~var2 |table(var1, var2) , main ="titre" , sub = "sous titre" , xlab = "titre des x" , ylab = "titre des y" , las= 0|1|2|3 #le style , asp = 0.02 , type = "p"|"l"|"b"|"c"|"o"|"h"| "s"|"S" , pch = n #typedepoint , cex = n|varquanti #tailledupoint , col = unepalette(indices|varqu ali))  text(var2, var1, var_text, pos=1|2|3 )  boxplot(var.quanti, main ="Nombre d'heures passées devant la télé parnjour", xlab="test", ylab ="Heures")  hist(d$heures.tv, main ="Nombre d'heures passées devant la télé par jour", xlab ="Heures", ylab ="Effectif", probability=TRUE, class=n, col="blue")
  • 45. + Ggplot2 dans R  library("ggplot2")  ggplot(data = labd, aes(x = var.x, y = var.y, col = var.multiple))+ geom_point(colour = var.coul, alpha = .n, size=n, shape = var.shpe , fill = ) # si variables enfermer param dans aes( colour = var, etc)  ggplot(data = labd, aes(x = var.quanti, y = var.quanti)) + geom_point() + geom_smooth(method ="lm", level = 0.9))  ggplot(data = labd, aes(x = var.x, y = var.y, group|col = var.multiple)) + geom_lines()  ggplot(data = labd, aes(x = var.quali|factor(1), y = var.quanti, fill = var.couleur)) + geom_boxplot()  ggplot(data = labd, aes(x = var.quali, y = var.quanti, col = var.quali)) + geom_jitter()  ggplot(data = labd, aes(x = var, fill = country))+ geom_histogram(binwidth = 0.1, colour ="dark grey")
  • 46. + Etape E - Corrélation et prédiction d'une variables QUANTIATIVE Kh2 et Regressions
  • 47. + Corréler deux variables qualitatives : Tris croisés et Khi2  On peut rechercher les corrélations entre deux variables qualitatives en faisant un tri croisé en tableau  La variable en colonne est la variable à expliquer, la variable en ligne est la variable explicative  On considère que les variables sont indépendantes si le tableau observé est proche du tableau théorique de répartition.  S’il est différent, alors le test du Khi2 permet de montrer si cette différence est suffisamment significative pour deviner une corrélation  On calcule donc un écart absolu quand on fait la différence entre l'effectif observé et l'effectif théorique. Ces écarts absolus montrent quand ils sont positifs qu'il y a x individus en trop par rapport à la situation d'indépendance (phénomène d'attraction) et quand les valeurs sont négatives (phénomène de répulsion) qu'il manque des individus par rapport à la situation d’indépendance.  On calculera l'écart relatif en rapportant l'écart absolu sur l'effectif théorique afin de pouvoir exprimer l'intensité de la répulsion ou de l'attraction entre modalités de deux variables.  La distance Khi2 est la somme des Khi2 de chaque case calculée comme l’écart relatif multiplié par l’écart absolu
  • 48. + Analyse quali dans R  Table (v1, v2) ou xtabs(~v1+v2, dataset)  prop.table(tab, margin=1 OR 2)*100  Graphique  barplot(prop.table(table(dab$med ia_type, dab$emitter_type)), legend.text = TRUE, col = rainbow(9))  library(vcd)/ mosaic(~ sport + cuisine + sexe, data = Bd, highlighting ="sexe", main ="Exemple de graphique en mosaïque à 3 dimensions")  Test de Chi2  Tab <- table(v1, v2) khi <- chisq.test (tab) khi$residuals (résidus de pearsons) khi$stdres (résidus de Haberman ou Peason ajusté)  mosaicplot(v1~ v2, data = d, shade = TRUE, main ="Graphe en mosaïque")
  • 49. + Corréler deux variables quantitatives : corrélation et régressions  On peut comparer la variance de deux variables d’un même échantillon si elles sont de même nature. On dit alors que les échantillons sont appariées. On utilise le Test de Student pour les P (même variance ?) ou de Wilcoxon/Mann- Whitney pour les non-P.  Deux variables quantitatives forment un nuage de points qui peuvent entretenir une relation qui signifierait une corrélation entre les phénomènes  On peut aussi utilisé la comparaison linéaire de deux variables même si elles sont différentes. On utilise alors les coefficients de Corrélation de Pearson (Pour les NON-P. la Corrélation de Spearman).  Cette corrélation peut être approchée par une régression dites linéaire (qd la fonction est une droite) ou muliple ou polynomiale (asymptotique, exponentielle, etc).  Le coef. de corrélation r compris entre -1 et +1 montre le sens d’un corrélation  Test T (p) donne la validité d’une corrélation significative  r2 (coefficient de détermination) donne l’intensité de la corrélation soit la part de Y expliqué par X rXY = (Xi - X)´(Yi -Y) i=1 n å (Xi - X)2 i=1 n å ´ (Yi -Y)2 i=1 n å
  • 50. + Analyse quanti dans R  Tests de deux var appariées  t.test(v1, v2) (si normal shapiro.test(v) et même variance var.test(v1~v2))  wilcox.test(V1, V2, paired = TRUE) pour les non-p  t.test(v, mu=valeur de référence)  Graphique  plot(rp99$dipl.sup, rp99$cadres, ylab ="Part des cadres", xlab ="Part des diplômés du supérieur", pch = 19, col = rgb(1, 0, 0, 0.1))  plot(jitter(smp$age, factor=n), jitter(smp$n enfant, factor=n)) jitter pour décaler les points et tous les noirs  plots(rp99$diple.aucun, rp99$tx.chom, cex = rp99$pop.tot/10^4) (pour 3e variable)  plotmeans(variable~temps)/interaction.p lot(temps, individus, variables)  Corrélation et Regression  cor(v.quanti1, v.quanti2, method = c("pearson","kendall","spearman"), use ="complete.obs")  Sinon cor.test(x,y, method=”spearman”) pour les non-p  Matrice de correlation  library(corrplot) // mcor <- cor(mtcars)//  corrplot(mcor, type="upper", order="hclust", tl.col="black", tl.srt=45)  col<- colorRampPalette(c("blue", "white", "red"))(20) || heatmap(x = mcor, col = col, symm = TRUE) https://www.youtube.com/watch?v=ys4Q8R9yRxk https://www.youtube.com/watch?v=nzIL8sQ3auI
  • 51. + Regression linéaire simple et multiple  Régression linéaire multiple  reg <- lm(v.quanti1~ v.quanti2 + vQuanti3 + v.quanti…, data = dataset) // summary(reg)  On peut aussi tester la synergie (avec *) entre deux variables pour voir si le modèle additif est simple reg <- lm(v1~v2+V3*V4..., data=dataset)  https://odr.inra.fr/intranet/carto/cartowiki/index.php/Regression_lin%C3%A9aire_avec_R#Re gression_lin.C3.A9aire_simple  Evaluation du modèle : normalité des résidus, homoscédasticité de l’erreur ET valeurs aberrantes.  summary(reg) // coef(reg) //  confint(reg) # intervalle de confiance du modèle // fitted(reg) # les valeurs prédites //resid(reg) #les différences de prédiction.  plot(residuals(reg) ~ fitted(reg), xlab="Valeurs ajustées", ylab="Résidus") //abline(h=0)  Condition d’utilisation et de validité  Normalité du bruit et pas d’autocorrélation des erreur qui prennent une forme hasardeuse. (le bruit est indépendant et sans corrélation) : res<-resid(reg) // plot(res,main="Résidus")// abline(h=0,col="red") // hist(resid(reg), col=« grey »)  Homogénéité des variances.  Chasser les points aberrant qui font levier. Distance de Cook = les coef changent-il beaucoup si on retire certains individus  hist(resid(reg), col=”grey”, main) et plot(reg) et shapiro.test(resid(reg)) et plot(cooks.distance(reg)) ET which.max(cooks.distance(reg))  Interprétation  Interpréter le p pour connaître la significativité de la variable explicative et le p globale du modèle  Le R2 et le R2 adjusté dans les modèles multivariés(et pour comparé les modèle avec R2a)
  • 52. + Regression et predictibilité  Préparer un subset d’apprentissage et un subset de validation  # Splitting the dataset into the Training set and Test set - # install.packages('caTools')  library(caTools)  set.seed(123) #fixer le moteur aléatoire pour reproductibilité  split = sample.split(dataset$Profit, SplitRatio = 0.8) #créer un facteur de split sur la variable dépendante  training_set = subset(dataset, split == TRUE)  test_set = subset(dataset, split == FALSE)  Faire le modèle  Modl = lm(formula = Profit ~ .,data = training_set)  Interpréter  summary(modl)  Prédire  y_pred = predict(regressor, newdata = test_set)  OU y_pred <- predict(regressor, newdata = test_set, interval="pred", level=0.95)  Optimisation des choix de variables  Step(modl, direction ="backward")  Ou library(leaps)//choixOptim <- regsubset(var ~., data=d)/ plot(choixOptm, scale="bic") #"bic"ou"Cp"[C de mallow], ou"adjR2"  Pour réussir une prédiction, les variables explicatives ne doivent pas être intercorrélées tout en étant fortement corrélées à la variable expliquée.  On peut avoir recours à des ACP voir des PLS (Partial Least Squares Regression) pour faire des corrélation sur des facteurs qui par nature ne devraient pas être corrélés
  • 53. + ANOVA - Corrélation entre une variable quali et une variable quanti  Une variable quantitative peut être comparée en classes ou sous- groupes selon les modalités d’une variable qualitative. On utilise pour cela des tests d’échantillons indépendant.  Quand la variable qualitative est binaire, on utilise le Test T de Student non appariée (Pour P Normale et Variance)ou les tests de Kolmogorov-Smirnov ou Mann- Whitney (pour Non-P).  Quand la variable qualitative a plus de deux modalités on utilise le test de l’ANOVA (ou analyse de la variance) pour P et test de KrustalWallis pour Non-P  La variable p permet de connaître les risques d’erreurs à rejeter H0 : Les deux échantillons ont le même comportement.  Chaque test a ses propres paramètres qui permettent de compléter les informations pour analyser les différences.  Chaque groupe est défini selon l’effet différentiel sur la moyenne"a"propre à chaque groupe
  • 54. + ANOVA - Analyse Quanti/Quali dans R  Test  Test T de student en loi normale  qqnorm(var.quanti) ou shapiro.test(v) #normalité  By(var.quanti, var.binaire, sd, na.rm=TRUE) # égalité de variance (+-50%)  t.test(var.quanti~var.binaire, var.equal =TRUE) si variance égal sinon rien  var.test(Vdegroupe1~ Vdegroupe2) #même variance  wilcox.test(Vdegroupe1, Vdegroupe2) pour les non-p  Test de Mann Whitney/Wicoxon pour les non P  wilcox.test(Var.quanti ~Var.binaire)  Kolmogorov-Smirnov  Ks.test (var.quanti[var.quali=1], var.quanti[var.quali=2]  Graphique  boxplot(var.quanti ~ var.quali, data = d)  Tapply(var.quanti, INDEX = var.quali, FUN = mean)  ATTENTION avec des V.QUALi, R recode toutes les variables.quali en variables.bin et fait une régression multiple quanti.  Anova dans R :  aovmodl <- aov(var.quanti ~ var.quali + var.quali +var.quali:var.quali, data=dataset)  modl <- lm(v.quanti1~ v.quali, data = dataset)  summary(modl)  drop1(modl, .~., test=”F”) #pour regrouper les var.quali  library(car) // Anova(modl, type = 2 | 3)  TukeyHSD(aov_modl) et plot(TukeyHSD(aov_modl))  Les contraintes des modèles  [Par défaut] la modalité de référence est la base (intercept):  vQuali <- relevel(vQuali, ref=”modalitechoisie”) ##changer la modalité de référence  contrast(var.quali) = "contr.sum » (différence à la moyenne) || "cont.treatement"  La contrainte à somme nulle s’arrange pour que tous les alpha = à 0 sur la base de la moyenne en général  contrast(var.quali) ="cont.sum"  Condition d’utilisation et de validité  Normalité du bruit et pas d’autocorrélation des erreur qui prennent une forme hasardeuse. (le bruit est indépendant et sans corrélation) shapiro.test(resid(reg)) ou tapply(resid, INDEX = var.quanti, FUN=shapiro.test)  Homogénéité des variances. Boxplot(var.quanti ~ var.quali, data = d) // tapply(var.quanti, INDEX = var.quali, FUN=var)// bartlett.test(var.quanti ~ var.quali, data=d)  Chasser les points aberrant qui font levier. Distance de Cook = les coef changent-il beaucoup si on retire certains individus  hist(resid(modl), col=”grey”, main="") et plot(reg) et et which.max(cook.distance(reg))
  • 55. + Le test de Kruskal Wallis pour les variables non-P  kruskal.test( var.quanti ~ var.quali)  OU library ("agricolae") // kruskal(y=var.quanti, trt = var.quali, p.adj="holm", console = TRUE)  Test de Validité  library(coin) // pairwise.wilcox.test(var.qnati, var.quali, paired=FALSE, p.adj="holm")  library(FSA) //dunnTest(quanti ~ quali, paired = FALSE, p.adj ="holm")  (voir les test avec"bonferroni")  bartlett.test(var.quanti ~ var.quali, data = d) Homogeneité de la variance
  • 56. + ANOVA à deux facteurs  Test  interaction(Fact1,Fact2) || interaction.plot(exp$Auth, exp$partnerStatus,response=exp$Conformity)  Normalité  tapply(X,interaction(Fact1,Fact2), mean) OU tapply(X,Fact1:Fact2,mean)  tapply(X,interaction(Fact1,Fact2),shapiro.test) OU tapply(X,Fact1:Fact2,shapiro.test)  Homogénéité de variance  tapply(X,interaction(Fact1,Fact2),var) OU …  bartlett.test(split(X,list(Fact1,Fact2))) OU …  # Validation synthétique du modèle :  par(mfrow=c(2,2))  plot(modMK)  Anova à 2 facteur (il ne faut lire que le p de L’INTERACTION)  summary(aov(X~Fact1*Fact2)) Ou summary(aov(X~Fact1+Fact2+Fact1:Fact2))  modMK <- lm(Conformity ~ Auth*partnerStatus, data=exp) ou [X~Fact1+Fact2+Fact1:Fact2)}  # Table d'ANOVA de type II (l’effet de A après avoir retirer effet de B):  library(car) // Anova(modMK, type = II) //summary(modMK)  # Table d'ANOVA de type III (effet de A après avoir retirer effet de B et Interaction):  contrasts(exp$partnerStatus) ="contr.sum » et contrasts(exp$Auth) ="contr.sum » # on redéfinit les contrastes (nécessaire pour le type III !)  contrasts(exp$Auth) ="contr.sum"  modMK3 <- lm(Conformity ~ Auth*partnerStatus, data=exp)  summary(modMK3)  Anova(modMK3, type="III")
  • 58. + Principes généraux de clusterisation  Trouver des similarités structurales entre les individus regroupés selon leur proximité : clusters.  La clusterisation passe bien souvent par des méthodes de redimensionement du set de données selons les structures de relations entres variables.  Les algorithmes non supérvisés servent de compréhension de la structure des données et à ce titre, ils sont très utiles AVANT l'usage des algorithmes supervisés.
  • 59. + Analyse des Composantes principales : Variables Quanti  Partition de groupes d’individus homogènes selon les valeurs des Variables centrées réduites (fonction scale dans R) : Valeur - moyenne/écart-type (% de l’écart-type, 1,96 est 95% de la normale)  On fait un nuage de point d’individus à K variables dimensions. La Ressemblance égale faible distance entre individus  On réduit cet espace complexe en 2 facteurs qui sont les coordonnées des individus sur ces 2 dimensions (F1 et F2)  Liaisons linéaires entre variables (matrice de corrélation). On fait un Cercle des corrélations : On lit le coef des variables à l’axe(1) puis le cos entre variables (attention proche du cercle avec d=Racine[2(1-r)])  Variables et individus sont liés et s’explicite l’un l’autre  https://www.youtube.com/watch?v=KrNbyM925wI&list=PLnZgp6e pRBbRn3FeMdaQgVsFh9Kl0fjqX
  • 60. + ACP In R  Matrice de corrélation de v quanti  Éliminer les données manquantes. use="complete.obs" use="pairwise.complete.obs"  modl <- c("name.v1","name.v2", etc.) ou names (d[, n:n])  Tableau de cor : round(cor(Ast[, modl],use="complete.obs") , digits=2) #digits pour les virgule  library(corrplot)//corrplot(cor(d[,modl],use="complete. obs"), method="circle")  heatmap(cor(d[,modl],use="pairwise.complete.obs"), col=gray(seq(1,0, length=16)))  ACP  modl <- c("name.v1","name.v2", etc.)  library(psy)  mdspca(d[,modl])  sphpca(d[,modl]) #pour la 3D  ACP avec factominer  library(FactoMineR)  ACPModel <- PCA (d, quanti.sup=n:n, quali.sup=n, ncp=inf ou 5 par défaut)  Summary (ACPModel, nbelements=Inf, file="essais.txt")  Plot(ACPModel, cex=0.8, habillage:v, select="cos2 0.7"))  dimdesc(ACPModel)  ACP dans Factoshiny  Library(Factoshiny)  ACPModel =PCAshiny(d)  PCAshiny(ACPModel)  ACPModel  ACP Focalisée : Cas d’une variable à expliquer par d’autres variables  modl.plique <-"name.vplique"  modl.catif <- c("name.v1","name.v2", etc.)  library(psy)  fpca(data=d, y=modl.que, x=modl.catif, partial="No")  Très utiles pour la régression multiple https://www.youtube.com/watch?v=- 9NUzhdMbEo&list=PLnZgp6epRBbRn3FeMdaQgVsFh9Kl0fjqX&index=5
  • 61. + ACP : Interprétations  Intérpreter le graph des variables pour comprendre les axes  Intérpreter le graph des individus  Lire somme des % d’inertie de chaque axe pour voir (au regard d’un tableau d’inertie) si la représentation est de qualité suffisante.  Lire la somme des contributions des variables sur axes pour comprendre comment chaque axe est construit (il représente quelles variables)  Lire la somme des contributions des individus pour voir si des individus ne pesent pas trop sur l’axe (a exclure ?)  Lire la qualité de représentation des individus et/ou variables par somme des Cos2 sur deux axes montre si on peut interpréter la variable ou s’il elle est mal projeter et donc être prudent.  Au final toujours revenir aux données brutes pour interpréter
  • 62.
  • 63. + Analyse des correspondances multiples : Variables Quali  Tableau disjonctif complet : Ligne X modalités (0,1)  Chaque modalité est une variable qu’anti 1/0 que l’on pondère par la rareté : 1/p  Cette pondération forme une coordonnée dans un espace à K dimension pour le tableau d’individus  Tout le reste proche de ACP  Nuages des modalités : constituée au barycentre des individus qui la possède  https://www.youtube.com/watch?v=bihScz3OXbw&list=PLnZgp 6epRBbTvk5fznOuiZSz8ZC6aS5sz
  • 64. + ACM dans R  ACM avec FactomineR  library (FactoMineR)  res <- MCA (d, quanti.sup=v, quali.sup=v, ncp=inf ou 5)  summary(res, nbelements=Inf)  plot(res, invisible= c("ind","quali","quanti","quali.sup","quanti.sup","var"), label=c("ind","quali","quanti","quali.sup","quanti.sup","var"), autolab="y", cex=0.7, selectMod=critère )  dimdesc(res)  Factoshiny  library(Factoshiny)  MCAshiny(Mydata)
  • 65. + ACM : Interprétations  Intérpreter le graph des variables pour comprendre les axes  Intérpreter le graph des individus  Lire somme des % d’inertie de chaque axe pour voir (au regard d’un tableau d’inertie) si la représentation est de qualité suffisante.  Lire la somme des contributions des variables sur axes pour comprendre la nature de chaque axe  Lire la somme des contributions des individus pour vori si des individus ne pesent pas trop sur l’axe (a exclure ?)  Lire la qualité de représentation des individus et/ou variables par somme des Cos2 sur deux axes  Au final toujours revenir aux données brutes pour interpréter
  • 66.
  • 67.
  • 68. + Analyse des Facteurs des Données Mixte (FAMD).  Library(FactoMineR)  res <- FAMD (myData, sup.var=c(""))  Le reste pareil à ACP et ACM
  • 69. + Analyse des Facteurs Multiples (FAM).  Cas très particulier d'une études sur un même individu de K études/K thèmes de questionnaires/ K années d'études ou K enquêteurs répétées avec leurs propres variables.  Pour réaliser l'AFM, il faut voir comment chaque groupe de variables pèse sur l'étude et pouvoir rééquilibrer ce poids. Pour équilibrer le poids de chaque groupe on divise ses valeurs de variables par la valeur la plus importante du groupe  A l'ACP/ACM, on peut ajouter l'AFM  1 - l'étude des ressemblances inter-groupe au niveau du groupe  2 – L'étude de chaque individu selon une vision inter-groupe ou selon les différents groupes(2)  3 - des typologies (3)  https://www.youtube.com/watch?v=wCTaFaVKGAM
  • 70. + Analyse des Facteurs Multiples (FAM).  Library(FactoMineR)  res <- MFA(myData, group=(n1, n2, n3 etc), type=c("c", "s", "n", "f"), ncp=5, name.group= c("toto", coucou", etc), num.group.sup=c(1,6))  group= #le découpage par nombre de variables dans le set. 2 premère, 5 suivantes, puis 3 suivantes, etc.  type = # pour chaque groupe "c":continue, "s":scaled, "n":nominatives, "f":fréqences  num.group.sup # parmis els groups certain sont sup. et donc participe pas  summary(res, ncp=n, nbelements=n|inf)  ctr et cos2 s'interprète comme les ACP et ACM  dimdesc(res)  Graphes  icône vide =sup et icône pleine = actifs  [choix="group"] Graph des groupes  [choix="ind"] Graphes des individus  [choix="ind", partiel="all"] Graphes des indivdus éclaté par groupes  [choix="var"]Cercle de correlation pour les quanti  [choix="???", invisible="row"] Graphe des modalités qualtitatives  [choix="axes"]Cercles de corrélation de toutes les dimentions des ACP et ACM partiel / AFM  plot(res, [choix = "var",] [invisible="quali", cex=0.8, habillage= n|"namequali", partiel="all"|c("name", "name"…), palette=palette(c("black", blue, "transparent",…)), select="cos2 0.4"|"contrib 5", unselect=0to1|"gray70")
  • 71. + t-SNE : t-Distributed Stochastic Neighbour Embedding  library("Rtsne")  uiris <- unique(iris[, 1:5])  iristsne <- iristsne <- Rtsne(uiris[, 1:4], dims = 2, perplexity = 15, max_iter = 50)  plot(iristsne$Y, col = uiris$Species)
  • 72. + Profilisation des individus CLUSTERISATION ou l'Unsupervised Machine Learning
  • 73. + Préparer les données non PCA/MCA  Training Set  library(caTools)  set.seed(123)  split = sample.split(dataset$Depende ntVariable, SplitRatio = 0.8)  training_set = subset(dataset, split == TRUE)  test_set = subset(dataset, split == FALSE)  Scaling  training_set = scale(training_set)  test_set = scale(test_set)  Distance  dist.eucl <- dist(my_data, method = "euclidean") #«euclidien», «maximum», «manhattan», «canberra», «binaire», «minkowski».  dist.eucl <- as.dist(round(as.matrix(dist.eucl), 2))  fviz_dist(dist.eucl, gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"))  Distance de correlation  dist.cor <- get_dist(my_data, method = "pearson")  dist.cor <- as.dist(round(as.matrix(dist.cor), 2))  fviz_dist(dist.cor, gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"))  Distance Mixte - #daisy () [ cluster package]: capable de gérer d'autres types de variables (par exemple, nominales, ordinales, (a) binaires symétriques). Dans ce cas, le coefficient de Gower sera automatiquement utilisé comme métrique.  library(cluster)  dd <- daisy(flower)  dd <- round(as.matrix(dd), 1)  fviz_dist(dd, gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07")) Scaling Distance Matrix
  • 74. + Evaluer les cluster  Tendance des données au regroupement  Indice de Hopkins (si h <0.5 peu de grappe significative, à partir de >0.75 très cluster) avec le graph de similarité on voit la qualité des cluster le long de la diagonale  factoextra::get_clust_tendency(my_data, n = 49, gradient = list(low = "steelblue", high = "white"), seed = 123) voir : https://www.datanovia.com/en/lessons/assessing-clustering-tendency/  Les silhouettes de point et leur proximité avec le cluster. Positif et sup moy. alors bien placé, sinon mal placé voir erreur si negatif  res.hc <- eclust(my_data, "hclust", k =3, graph = FALSE)  fviz_silhouette(res.hc)  fviz_cluster(res.hc)  Quel sont les points mal classé (silhouette négative) ?  # Silhouette width of observations  sil <- res.hc$silinfo$widths  # Objects with negative silhouette  neg_sil_index <- which(sil[, 'sil_width'] < 0)  sil[neg_sil_index, , drop = FALSE]  Comparer les méthodes de clusterisation  library("clValid")  intern <- clValid(my_data, nClust = 2:6, clMethods = c("hierarchical","kmeans","pam","diana","fanny","sota","clara","ag nes"), validation = "internal"| "stability" | "biological")  summary(intern) voir : https://www.jstatsoft.org/article/view/v025i04  NbClust  fviz_nbclust(ACPText, hcut, method = "silhouette", k.max = 60) # kmeans, cluster::pam, cluster::clara, cluster::fanny, hcut ou  set.seed(123)  library("NbClust")  res.nbclust <- NbClust(my_data, distance = "euclidean", min.nc = 2, max.nc = 10, method = "complete", index ="all")  fviz_nbclust(res.nbclust)+ theme_minimal() Nombre de clusters Qualité des clusters
  • 75. + Classification ascendante|descendante Hierarchique  Il faut une mesure de proximité ou de similarité entre individus (distance entre valeur d’une variable, distance euclidienne ou indice spécifique métier). On produit alors un dendogramme.  Par itération, on regroupe deux à deux la plus petite distance en un groupe…  Ratio Inertie Inter/Inertie Total donne la qualité de la partition (0 à 1). On choisit le nombre de groupe selon l’inertie conservée après partition (InerInter/InerTotal > inertie d’Axe 1)  Dans la méthode hybride, une ACM/ACP transforme le tableau en facteurs quantitatifs moindres. On peut ensuite faire une CAH sur ces dimensions.  https://www.youtube.com/watch?v=SE_4dLh5vXY&list=PLnZgp6e pRBbRwGBLnM8GEmcxuQGM0_oIk
  • 76. + CAH in R  CAH de variables  modl <- c("name.v1","name.v2", etc.)  cah<- hclust(dist(scale(d[,modl])),method="ward") #pour une classification des variables  clust = cutree(cah, k OR h=5)  Graphiques  plot(cah, xlab="", ylab="", main ="CAH de variables")  Matricecor <- cor(data[,varS], use="pairwise.complete.obs")  heatmap(Matricecor, col =red|blue|gray(1, 2, 3…))  library(cluster) // clusplot(dataset)  plot(datas, col = clust , main = "HClust with 3 clusters", xlab = "", ylab = "")  library(pheatmap) // pheatmap(t(x), cutree_cols = 3)  fviz_dend(hclust.out, cex = 0.5, k = 4, palette = "jco")  CAH avec FactomineR à pâtir de ACP ou ACM  res.hcpc <- HCPC(res.ACP ou ACM, nb.clust=n, )  res.hcpc$data.clust (la bd avec les clusters)  res.hcpc§desc.var (décris le rapport variable et classes)  res.hcpc$desc.ind (les parangons)  Factoshiny  library(Factoshiny)  MCAshiny(Mydata)
  • 77. + Partitionnement en classes par les K-Means  Par itérations, on choisit nombre de classes et on rassemble les individus par proximité des barycentres. Le kmean travaillant sur des données quanti, nécessite bien souvent une méthode de réduction des dimentions [méthode hybride]  Une ACM transforme le tableau en facteurs quantitatifs moindres. On peut ensuite faire un K Means sur ces dimensions.  On peut faire aussi une partition par CAH en initialisation et consolider par K-Means ou l’inverse.  Puis lire  (1) parangon de chaque classe = individu le plus proche  (2) on peut chercher les p par ANOVA de chaque variable sur les classes. Plus le p est petit, plus la variable a pesé sur la classe. (pour quali on fait un Khi2 et on utilise aussi p)  (3) v test pour valeur test (>1,96 pour la normale) caractérise le poids de la variable sur la classe. Pour les modalités :on regarde aussi les p et les v tests
  • 78. + K Mean dans R  Trouver le nombre de cluster  set.seed(6)  wcss = vector()  for (i in 1:10) wcss[i] = sum(kmeans(dataset, i)$withinss) OR wss[i] <- km.out$tot.withinss  plot(1:10, wcss, type = 'b', main = paste('The Elbow Method'), xlab = 'Number of clusters', ylab = 'WCSS')  Vérifier la sensibilité au hasard  # Set up 2 x 3 plotting grid  par(mfrow = c(2, 3))  for(i in 1:6) { km.out <- kmeans(iris[,3:4], centers = 3, nstart = 10) plot(iris[,3:4], col = km.out$cluster, main = km.out$tot.withinss,) }  K-Means  set.seed(29)  kmeans = kmeans(x = dataset, centers = 5)  y_kmeans = kmeans$cluster  fviz_cluster(kclust, data = ACP_df)  Kmean PAM  pam.res <- pam(x, 3, metric = "euclidean", stand = FALSE) #"manhattan"  fviz_cluster(pam.res)  lesclusters = pam.res$clustering  K-Mean Clara  res.clara <- clara(x, k, metric = "euclidean", stand = FALSE, samples = 15, pamLike = TRUE)  fviz_cluster(res.clara)  Kmean Hybride  library(factoextra)  res.hk <- hkmeans(myData3)  Visualising the clusters  library(cluster)  clusplot(dataset, kmeans, lines = 0, shade = TRUE, color = TRUE, labels = 2, plotchar = FALSE, span = TRUE)
  • 79. + DBSCAN: Density-Based Clustering Essentials  Idéal pour les set complex avec de nombreux comportements atypiques et non-linéairs. L'idée fondamentale, c'est que chaque point doit avoir un minimum n de voisin pour être clustériser. Deux paramètre sont important : le rayon epsilon (eps) et le nb de point voisin minimum (MinPts)? Attention, (1) MinPts: Plus le jeu de données est grand, plus la valeur des minPts doit être grande. Les minPts doivent être choisis au moins 3.  Compute DBSCAN using fpc package  library("dbscan")  set.seed(123)  db <- dbscan(my_data, eps = 1.4, minPts =3)  fviz_cluster(db, data = my_data, stand = FALSE, ellipse = FALSE, show.clust.cent = FALSE, geom = "point",palette = "jco", ggtheme = theme_classic())  eps optimisation  kNNdistplot(my_data, k = 3)
  • 80. + Concept of model-based clustering  Un agrégat de point est considéré comme un sous groupe réparti selon une courbe normale autour d'un point moyen. Le meilleur modèle est sélectionné à l'aide du critère d'information bayésien ou BIC . Un score BIC élevé indique des preuves solides pour le modèle correspondant.  Model-based-clustering  library("mclust")  mc <- Mclust(myData)  summary(mc)  fviz_cluster(mc, data = myData, stand = FALSE, ellipse = FALSE, show.clust.cent = FALSE, geom = "point",palette = "jco", ggtheme = theme_classic())  MC Optimisation  fviz_mclust(mc, "BIC", palette = "jco")  fviz_mclust(mc, "classification", geom = "point", pointsize = 1.5, palette = "jco")  fviz_mclust(mc, "uncertainty", palette = "jco")
  • 81. + Fuzzy Clustering  Dans ce type de clustering, chaque point peut appartenir à plusieurs cluster en fonction d'un coeficient d'appartenance.  Fanny clustering  library(cluster)  resfan <- fanny(myData, k=3, metric = "euclidean", stand = FALSE)  head(resfan$membership, 10)  resfan$coeff #coeficient de DUNN de 0 (très flou) à 1 (très net)  resfan$clusteri  fviz_cluster(resfan, ellipse.type = "norm", repel = TRUE, palette = "jco", ggtheme = theme_minimal(),legend = "right")  Optimisation  fviz_silhouette(resfan, palette = "jco", ggtheme = theme_minimal())  Fuzzy Cmean Clustering  library(e1071) // funmean <- cmeans(myData, 3, iter.max = 100, dist = "euclidean", m = 2)  head(funmean$membership) // funmean$cluster  fviz_cluster(list(data = iris[,-5], cluster=funmean$cluster), ellipse.type = "norm", ellipse.level = 0.68, palette = "jco", ggtheme = theme_minimal())
  • 82. + Corrélation et prédire une variables QUALITATIVE Supervised CLASSIFICATION
  • 83. + Template Classification : data préparation  Prepare Data (factor)  myData <- source  str(myData)  summary(myData)  myData <- as.factor(var_que)  Partition train/valid  set.seed(1234) #machine aléatoire  pd <-samle(2, nrow(myData), replace=TRUE; prob=c(0.7; 0.3))  train <-myData[pd=1,]  test <- myData[pd=2,]  Encoding the target feature as factor  dataset$Purchased = factor(dataset$Purchased, levels = c(0, 1))  Splitting the dataset into the Training set and Test set  library(caTools)  set.seed(123)  split = sample.split(dataset$Purchased, SplitRatio = 0.75)  train = subset(dataset, split == TRUE)  test = subset(dataset, split == FALSE) Data preparation_1 Data preparation_Bis  #Feature Scaling  training_set[-3] = scale(training_set[-3]) //test_set[-3] = scale(test_set[-3])
  • 84. + Analyse binaire des var qualitative : la régression logistique  Variable expliquée binaire s’explique comme le log des probabilités des réponses de variable binaire ou ordonnée ou libre  vQuali <- relevel(vQuali, ref=”modalitechoisie”) ##changer la modalité de référence  modl <- glm(v1~v2+V3+V4..., data=dataset, family=”binomial”)  summary(modl)  Et drop1(modl, .~., test=”Chisq”) ## donne le test avec variable quali compactée  On peut aussi tester la synergie (avec *) entre deux variable pour voir si le modèle additif est simple : modl <- glm(v1~v2+V3*V4..., data=dataset, family=”binomial”)  Odd ration pour une variable binaire ou ordonnée  ensuite sort(exp(coefficients(modl))) donne l’odd ratio de ces facteurs (augmentation de probabilité) : pour binaire ou ordinal (à chaque cran de l’ordre !!!).  sort(exp(coefficients(glm(formula = ast$bin_indegree ~ ast$emitter_type, family ="binomial", data = ast))), decreasing = TRUE)  Condition de validité : au moins 5 à 10 événements(individus) dans chaque variable explicative https://www.youtube.com/watch?v=fUmDPVHah1U https://www.youtube.com/watch?v=hzwLWbngzVo
  • 85. + SVM Support Vector Machine  Le SVM est un algorithme de classification qui permet de séparer des individus en n catégories selon leur n variable dans un espace à n dimension. Proche de la régression logistique dans son usage, il lui est supérieur dans les modèles complexes.  On recherche l’équation d’une courbe (hyperplan) qui sépare le mieux les deux catégories du set de données de sorte qu’elle maximise la distance marginal (marge distance) des points les plus proches de deux catégories (les vecteurs [points]) supports)  Une répartition difficilement séparable peut être projeté sur des dimension n+ grâce au kernel ou suivre des séparations non-linéaires  Ainsi on peut prédire la catégorie d’un nouvel élément en fonction de sa position (positive ou négative par rapoprt au plan) dans l’espace à n dimension https://fr.wikipedia.org/wiki/Machine_%C3%A0_vecteurs_de_support https://en.wikipedia.org/wiki/Support-vector_machine
  • 86. + SVM dans R  library(e1071)  svmmodel <- svm(var ~., data=mydata, type ="c- classification|…", kernel="linear| radial |polynomial|sigmoid", cost=0.1, scale=FALSE|TRUE)  Predire :  var_pred<- predict(svmmodel, mydata, type="class")  tab <- table (Predicted = var_pred, Real = mytable$var_reel)  Taux d’erreur  mean(var_pred == mytable$var_reel) #%identique  1- sum(diag(tab))/sum(tab) #% erreurs  On peut optimiser le cost avec la fonction tune :  tmodel <- tune(svm, var ~., data=mydata, type ="c- classification", kernel="linear", range = list(epsilon=seq(0,1,0.1), cost=c(0.01, 0.1, 1, 10, 100)))  summary(tmodel)  plot (tmodel)  tsvmmodel <- tmodel$best.model
  • 87. + K-Nearest Neighbors algorithm  KNN classe les individus selon K éléments les plus proches avec un vote sur K (racine carré de n individus). Ensuite on test les valeur de K proche avec le taux d'erreur  Si K=1 alors KNN peut servir de partitionnement de l'espace à N variables et donc servir à la culterisation (Voronoi tesselation : les lignes d'équidistance entre les points)  KNN est sensible au variable expliqué à forte entropie, aux outliers et aux grands set de données. C'est une méthodes simple. https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm
  • 88. + KNN with R  library(class)  nrow(train)  k=sqrt(nrow(train))  #scale data  knnpred<- knn(train=train, test=test, cl=var.expliqué, k=k(+/-n), prob = TRUE)  Tuned K  i=1  k.optm = 1for (i in 1:n){ knnpred<- knn(train=train, test=test, cl=var.expliqué, k=i)) k.optim[i]<- 100*sum(var.expliqué==knnpred)/NROW (var.expliqué) k=i }  plot(k.optm, type="b")  Knn bis  library (caret)  trControl <- trainControl(method = "repeatedcv, number = 10, repeat = 3)  set.seed(222)  fit <- train(var.ex~., method ='knn', tuneLength=20, trControl=trControl, preProc=c("center", "scale"), metric="ROC", tuneGrid=expand.grid(k=1:n) )  plot(fit)  varImp(fit)  knnpred <- predict(fit, newdata=test)
  • 89. + Decision Tree Classification  Il s’agit pour chaque variable explicative (appelé nœud de l'arbre) du modèle de la diviser en deux sous groupe ayant une plus faible entropie(p<0.001 de ?????) possible. Quel seuil de la variable vous fait entrer dans un monde qualitatif différent et homogène ?(voir calcul d'impureté de gini : 1-prob(mod ou valeur interind)2- prob(mod ou valeur ind)2)  On construit ensuite un arbre des variables du modèle en hiérarchisant les variables à forte diminution d’entropie pour avoir plusieurs typologies d’individus(nodes) donnant les probabilités, pour chaque type, d’avoir tel ou tel mode de la variable qualitative.  La prédiction choisit alors le mode le plus probable. On peut y ajouter des cout d'erreur de classement. https://fr.wikipedia.org/wiki/Arbre_de_d%C3%A9cision_(apprentissage) https://en.wikipedia.org/wiki/Decision_tree_learning
  • 90. + Decision Tree in R  Decision tree with party  library(party)  treemodel <- ctree(varquali~var1+var2+var3, data=train, controls=ctree_control(mincriterion=0.9, minsplit=50))  treemodel  print(treemodel)  plot(treemodel,type="simple")  Decision tree with rpart  library(rpart)  treemodel <- rpart(varquali~var1+var2+var3, data= train, method="class")  treemodel  print(treemodel)  library (rpart.plot)  rpart.plot(treemodel, type=[c(1,2,3,4)], extra=[c(1,2,3,4)])  Predict  predict(treemodel, test, [type="prob"|"class"]) #sans l'option il choisit la qualité sinon donne les probabilités  Tune  nombre minimum d'observation pour fractionner  Nombre maximum de nœud  cv_tree = cv.tree(treemodel, FUN = prune.misclass)  plot ( cv_tree$size, cv_tree$dev)  tunedmodel = prune.misclass(treemodel, best=9) https://www.youtube.com/watch?v=opQ49Xr748k
  • 91. + Random Forest Classification  Le Random Forest est une forêt de model en Decision Tree obtenant des résultants probant. On choisit N individus du dataset avec M variables du modèle pour produire T arbres de décisions  Le résultat de prédiction final est une élection des T arbres entre ces résultats partiels (bagging) .  La validation de ces modèles est par principe l’algorithme. Et on peut comparer des RF par une comparaison des meilleurs modèles en testant les individus non utilisé dans la construction dit Out-of-Bag (oob) : Out-Of-Bag Error http://r.benavent.fr/MM.html https://en.wikipedia.org/wiki/Random_forest https://www.youtube.com/watch?v=IJgR7n-VqSo
  • 92. + Random Forest With R  library("randomForest")  dataNAImputed <- rfImpute(var_pliqué~., data=myData, iter=n) #remplace les NA  rfmodel <- randomForest(var_pliqué~., data=dataNAImputed, proximity=TRUE)  Distance Matrix  dist(x, method = "euclidean"|"maximum", "manhattan"|"canberra"|"binar y"|"minkowski", diag = FALSE, upper = FALSE, p = 2)  Error tune  oob.error.data <- data.frame(Trees=rep(1:nrow(model$err.rate ), times=3), type=rep(c("OOB", "Healthy", "Unhealthy"), each=nrow(model$err.rate)), Error=c(model$err.rate[,"OOB"], model$err.rate[,"Healthy"], model$err.rate[,"Unhealthy"]))  ggplot(data=oob.error.data, aes(x=Trees, y=Error)) +geom_line(aes(color=Type))  ggsave("oob_error_rate_1000_trees.pdf")  oob.values <- vector(length=10)  for(i in 1:10) { temp.model <- randomForest(hd ~ ., data=data.imputed, mtry=i, ntree=1000) oob.values[i] <- temp.model$err.rate[nrow(temp.model$err.r ate),1] }  oob.values
  • 93. + Naives Bayes Theorem p de la modalité de var.cative si la modalité de var.que est C p d'une modalité de var.que p d'une modalité var.cativep de la modalité de la var.que si la modalité de la var.cative est X Probalité d'une d'une modalité de réponse si on connaît une autre modalité de réponse
  • 94. + Naives Bayes with R  library(e1071)  nbmodel <- naivesBayes(var.que~., data=train, usekernel=TRUE)  varpred <- predict(nbmodel, test, type='prob'|'raw"|'class')  Tuned model  p <.05  Kappa = accuracy  Laplace correction  Normalisation
  • 100. + Optimisation de la prédiction  model$variable.importance  Misclassification error  tab<-table(predict(treemodel), myData$var_reel)  tab  1-sum(diag(tab))/sum(tab)  mean(var_pred == myData$var_reel) #%identique  confusionmatrix(var_pred, myData$var_reel)
  • 101. + Optimisation de la prédiction  Global  Accuracy: (TP+TN)/total = (100+50)/165 = 0.91 #% de prédits  Misclassification Rate: (FP+FN)/total = (10+5)/165 = 0.09 ou 1-accuracy #taux d’erreur  Détection des vrais cas  Sensivity : TP/Total Yes #%de detection des vrais Yes  Specificity : TN/Total No #% de détection des vrais No  Qualité des prédiction  Positive predictive value(PPV), Precision = Σ True positive/Σ Predicted condition positi ve  Negative predictive value (NPV) = Σ True negative/Σ Predicted condition negative  Prevalence = Total Yes/Total #% d’entropie  true positives : yes réels – yes prédits  true negatives : no réels – no prédits  false positives : no réels – yes prédits  false négatives : yes réels – no prédits