¿Cómo hacer un análisis factorial cuando la matriz de covarianza no es positiva definida?

11

Tengo un conjunto de datos que consta de 717 observaciones (filas) que se describen mediante 33 variables (columnas). Los datos se estandarizan mediante la calificación z de todas las variables. No hay dos variables que sean linealmente dependientes ( ). También he eliminado todas las variables con muy baja varianza (menos de ). La siguiente figura muestra la matriz de correlación correspondiente (en valores absolutos).0.1r=10.1

Cuando intento ejecutar el análisis factorial usando factoranen Matlab de la siguiente manera:

[Loadings1,specVar1,T,stats] = factoran(Z2,1);

Recibo el siguiente error:

The data X must have a covariance matrix that is positive definite.

¿Podría decirme dónde está el problema? ¿Se debe a la baja dependencia mutua entre las variables utilizadas? Además, ¿qué puedo hacer al respecto?


Mi matriz de correlación:

ingrese la descripción de la imagen aquí

Vasek
fuente
3
Creo que lo contrario de la baja dependencia mutua es un problema aquí. Probablemente tenga algunas variables que son linealmente dependientes entre sí y esto hace que su matriz de covarianza sea semidefinida (es decir, tenga algunos valores propios cero).
usεr11852
3
Para las personas que votan por la pregunta para cerrar: ¿Por qué una pregunta sobre la definición positiva de la matriz de covarianza de la muestra estaría fuera de tema aquí? Al usuario le preocupa por qué una aplicación estándar de Análisis Factorial no funciona. ¡Pide más información si quieres!
usεr11852
2
¿Puede calcular y presentar los valores propios de la matriz de covarianza de la muestra? (ej. eig(cov(Z2))) Sospecho firmemente que algunos de ellos son muy pequeños.
usεr11852
3
Estoy de acuerdo con @ usεr11852: parece que esta pregunta se cerró erróneamente como fuera de tema (voté para cerrarla yo mismo). Parecía una pregunta de programación, pero en realidad es una pregunta perfectamente sobre el tema y razonable. Lo edité y voté para volver a abrir. Sin embargo, lástima que el OP parece haber desaparecido.
ameba dice Reinstate Monica
3
Yo diría que puede haber contenido estadístico en esta pregunta con el que la comunidad de Matlab no podrá ayudar. ¿Cómo calculas tu Z2matriz? Si le faltan valores en sus datos, la eliminación por pares puede hacer que la matriz se vuelva no reversible cuando se calculan las diferentes correlaciones en esa matriz utilizando diferentes submuestras de datos.
StasK

Respuestas:

1

Definamos la matriz de correlación por . Dado que es positivo semi-definido, pero no positivo definido, su descomposición espectral se parece a donde las columnas de consisten en vectores propios ortonormales de y 0 \ end {pmatrix} es una matriz diagonal que contiene los valores propios correspondientes a los vectores propios en . Algunos de esos sonC

C=QDQ1,
QC
D=(λ1000λ2λn00000)
Q0 . Además, es el rango de .nC

Una manera simple de restaurar la definición positiva es establecer los valores -eigen en algún valor que sea numéricamente distinto de cero, por ejemplo,Por lo tanto, configure donde Entonces,0

λn+1,λn+2,...=1015.
C~=QD~Q1,
D~=(λ1000λ2λn10150001015)

En Matlab, uno puede obtener usando el comando:Q,D

[Q,D] = eig(C)

Construir es, entonces, simples manipulaciones de Matrix.C~

Observación: Sin embargo, sería difícil saber cómo influye esto en el análisis factorial; por lo tanto, uno debería tener cuidado con este método. Además, aunque se trata de una es una matriz de correlación, puede no serlo. Por lo tanto, podría ser necesaria otra normalización de las entradas.CC~

Jonas
fuente
0

Es posible que tenga problemas numéricos con su matriz. Posiblemente sea realmente positivo definido, pero el cálculo numérico dice lo contrario.

Una solución muy común, en ese caso, es agregar un valor muy bajo (1.E-10, por ejemplo) a todos los elementos diagonales. Si esto no resuelve el problema, intente aumentar progresivamente este valor.

Romain Reboulleau
fuente
Las entradas diagonales parecen bastante dominantes ya. ¿Crees que esto ayudaría?
Jonas
Me preocupan las entradas octava y décima, si algunas son linealmente dependientes, deben ser estas dos. No sé lo suficiente sobre el cálculo real de la descomposición del eigen, pero creo que esta solución podría funcionar: agregar 1e-10 a la diagonal no hace mucho sobre la dependencia lineal, pero podría agregar lo que sea numéricamente necesario para que el El cálculo de los valores propios es fijo (es decir, sin valor propio 0). Sin embargo, si mi solución no funciona, la suya es bastante elegante.
Romain Reboulleau
-2

FA funciona mejor cuando sus datos son gaussianos, por lo tanto, es posible que desee probar algunos enfoques de preprocesamiento para tener datos más gaussianos.

PickleRick
fuente
Estoy desconcertado por esta respuesta. ¿Qué sentido tiene hacer un FA de datos no correlacionados?
ttnphns
@ttnphns ¡Creo que tienes razón! ¡No tiene ningún sentido aplicar FA en datos decorrelacionados! Mi sugerencia proviene de un tipo específico de FA, donde la PCA aplicó en un preprocesamiento de creación de representaciones vectoriales a partir de datos, en el que aplicará FA en. Los datos originales generalmente son proyectados por PCA antes de transformarse en la representación vectorial. Y el FA se aplica a la representación vectorial, y no a los datos proyectados de PCA. ¡Culpa mía! Actualizaré mi respuesta. Aunque en algunos casos un PCA probabilístico podría funcionar tan bien como FA si el modelo FA no lograra converger. No estas de acuerdo
PickleRick