forked from larmarange/analyse-R
-
Notifications
You must be signed in to change notification settings - Fork 0
/
analyse-des-correspondances-multiples.html
999 lines (925 loc) · 65.4 KB
/
analyse-des-correspondances-multiples.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="pandoc" />
<title>Analyse des correspondances multiples (ACM)</title>
<script src="libs/jquery-1.11.3/jquery.min.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link href="libs/bootstrap-3.3.5/css/flatly.min.css" rel="stylesheet" />
<script src="libs/bootstrap-3.3.5/js/bootstrap.min.js"></script>
<script src="libs/bootstrap-3.3.5/shim/html5shiv.min.js"></script>
<script src="libs/bootstrap-3.3.5/shim/respond.min.js"></script>
<script src="libs/navigation-1.1/tabsets.js"></script>
<link href="libs/pagedtable-1.1/css/pagedtable.css" rel="stylesheet" />
<script src="libs/pagedtable-1.1/js/pagedtable.js"></script>
<meta name="robots" content="index, follow">
<link rel="stylesheet" href="./include/analyse-R.css" />
<script type="text/javascript" src="./libs/zeroclipboard-2.2.0/ZeroClipboard.js"></script>
<link rel="stylesheet" href="./libs/colorbox-1.6.1/colorbox.css" />
<script type="text/javascript" src="./libs/colorbox-1.6.1/jquery.colorbox-min.js"></script>
<!--- favicon --->
<link rel="apple-touch-icon" sizes="57x57" href="./images/favicon/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="./images/favicon/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="./images/favicon/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="./images/favicon/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="./images/favicon/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="./images/favicon/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="./images/favicon/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="./images/favicon/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="./images/favicon/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="./images/favicon/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="./images/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="./images/favicon/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="./images/favicon/favicon-16x16.png">
<link rel="manifest" href="./images/favicon/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="./images/favicon/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-121727005-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-121727005-1');
</script>
<style type="text/css">code{white-space: pre;}</style>
<style type="text/css">
div.sourceCode { overflow-x: auto; }
table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode {
margin: 0; padding: 0; vertical-align: baseline; border: none; }
table.sourceCode { width: 100%; line-height: 100%; }
td.lineNumbers { text-align: right; padding-right: 4px; padding-left: 4px; color: #aaaaaa; border-right: 1px solid #aaaaaa; }
td.sourceCode { padding-left: 5px; }
code > span.kw { color: #007020; font-weight: bold; } /* Keyword */
code > span.dt { color: #902000; } /* DataType */
code > span.dv { color: #40a070; } /* DecVal */
code > span.bn { color: #40a070; } /* BaseN */
code > span.fl { color: #40a070; } /* Float */
code > span.ch { color: #4070a0; } /* Char */
code > span.st { color: #4070a0; } /* String */
code > span.co { color: #60a0b0; font-style: italic; } /* Comment */
code > span.ot { color: #007020; } /* Other */
code > span.al { color: #ff0000; font-weight: bold; } /* Alert */
code > span.fu { color: #06287e; } /* Function */
code > span.er { color: #ff0000; font-weight: bold; } /* Error */
code > span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
code > span.cn { color: #880000; } /* Constant */
code > span.sc { color: #4070a0; } /* SpecialChar */
code > span.vs { color: #4070a0; } /* VerbatimString */
code > span.ss { color: #bb6688; } /* SpecialString */
code > span.im { } /* Import */
code > span.va { color: #19177c; } /* Variable */
code > span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
code > span.op { color: #666666; } /* Operator */
code > span.bu { } /* BuiltIn */
code > span.ex { } /* Extension */
code > span.pp { color: #bc7a00; } /* Preprocessor */
code > span.at { color: #7d9029; } /* Attribute */
code > span.do { color: #ba2121; font-style: italic; } /* Documentation */
code > span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
code > span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
code > span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
</style>
<style type="text/css">
pre:not([class]) {
background-color: white;
}
</style>
<style type="text/css">
h1 {
font-size: 34px;
}
h1.title {
font-size: 38px;
}
h2 {
font-size: 30px;
}
h3 {
font-size: 24px;
}
h4 {
font-size: 18px;
}
h5 {
font-size: 16px;
}
h6 {
font-size: 12px;
}
.table th:not([align]) {
text-align: left;
}
</style>
</head>
<body>
<style type = "text/css">
.main-container {
max-width: 940px;
margin-left: auto;
margin-right: auto;
}
code {
color: inherit;
background-color: rgba(0, 0, 0, 0.04);
}
img {
max-width:100%;
height: auto;
}
.tabbed-pane {
padding-top: 12px;
}
button.code-folding-btn:focus {
outline: none;
}
</style>
<div class="container-fluid main-container">
<!-- tabsets -->
<script>
$(document).ready(function () {
window.buildTabsets("TOC");
});
</script>
<!-- code folding -->
<nav>
<div class="navbar navbar-default navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href=".">analyse-R</a>
</div>
<div id="navbar" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="dropdown">
<a href="manipuler" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Manipuler <span class="caret"></span></a>
<ul class="dropdown-menu multi-column columns-3" role="menu" id="menu_manipuler">
<div class="row">
<div class="col-sm-4">
<ul class="multi-column-dropdown">
<li class="dropdown-header">Prise en main</li>
<li><a href="presentation-et-philosophie.html">Présentation et Philosophie</a></li>
<li><a href="installation-de-R-et-RStudio.html">Installation de <strong>R</strong> et <strong>RStudio</strong></a></li>
<li><a href="premier-contact.html">Premier contact</a></li>
<li><a href="premier-travail-avec-les-donnees.html">Premier travail avec des données</a></li>
<li><a href="extensions.html">Extensions (installation, mise à jour)</a></li>
<li><a href="introduction-au-tidyverse.html">Introduction au <strong>tidyverse</strong></a></li>
<li><a href="vecteurs-indexation-et-assignation.html">Vecteurs, indexation et assignation</a></li>
<li><a href="listes-et-tableaux-de-donnes.html">Listes et Tableaux de données</a></li>
<li><a href="facteurs-et-vecteurs-labellises.html">Facteurs et vecteurs labellisés</a></li>
<li><a href="organiser-ses-fichiers.html">Organiser ses fichiers</a></li>
<li><a href="import-de-donnees.html">Import de données</a></li>
<li><a href="ou-trouver-de-l-aide.html">Où trouver de l'aide ?</a></li>
</ul>
</div>
<div class="col-sm-4">
<ul class="multi-column-dropdown">
<li class="dropdown-header">Manipulation de données</li>
<li><a href="visualiser-ses-donnees.html">Visualiser ses données</a></li>
<li><a href="recodage.html">Recodage de variables</a></li>
<li><a href="manipuler-les-donnees-avec-dplyr.html">Manipuler les données avec <strong>dplyr</strong></a></li>
<li><a href="manipulations-avancees-avec-data-table.html">Manipulations avancées avec <strong>data.table</strong></a></li>
<li><a href="tris.html">Tris</a></li>
<li><a href="sous-ensembles.html">Sous-ensembles</a></li>
<li><a href="fusion-de-tables.html">Fusion de tables</a></li>
<li><a href="gestion-des-dates.html">Gestion des dates</a></li>
<li><a href="fonctions-a-fenetre.html">Fonctions à fenêtre</a></li>
<li><a href="manipuler-du-texte.html">Manipuler du texte avec <strong>stringr</strong></a></li>
<li><a href="reorganiser-ses-donnees-avec-tidyr.html">Réorganiser ses données avec <strong>tidyr</strong></a></li>
<li><a href="scraping.html">Scraping</a></li>
</ul>
</div>
<div class="col-sm-4">
<ul class="multi-column-dropdown">
<li class="dropdown-header">Exporter</li>
<li><a href="export-de-donnees.html">Export de données</a></li>
<li><a href="export-de-graphiques.html">Export de graphiques</a></li>
</ul>
</div>
</div>
</ul>
</li>
<li class="dropdown">
<a href="analyser" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Analyser <span class="caret"></span></a>
<ul class="dropdown-menu multi-column columns-3" role="menu" id="menu_analyser">
<div class="row">
<div class="col-sm-4">
<ul class="multi-column-dropdown">
<li class="dropdown-header">Statistiques introductives</li>
<li><a href="statistique-univariee.html">Statistique univariée</a></li>
<li><a href="statistique-bivariee.html">Statistique bivariée</a></li>
<li><a href="intro-ggplot2.html">Introduction à <strong>ggplot2</strong>, la grammaire des graphiques</a></li>
<li><a href="graphiques-bivaries-ggplot2.html">Graphiques univariés et bivariés avec <strong>ggplot2</strong></a></li>
<li><a href="donnees-ponderees.html">Données pondérées</a></li>
</ul>
</div>
<div class="col-sm-4">
<ul class="multi-column-dropdown">
<li class="dropdown-header">Statistiques intermédiaires</li>
<li><a href="intervalles-de-confiance.html">Intervalles de confiance</a></li>
<li><a href="comparaisons-moyennes-et-proportions.html">Comparaisons (moyennes et proportions)</a></li>
<li><a href="definir-un-plan-d-echantillonnage-complexe.html">Définir un plan d'échantillonnage complexe</a></li>
<li class="dev"><a href="regression-lineaire.html">Régression linéaire</a></li>
<li><a href="regression-logistique.html">Régression logistique binaire, multinomiale et ordinale</a></li>
<li><a href="analyse-des-correspondances-multiples.html">Analyse des correspondances multiples (ACM)</a></li>
<li><a href="classification-ascendante-hierarchique.html">Classification ascendante hiérarchique (CAH)</a></li>
</ul>
</div>
<div class="col-sm-4">
<ul class="multi-column-dropdown">
<li class="dropdown-header">Statistiques avancées</li>
<li><a href="effets-d-interaction.html">Effets d'interaction dans un modèle</a></li>
<li><a href="multicolinearite.html">Multicolinéarité dans la régression</a></li>
<li><a href="analyse-de-survie.html">Analyse de survie</a></li>
<li><a href="analyse-de-sequences.html">Analyse de séquences</a></li>
<li><a href="trajectoires-de-soins.html">Trajectoires de soins : données longitudinales, analyse de séquences, modèle multinomial, modèle à temps discret, modèles de survie classiques et multi-états</a></li>
<li><a href="analyse-de-reseaux.html">Analyse de réseaux</a></li>
<li><a href="analyse-spatiale.html">Analyse spatiale</a></li>
</ul>
</div>
</div>
</ul>
</li>
<li class="dropdown">
<a href="approfondir" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Approfondir <span class="caret"></span></a>
<ul class="dropdown-menu multi-column columns-3" role="menu" id="menu_approfondir">
<div class="row">
<div class="col-sm-4">
<ul class="multi-column-dropdown">
<li class="dropdown-header">Graphiques</li>
<li><a href="ggplot2.html">ggplot2 et la grammaire des graphiques</a></li>
<li><a href="combiner-plusieurs-graphiques.html">Combiner plusieurs graphiques</a></li>
<li><a href="graphiques-interactifs.html">Graphiques interactifs</a></li>
<li><a href="lattice-graphiques-et-formules.html"><strong>lattice</strong> : graphiques et formules</a></li>
<li><a href="cartes.html">Cartes</a></li>
</ul>
</div>
<div class="col-sm-4">
<ul class="multi-column-dropdown">
<li class="dropdown-header">Programmation</li>
<li><a href="conditions-et-comparaisons.html">Conditions et comparaisons</a></li>
<li><a href="formules.html">Formules</a></li>
<li><a href="structures-conditionnelles.html">Structures conditionnelles</a></li>
<li><a href="vectorisation.html">Vectorisation</a></li>
<li><a href="expressions-regulieres.html">Expressions régulières</a></li>
<li class="dev"><a href="ecrire-ses-propres-fonctions.html">Écrire ses propres fonctions</a></li>
<li><a href="rmarkdown-les-rapports-automatises.html"><strong>R Markdown</strong> : les rapports automatisés</a></li>
</ul>
</div>
<div class="col-sm-4">
<ul class="multi-column-dropdown">
<li class="dropdown-header">Divers</li>
<li><a href="calculer-un-age.html">Calculer un âge</a></li>
<li class="dev"><a href="diagramme-de-lexis.html">Diagramme de Lexis</a></li>
</ul>
</div>
</div>
</ul>
</li>
<li class="dropdown">
<a href="index" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Index <span class="caret"></span></a>
<ul class="dropdown-menu" role="menu" id="menu_naviguer">
<li><a href="index-des-concepts.html">Index des concepts</a></li>
<li><a href="index-des-fonctions.html">Index des fonctions</a></li>
<li><a href="index-des-extensions.html">Index des extensions</a></li>
</ul>
</li>
<li><a href="analyse-R.pdf">PDF</a></li>
</ul>
<form id="rechercher" class="navbar-form navbar-right" role="search" style="padding-top: 5px;" method="get" action="https://tontonroger.org/">
<div class="form-group">
<input name="q" type="text" class="form-control input-sm" placeholder="Rechercher">
</div>
<button type="submit" class="btn btn-default btn-sm" name="Rechercher">
<span class="glyphicon glyphicon-search" aria-hidden="true"></span>
</button>
</form>
</div><!--/.nav-collapse -->
</div><!--/.container -->
</div><!--/.navbar -->
</nav>
<div class="row">
<a href="https://github.com/larmarange/analyse-R"><img style="position: absolute; top: 60px; right: 0; border: 0;" src="https://camo.githubusercontent.com/e7bbb0521b397edbd5fe43e7f760759336b5e05f/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f677265656e5f3030373230302e706e67" alt="Contribuer sur GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_green_007200.png"></a>
<div class="col-sm-9" role="main">
<article>
<div class="fluid-row" id="header">
<h1 class="title toc-ignore">Analyse des correspondances multiples (ACM)</h1>
</div>
<div id="TOC">
<ul>
<li><a href="#principe-general">Principe général</a></li>
<li><a href="#acm-avec-ade4">ACM avec ade4</a></li>
<li><a href="#factominer">ACM avec FactoMineR</a></li>
</ul>
</div>
<div class="note">
<p>La version originale de ce chapitre a été écrite par Joseph Larmarange dans le cadre du support de cours <a href="https://github.com/larmarange/intro-r/tree/CoursM2">Introduction à l’analyse d’enquêtes avec R</a>.</p>
</div>
<p>Il existe plusieurs techniques d’<dfn>analyse factorielle</dfn><dfn data-index="factorielle, analyse"></dfn> dont les plus courantes sont l’<dfn>analyse en composante principale</dfn> (<dfn>ACP</dfn>) portant sur des <dfn data-index="variable quantitative">variables quantitatives</dfn><dfn data-index="quantitative, variable"></dfn>, l’<dfn>analyse factorielle des correspondances</dfn><dfn data-index="correspondances, analyse factorielle"></dfn> (<dfn>AFC</dfn>) portant sur deux <dfn data-index="variable qualitative">variables qualitatives</dfn><dfn data-index="qualitative, variable"></dfn> et l’<dfn>analyse des correspondances multiples</dfn> (<dfn>ACM</dfn>) portant sur plusieurs variables qualitatives (il s’agit d’une extension de l’AFC). Pour combiner des variables à la fois quantitatives et qualitatives, on pourra avoir recours à l’<dfn>analyse mixte de Hill et Smith</dfn><dfn data-index="Hill et Smith, analyse mixte"></dfn>.</p>
<p>Bien que ces techniques soient disponibles dans les extensions standards de <strong>R</strong>, il est souvent préférable d’avoir recours à deux autres extensions plus complètes, <code class="pkg">ade4</code> et <code class="pkg">FactoMineR</code>, chacune ayant ses avantages et des possibilités différentes. Voici les fonctions les plus fréquentes :</p>
<table>
<thead>
<tr class="header">
<th align="left">Analyse</th>
<th align="left">Variables</th>
<th align="center">Fonction standard</th>
<th align="center">Fonction <code class="pkg">ade4</code></th>
<th align="center">Fonctions <code class="pkg">FactoMineR</code></th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td align="left">ACP</td>
<td align="left">plusieurs variables quantitatives</td>
<td align="center"><code data-pkg="stats">princomp</code></td>
<td align="center"><code data-pkg="ade4">dudi.pca</code></td>
<td align="center"><code data-pkg="FactoMineR">PCA</code></td>
</tr>
<tr class="even">
<td align="left">AFC</td>
<td align="left">deux variables qualitatives</td>
<td align="center"><code data-pkg="MASS">corresp</code></td>
<td align="center"><code data-pkg="ade4">dudi.coa</code></td>
<td align="center"><code data-pkg="FactoMineR">CA</code></td>
</tr>
<tr class="odd">
<td align="left">ACM</td>
<td align="left">plusieurs variables qualitatives</td>
<td align="center"><code data-pkg="MASS">mca</code></td>
<td align="center"><code data-pkg="ade4">dudi.acm</code></td>
<td align="center"><code data-pkg="FactoMineR">MCA</code></td>
</tr>
<tr class="even">
<td align="left">Analyse mixte de Hill et Smith</td>
<td align="left">plusieurs variables quantitatives et/ou qualitatives</td>
<td align="center">—</td>
<td align="center"><code data-pkg="ade4">dudi.mix</code></td>
<td align="center">—</td>
</tr>
</tbody>
</table>
<p>Dans la suite de ce chapitre, nous n’arboderons que l’analyse des correspondances multiples (ACM).</p>
<div class="note">
<p>On trouvera également de nombreux supports de cours en français sur l’analyse factorielle sur le site de François Gilles Carpentier : <a href="http://geai.univ-brest.fr/~carpenti/" class="uri">http://geai.univ-brest.fr/~carpenti/</a>.</p>
</div>
<div id="principe-general" class="section level2">
<h2>Principe général</h2>
<p>L’analyse des correspondances multiples est une technique descriptive visant à résumer l’information contenu dans un grand nombre de variables afin de faciliter l’interprétention des corrélations existantes entre ces différentes variables. On cherche à savoir quelles sont les modalités corrélées entre elles.</p>
<p>L’idée générale est la suivante<a href="#fn1" class="footnoteRef" id="fnref1"><sup>1</sup></a>. L’ensemble des individus peut être représenté dans un espace à plusieurs dimensions où chaque axe représente les différentes variables utilisées pour décrire chaque individu. Plus précisément, pour chaque variable qualitative, il y a autant d’axes que de modalités moins un. Ainsi il faut trois axes pour décrire une variable à quatre modalités. Un tel nuage de points est aussi difficile à interpréter que de lire directement le fichier de données. On ne voit pas les corrélations qu’il peut y avoir entre modalités, par exemple qu’aller au cinéma est plus fréquent chez les personnes habitant en milieu urbain. Afin de mieux représenter ce nuage de points, on va procéder à un changement de systèmes de coordonnées. Les individus seront dès lors projetés et représentés sur un nouveau système d’axe. Ce nouveau système d’axes est choisis de telle manière que la majorité des variations soit concentrées sur les premiers axes. Les deux-trois premiers axes permettront d’expliquer la majorité des différences observées dans l’échantillon, les autres axes n’apportant qu’une faible part additionnelle d’information. Dès lors, l’analyse pourra se concentrer sur ses premiers axes qui constitueront un bon résumé des variations observables dans l’échantillon.</p>
<p>Avant toute ACM, il est indispensable de réaliser une analyse préliminaire de chaque variable, afin de voir si toutes les classes sont aussi bien représentées ou s’il existe un déséquilibre. L’ACM est sensible aux effectifs faibles, aussi il est préférable de regrouper les classes peu représentées le cas échéant.</p>
</div>
<div id="acm-avec-ade4" class="section level2">
<h2>ACM avec ade4</h2>
<p>Si l’extension <code class="pkg">ade4</code> n’est pas présente sur votre PC, il vous faut l’installer :</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">install.packages</span>(<span class="st">"ade4"</span>, <span class="dt">dep =</span> <span class="ot">TRUE</span>)</code></pre></div>
<p>Dans tous les cas, il faut penser à la charger en mémoire :</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(ade4)</code></pre></div>
<p>Comme précédemment, nous utiliserons le fichier de données <code>hdv2003</code> fourni avec l’extension <code class="pkg">questionr</code>.</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(questionr)
<span class="kw">data</span>(hdv2003)
d <-<span class="st"> </span>hdv2003</code></pre></div>
<p>En premier lieu, comme dans le <a href="regression-logistique.html">chapitre sur la régression logistique</a>, nous allons créer une variable groupe d’âges et regrouper les modalités de la variable « niveau d’étude ».</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">d<span class="op">$</span>grpage <-<span class="st"> </span><span class="kw">cut</span>(d<span class="op">$</span>age, <span class="kw">c</span>(<span class="dv">16</span>, <span class="dv">25</span>, <span class="dv">45</span>, <span class="dv">65</span>, <span class="dv">93</span>), <span class="dt">right =</span> <span class="ot">FALSE</span>, <span class="dt">include.lowest =</span> <span class="ot">TRUE</span>)
d<span class="op">$</span>etud <-<span class="st"> </span>d<span class="op">$</span>nivetud
<span class="kw">levels</span>(d<span class="op">$</span>etud) <-<span class="st"> </span><span class="kw">c</span>(<span class="st">"Primaire"</span>, <span class="st">"Primaire"</span>, <span class="st">"Primaire"</span>, <span class="st">"Secondaire"</span>, <span class="st">"Secondaire"</span>,
<span class="st">"Technique/Professionnel"</span>, <span class="st">"Technique/Professionnel"</span>, <span class="st">"Supérieur"</span>)</code></pre></div>
<p>Ensuite, nous allons créer un tableau de données ne contenant que les variables que nous souhaitons prendre en compte pour notre analyse factorielle.</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">d2 <-<span class="st"> </span>d[, <span class="kw">c</span>(<span class="st">"grpage"</span>, <span class="st">"sexe"</span>, <span class="st">"etud"</span>, <span class="st">"peche.chasse"</span>, <span class="st">"cinema"</span>, <span class="st">"cuisine"</span>, <span class="st">"bricol"</span>,
<span class="st">"sport"</span>, <span class="st">"lecture.bd"</span>)]</code></pre></div>
<p>Le calcul de l’ACM se fait tout simplement avec la fonction <code>dudi.acm</code>{data-pkg=“ade4”>.</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">acm <-<span class="st"> </span><span class="kw">dudi.acm</span>(d2)</code></pre></div>
<p>Par défaut, la fonction affichera le graphique des <dfn data-index="valeur propre, ACM">valeurs propres</dfn> de chaque axe (nous y reviendrons) et vous demandera le nombre d’axes que vous souhaitez conserver dans les résultats. Le plus souvent, cinq axes seront largement plus que suffisants. Vous pouvez également éviter cette étape en indiquant directement à <code data-pkg="ade4">dudi.acm</code> de vous renvoyer les cinq premiers axes ainsi :</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">acm <-<span class="st"> </span><span class="kw">dudi.acm</span>(d2, <span class="dt">scannf =</span> <span class="ot">FALSE</span>, <span class="dt">nf =</span> <span class="dv">5</span>)</code></pre></div>
<p>Le graphique des valeurs propres peut être reproduit avec <code data-pkg="ade4" data-rdoc="scatter">screeplot</code> :</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">screeplot</span>(acm)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-8-1.png" width="1050" />
<figcaption>
Valeurs propres ou inerties de chaque axe
</figcaption>
</figure>
<p>Les mêmes valeurs pour les premiers axes s’obtiennent également avec <code data-pkg="ade4" data-rdoc="dudi">summary</code><a href="#fn2" class="footnoteRef" id="fnref2"><sup>2</sup></a> :</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">summary</span>(acm)</code></pre></div>
<pre><code>Class: acm dudi
Call: dudi.acm(df = d2, scannf = FALSE, nf = 5)
Total inertia: 1.451
Eigenvalues:
Ax1 Ax2 Ax3 Ax4 Ax5
0.2474 0.1672 0.1309 0.1263 0.1176
Projected inertia (%):
Ax1 Ax2 Ax3 Ax4 Ax5
17.055 11.525 9.022 8.705 8.109
Cumulative projected inertia (%):
Ax1 Ax1:2 Ax1:3 Ax1:4 Ax1:5
17.06 28.58 37.60 46.31 54.42
(Only 5 dimensions (out of 15) are shown)</code></pre>
<p>L’<dfn>inertie</dfn> totale est de 1,451 et l’axe 1 en explique 0,1474 soit 17 %. L’inertie projetée cumulée nous indique que les deux premiers axes expliquent à eux seuls 29 % des variations observées dans notre échantillon.</p>
<p>Pour comprendre la signification des différents axes, il importe d’identifier quelles sont les variables/ modalités qui contribuent le plus à chaque axe. Une première représentation graphique est le <dfn>cercle de corrélation</dfn><dfn data-index="corrélation, cercle"></dfn> des modalités. Pour cela, on aura recours à <code data-pkg="ade4">s.corcicle</code>. On indiquera d’abord <code>acm$co</code> si l’on souhaite représenter les modalités ou <code>acm$li</code> si l’on souhaite représenter les individus. Les deux chiffres suivant indiquent les deux axes que l’on souhaite afficher (dans le cas présent les deux premiers axes). Enfin, le paramètre <code>clabel</code> permet de modifier la taille des étiquettes.</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">s.corcircle</span>(acm<span class="op">$</span>co, <span class="dv">1</span>, <span class="dv">2</span>, <span class="dt">clabel =</span> <span class="fl">0.7</span>)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-10-1.png" width="1050" />
<figcaption>
Cercle de corrélations des modalités sur les deux premiers axes
</figcaption>
</figure>
<p>On pourra avoir également recours à <code data-pkg="ade4" data-rdoc="dudi.acm">boxplot</code> pour visualiser comment se répartissent les modalités de chaque variable sur un axe donné<a href="#fn3" class="footnoteRef" id="fnref3"><sup>3</sup></a>.</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">boxplot</span>(acm)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-11-1.png" width="1050" />
<figcaption>
Répartition des modalités selon le premier axe
</figcaption>
</figure>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">boxplot</span>(acm, <span class="dv">2</span>)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-12-1.png" width="1050" />
<figcaption>
Répartition des modalités selon le second axe
</figcaption>
</figure>
<p>Le tableau <code>acm$cr</code> contient les rapports de corrélation (variant de 0 à 1) entre les variables et les axes choisis au départ de l’ACM. Pour représenter graphiquement ces rapports, utiliser la fonction <code data-pkg="graphics">barplot</code> ainsi : <code>barplot(acm$cr[,num],names.arg=row.names( acm$cr),las=2)</code> où <code>num</code> est le numéro de l’axe à représenter. Pour l’interprétation des axes, se concentrer sur les variables les plus structurantes, c’est-à-dire dont le rapport de corrélation est le plus proche de 1.</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">par</span>(<span class="dt">mfrow =</span> <span class="kw">c</span>(<span class="dv">2</span>, <span class="dv">2</span>))
<span class="cf">for</span> (i <span class="cf">in</span> <span class="dv">1</span><span class="op">:</span><span class="dv">4</span>) <span class="kw">barplot</span>(acm<span class="op">$</span>cr[, i], <span class="dt">names.arg =</span> <span class="kw">row.names</span>(acm<span class="op">$</span>cr), <span class="dt">las =</span> <span class="dv">2</span>, <span class="dt">main =</span> <span class="kw">paste</span>(<span class="st">"Axe"</span>,
i))</code></pre></div>
<p><img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-13-1.png" width="1050" /></p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">par</span>(<span class="dt">mfrow =</span> <span class="kw">c</span>(<span class="dv">1</span>, <span class="dv">1</span>))</code></pre></div>
<figcaption>
Rapports de corrélation des variables sur les 4 premiers axes
</figcaption>
</figure>
<div class="note">
<p>Le paramètre <code>mfrow</code> de la fonction <code data-pkg="graphics">par</code> permet d’indiquer à <strong>R</strong> que l’on souhaite afficher plusieurs graphiques sur une seule et même fenêtre, plus précisément que l’on souhaite diviser la fenêtre en deux lignes et deux colonnes.</p>
<p>Dans l’exemple précédent, après avoir produit notre graphique, nous avons réinitilisé cette valeur à <code>c(1, 1)</code> (un seul graphique par fenêtre) pour ne pas affecter les prochains graphiques que nous allons produire.</p>
</div>
<p>Pour représenter, les modalités dans le <dfn>plan factoriel</dfn><dfn data-index="factoriel, plan"></dfn>, on utilisera la fonction <code data-pkg="ade4">s.label</code>. Par défaut, les deux premiers axes sont représentés.</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">s.label</span>(acm<span class="op">$</span>co, <span class="dt">clabel =</span> <span class="fl">0.7</span>)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-14-1.png" width="1050" />
<figcaption>
Répartition des modalités selon les deux premiers axes
</figcaption>
</figure>
<p>Il est bien sur possible de préciser les axes à représenter. L’argument <code>boxes</code> permet quant à lui d’indiquer si l’on souhaite tracer une boîte pour chaque modalité.</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">s.label</span>(acm<span class="op">$</span>co, <span class="dv">3</span>, <span class="dv">4</span>, <span class="dt">clabel =</span> <span class="fl">0.7</span>, <span class="dt">boxes =</span> <span class="ot">FALSE</span>)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-15-1.png" width="1050" />
<figcaption>
Répartition des modalités selon les axes 3 et 4
</figcaption>
</figure>
<p>Bien entendu, on peut également représenter les individus. En indiquant <code>clabel=0</code> (une taille nulle pour les étiquettes), <code data-pkg="ade4">s.label</code> remplace chaque observation par un symbole qui peut être spécifié avec <code>pch</code>.</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">s.label</span>(acm<span class="op">$</span>li, <span class="dt">clabel =</span> <span class="dv">0</span>, <span class="dt">pch =</span> <span class="dv">17</span>)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-16-1.png" width="1050" />
<figcaption>
Répartition des individus selon les deux premiers axes
</figcaption>
</figure>
<div class="note">
<p>L’agument <code>pch</code> permet de spécifier le symbole à utiliser. Il peut prendre soit un nombre entier compris entre 0 et 25, soit un charactère textuel.</p>
<p><img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-17-1.png" width="1050" /></p>
</div>
<div class="note">
<p>Lorsque l’on réalise une ACM, il n’est pas rare que plusieurs observations soient identiques, c’est-à-dire correspondent à la même combinaison de modalités. Dès lors, ces observations seront projetées sur le même point dans le plan factoriel. Une représentation classique des observations avec <code data-pkg="ade4">s.label</code> ne permettra pas de rendre compte les effectifs de chaque point.</p>
<p>Le package <code class="pkg">JLutils</code>, disponible seulement sur <strong><a href="https://github.com/larmarange/JLutils">GitHub</a></strong>, propose une fonction <code data-pkg="JLutils">s.freq</code> représentant chaque point par un carré proportionnel au nombre d’individus.</p>
<p>Pour installer <code class="pkg">JLutils</code>, on aura recours au package <code class="pkg">devtools</code> et à sa fonction <code data-pkg="devtools">install_github</code> :</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(devtools)
<span class="kw">install_github</span>(<span class="st">"larmarange/JLutils"</span>)</code></pre></div>
<p>La fonction <code data-pkg="JLutils">s.freq</code> s’emploie de manière similaire aux autres fonctions graphiques de <code class="pkg">ade4</code>. Le paramètre <code>csize</code> permet d’ajuster la taille des carrés.</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(JLutils)
<span class="kw">s.freq</span>(acm<span class="op">$</span>li)</code></pre></div>
<p><img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-19-1.png" width="1050" /></p>
<p>L’interprétation est tout autre, non ?</p>
</div>
<div class="note">
<p>Gaston Sanchez propose un graphique amélioré des modalités dans le plan factoriel à cette adresse : <a href="http://rpubs.com/gaston/MCA" class="uri">http://rpubs.com/gaston/MCA</a>.</p>
</div>
<p>La fonction <code data-pkg="ade4">s.value</code> permet notamment de représenter un troisième axe factoriel. Dans l’exemple ci-après, nous projettons les individus selon les deux premiers axes factoriels. La taille et la couleur des carrés dépendent pour leur part de la coordonnée des individus sur le troisième axe factoriel. Le paramètre <code>csi</code> permet d’ajuster la taille des carrés.</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">s.value</span>(acm<span class="op">$</span>li, acm<span class="op">$</span>li[, <span class="dv">3</span>], <span class="dv">1</span>, <span class="dv">2</span>, <span class="dt">csi =</span> <span class="fl">0.5</span>)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-20-1.png" width="1050" />
<figcaption>
Répartition des individus selon les trois premiers axes
</figcaption>
</figure>
<p><code data-pkg="ade4">s.arrow</code> permet de représenter les vecteurs variables ou les vecteurs individus sous la forme d’une flèche allant de l’origine du plan factoriel aux coordonnées des variables/individus :</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">s.arrow</span>(acm<span class="op">$</span>co, <span class="dt">clabel =</span> <span class="fl">0.7</span>)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-21-1.png" width="1050" />
<figcaption>
Vecteurs des modalités selon les deux premiers axes
</figcaption>
</figure>
<p><code data-pkg="ade4">s.hist</code> permet de représenter des individus (ou des modalités) sur le plan factoriel et d’afficher leur distribution sur chaque axe :</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">s.hist</span>(acm<span class="op">$</span>li, <span class="dt">clabel =</span> <span class="dv">0</span>, <span class="dt">pch =</span> <span class="dv">15</span>)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-22-1.png" width="1050" />
<figcaption>
Distribution des individus dans le plan factoriel
</figcaption>
</figure>
<p><code data-pkg="ade4">s.class</code> et <code data-pkg="ade4">s.chull</code> permettent de représenter les différentes observations classées en plusieurs catégories. Cela permet notamment de projeter certaines variables.</p>
<p><code data-pkg="ade4">s.class</code> représente les observations par des points, lie chaque observation au barycentre de la modalité à laquelle elle appartient et dessine une ellipse représentant la forme générale du nuage de points :</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(RColorBrewer)
<span class="kw">s.class</span>(acm<span class="op">$</span>li, d2<span class="op">$</span>sexe, <span class="dt">col =</span> <span class="kw">brewer.pal</span>(<span class="dv">4</span>, <span class="st">"Set1"</span>))</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-23-1.png" width="1050" />
<figcaption>
Individus dans le plan factoriel selon le sexe (s.class)
</figcaption>
</figure>
<p><code data-pkg="ade4">s.chull</code> représente les barycentres de chaque catégorie et dessine des lignes de niveaux représentant la distribution des individus de cette catégorie. Les individus ne sont pas directement représentés :</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">s.chull</span>(acm<span class="op">$</span>li, d2<span class="op">$</span>sexe, <span class="dt">col =</span> <span class="kw">brewer.pal</span>(<span class="dv">4</span>, <span class="st">"Set1"</span>))</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-24-1.png" width="1050" />
<figcaption>
Individus dans le plan factoriel selon le sexe (s.chull)
</figcaption>
</figure>
<div class="note">
<p>Il est préférable de fournir une liste de couleurs (via le paramètre <code>col</code>) pour rendre le graphique plus lisible. Si vous avez installé l’extension <code class="pkg">RColorBrewer</code>, vous pouvez utiliser les différentes palettes de couleurs proposées. Pour afficher les palettes disponibles, utilisez <code data-pkg="RColorBrewer" data-rdoc="RColorsBrewer">display.brewer.all</code>.</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(RColorBrewer)
<span class="kw">display.brewer.all</span>(<span class="dv">8</span>)</code></pre></div>
<p><img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-25-1.png" width="1050" /></p>
<p>Pour obtenir une <dfn>palette de couleurs</dfn><dfn data-index="couleur, palette"></dfn>, utilisez la fonction <code data-pkg="RColorBrewer" data-rdoc="RColorsBrewer">brewer.pal</code> avec les arguments <code>n</code> (nombre de couleurs demandées) et <code>pal</code>(nom de la palette de couleurs désirée).</p>
<p>Pour plus d’informations sur les palettes <em>Color Brewer</em>, voir <a href="http://colorbrewer2.org/" class="uri">http://colorbrewer2.org/</a>.</p>
</div>
<p>La variable catégorielle transmise à <code data-pkg="ade4">s.class</code> ou <code data-pkg="ade4">s.chull</code> n’est pas obligatoirement une des variables retenues pour l’ACM. Il est tout à fait possible d’utiliser une autre variable. Par exemple :</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">s.class</span>(acm<span class="op">$</span>li, d<span class="op">$</span>trav.imp, <span class="dt">col =</span> <span class="kw">brewer.pal</span>(<span class="dv">4</span>, <span class="st">"Set1"</span>))</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-26-1.png" width="1050" />
<figcaption>
Individus dans le plan factoriel selon l’importance donnée au travail
</figcaption>
</figure>
<p>Les fonctions <code data-pkg="ade4">scatter</code> et <code data-pkg="ade4" data-rdoc="scatter">biplot</code> sont équivalentes : elles appliquent <code data-pkg="ade4">s.class</code> à chaque variable utilisée pour l’ACM.</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">scatter</span>(acm, <span class="dt">col =</span> <span class="kw">brewer.pal</span>(<span class="dv">4</span>, <span class="st">"Set1"</span>))</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-27-1.png" width="1050" />
<figcaption>
La fonction scatter appliquée au résultat d’une ACM
</figcaption>
</figure>
<div class="note">
<p>L’extension <code class="pkg">explor</code> écrite par Julien Barnier offre une interface graphique interactive permettant d’explorer les résultats d’une analyse factorielle. Essayons donc la fonction <code data-rdoc="explor">explor</code>. C’est magique !</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(explor)
<span class="kw">explor</span>(acm)</code></pre></div>
</div>
</div>
<div id="factominer" class="section level2">
<h2>ACM avec FactoMineR</h2>
<p>Comme avec <code class="pkg">ade4</code>, il est nécessaire de préparer les données au préalable (voir section précédente).</p>
<p>L’ACM se calcule avec la fonction <code data-pkg="FactoMineR">MCA</code>, l’argument <code>ncp</code> permettant de choisir le nombre d’axes à retenir :</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">library</span>(FactoMineR)</code></pre></div>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">acm2 <-<span class="st"> </span><span class="kw">MCA</span>(d2, <span class="dt">ncp =</span> <span class="dv">5</span>, <span class="dt">graph =</span> <span class="ot">FALSE</span>)
acm2</code></pre></div>
<pre><code>**Results of the Multiple Correspondence Analysis (MCA)**
The analysis was performed on 2000 individuals, described by 9 variables
*The results are available in the following objects:
name description
1 "$eig" "eigenvalues"
2 "$var" "results for the variables"
3 "$var$coord" "coord. of the categories"
4 "$var$cos2" "cos2 for the categories"
5 "$var$contrib" "contributions of the categories"
6 "$var$v.test" "v-test for the categories"
7 "$ind" "results for the individuals"
8 "$ind$coord" "coord. for the individuals"
9 "$ind$cos2" "cos2 for the individuals"
10 "$ind$contrib" "contributions of the individuals"
11 "$call" "intermediate results"
12 "$call$marge.col" "weights of columns"
13 "$call$marge.li" "weights of rows" </code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">acm2<span class="op">$</span>eig</code></pre></div>
<pre><code> eigenvalue percentage of variance cumulative percentage of variance
dim 1 0.25757489 15.454493 15.45449
dim 2 0.18363502 11.018101 26.47259
dim 3 0.16164626 9.698776 36.17137
dim 4 0.12871623 7.722974 43.89434
dim 5 0.12135737 7.281442 51.17579
dim 6 0.11213331 6.727999 57.90378
dim 7 0.10959377 6.575626 64.47941
dim 8 0.10340564 6.204338 70.68375
dim 9 0.09867478 5.920487 76.60424
dim 10 0.09192693 5.515616 82.11985
dim 11 0.07501208 4.500725 86.62058
dim 12 0.06679676 4.007805 90.62838
dim 13 0.06002063 3.601238 94.22962
dim 14 0.05832024 3.499215 97.72883
dim 15 0.03785276 2.271166 100.00000</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">sum</span>(acm2<span class="op">$</span>eig[, <span class="dv">1</span>])</code></pre></div>
<pre><code>[1] 1.666667</code></pre>
<p>En premier lieu, il apparait que l’inertie totale obtenue avec <code data-pkg="FactoMineR">MCA</code> est différente de celle observée avec <code data-pkg="ade4">dudi.acm</code>. Cela est dû à un traitement différents des <dfn data-index="valeur manquante">valeurs manquantes</dfn><dfn data-index="manquante, valeur"></dfn>. Alors que <code data-pkg="ade4">dudi.acm</code> exclu les valeurs manquantes, <code data-pkg="FactoMineR">MCA</code> les considèrent, par défaut, comme une modalité additionnelle. Pour calculer l’ACM uniquement sur les individus n’ayant pas de valeur manquante, on aura recours à <code data-pkg="stats">complete.cases</code> :</p>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r">acm2 <-<span class="st"> </span><span class="kw">MCA</span>(d2[<span class="kw">complete.cases</span>(d2), ], <span class="dt">ncp =</span> <span class="dv">5</span>, <span class="dt">graph =</span> <span class="ot">FALSE</span>)
acm2<span class="op">$</span>eig</code></pre></div>
<pre><code> eigenvalue percentage of variance cumulative percentage of variance
dim 1 0.24790700 17.162792 17.16279
dim 2 0.16758465 11.602014 28.76481
dim 3 0.13042357 9.029324 37.79413
dim 4 0.12595105 8.719688 46.51382
dim 5 0.11338629 7.849820 54.36364
dim 6 0.10976674 7.599236 61.96287
dim 7 0.10060204 6.964757 68.92763
dim 8 0.09802387 6.786268 75.71390
dim 9 0.09283131 6.426783 82.14068
dim 10 0.07673502 5.312425 87.45311
dim 11 0.06609694 4.575942 92.02905
dim 12 0.05950655 4.119684 96.14873
dim 13 0.05562942 3.851267 100.00000</code></pre>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">sum</span>(acm2<span class="op">$</span>eig[, <span class="dv">1</span>])</code></pre></div>
<pre><code>[1] 1.444444</code></pre>
<p>Les possibilités graphiques de <code class="pkg">FactoMineR</code> sont différentes de celles de <code class="pkg">ade4</code>. Un recours à la fonction <code data-pkg="FactoMineR" data-rdoc="plot.MCA">plot</code> affichera par défaut les individus, les modalités et les variables. La commande <code>?plot.MCA</code> permet d’accéder au fichier d’aide de cette fonction (i.e. de la méthode générique <code>plot</code> appliquée aux objets de type <code>MCA</code>) et de voir toutes les options graphiques. L’argument <code>choix</code> permet de spécifier ce que l’on souhaite afficher (« ind » pour les individus et les catégories, « var » pour les variables). L’argument <code>invisible</code> quant à lui permet de spécifier ce que l’on souhaite masquer. Les axes à afficher se précisent avec <code>axes</code>. Voir les exemples ci-dessous.</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">plot</span>(acm2)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-32-1.png" width="1050" />
<figcaption>
Plan factoriel (deux premiers axes)
</figcaption>
</figure>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">plot</span>(acm2, <span class="dt">axes =</span> <span class="kw">c</span>(<span class="dv">3</span>, <span class="dv">4</span>))</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-33-1.png" width="1050" />
<figcaption>
Plan factoriel (axes 3 et 4)
</figcaption>
</figure>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">plot</span>(acm2, <span class="dt">choix =</span> <span class="st">"ind"</span>)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-34-1.png" width="1050" />
<figcaption>
Plan factoriel (seulement les individus et les catégories)
</figcaption>
</figure>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">plot</span>(acm2, <span class="dt">choix =</span> <span class="st">"ind"</span>, <span class="dt">invisible =</span> <span class="st">"ind"</span>)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-35-1.png" width="1050" />
<figcaption>
Plan factoriel (seulement les catégories)
</figcaption>
</figure>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">plot</span>(acm2, <span class="dt">choix =</span> <span class="st">"var"</span>)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-36-1.png" width="1050" />
<figcaption>
Plan factoriel (seulement les variables)
</figcaption>
</figure>
<p>La fonction <code data-pkg="FactoMineR">plotellipses</code> trace des ellipses de confiance atour des modalités de variables qualitatives. L’objectif est de voir si les modalités d’une variable qualitative sont significativement différentes les unes des autres.</p>
<p>Par défaut (<code>means=TRUE</code>), les ellipses de confiance sont calculées pour les coordonnées moyennes de chaque catégorie.</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">plotellipses</span>(acm2)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-37-1.png" width="1050" />
<figcaption>
Ellipses de confiance (means=TRUE) dans le plan factoriel
</figcaption>
</figure>
<p>L’option <code>means=FALSE</code> calculera les ellipses de confiance pour l’ensemble des coordonnées des observations relevant de chaque catégorie.</p>
<figure>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">plotellipses</span>(acm2, <span class="dt">means =</span> <span class="ot">FALSE</span>)</code></pre></div>
<img src="graphs/analyse-des-correspondances-multiples/unnamed-chunk-38-1.png" width="1050" />
<figcaption>
Ellipses de confiance (means=FALSE) dans le plan factoriel
</figcaption>
</figure>
<p>La fonction <code data-pkg="FactoMineR">dimdesc</code> aide à décrire et interpréter les dimensions de l’ACM. Cette fonction est très utile quand le nombre de variables est élevé. Elle permet de voir à quelles variables les axes sont le plus liés : quelles variables et quelles modalités décrivent le mieux chaque axe ?</p>
<blockquote>
<p>Pour les variables qualitatives, un modèle d’analyse de variance à un facteur est réalisé pour chaque dimension ; les variables à expliquer sont les coordonnées des individus et la variable explicative est une des variables qualitatives. Un test F permet de voir si la variable a un effet significatif sur la dimension et des tests T sont réalisés modalité par modalité (avec le contraste somme des alpha_i=0). Cela montre si les coordonnées des individus de la sous-population définie par une modalité sont significativement différentes de celles de l’ensemble de la population (<em>i.e.</em> différentes de 0). Les variables et modalités sont triées par probabilité critique et seules celles qui sont significatives sont gardées dans le résultat.</p>
<footer>
Source : <a href="http://factominer.free.fr/factosbest/description-des-dimensions.html" class="uri">http://factominer.free.fr/factosbest/description-des-dimensions.html</a>
</footer>
</blockquote>
<div class="sourceCode"><pre class="sourceCode r"><code class="sourceCode r"><span class="kw">dimdesc</span>(acm2, <span class="dt">axes =</span> <span class="dv">1</span><span class="op">:</span><span class="dv">2</span>)</code></pre></div>
<pre><code>$`Dim 1`
$`Dim 1`$quali
R2 p.value
etud 0.586058164 0.000000e+00
grpage 0.512231318 1.008479e-292
cinema 0.471002163 8.339548e-263
sport 0.398103140 5.940105e-210
bricol 0.179188677 7.142716e-83
cuisine 0.048233515 4.941749e-22
lecture.bd 0.017667936 6.856650e-09
sexe 0.013670717 3.546801e-07
peche.chasse 0.005007337 2.105728e-03
$`Dim 1`$category
Estimate p.value
cinema_Oui 0.35033716 8.339548e-263
sport_Oui 0.33199860 5.940105e-210
[25,45) 0.33895697 1.959716e-159
Supérieur 0.45630756 1.376719e-118
bricol_Oui 0.21255190 7.142716e-83
Technique/Professionnel 0.17291856 4.703868e-23
cuisine_Oui 0.11015793 4.941749e-22
[16,25) 0.39553122 3.635181e-15
lecture.bd_Oui 0.22169306 6.856650e-09
Homme 0.05853263 3.546801e-07
peche.chasse_Oui 0.05543091 2.105728e-03
peche.chasse_Non -0.05543091 2.105728e-03
Femme -0.05853263 3.546801e-07
lecture.bd_Non -0.22169306 6.856650e-09
[45,65) -0.13173232 2.477610e-12
cuisine_Non -0.11015793 4.941749e-22
bricol_Non -0.21255190 7.142716e-83
[65,93] -0.60275587 2.906563e-165
sport_Non -0.33199860 5.940105e-210
cinema_Non -0.35033716 8.339548e-263
Primaire -0.59465967 5.269497e-268
$`Dim 2`
$`Dim 2`$quali
R2 p.value
sexe 0.62723828 0.000000e+00
peche.chasse 0.31109226 1.161746e-154
bricol 0.20276579 8.014713e-95
etud 0.13925513 6.754592e-61
cuisine 0.12908453 1.461380e-58
cinema 0.04039994 1.215838e-18
grpage 0.03776900 1.257795e-15
lecture.bd 0.01995653 7.190474e-10
$`Dim 2`$category
Estimate p.value
Homme 0.32598031 0.000000e+00
peche.chasse_Oui 0.35922450 1.161746e-154
bricol_Oui 0.18590016 8.014713e-95
cuisine_Non 0.14816688 1.461380e-58
Technique/Professionnel 0.23013181 5.919911e-54
cinema_Non 0.08436024 1.215838e-18
[45,65) 0.11638978 3.028836e-17
lecture.bd_Non 0.19371997 7.190474e-10
[65,93] -0.02872480 1.229757e-02
[25,45) -0.05570792 2.294799e-09
lecture.bd_Oui -0.19371997 7.190474e-10
Secondaire -0.09715846 1.240732e-10
cinema_Oui -0.08436024 1.215838e-18
Supérieur -0.14813997 6.942611e-24
cuisine_Oui -0.14816688 1.461380e-58
bricol_Non -0.18590016 8.014713e-95
peche.chasse_Non -0.35922450 1.161746e-154
Femme -0.32598031 0.000000e+00</code></pre>
</div>
<div class="footnotes">
<hr />
<ol>
<li id="fn1"><p>Pour une présentation plus détaillée, voir <br /><a href="http://www.math.univ-toulouse.fr/~baccini/zpedago/asdm.pdf" class="uri">http://www.math.univ-toulouse.fr/~baccini/zpedago/asdm.pdf</a>.<a href="#fnref1">↩</a></p></li>
<li id="fn2"><p>On pourra également avoir recours à la fonction <code data-pkg="ade4">inertia.dudi</code> pour l’ensemble des axes.<a href="#fnref2">↩</a></p></li>
<li id="fn3"><p>La fonction <code data-pkg="ade4" data-rdoc="score.acm">score</code> constituera également une aide à l’interprétation des axes.<a href="#fnref3">↩</a></p></li>
</ol>
</div>
</article>
</div>
<div class="col-sm-3" role="complementary">
<nav class="hidden-print hidden-xs" id="nav_sidebar">
</nav>
</div>
</div>
<script>
// manage active state of menu based on current page
$(document).ready(function () {
// active menu
href = window.location.pathname;
href = href.substr(href.lastIndexOf('/') + 1);
if (href=='') href = 'index.html';
$('a[href="' + href + '"]').parent().addClass('active');
$('a[href="' + href + '"]').parent().parents('li').addClass('active');
// élargir la page d'accueil
if (href=='index.html') $('.col-sm-9').attr('class','col-sm-12');
// rechercher
$("#rechercher").submit(function(event) {
$('input[name="q"]').val($('input[name="q"]').val() + ' site:larmarange.github.io/analyse-R');
});
// sidebar
$("#nav_sidebar").append($("#TOC").html());
$("#nav_sidebar ul").addClass("nav nav-stacked");
$("#TOC").addClass("visible-xs-block");
$('body').scrollspy({
target: '#nav_sidebar',
offset: 40
});
// Identifier les <pre> fermant
$('pre').next("*:not(pre)").prev().addClass('last'); // Dernier <pre> de chaque groupe contigu de <pre>
$('pre').parent().each(function (){
$(this).children('pre').last().addClass('last');
}); // Si <pre> est le dernier enfant de son parent
// Ajout liens rdocumentation et tooltip
$("code[data-pkg]").each(function( index ) {
pkg = $(this).attr('data-pkg');
if ($(this).attr('data-rdoc') !== undefined) {
rdocumentation = $(this).attr('data-rdoc');
} else {
rdocumentation = $(this).text();
}
fonction = $(this).text();
$(this).wrap('<a href="http://www.rdocumentation.org/packages/'+pkg+'/functions/'+rdocumentation+'">');
$(this).attr('data-toggle','tooltip');
$(this).attr('data-placement','top');
$(this).attr('title','package : ' + pkg);
$('[data-toggle="tooltip"]').tooltip();
});
$("code.pkg").each(function( index ) {
$(this).wrap('<a href="http://www.rdocumentation.org/packages/'+$(this).text()+'">');
});
// Figures
$("figure").each(function( index ) {
if ($(this).children("figcaption").length > 0)
$(this).children("figcaption:first").prepend('<span class="figure-number">Figure '+(index+1)+'.</span> ');
else
$(this).append($("<figcaption>").append('<span class="figure-number">Figure '+(index+1)+'</span>'));
});
// Colorbox
jQuery('article div img').colorbox({
maxWidth: '90%',
maxHeight: '90%',
rel: 'figures',
current: "",
href: function(){
return $(this).attr('src');
},
title: function(){
return $(this).attr('alt');
}
});
jQuery('article div img').css('cursor', 'pointer');
jQuery('figure img').colorbox({
maxWidth: '90%',
maxHeight: '90%',
rel: 'figures',
current: "",
href: function(){
return $(this).attr('src');
},
title: function(){
return $(this).parent().children("figcaption").text();
}
});
jQuery('figure img').css('cursor', 'pointer');
// ZeroClipboard
$('pre.r').parent().each(function(){
$(this).children('pre.r').first().before('<div class="zero-clipboard hidden-print hidden-xs"><button class="btn-clipboard">Copier</button></div>');
}); // Il peut arriver que le pre ne soit pas précédé (cf. figures)
$('*:not(pre):not(.zero-clipboard) + pre.r').before('<div class="zero-clipboard hidden-print hidden-xs"><button class="btn-clipboard">Copier</button></div>');
$('pre.last').after(function() {
if ($(this).hasClass("r")) res = $(this).text(); else res = "";
$(this).prevUntil('*:not(pre)','pre.r').each(function() {
res = $(this).text() + '\n' + res;
});
return '<div class="clipboard">' + res + '</div>';
});
$('.zero-clipboard').each(function(index){
$(this).children('.btn-clipboard').attr('data-clipboard-target','clipboard_'+index);
$(this).nextAll("div.clipboard").first().attr('id','clipboard_'+index);
});
var client = new ZeroClipboard( $(".btn-clipboard") );
client.on( "ready", function( readyEvent ) {
// alert( "ZeroClipboard SWF is ready!" );
client.on( "aftercopy", function( event ) {
// `this` === `client`
// `event.target` === the element that was clicked
//event.target.style.display = "none";
$(event.target).parent().before('<div class="alert alert-success"><a href="#" class="close" data-dismiss="alert">×</a>Le code <strong>R</strong> de l’exemple a été copié dans le presse-papier.</div>');
} );
} );
});
</script>
<!-- disqus -->
<div class="row">
<div id="disqus_thread" class="col-sm-9" role="complementary"></div>
</div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'analyse-r'; // required: replace example with your forum shortname
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Veuillez activer JavaScript pour voir les <a href="http://disqus.com/?ref_noscript">les commentaires gérés avec Disqus.</a></noscript>
<!--<a href="http://disqus.com" class="dsq-brlink">Les commentaires sont hébergés par <span class="logo-disqus">Disqus</span>.</a>-->
<footer>
<div class="row">
<div class="col-lg-12">
<p>Contenus sous licence <a href="https://creativecommons.org/licenses/by-nc-sa/3.0/fr/" rel="nofollow">Creative Commons Attribution - Pas d’utilisation commerciale - Partage dans les mêmes conditions</a>.<br />
Propulsé par <a href="http://www.r-project.org/" rel="nofollow">R</a>, </a><a href="http://www.rstudio.com/" rel="nofollow">RStudio</a>, <a href="http://rmarkdown.rstudio.com/" rel="nofollow">R Markdown</a>, <a href="http://yihui.name/knitr/" rel="nofollow">knitr</a>, <a href="http://pandoc.org/" rel="nofollow">pandoc</a> et <a href="http://www.princexml.com/" rel="nofollow">Prince XML</a>. Hébergé par <a href="https://github.com/" rel="nofollow">GitHub</a>.</p>
</div>
</div>
</footer>
</div>
<script>
// add bootstrap table styles to pandoc tables
function bootstrapStylePandocTables() {
$('tr.header').parent('thead').parent('table').addClass('table table-condensed');
}
$(document).ready(function () {
bootstrapStylePandocTables();
});
</script>
</body>
</html>