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()

Es posible que nos interese simplificar ideologia en pocas categorias:

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)