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")
Loading required package: pacman
pacman::p_load("MASS","tidyverse","haven","stringr", "FactoMineR","factoextra","corrplot","gplots","ggrepel")
df <- read_sav("WV6_Data_Spain_2011_Spss_v20180912.sav INDICES TIC TOTAL MODERNO TRAD.sav") %>%
#  select (V3,V39, V46, V218_ESMA, V217_ESMA, V219_ESMA, V220_ESMA, V221_ESMA, V222_ESMA, V223_ESMA) %>%
#  rename(ID=V3) %>%
  as_factor() %>% 
  filter(complete.cases(.)) %>% 
  droplevels()
df %>% head()

df2 = df %>% select(-IndiceInfoComTotal,-IDEOLOGIApolitica)

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  0.25261165        8.7442494                    8.744249
Dim.2  0.17494930        6.0559373                   14.800187
Dim.3  0.15478199        5.3578380                   20.158025
Dim.4  0.14654489        5.0727077                   25.230732
Dim.5  0.13555421        4.6922613                   29.922994
Dim.6  0.13062458        4.5216202                   34.444614
Dim.7  0.12465866        4.3151076                   38.759721
Dim.8  0.12181792        4.2167741                   42.976496
Dim.9  0.11929719        4.1295182                   47.106014
Dim.10 0.11682430        4.0439182                   51.149932
Dim.11 0.11309532        3.9148379                   55.064770
Dim.12 0.11078387        3.8348263                   58.899596
Dim.13 0.10960156        3.7939002                   62.693496
Dim.14 0.10488019        3.6304681                   66.323964
Dim.15 0.10427867        3.6096464                   69.933611
Dim.16 0.10124033        3.5044731                   73.438084
Dim.17 0.09993515        3.4592937                   76.897377
Dim.18 0.09725138        3.3663940                   80.263771
Dim.19 0.09225711        3.1935153                   83.457287
Dim.20 0.08518102        2.9485738                   86.405861
Dim.21 0.08503213        2.9434198                   89.349280
Dim.22 0.07687013        2.6608892                   92.010170
Dim.23 0.07526831        2.6054415                   94.615611
Dim.24 0.06963562        2.4104638                   97.026075
Dim.25 0.06273054        2.1714419                   99.197517
Dim.26 0.02318285        0.8024832                  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)

LS0tCnRpdGxlOiAiQW5hbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyB2NCIKYXV0aG9yOiAiQW5hIE1hcsOtYSBMw7NwZXogTmFyYm9uYSIKZGF0ZTogJzIwMTktMDYtMjAnCm91dHB1dDoKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAogIHBkZl9kb2N1bWVudDogZGVmYXVsdAotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZHBpPTMwMCxmaWcud2lkdGg9MTIsZmlnLmhlaWdodD0xMCkKYGBgCgpFbiBwcmltZXIgbHVnYXIsIGNhcmdhbW9zL2luc3RhbG1vcyBsYXMgbGlicmVyw61hcyBxdWUgdmFtb3MgYSB1c2FyIHkgbGVlbW9zIGxhIGJhc2UgZGUgZGF0b3MgZW4gbGEgdmFyaWFibGUgImRmIiwgbm9zIHF1ZWRhbW9zIHNvbG8gY29uIGxvcyBkYXRvcyBjb21wbGV0b3MsIHRpcmFtb3MgbG9zIG5pdmVsZXMgcXVlIG5vIHNlIHVzYW4sIHJlbm9tYnJhbW9zIGVsIGlkZW50aW1pY2Fkb3IgZGUgbGEgZW5jdWVzdGEgZGUgVjMgYSBJRCB5IGV4cGxvcmFtb3MgbGFzIHByaW1lcmFzIGzDrW5lYXM6CgpgYGB7cn0KaWYgKCFyZXF1aXJlKCJwYWNtYW4iKSkgaW5zdGFsbC5wYWNrYWdlcygicGFjbWFuIikKcGFjbWFuOjpwX2xvYWQoIk1BU1MiLCJ0aWR5dmVyc2UiLCJoYXZlbiIsInN0cmluZ3IiLCAiRmFjdG9NaW5lUiIsImZhY3RvZXh0cmEiLCJjb3JycGxvdCIsImdwbG90cyIsImdncmVwZWwiKQpgYGAKCgpgYGB7cn0KZGYgPC0gcmVhZF9zYXYoIldWNl9EYXRhX1NwYWluXzIwMTFfU3Bzc192MjAxODA5MTIuc2F2IElORElDRVMgVElDIFRPVEFMIE1PREVSTk8gVFJBRC5zYXYiKSAlPiUKIyAgc2VsZWN0IChWMyxWMzksIFY0NiwgVjIxOF9FU01BLCBWMjE3X0VTTUEsIFYyMTlfRVNNQSwgVjIyMF9FU01BLCBWMjIxX0VTTUEsIFYyMjJfRVNNQSwgVjIyM19FU01BKSAlPiUKIyAgcmVuYW1lKElEPVYzKSAlPiUKICBhc19mYWN0b3IoKSAlPiUgCiAgZmlsdGVyKGNvbXBsZXRlLmNhc2VzKC4pKSAlPiUgCiAgZHJvcGxldmVscygpCmRmICU+JSBoZWFkKCkKYGBgCgoKCgoKCmBgYHtyfQoKZGYyID0gZGYgJT4lIHNlbGVjdCgtSW5kaWNlSW5mb0NvbVRvdGFsLC1JREVPTE9HSUFwb2xpdGljYSkKCmBgYAoKCgoKCgoKCiMgRXNjYWxhbWllbnRvIG3Dumx0aXBsZQpFbCBtb2RlbG8gcXVlIHNlIGhhIGhlY2hvIGVuIFNQU1MgdGVuw61hIGVzdGEgcGludGEgc2kgbG8gaGUgdmlzdG8gYmllbjoKCmBgYHtyfQpmaXQgPC0gTUNBKGRmMiAlPiVtdXRhdGVfYWxsKGFzLmZhY3RvciksIG5jcCA9IDIsIGdyYXBoID0gVFJVRSkKYGBgCgpMb3MgYXV0b3ZhbG9yZXMgc29uOgpgYGB7cn0KZ2V0X2VpZ2VudmFsdWUoZml0KQpgYGAKCmBgYHtyfQpmdml6X3NjcmVlcGxvdChmaXQsIGFkZGxhYmVscyA9IFRSVUUpCmBgYAoKUmVhbG1lbnRlIHNpIG5vcyBxdWVkYW1vcyBzb2xvIGNvbiAyIGRpbWVuc2lvbmVzIG5vIHZhbW9zIGEgdmVyIG11Y2hvLCBwdWVzIHF1ZWRhIG11Y2hhIGluZm9ybWFjacOzbiBmdWVyYSBkZSBlbGxhcywgcGVybyB2YW1vcyBhIGVjaGFyIHVuIHZpc3Rhem8gZSB0b2RvcyBtb2RvczoKCgoKYGBge3J9CmZ2aXpfbWNhX3ZhcihmaXQsIGNob2ljZSA9ICJtY2EuY29yIiwgY29sLnZhcj0iYmxhY2siLAogICAgICAgICAgICByZXBlbCA9IFRSVUUsIAogICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKQpgYGAKCgoKCgoKCmBgYHtyfQpmdml6X21jYV92YXIoZml0LCAKICAgICAgICAgICAgIHJlcGVsID0gVFJVRSwgY29sLnZhcj0iYmxhY2siLAogICAgICAgICAgICAgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkKYGBgCgpZYSB2aW1vcyBxdWUgMiBkaW1lbnNpb25lcyBzZSBxdWVkYWJhbiBjb3J0YXMgcGFyYSByZXByZXNlbnRhciBsYXMgdmFyaWFibGVzLiBWYW1vcyBhIHBvbmVyIGRlIGNvbG9yIHJvam8gbGFzIHF1ZSBlc3TDqW4gbWVqb3IgcmVwcmVzZW50YWRhcyBlbiB1biBwbGFubywgeSBkZSBvdHJvcyBjb2xvcmVzIGNvbmZvcm1lIHZheWFtb3MgcGVyZGllbmRvIGVzdGEgcHJvcGllZGFkCgpgYGB7ciAgZHBpPTYwMCwgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PTl9CmZ2aXpfbWNhX3ZhcihmaXQsIGNvbC52YXIgPSAiY29zMiIsCiAgICAgICAgICAgICBncmFkaWVudC5jb2xzID0gYygiIzAwQUZCQiIsICIjRTdCODAwIiwgIiNGQzRFMDciKSwgCiAgICAgICAgICAgICByZXBlbCA9IFRSVUUsICMgQXZvaWQgdGV4dCBvdmVybGFwcGluZwogICAgICAgICAgICAgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKSkKYGBgCgoKCgpVbmEgZm9ybWEgZGUgdmVyIHF1aWVuIGVzdMOhIG1lam9yIG8gcGVvciByZXByZXNlbnRhZG8gdGFtYmnDqW4gc2Vyw61hIGFzb2NpYW5kbywgZW4gbHVnYXIgZGUgY29sb3Igcm9qbywgdW4gZ3JhZG8gZGUgdHJhbnNwYXJlbmNpYSBhbCBzw61tYm9sbyBxdWUgbG8gcmVwcmVzZW50YToKCmBgYHtyfQpmdml6X21jYV92YXIoZml0LCBhbHBoYS52YXI9ImNvczIiLCBjb2wudmFyPSJibGFjayIsCiAgICAgICAgICAgICByZXBlbCA9IFRSVUUsCiAgICAgICAgICAgICBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpKSAKYGBgCgpPcmRlbmVtb3MgZGUgbWVqb3IgYSBwZW9yIGxvIGJpZW4gcXVlIHNlIHJlcHJlc2VudGFuIGNhZGEgdmFsb3IgZGUgbGFzIHZhcmlhYmxlcyBlbiB1biBwbGFubzoKCmBgYHtyfQpmdml6X2NvczIoZml0LCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDE6MikKYGBgCgoKCgoKCgoK