analisis.factorial.fnc

Copia, Pega y Adapta


analisis.factorial.fnc(datos, variables=1:25, n.factores=3,

tipo='af', rotacion='oblimin', grafica=T)


datos2 = analisis.factorial.fnc(datos, matcor='mi.matriz',

n.factores=3,tipo='af', rotacion='oblimin', guarda.pf=T)

Objetivo

Lleva a cabo análisis factorial y de componentes principales (CP) de una matriz de datos sobre las variables definidas por el usuario. Se puede solicitar rotaciones ortogonales: varimax y quartimax y no ortogonales: oblimin, promax y simplimax. Por defecto se estima el modelo a partir de la matriz de correlaciones. El usuario puede solicitar que dicha matriz sea la policórica (para variables ordinales en las que subyace la medida de una variable latente continua) o la tetracórica (variables dicotómicas).

Componentes Principales

La base de datos bfi de la librería psych (instalada por defecto en el toolbox) contiene las puntuaciones de 2800 participantes en 25 items del cuestionario SAPA (Synthetic Aperture Personality Assessment).


head(bfi)


A1 A2 A3 A4 A5 C1 C2 C3 C4 C5 E1 E2 E3 E4 E5 N1 N2 N3 N4 N5 O1 O2 O3 O4 O5 gender education age

61617 2 4 3 4 4 2 3 3 4 4 3 3 3 4 4 3 4 2 2 3 3 6 3 4 3 1 NA 16

61618 2 4 5 2 5 5 4 4 3 4 1 1 6 4 3 3 3 3 5 5 4 2 4 3 3 2 NA 18

61620 5 4 5 4 4 4 5 4 2 5 2 4 4 4 5 4 5 4 2 3 4 2 5 5 2 2 NA 17

61621 4 4 6 5 5 4 4 3 5 5 5 3 4 4 4 2 5 2 4 1 3 3 4 3 5 2 NA 17

61622 2 3 3 4 5 4 4 5 3 2 2 2 5 4 5 2 3 4 4 3 3 3 4 3 3 1 NA 17

61623 6 6 5 6 5 6 6 6 1 3 2 1 6 5 6 3 5 2 2 3 4 3 5 6 1 2 3 21

Utilizaremos la función analisis.factorial.fnc y dado sólo incluimos el argumento variables (la base de datos contiene 3 variables mas que no participan en el análisis) la función llevará a cabo un análisis de componentes principales con rotación ortogonal sobre todas las variables de la base de datos bfi.

analisis.factorial.fnc(bfi, variables=1:25)

Lo que en este ejemplo es idéntico a solicitar:

analisis.factorial.fnc(bfi,variables=1:25, tipo='cp', rotacion='varimax')


#------------------------------------------------------------------

# ANALISIS FACTORIAL

#------------------------------------------------------------------

*** Tu base de datos, tiene 508 valores perdidos en 364 sujetos.

*** Por defecto se estimara la matriz pairwise (diferente numero de sujetos

*** por correlacion). Si deseas que los casos perdidos se eliminen por sujeto

*** (un valor perdido en cualquier variable elimina al sujeto completo),

*** introduce el argumento caso.completo=T.

------------------------------------------------------------------------------------

*** WARNING. Tus datos parecen ordinales y tienen menos de 10 valores posibles. ***

*** Es altamente recomendable que utilices la matriz de correlaciones policorica ***

*** como matriz de estimacion del modelo. Incluye el argumento policorica=T ***

------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------

*** Analisis Paralelo para determinar el numero de factores ***

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

*** Repite el analisis incluyendo el argumento n.factores ***

*** Ej. analisis.factorial.fnc(datos, n.factores=3) ***

-------------------------------------------------------------------------------------

En la salida anterior te informa de que tus datos tienen aparentemente una escala ordinal y te recomienda estimar el modelo a partir de la matriz de correlaciones policórica incluyendo en la siguiente llamada a la función el argumento policorica=T. Puedes ver además que si no incluyes el argumento n.factores (número de factores o componentes a retener) lleva a cabo la técnica conocida como Análisis Paralelo con el objetivo de determinar el número óptimo de componentes o factores a retener. Si observas la figura anterior verás que si vas a realizar una estimación de componentes principales o de análisis facrtorial, el número adecuado para tus datos es 6. Repetiremos la llamada a la función con los argumentos propuestos aunque dejaremos la estimación policórica para el siguiente apartado. Sin embargo dado que la teoría establece 5 componentes, incluiremos ese valor en el argumento n.factores.


analisis.factorial.fnc(bfi,variables=1:25, tipo='cp',

rotacion='varimax', grafica=T, n.factores=5)

res.factorial.varimax

grafica de correlaciones

modelo de medida de las comp.

La estimación de la matriz de correlaciones policórica es computacionalmente muy demandante. Una solución eficiente y rápida consiste en estimar dicha matriz mediante la función correlacion.fnc y utilizar la matriz de salida como input para el análisis factorial mediante la inclusión del argumento matcor.


cor.dat = correlacion.fnc(bfi, variables=1:25,

tipo='policorica', silente=T)

Fíjate en dos aspectos muy importantes:

1.- Hemos asignado la salida al objeto (nombre arbitrario) cor.dat

2.- Con silente=T pedimos que genere exclusivamente la matriz de correlaciones.

Ahora podemos solicitar el análisis factorial incluyendo dicha matriz en la llamada a la función. Como esta contiene los nombres de las variables a analizar.

analisis.factorial.fnc(bfi, matcor=cor.dat, tipo='cp', grafica=T, n.factores=5)

Otra rotación ortogonal que puede solicitarse es quartimax (minimiza el número de componentes necesarias para explicar las variables)


analisis.factorial.fnc(iqitems, matcor=cor.dat,

tipo='cp', grafica=T,

n.factores=2, rotacion='quartimax')

GUARDAR PUNTUACIONES FACTORIALES:

Si deseas guardar las puntuaciones factoriales junto al resto de variables de la base de datos debes incluir el argumento guarda.pf=T y además deberás asignar la salida de la función al objeto que desees: o la base de datos original u otra de nuevo nombre.


iqitems=analisis.factorial.fnc(bfi,variables=1:25, tipo='cp', rotacion='varimax',

n.factores=5, guarda.pf=T)


*** Has solicitado guardar las puntuaciones factoriales por sujeto. ***

*** Para que se guarden de hecho asegurate de haber ASIGNADO de forma ***

*** adecuada la salida de esta funcion a un objeto cualquiera. ***

*** Ej. datos=analisis.factorial.fnc(datos, n.factores=3, guarda.pf=T) ***


*********** PULSA C PARA CONTINUAR o A para ABORTAR ***********

Una observación muy importante es que dado que solicitamos las puntuaciones factoriales para cada sujeto, es crítico ASIGNAR la salida de la función a un objeto (en este caso se ha elegido la misma base de datos bfi).

La salida de esta estimación es obviamente idéntica a la anterior. Solo que ahora además generará un histograma suavizado para cada variable de puntuaciones factoriales generada, donde además se proyectará encima la distribución normal que correspondería a esos datos.

*** Estos son los 6 primeros valores de las variables a analizar ***

*** y de las puntuaciones factoriales generadas y guardadas. ***

*** Estos son los 6 primeros valores de las variables a analizar ***

*** y de las puntuaciones factoriales generadas y guardadas. ***


A1 A2 A3 A4 A5 C1 C2 C3 C4 C5 E1 E2 E3 E4 E5 N1 N2 N3 N4 N5 O1 O2 O3 O4 O5 RC1

1 2 4 3 4 4 2 3 3 4 4 3 3 3 4 4 3 4 2 2 3 3 6 3 4 3 0.0083912

2 2 4 5 2 5 5 4 4 3 4 1 1 6 4 3 3 3 3 5 5 4 2 4 3 3 0.6523616

3 5 4 5 4 4 4 5 4 2 5 2 4 4 4 5 4 5 4 2 3 4 2 5 5 2 0.4678391

4 4 4 6 5 5 4 4 3 5 5 5 3 4 4 4 2 5 2 4 1 3 3 4 3 5 0.2348397

5 2 3 3 4 5 4 4 5 3 2 2 2 5 4 5 2 3 4 4 3 3 3 4 3 3 0.5128799

6 6 6 5 6 5 6 6 6 1 3 2 1 6 5 6 3 5 2 2 3 4 3 5 6 1 1.2111961


RC2 RC3 RC5 RC4

1 -0.38718 -1.4232140 -0.51381 -1.61766

2 0.19916 -0.6726523 -0.37018 -0.30508

3 0.64825 0.0170574 -1.16158 0.23970

4 -0.17477 -1.0130882 -0.30182 -1.29712

5 -0.18192 -0.0052602 -0.93190 -0.94808

6 0.47278 1.5302297 -0.52532 0.19488

SIMULACION DE DATOS DESDE MATRICES EXTERNAS

Una situación muy común es querer reproducir una análisis factorial publicado en un artículo científico a partir de la matriz de correlaciones expuesta en alguna de las tablas de dicho artículo. Esta matriz suele ser la triangular inferior. Vamos a simular esta situación en la que hemos copiado dicha triangular inferior (matriz_triangular.xls) Exel o Calc de OpenOffice. Fíjate que la primera fila está formada por los nombres de las variables que forman la matriz de correlaciones.

correla=lee.archivo.fnc("matriz_triangular.xls")

Matriz triangular inferior Calc LibreOffice

Matriz triangular inferior en Excel

analisis.factorial.fnc(matcor=correla, n.factores=2, grafica=T)

La función construirá la matriz completa de correlación y llevará a cabo el análisis factorial de componentes principales y rotación varimax (se han omitido los argumentos tipo y rotacion). Si deseas crear una muestra aleatoria de tamaño n introduce los argumentos simula=T y n=500 si deseas 500 sujetos (si se omite el argumento n se generará una muestra de 200 registros) y se estimarán las puntuaciones factoriales o de componentes principales para cada uno de los nxp sujetos en la r dimensiones retenidas (La función te recordará que debes asignar entonces la salida a algún objeto).


datos=analisis.factorial.fnc(matcor=correla, n.factores=2,

grafica=T, simula=T, n=500)

ROTACIONES NO ORTOGONALES

Las rotaciones no ortogonales disponibles son: oblimin, promax y simplimax.


analisis.factorial.fnc(bfi,variables=1:25,

tipo='cp', rotacion='oblimin', grafica=T,

n.factores=2, guarda.pf=T)

Pedimos componentes principales (estimación por defecto) con rotación no ortogonal (oblícua) .

Vemos que ninguno de los factores presenta una relación superior a .3 (límite definido para dibujar la relación en la gráfica) entre ellos.

VARIABLES DICOTÓMICAS

La base de datos dicotomicas.Rdata contiene las respuestas ficticias de 100 sujetos a un cuestionario de 12 items donde las respuestas posibles son Si (1) y No (0). La naturaleza dicotómica de la variable hace sumamente conveniente el uso de la matriz de correlaciones tetracórica y no la correlación de Pearson para estimar el modelo de componentes principales o factorial.


dicotomicas=lee.archivo.fnc('dicotomicas.Rdata')


head(dicotomicas)


X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12

1 0 0 1 1 0 0 0 0 1 1 0 0

2 1 1 1 1 1 1 1 1 1 1 1 1

3 1 1 0 0 1 1 1 1 0 0 1 1

4 1 0 0 0 1 1 0 0 0 0 1 1

5 1 0 0 0 1 1 0 0 0 1 1 0

6 1 1 1 1 0 0 1 1 1 1 0 0


analisis.factorial.fnc(dicotomicas)


--------------------------------------------------------------------------------------

*** WARNING. Tus datos parecen dicotomicos. Es altamente recomendable que utilices ***

*** la matriz de correlaciones tetracorica como matriz de estimacion del modelo ***

*** Incluye el argumento tetracorica=T ***

--------------------------------------------------------------------------------------


Parallel analysis suggests that the number of factors = 3

and the number of components = 3

Nos avisa de que nuestros datos son dicotómicos y nos recomienda incluir el argumento tetracorica=T en la próxima llamada a la función. Además nos sugiere una solución de 3 componentes o de 3 factores si deseamos realizar análisis factorial y no componentes principales. En el gráfico scree de los autovalores que se genera puedes ver claramente los autovalores para nuestros datos frente a los que se generan sobre datos aleatorios (línea puntuada de color rojo).

Repetimos el análisis con las recomendaciónes propuestas.

analisis.factorial.fnc(dicotomicas, tetracorica=T, n.factores=3, grafica=T)

Analisis Factorial (MINRES)

Por su sencillez los usuarios suelen preferir el análisis de componentes principales en su estrategia de reducción de la dimensionalidad multivariada exploratoria. Sin embargo una solución más estable y coherente con el significado que se pretende dar a las combinaciones lineales estimadas: "la variable latente no observable es quien explica la covarianza existente entre las p variables observables" es el análisis factorial mediante ejes principales. El toolbox estima este tipo de modelos incluyendo en la función el argumento tipo='af'. Recuerda que el análisis paralelo recomendaba una solución con 4 factores para estos datos.

bfi = analisis.factorial.fnc(bfi,variables=1:25,

tipo='af', rotacion='oblimin', grafica=T,

n.factores=5, guarda.pf=T)

res.analisis.factorial.minres