En primer lugar, cargamos/instalmos las librerías que vamos a usar y leemos la base de datos en la variable “df”, nos quedamos solo con los datos completos, tiramos los niveles que no se usan, renombramos el identimicador de la encuesta de V3 a ID y exploramos las primeras líneas:

if (!require("pacman")) install.packages("pacman")
pacman::p_load("MASS","tidyverse","haven","stringr", "FactoMineR","factoextra","corrplot","gplots","ggrepel")
###################################VVVVVVVVVV#########################################
df <- read_sav("WV6_Data_Spain_2011_Spss_v20180912.sav INDICES TIC TOTAL MODERNO TRAD.sav") %>%
  as_factor() %>% 
  filter(complete.cases(.)) %>% 
  droplevels()
df %>% head()

#####Puedo escribir, que no me hace caso
#df %>% select(-recIndiceTradicional,-recIndiceInfoCModerno,-IDEOLOGIApolitica)
#No tocar de aquí hacia abajo

#VAMOS CON TODO
df2 = df

Escalamiento múltiple

El modelo que se ha hecho en SPSS tenía esta pinta si lo he visto bien:

fit <- MCA(df2 %>%mutate_all(as.factor), ncp = 2, graph = TRUE)

Los autovalores son:

get_eigenvalue(fit)
         eigenvalue variance.percent cumulative.variance.percent
Dim.1  2.629718e-01     8.765728e+00                    8.765728
Dim.2  1.941301e-01     6.471005e+00                   15.236733
Dim.3  1.728447e-01     5.761491e+00                   20.998224
Dim.4  1.622766e-01     5.409220e+00                   26.407444
Dim.5  1.524466e-01     5.081554e+00                   31.488998
Dim.6  1.408637e-01     4.695458e+00                   36.184455
Dim.7  1.358892e-01     4.529638e+00                   40.714094
Dim.8  1.158214e-01     3.860713e+00                   44.574807
Dim.9  1.084319e-01     3.614395e+00                   48.189202
Dim.10 1.031531e-01     3.438438e+00                   51.627640
Dim.11 1.004878e-01     3.349593e+00                   54.977233
Dim.12 9.598607e-02     3.199536e+00                   58.176768
Dim.13 9.296955e-02     3.098985e+00                   61.275753
Dim.14 9.249188e-02     3.083063e+00                   64.358816
Dim.15 8.986775e-02     2.995592e+00                   67.354408
Dim.16 8.793355e-02     2.931118e+00                   70.285526
Dim.17 8.680003e-02     2.893334e+00                   73.178860
Dim.18 8.420501e-02     2.806834e+00                   75.985694
Dim.19 8.289089e-02     2.763030e+00                   78.748724
Dim.20 7.890293e-02     2.630098e+00                   81.378821
Dim.21 7.853829e-02     2.617943e+00                   83.996765
Dim.22 7.371452e-02     2.457151e+00                   86.453915
Dim.23 6.659977e-02     2.219992e+00                   88.673907
Dim.24 6.604317e-02     2.201439e+00                   90.875346
Dim.25 6.271037e-02     2.090346e+00                   92.965692
Dim.26 5.716486e-02     1.905495e+00                   94.871187
Dim.27 4.448274e-02     1.482758e+00                   96.353946
Dim.28 3.870318e-02     1.290106e+00                   97.644052
Dim.29 2.894771e-02     9.649235e-01                   98.608975
Dim.30 2.321811e-02     7.739372e-01                   99.382912
Dim.31 1.851263e-02     6.170878e-01                  100.000000
Dim.32 1.724197e-29     5.747325e-28                  100.000000
Dim.33 3.366925e-30     1.122308e-28                  100.000000
fviz_screeplot(fit, addlabels = TRUE)

Realmente si nos quedamos solo con 2 dimensiones no vamos a ver mucho, pues queda mucha información fuera de ellas, pero vamos a echar un vistazo e todos modos:

fviz_mca_var(fit, choice = "mca.cor", col.var="black",
            repel = TRUE, 
            ggtheme = theme_minimal())

fviz_mca_var(fit, 
             repel = TRUE, col.var="black",
             ggtheme = theme_minimal())

Ya vimos que 2 dimensiones se quedaban cortas para representar las variables. Vamos a poner de color rojo las que estén mejor representadas en un plano, y de otros colores conforme vayamos perdiendo esta propiedad

fviz_mca_var(fit, col.var = "cos2",
             gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), 
             repel = TRUE, # Avoid text overlapping
             ggtheme = theme_minimal())

Una forma de ver quien está mejor o peor representado también sería asociando, en lugar de color rojo, un grado de transparencia al símbolo que lo representa:

fviz_mca_var(fit, alpha.var="cos2", col.var="black",
             repel = TRUE,
             ggtheme = theme_minimal()) 

Ordenemos de mejor a peor lo bien que se representan cada valor de las variables en un plano:

fviz_cos2(fit, choice = "var", axes = 1:2)

LS0tCnRpdGxlOiAiQW5hbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyB2MyIKYXV0aG9yOiAiQW5hIE1hcsOtYSBMw7NwZXogTmFyYm9uYSIKZGF0ZTogJzIwMTktMDYtMjAnCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgd29yZF9kb2N1bWVudDogZGVmYXVsdAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAogIGh0bWxfZG9jdW1lbnQ6CiAgICBkZl9wcmludDogcGFnZWQKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KIyMjUGFyw6FtZXRyb3MgZGUgaW1wcmVzacOzbiBkZSBncsOhZmljb3MKa25pdHI6Om9wdHNfY2h1bmskc2V0KGRwaT0zMDAsZmlnLndpZHRoPTEyLGZpZy5oZWlnaHQ9MTApCmBgYAoKRW4gcHJpbWVyIGx1Z2FyLCBjYXJnYW1vcy9pbnN0YWxtb3MgbGFzIGxpYnJlcsOtYXMgcXVlIHZhbW9zIGEgdXNhciB5IGxlZW1vcyBsYSBiYXNlIGRlIGRhdG9zIGVuIGxhIHZhcmlhYmxlICJkZiIsIG5vcyBxdWVkYW1vcyBzb2xvIGNvbiBsb3MgZGF0b3MgY29tcGxldG9zLCB0aXJhbW9zIGxvcyBuaXZlbGVzIHF1ZSBubyBzZSB1c2FuLCByZW5vbWJyYW1vcyBlbCBpZGVudGltaWNhZG9yIGRlIGxhIGVuY3Vlc3RhIGRlIFYzIGEgSUQgeSBleHBsb3JhbW9zIGxhcyBwcmltZXJhcyBsw61uZWFzOgoKYGBge3J9CmlmICghcmVxdWlyZSgicGFjbWFuIikpIGluc3RhbGwucGFja2FnZXMoInBhY21hbiIpCnBhY21hbjo6cF9sb2FkKCJNQVNTIiwidGlkeXZlcnNlIiwiaGF2ZW4iLCJzdHJpbmdyIiwgIkZhY3RvTWluZVIiLCJmYWN0b2V4dHJhIiwiY29ycnBsb3QiLCJncGxvdHMiLCJnZ3JlcGVsIikKYGBgCgoKYGBge3J9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjVlZWVlZWVlZWViMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRmIDwtIHJlYWRfc2F2KCJXVjZfRGF0YV9TcGFpbl8yMDExX1Nwc3NfdjIwMTgwOTEyLnNhdiBJTkRJQ0VTIFRJQyBUT1RBTCBNT0RFUk5PIFRSQUQuc2F2IikgJT4lCiAgYXNfZmFjdG9yKCkgJT4lIAogIGZpbHRlcihjb21wbGV0ZS5jYXNlcyguKSkgJT4lIAogIGRyb3BsZXZlbHMoKQpkZiAlPiUgaGVhZCgpCgojIyMjI1B1ZWRvIGVzY3JpYmlyLCBxdWUgbm8gbWUgaGFjZSBjYXNvCiNkZiAlPiUgc2VsZWN0KC1yZWNJbmRpY2VUcmFkaWNpb25hbCwtcmVjSW5kaWNlSW5mb0NNb2Rlcm5vLC1JREVPTE9HSUFwb2xpdGljYSkKI05vIHRvY2FyIGRlIGFxdcOtIGhhY2lhIGFiYWpvCmBgYAoKCgoKCgpgYGB7cn0KCiNWQU1PUyBDT04gVE9ETwpkZjIgPSBkZgoKYGBgCgoKCgoKCgoKIyBFc2NhbGFtaWVudG8gbcO6bHRpcGxlCkVsIG1vZGVsbyBxdWUgc2UgaGEgaGVjaG8gZW4gU1BTUyB0ZW7DrWEgZXN0YSBwaW50YSBzaSBsbyBoZSB2aXN0byBiaWVuOgoKYGBge3J9CmZpdCA8LSBNQ0EoZGYyICU+JW11dGF0ZV9hbGwoYXMuZmFjdG9yKSwgbmNwID0gMiwgZ3JhcGggPSBUUlVFKQpgYGAKCkxvcyBhdXRvdmFsb3JlcyBzb246CmBgYHtyfQpnZXRfZWlnZW52YWx1ZShmaXQpCmBgYAoKYGBge3J9CmZ2aXpfc2NyZWVwbG90KGZpdCwgYWRkbGFiZWxzID0gVFJVRSkKYGBgCgpSZWFsbWVudGUgc2kgbm9zIHF1ZWRhbW9zIHNvbG8gY29uIDIgZGltZW5zaW9uZXMgbm8gdmFtb3MgYSB2ZXIgbXVjaG8sIHB1ZXMgcXVlZGEgbXVjaGEgaW5mb3JtYWNpw7NuIGZ1ZXJhIGRlIGVsbGFzLCBwZXJvIHZhbW9zIGEgZWNoYXIgdW4gdmlzdGF6byBlIHRvZG9zIG1vZG9zOgoKCgpgYGB7cn0KZnZpel9tY2FfdmFyKGZpdCwgY2hvaWNlID0gIm1jYS5jb3IiLCBjb2wudmFyPSJibGFjayIsCiAgICAgICAgICAgIHJlcGVsID0gVFJVRSwgCiAgICAgICAgICAgIGdndGhlbWUgPSB0aGVtZV9taW5pbWFsKCkpCmBgYAoKCgoKCgoKYGBge3J9CmZ2aXpfbWNhX3ZhcihmaXQsIAogICAgICAgICAgICAgcmVwZWwgPSBUUlVFLCBjb2wudmFyPSJibGFjayIsCiAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQpgYGAKCllhIHZpbW9zIHF1ZSAyIGRpbWVuc2lvbmVzIHNlIHF1ZWRhYmFuIGNvcnRhcyBwYXJhIHJlcHJlc2VudGFyIGxhcyB2YXJpYWJsZXMuIFZhbW9zIGEgcG9uZXIgZGUgY29sb3Igcm9qbyBsYXMgcXVlIGVzdMOpbiBtZWpvciByZXByZXNlbnRhZGFzIGVuIHVuIHBsYW5vLCB5IGRlIG90cm9zIGNvbG9yZXMgY29uZm9ybWUgdmF5YW1vcyBwZXJkaWVuZG8gZXN0YSBwcm9waWVkYWQKCmBgYHtyICBkcGk9NjAwLCBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9OX0KZnZpel9tY2FfdmFyKGZpdCwgY29sLnZhciA9ICJjb3MyIiwKICAgICAgICAgICAgIGdyYWRpZW50LmNvbHMgPSBjKCIjMDBBRkJCIiwgIiNFN0I4MDAiLCAiI0ZDNEUwNyIpLCAKICAgICAgICAgICAgIHJlcGVsID0gVFJVRSwgIyBBdm9pZCB0ZXh0IG92ZXJsYXBwaW5nCiAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQpgYGAKCgoKClVuYSBmb3JtYSBkZSB2ZXIgcXVpZW4gZXN0w6EgbWVqb3IgbyBwZW9yIHJlcHJlc2VudGFkbyB0YW1iacOpbiBzZXLDrWEgYXNvY2lhbmRvLCBlbiBsdWdhciBkZSBjb2xvciByb2pvLCB1biBncmFkbyBkZSB0cmFuc3BhcmVuY2lhIGFsIHPDrW1ib2xvIHF1ZSBsbyByZXByZXNlbnRhOgoKYGBge3J9CmZ2aXpfbWNhX3ZhcihmaXQsIGFscGhhLnZhcj0iY29zMiIsIGNvbC52YXI9ImJsYWNrIiwKICAgICAgICAgICAgIHJlcGVsID0gVFJVRSwKICAgICAgICAgICAgIGdndGhlbWUgPSB0aGVtZV9taW5pbWFsKCkpIApgYGAKCk9yZGVuZW1vcyBkZSBtZWpvciBhIHBlb3IgbG8gYmllbiBxdWUgc2UgcmVwcmVzZW50YW4gY2FkYSB2YWxvciBkZSBsYXMgdmFyaWFibGVzIGVuIHVuIHBsYW5vOgoKYGBge3J9CmZ2aXpfY29zMihmaXQsIGNob2ljZSA9ICJ2YXIiLCBheGVzID0gMToyKQpgYGAKCgoKCgoKCgo=