Muestra

Cargamos los datos iniciales y explorando las variables:

df=read_spss("PROFESIONALES.sav")

describe(df) %>% knitr::kable()
vars n mean sd median trimmed mad min max range skew kurtosis se
IDENTIFICADOR 1 190 95.49 55.00 95.5 95.49 70.42 1 190 189 0.00 -1.22 3.99
CENTRO 2 190 11.64 7.16 12.0 11.31 8.90 1 25 24 0.25 -1.16 0.52
GENERO 3 187 0.87 0.34 1.0 0.95 0.00 0 1 1 -2.14 2.57 0.02
EDAD 4 185 35.25 9.06 33.0 34.42 8.90 5 62 57 0.62 0.46 0.67
PROFESION 5 185 2.54 1.76 2.0 2.28 1.48 0 8 8 1.19 1.09 0.13
EXPERIENCIA 6 182 96.20 89.06 72.0 82.70 71.16 0 444 444 1.34 1.64 6.60
ANTIGÜEDAD 7 182 75.90 87.04 36.0 59.36 35.58 0 444 444 1.75 2.98 6.45
ESTUDIOS 8 184 3.04 1.25 4.0 3.16 0.00 0 5 5 -0.69 -1.12 0.09
HORAS 9 181 33.07 8.88 37.5 34.60 1.48 4 45 41 -1.48 1.28 0.66
ICCAITP01 10 189 4.29 0.95 5.0 4.45 0.00 1 5 4 -1.45 1.86 0.07
ICCAITP02 11 189 3.85 1.20 4.0 4.01 1.48 1 5 4 -0.91 -0.08 0.09
ICCAITP03 12 187 4.19 0.95 4.0 4.32 1.48 1 5 4 -0.94 -0.03 0.07
ICCAITP04 13 188 4.13 0.89 4.0 4.23 1.48 2 5 3 -0.75 -0.26 0.06
ICCAITP05 14 187 4.19 0.94 4.0 4.32 1.48 1 5 4 -1.19 1.26 0.07
ICCAITP06 15 190 3.87 1.12 4.0 4.01 1.48 1 5 4 -0.74 -0.36 0.08
ICCAITP07 16 190 4.21 1.01 4.0 4.39 1.48 1 5 4 -1.35 1.35 0.07
ICCAITP08 17 186 4.03 0.83 4.0 4.09 1.48 2 5 3 -0.55 -0.31 0.06
ICCAITP09 18 189 4.14 0.79 4.0 4.20 1.48 2 5 3 -0.50 -0.57 0.06
ICCAITP10 19 189 3.73 0.94 4.0 3.80 1.48 1 5 4 -0.52 0.08 0.07
ICCAITP11 20 189 4.58 0.64 5.0 4.69 0.00 2 5 3 -1.35 1.11 0.05
ICCAITP12 21 190 4.64 0.51 5.0 4.69 0.00 3 5 2 -0.91 -0.43 0.04
ICCAITP13 22 187 4.33 0.95 5.0 4.49 0.00 1 5 4 -1.39 1.35 0.07
ICCAITP14 23 189 4.31 0.70 4.0 4.39 1.48 2 5 3 -0.59 -0.46 0.05
ICCAITP15 24 189 4.65 0.56 5.0 4.73 0.00 2 5 3 -1.51 2.27 0.04
ICCAITP16 25 190 4.84 0.42 5.0 4.95 0.00 3 5 2 -2.60 6.29 0.03
ICCAITP17 26 190 4.91 0.33 5.0 5.00 0.00 3 5 2 -3.60 13.33 0.02
ICCAITP18 27 190 4.28 0.68 4.0 4.35 1.48 3 5 2 -0.40 -0.84 0.05
ICCAITP19 28 190 4.49 0.75 5.0 4.64 0.00 1 5 4 -1.58 2.67 0.05
ICCAITP20 29 190 4.45 0.75 5.0 4.59 0.00 2 5 3 -1.25 0.89 0.05
ICCAITP21 30 190 4.46 0.58 4.5 4.50 0.74 3 5 2 -0.49 -0.73 0.04
ICCAITP22 31 188 4.18 0.85 4.0 4.26 1.48 1 5 4 -0.81 0.19 0.06
ICCAITP23 32 190 4.65 0.52 5.0 4.71 0.00 3 5 2 -1.05 -0.02 0.04
ICCAITP24 33 190 4.65 0.58 5.0 4.75 0.00 2 5 3 -1.59 2.32 0.04
ICCAITP25 34 188 4.64 0.64 5.0 4.77 0.00 2 5 3 -1.65 1.94 0.05
ICCAITP26 35 188 4.69 0.53 5.0 4.78 0.00 3 5 2 -1.46 1.17 0.04
ICCAITP27 36 186 4.15 0.95 4.0 4.27 1.48 1 5 4 -1.05 0.83 0.07
ICCAITP28 37 187 3.96 0.97 4.0 4.07 1.48 1 5 4 -0.77 0.13 0.07
ICCAITP29 38 179 2.81 1.28 3.0 2.77 1.48 1 5 4 0.04 -1.14 0.10
ICCAITP30 39 187 4.00 1.01 4.0 4.14 1.48 1 5 4 -0.92 0.31 0.07
ICCAITP31 40 188 4.43 0.64 4.5 4.50 0.74 2 5 3 -0.77 0.13 0.05
ICCAITP32 41 188 4.65 0.59 5.0 4.75 0.00 2 5 3 -1.79 3.59 0.04
ICCAITP33 42 187 4.29 0.79 4.0 4.39 1.48 2 5 3 -0.83 -0.10 0.06

Solo nos interesan algunas:

varTrabajo=df %>% select (starts_with("ICCAITP")) %>% names()
dfTrabajo=df %>% select(varTrabajo) %>% filter(complete.cases(.))

Las interesantes son: ICCAITP01, ICCAITP02, ICCAITP03, ICCAITP04, ICCAITP05, ICCAITP06, ICCAITP07, ICCAITP08, ICCAITP09, ICCAITP10, ICCAITP11, ICCAITP12, ICCAITP13, ICCAITP14, ICCAITP15, ICCAITP16, ICCAITP17, ICCAITP18, ICCAITP19, ICCAITP20, ICCAITP21, ICCAITP22, ICCAITP23, ICCAITP24, ICCAITP25, ICCAITP26, ICCAITP27, ICCAITP28, ICCAITP29, ICCAITP30, ICCAITP31, ICCAITP32, ICCAITP33, pero vimos que no funcionban bien algunas de ellas

varTrabajo = varTrabajo %>% setdiff(c("ICCAITP13", "ICCAITP18", "ICCAITP27", "ICCAITP29", "ICCAITP24"))
dfTrabajo=df %>% select(varTrabajo) %>% filter(complete.cases(.))

La 24, por que casi todo el mundo dice lo mismo. Las otras por otras razones.

Veamos algo de descriptiva:

dfLong=dfTrabajo %>% gather(Item,Puntos)
table(dfLong$Puntos)
## 
##    1    2    3    4    5 
##   45  141  530 1588 2624
dfLong=dfLong %>% filter(Puntos<=6)
ggplot(dfLong,aes(x=Puntos)) + 
  geom_bar()+ 
  theme_classic()+
  facet_wrap(~Item)

Alguno de los items, como el 21 y el 22 no parecen tener mucha capacidad de discriminar

corr <- cor( dfTrabajo)
indicesKMO=KMO(corr)

dfKMO=data.frame(Variable=c("Global",names(indicesKMO$MSAi)),KMO=c(indicesKMO$MSA,indicesKMO$MSAi)) %>% as_tibble() %>%
  mutate(Interpretacion=cut(KMO,breaks = c(0,.5,.6,.7,.8,.9,1),labels = c("Unacceptable","Miserable","Mediocre","Middling","Meritorious","Marvelous")))


dfKMO  %>% knitr::kable()
Variable KMO Interpretacion
Global 0.86 Meritorious
ICCAITP01 0.70 Mediocre
ICCAITP02 0.67 Mediocre
ICCAITP03 0.88 Meritorious
ICCAITP04 0.87 Meritorious
ICCAITP05 0.83 Meritorious
ICCAITP06 0.88 Meritorious
ICCAITP07 0.81 Meritorious
ICCAITP08 0.85 Meritorious
ICCAITP09 0.95 Marvelous
ICCAITP10 0.83 Meritorious
ICCAITP11 0.93 Marvelous
ICCAITP12 0.86 Meritorious
ICCAITP14 0.89 Meritorious
ICCAITP15 0.85 Meritorious
ICCAITP16 0.86 Meritorious
ICCAITP17 0.84 Meritorious
ICCAITP19 0.76 Middling
ICCAITP20 0.84 Meritorious
ICCAITP21 0.90 Marvelous
ICCAITP22 0.85 Meritorious
ICCAITP23 0.84 Meritorious
ICCAITP25 0.79 Middling
ICCAITP26 0.83 Meritorious
ICCAITP28 0.90 Meritorious
ICCAITP30 0.88 Meritorious
ICCAITP31 0.91 Marvelous
ICCAITP32 0.87 Meritorious
ICCAITP33 0.89 Meritorious

Las etiquetas que se han usado viene de aquí:

In his delightfully flamboyant style, Kaiser (1975) suggested that KMO > .9 were marvelous, in the .80s, mertitourious, in the .70s, middling, in the .60s, medicore, in the 50s, miserable, and less than .5, unacceptable.

correlaciones

Las correlaciones existentes entre los items de esta parte del cuestionario está reflejada en la siguiente matriz de correlaciones:

dfTrabajo=df %>% select(varTrabajo) %>% filter(complete.cases(.))
corr <- round( cor( dfTrabajo), 1)
ggcorrplot(corr, hc.order = FALSE, type = "lower", lab = TRUE,lab_size = 3)

Para explorar la estructura factorial visualmente, tal vez preferimos ver las variables ordenando por los coeficientes de correlación:8 184 3.04 1.25 4.0 3.16 0.00 0 5 5 -0.69 -1.12 0.09

ggcorrplot(corr, hc.order = TRUE, type = "lower", lab = TRUE,lab_size = 3,)

Dejemos de lado las correlaciones que no sean significativas:

p.mat <- cor_pmat(dfTrabajo)
ggcorrplot(corr, p.mat = p.mat, hc.order = TRUE, type = "lower", insig = "blank")

Análisis Factorial

No tengo mucha idea de la estructura de estos items. Vamos a echarle un vistazo a las posibilidades para elegir un número adecuado de factores:

There are multiple ways to determine the appropriate number of factors in exploratory factor analysis. Routines for the Very Simple Structure (VSS) criterion allow one to compare solutions of varying complexity and for different number of factors. Graphic output indicates the “optimal” number of factors for different levels of complexity. The Velicer MAP criterion is another good choice. nfactors finds and plots several of these alternative estimates.

Así que probemos con algunas posibilidades:

fa.parallel(dfTrabajo)

## Parallel analysis suggests that the number of factors =  6  and the number of components =  3

Otros criterios para la selección del número de factores.

analisisvss=vss(dfTrabajo)

print(summary(analisisvss))
## 
## Very Simple Structure
## VSS complexity 1 achieves a maximimum of 0.78  with  1  factors
## VSS complexity 2 achieves a maximimum of 0.84  with  2  factors
## 
## The Velicer MAP criterion achieves a minimum of 0.03  with  3  factors
##  NULL

Tal vez nos podríamos quedar con entre 2,5 y 9 factores… Aquí hay que saber del tema, especialmente… ¿qué colección de factores es más interpretable. Pongo cualquier número por seguir adelante con algo.

numFactores=6
analisisfa=fa(dfTrabajo,nfactors = numFactores)
print(summary(analisisfa))
## 
## Factor analysis with Call: fa(r = dfTrabajo, nfactors = numFactores)
## 
## Test of the hypothesis that 6 factors are sufficient.
## The degrees of freedom for the model is 225  and the objective function was  2.4 
## The number of observations was  176  with Chi Square =  390  with prob <  5.3e-11 
## 
## The root mean square of the residuals (RMSA) is  0.04 
## The df corrected root mean square of the residuals is  0.05 
## 
## Tucker Lewis Index of factoring reliability =  0.86
## RMSEA index =  0.071  and the 10 % confidence intervals are  0.054 0.075
## BIC =  -773
##  With factor correlations of 
##      MR1   MR2  MR5  MR3  MR6   MR4
## MR1 1.00  0.24 0.39 0.27 0.45  0.16
## MR2 0.24  1.00 0.44 0.39 0.31 -0.02
## MR5 0.39  0.44 1.00 0.30 0.40  0.03
## MR3 0.27  0.39 0.30 1.00 0.19  0.15
## MR6 0.45  0.31 0.40 0.19 1.00  0.16
## MR4 0.16 -0.02 0.03 0.15 0.16  1.00
##      MR1   MR2  MR5  MR3  MR6   MR4
## MR1 1.00  0.24 0.39 0.27 0.45  0.16
## MR2 0.24  1.00 0.44 0.39 0.31 -0.02
## MR5 0.39  0.44 1.00 0.30 0.40  0.03
## MR3 0.27  0.39 0.30 1.00 0.19  0.15
## MR6 0.45  0.31 0.40 0.19 1.00  0.16
## MR4 0.16 -0.02 0.03 0.15 0.16  1.00

Vamos a visualizar la estructura factorial que se nos sugiere con el número de factores elegidos.

fa.diagram(analisisfa)

Agrupando por parejas según parecido (correlación), y añadiendo variables una a una (mejorando alfa de Cronbach), podríamos clasificar las variables en dimensiones así:

iclust(dfTrabajo)

## ICLUST (Item Cluster Analysis)
## Call: iclust(r.mat = dfTrabajo)
## 
## Purified Alpha:
## [1] 0.92
## 
## G6* reliability:
## [1] 1
## 
## Original Beta:
## [1] 0.43
## 
## Cluster size:
## [1] 28
## 
## Item by Cluster Structure matrix:
##           [,1]
## ICCAITP01 0.30
## ICCAITP02 0.27
## ICCAITP03 0.55
## ICCAITP04 0.62
## ICCAITP05 0.58
## ICCAITP06 0.56
## ICCAITP07 0.54
## ICCAITP08 0.62
## ICCAITP09 0.64
## ICCAITP10 0.59
## ICCAITP11 0.64
## ICCAITP12 0.56
## ICCAITP14 0.56
## ICCAITP15 0.51
## ICCAITP16 0.48
## ICCAITP17 0.37
## ICCAITP19 0.52
## ICCAITP20 0.60
## ICCAITP21 0.61
## ICCAITP22 0.50
## ICCAITP23 0.61
## ICCAITP25 0.43
## ICCAITP26 0.51
## ICCAITP28 0.54
## ICCAITP30 0.44
## ICCAITP31 0.72
## ICCAITP32 0.61
## ICCAITP33 0.67
## 
## With eigenvalues of:
## [1] 8.5
## 
## Purified scale intercorrelations
##  reliabilities on diagonal
##  correlations corrected for attenuation above diagonal: 
##      [,1]
## [1,] 0.92
## 
## Cluster fit =  0.78   Pattern fit =  0.92  RMSR =  0.1
omega(dfTrabajo,nfactors = numFactores)

## Omega 
## Call: omega(m = dfTrabajo, nfactors = numFactores)
## Alpha:                 0.92 
## G.6:                   0.95 
## Omega Hierarchical:    0.68 
## Omega H asymptotic:    0.72 
## Omega Total            0.94 
## 
## Schmid Leiman Factor loadings greater than  0.2 
##              g   F1*   F2*   F3*   F4*   F5*   F6*   h2   u2   p2
## ICCAITP01 0.22                                0.45 0.34 0.66 0.15
## ICCAITP02 0.20                                0.64 0.45 0.55 0.09
## ICCAITP03 0.47  0.42                               0.41 0.59 0.53
## ICCAITP04 0.53  0.62                               0.68 0.32 0.41
## ICCAITP05 0.47  0.55                               0.62 0.38 0.36
## ICCAITP06 0.47  0.63                               0.61 0.39 0.36
## ICCAITP07 0.45  0.40  0.22                         0.46 0.54 0.45
## ICCAITP08 0.56                          0.61       0.72 0.28 0.44
## ICCAITP09 0.56  0.24                    0.33       0.52 0.48 0.61
## ICCAITP10 0.53                          0.59       0.66 0.34 0.43
## ICCAITP11 0.54  0.39                               0.57 0.43 0.51
## ICCAITP12 0.46        0.33                         0.37 0.63 0.57
## ICCAITP14 0.45        0.42                         0.42 0.58 0.49
## ICCAITP15 0.43        0.48                         0.48 0.52 0.38
## ICCAITP16 0.39        0.36                         0.31 0.69 0.48
## ICCAITP17 0.30        0.41                         0.26 0.74 0.34
## ICCAITP19 0.42        0.59                         0.55 0.45 0.32
## ICCAITP20 0.51        0.57                         0.67 0.33 0.39
## ICCAITP21 0.54                    0.23  0.22 -0.29 0.53 0.47 0.56
## ICCAITP22 0.43              0.23  0.34             0.37 0.63 0.50
## ICCAITP23 0.51                    0.59             0.66 0.34 0.39
## ICCAITP25 0.33                    0.56             0.49 0.51 0.23
## ICCAITP26 0.41                    0.63             0.63 0.37 0.26
## ICCAITP28 0.46              0.25              0.28 0.39 0.61 0.56
## ICCAITP30 0.37              0.36              0.23 0.32 0.68 0.44
## ICCAITP31 0.65              0.50                   0.70 0.30 0.60
## ICCAITP32 0.56              0.56                   0.65 0.35 0.48
## ICCAITP33 0.61              0.55                   0.72 0.28 0.52
## 
## With eigenvalues of:
##   g F1* F2* F3* F4* F5* F6* 
## 6.2 1.8 1.6 1.3 1.4 1.1 1.1 
## 
## general/max  3.5   max/min =   1.6
## mean percent general =  0.42    with sd =  0.13 and cv of  0.31 
## Explained Common Variance of the general factor =  0.43 
## 
## The degrees of freedom are 225  and the fit is  2.4 
## The number of observations was  176  with Chi Square =  390  with prob <  5.3e-11
## The root mean square of the residuals is  0.04 
## The df corrected root mean square of the residuals is  0.05
## RMSEA index =  0.071  and the 10 % confidence intervals are  0.054 0.075
## BIC =  -773
## 
## Compare this with the adequacy of just a general factor and no group factors
## The degrees of freedom for just the general factor are 350  and the fit is  7.2 
## The number of observations was  176  with Chi Square =  1175  with prob <  1e-89
## The root mean square of the residuals is  0.13 
## The df corrected root mean square of the residuals is  0.13 
## 
## RMSEA index =  0.12  and the 10 % confidence intervals are  0.11 0.12
## BIC =  -635 
## 
## Measures of factor score adequacy             
##                                                  g  F1*  F2*  F3*  F4*
## Correlation of scores with factors            0.84 0.83 0.83 0.78 0.85
## Multiple R square of scores with factors      0.70 0.70 0.68 0.60 0.72
## Minimum correlation of factor score estimates 0.40 0.39 0.36 0.21 0.43
##                                                F5*  F6*
## Correlation of scores with factors            0.80 0.81
## Multiple R square of scores with factors      0.64 0.66
## Minimum correlation of factor score estimates 0.29 0.32
## 
##  Total, General and Subset omega for each subset
##                                                  g  F1*  F2*  F3*  F4*
## Omega total for total scores and subscales    0.94 0.85 0.80 0.83 0.78
## Omega general for total scores and subscales  0.68 0.41 0.37 0.46 0.30
## Omega group for total scores and subscales    0.13 0.43 0.43 0.37 0.48
##                                                F5*  F6*
## Omega total for total scores and subscales    0.77 0.48
## Omega general for total scores and subscales  0.42 0.31
## Omega group for total scores and subscales    0.35 0.18