La revista Psicothema fue fundada en Asturias en 1989 y está editada conjuntamente por la Facultad y el Departamento de Psicología de la Universidad de Oviedo y el Colegio Oficial de Psicología del Principado de Asturias. Publica cuatro números al año.
Se admiten trabajos tanto de investigación básica como aplicada, pertenecientes a cualquier ámbito de la Psicología, que previamente a su publicación son evaluados anónimamente por revisores externos.
Psicothema, 1992. Vol. Vol. 4 (nº 2). 571-581
Pedro Juan FERRANDO PIERA, Urbano LORENZO SEVA y Andreu VIGIL COLET
Departamento de Educación y Psicología. Universidad Rovira y Virgili
Se presenta un programa en C para realizar rotaciones ortogonales dos a dos a partir de la solución factorial directa. En contra de los procedimientos actualmente en uso, basados en rotaciones ciegas y criterios analíticos, se defiende la necesidad de una visión gráfica de la solución que permita aproximaciones previas con sentido teórico.
Palabras clave: Análisis factorial; Procedimientos de rotación; Lenguaje C.
A C Program for the graphical factorial rotation. A C program to carry out ortogonal bifactorial rotation is presented here. Contrarily the actual procedures, based on blind, analytical criteria, we claim for the need of a previous graphical display which allows to obtain initial meaningful solutions.
Key words: Factor analysis; Rotation procedures, C language.
Gran parte de las críticas, tanto teóricas como metodológicas, que ha recibido el Análisis Factorial (AF en adelante) se centran en el problema de la indeterminación de las soluciones que proporciona. El origen de este problema radica en el hecho de que las hipótesis básicas del modelo no son suficientes para identificar de una forma única los valores de los parámetros a estimar.
El modelo estructural del análisis factorial puede expresarse matricialmente como:
R = A A'+ U (1)
Supuestas n variables y m factores comunes, R es la matriz de correlaciones, de orden n x n ; A es la matriz de saturaciones, de orden n x m y U es una matriz diagonal con n unicidades. A partir de los valores de R, el modelo debe estimar los elementos de A y de U.
No existe una solución única para A excepto que impongamos condiciones restrictivas adicionales. De no ser así, cualquier matriz W obtenida multiplicando A por una matriz ortogonal B de orden m x m, reproducirá con la misma exactitud la matriz original de correlaciones.
WW' + U = AB (AB)'+ U =
ABB'A'+ U= AA' + U = R (2)
Esta indeterminación da lugar a que la solución factorial inicial no suela interpretarse teóricamente, ya que la restricción necesaria para llegar a una solución única suele ser, en muchos casos, la de maximizar la varianza explicada por cada factor. La práctica habitual consiste en transformar la matriz de saturaciones hasta obtener la solución que tenga una interpretación teórica más clara.
Algebraicamente dicha transformación consiste en postmultiplicar la matriz de saturaciones por una matriz ortogonal. Geométricamente esta operación equivale a una rotación rígida de ejes, de aquí que a este procedimiento se le suela denominar rotación ortogonal de factores.
Si representamos gráficamente una solución bifactorial de tal manera que las variables sean vectores y los factores sean los ejes del sistema, el coseno del ángulo entre dos variables equivaldrá al coeficiente de correlación entre ellas, la distancia al cuadrado entre dos variables equivaldrá a la expresión 2 (1-r) y la proyección de cada variable sobre los factores equivaldrá a su saturación. Si consideramos inamovible la nube de puntos que representa a las variables, el procedimiento de rotación ortogonal equivale a un giro de los ejes en el que el ángulo entre ellos (90°) permanece invariable. Al girar los ejes variarán las proyecciones de las variables sobre los factores pero la sumas de cuadrados de las proyecciones para cada una de las variables permanecerá constante.
El procedimiento consistente en representar gráficamente los factores por pares y decidir visualmente la posición de los ejes suele denominarse "rotación manual". Cuando se tienen un número considerable de variables y/o factores, este procedimiento se vuelve extremadamente laborioso. Antiguamente, la práctica habitual consistía en fijar gráficamente la posición de los ejes, determinar el ángulo de giro y obtener algebraicamente las nuevas saturaciones.
La generalización de programas estandarizados de ordenador que llevan incorporados métodos de rotación basados en criterios analíticos ha hecho que los procedimientos gráficos hayan caído en desuso. Muchos investigadores que utilizan actualmente el análisis factorial consideran la rotación manual como un método totalmente anticuado; sin embargo consideramos que esta opinión es discutible.
A grandes rasgos existen dos criterios generales que guían el procedimiento de rotación, tanto si se utilizan métodos gráficos como analíticos (Comrey, 1985). El primer criterio es el de múltiple positivo (positive manifold) el segundo es el de estructura simple (Thurstone, 1947).
Todos los métodos analíticos de rotación ortogonal implementados en los programas de ordenador se basan en alguno de estos dos criterios. Así, la maximización de la varianza de las saturaciones en las filas (Quartimax), en las columnas (Varimax), de las saturaciones ponderadas en las columnas (Transvarimax) o la maximización simultánea de la varianza de las saturaciones en filas y columnas (Equamax). Una exposición detallada de estos procedimientos puede encontrarse en Harman (1980); para una exposición comprensiva desde el punto de vista algebraico puede consultarse Gorsuch (1974).
Los métodos analíticos de rotación reducen la relativa vaguedad de los criterios generales, formulando reglas explícitas que llevan a soluciones únicas. Esta es su principal ventaja. En contrapartida realizan rotaciones a ciegas que pueden ser o no apropiada para un determinado problema y, además, posibilitan su aplicación con un total desconocimiento del método e impiden que sea el modelo teórico subyacente el que guíe la posición definitiva de los ejes. Ningún método analítico es el más satisfactorio en todas las ocasiones. En el mejor de los casos tales métodos son solamente una guía útil.
Algunos investigadores con muchos años de experiencia en análisis factorial (Carroll, 1978; Comrey, 185) defienden la idea de rotar inicialmente la solución factorial utilizando un método analítico (Varimax es el más recomendado) y acabar de ajustar la posición de los ejes a mano. Con esta finalidad hemos desarrollado el programas que presentamos a continuación.
El programa representa gráficamente la nube de variables sobre dos dimensiones ortogonales (factores). Como input puede leer indistintamente la solución no rotada mediante un criterio analítico. A partir de aquí puede rotar rígidamente los dos ejes en sentido de las agujas del reloj o en sentido contrario en intérvalos mínimos de 1 grado, mostrando simultáneamente las saturaciones obtenidas en cada posición.
Las coordenadas en cada posición se obtienen postmultiplicando la matriz de saturaciones factorial (de n-variables x dos factores) por la siguiente matriz ortogonal de transformación:
cos α sen α
sen α cos α
Donde α es el ángulo de rotación.
DESCRIPCIÓN DEL PROGRAMA
Las explicaciones sobre el código fuente que a continuación se van a exponer no pretenden ser una exposición exhaustiva de programa. Nos limitaremos a delimitar la finalidad de las principales funciones y variables, recomendando la lectura detenida del mismo para un análisis más completo.
Para la compilación del código fuente, deben seguirse los pasos descritos en el Manual de Referencia del Turbo C u otros manuales equivalentes. La programación gráfica y de la interface del ratón han sido consultadas en Bielig-Schulz y Schulz (1990) y en Gervais (1991). Las interrupciones se han tomado de Norton y Wilton (1990). Como guía de programación hemos consultado a Mata (1989).
El compilador utilizado es el Turbo C en su versión n 2.0 . El programa está diseñado para un equipo con targeta gráfica VGA e interface de ratón. En caso de que se pretenda una aplicación en un equipo de prestaciones diferentes el código fuente deberá ser modificado.
Tomando como criterio su finalidad, el conjunto de funciones del programa puede clasificarse en cuatro categorías: 1: funciones matemáticas; 2: funciones de actualización en la representación de los datos, tanto analíticos como gráficos, a medida que varía el ángulo de rotación; 3: funciones básicas para transmitir la matriz de saturaciones del disco a la memoria RAM, y viceversa, y 4: funciones de control de la tarjeta gráfica, del teclado y del ratón.
Las funciones matemáticas del programa (la rotación ortogonal de una serie de variables tratadas como coordenadas en un espacio bidimensional) no presentan mayor dificultad que el propio cálculo matemático que conllevan y que ha sido someramente descrito en el apartado anterior. El ángulo de rotación varía un grado en cada desplazamiento de los ejes de referencia. Este valor está definido por el incremento de la variable "angulo", que guarda el valor actual del ángulo de la rotación, inicialmente puesto a cero. La rotación se efectúa sobre las variables "fact1" y "fact2", tomadas como el primero y segundo factor respectivamente, así como sobre la matriz "patron" que define la representación gráfica de los ejes, tanto de los ejes principales como de los ejes de referencia. Las funciones matemáticas son las siguientes: "rotación ()", "rotar-datos ()", "rotar-ejes ()" y "trigonometría ()".
En las funciones de actualización de la representación gráfica y de los datos numéricos listados en pantalla se ha puesto especial cuidado en la forma de exposición, ya que el criterio de rotación puede llegar a ser puramente visual. Los datos que se presentan son los pesos de cada variable sobre los dos factores rotados, siendo estos datos de color rojo si el peso mayor recae sobre el primer factor o verde si recae sobre el segundo. También se presentan la matriz de rotación y los números correspondientes a los factores que se están rotando respecto a la matriz total de saturaciones. La representación gráfica de los datos consiste en un punto estático por variable y dos ejes ortogonales que representan los dos factores dentro de una pizarra de 200 x 200 pixels.
Se representan asimismo los dos ejes ortogonales en un tamaño mucho más reducido dentro de una circunferencia en el ángulo izquierdo inferior de la pantalla. Su finalidad es la de determinar, en todo momento, dónde se halla el cuadrante positivo y como se relacionan los ejes con los factores en rotación. Así, en el cuadrante positivo, dentro de esta circunferencia, aparece siempre un punto rojo, correspondiendo el primer factor al eje rojo; mientras que el segundo se corresponde con el eje verde.
Las funciones de actualización de la representación gráfica y de los datos numéricos listados en pantalla son las siguientes: "dibujar ()", "dibujar-ejes ()", "ejes-peque ()", "representar-datos ()", "rehacer-datos "escribir-datos ()", y "variables ()".
Las funciones básicas para transmitir la matriz de saturaciones del disco a la memoria RAM, y viceversa, son las que nos permiten leer la matriz de factores x variables de un fichero ASCII de la unidad del disco, grabar los pesos factoriales de una rotación de dos factores, junto con el ángulo de rotación, en un fichero de salida también en formato ASCII y, finalmente, determinar qué dos factores de la matriz de saturaciones total serán rotados.
La matriz de saturaciones se halla en la matriz denominada en el código fuente como "matriz [100][20]". Con el fin de evitar una falta de precisión en los cálculos matemáticos por pérdida de decimales, la matriz de datos ha sido declarada del tipo DOUBLE que nos permite guardar valores entre 1.7E-308 y 1.7E+308. La utilización de datos de esta longitud (cada elemento de la matriz ocupa 8 bytes) nos limita el número de factores y variables que el programa será capaz de poner en memoria, ya que la matriz de datos más grande que el Turbo C es capaz de compilar es de 64000 bytes. En nuestro caso, la matriz más grande que nos será permitida no debe superar los 8000 elementos, combinando el número de factores y variables. En el código fuente se halla dimensionada para 20 factores y 100 variables, si bien resulta evidente que podría variarse para otros casos.
Mediante la función "matriz-datos ()", indicamos cual de los factores de la matriz serán el primero y el segundo en la rotación dos a dos. Ambos factores se copian sobre las variables "fact1" y "fact2" respectivamente y toda la información que se lista por pantalla hace referencia únicamente a estos dos.
Las funciones implicadas en la manipulación y tratamiento de la matriz de datos son las siguientes: "abrir ()", "datos-disco ()" y "matriz-datos ()".
Las funciones de control de la tarjeta gráfica, el teclado y el ratón tienen finalidades muy específicas, como pueden ser conectar la tarjeta gráfica, leer el estado del ratón o determinar si el buffer de teclado se haya vacio. El conjunto de estas funciones se forma por "caja ()", "initialize ()", " boton-p ()", "boton ()", "te-bios ()", "rata ()", "leer-rata ()", "limpiar ()", "tapas ()" y "pizarra ()".
Finalmente, nos resta una última función cuya finalidad es la de determinar el número de variable que corresponden a cada punto gráfico a través de la interrupción 33h del BIOS que conecta la interface del ratón. Esta es la función "buscar()".
Todo este conjunto de funciones se gestionan desde la función principal "main ()". Los pasos seguidos por esta función son los siguientes: en primer lugar determinar si los parámetros recibidos desde el DOS son correctos (nombre del fichero de lectura de saturaciones, nombre del fichero de salida de saturaciones rodadas y número de factores en la matriz de saturaciones); a continuación gestiona la lectura del fichero de entrada de datos; prepara la pantalla e inicializa las variables principales; y, finalmente, pasa el control al menú de teclado.
UTILIZACION DE RT.EXE
Al mismo tiempo que se arranca el programa RT desde el DOS, se le envían los datos referentes a los ficheros de entrada y salida de datos (ambos en código ASCII) y al número de factores de la matriz de saturaciones. Por ejemplo, para ejecutar un fichero de entrada denominado "matriz.txt" con tres factores, enviando las saturaciones rotadas al fichero de salida "rotación.txt" se deberá ejecutar la siguiente línea desde el DOS:
C:\ RT matriz.txt rotacion.txt 3 <crt>
El control del menú se realiza desde el teclado (las teclas se denominan por la etiqueta de un teclado IBM), reflejándose las teclas pulsadas en las teclas representadas en el monitor. La correspondencia entre las teclas que aparecen representadas en pantalla y las teclas del teclado se expone en la tabla I.
Se pueden controlar tres teclas más que no aparecen representadas en el monitor:
F1 : vuelca la pantalla en la impresora. La impresión se realiza mediante la interrupción 5h, siendo éste un método funcional, pero deficiente de impresión. Lo más adecuado es la utilización de un capturador de pantalla que trabaje con un monitor VGA 16 colores (o escala de grises) y 640 x 480 pixels de definición.
F2 : vuelca las saturaciones actuales, el ángulo de rotación y los factores que se están rotando al fichero de salida. Si se realiza más de una gravación, aparecerán todas en el fichero de salida ordenadas temporalmente.
ESC : permite abandonar el programa.
Nota: los lectores interesados en el programa pueden remitir, a los autores del presente artículo, un diskette que les será devuelto con el listado fuente y el programa compilado para ser usado.
REFERENCIAS
Bielig-Schulz, G y Schulz Ch. (1990) 3D graphics in Pascal. John Wiley & Sons. Essex.
Borland Co. (1987) Turbo C : reference guide Borland International. California
Carroll, J.B. (1978) How shall we study individual differences in cognitive abilities? Methodological and theoretical perspectives. Intelligence 2, 87-115
Comrey, A.L. (1985) Manual de análisis factorial. Cátedra. Madrid
Gervais, F. (1991) Programación de las tarjetas gráficas CGA, EGA, VGA. Editorial RA-MA. Madrid.
Gorsuch, R.L. (1974) Factor analysis. Saunders Philadelphia
Harman, H. (1980) Análisis Factorial Moderno. Saltés. Madrid.
Mata, A. (1989) Turbo C, iniciación y programación avanzada. Paraninfo. Madrid.
Norton, P. y Wilton,R. (1989) Guía de programación para el IBM, Pc y PS/2. Ediciones Anaya Multimedia. Madrid.
Thurstone, L.L. (1947): Multiple factor- analysis. Chicago. Univ. Chicago press
Zimmerman, S y Zimmerman, BB (1990) La Biblia del turbo C. Ediciones Anaya Multimedia. Madrid.