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”)
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/
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")
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())
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
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