¿Qué me dice una matriz de covarianza definida no positiva sobre mis datos?

21

Tengo varias observaciones multivariadas y me gustaría evaluar la densidad de probabilidad en todas las variables. Se supone que los datos se distribuyen normalmente. Con un número bajo de variables, todo funciona como cabría esperar, pero pasar a números mayores da como resultado que la matriz de covarianza se vuelva no positiva definida.

He reducido el problema en Matlab a:

load raw_data.mat; % matrix number-of-values x number of variables
Sigma = cov(data);
[R,err] = cholcov(Sigma, 0); % Test for pos-def done in mvnpdf.

Si err> 0, entonces Sigma no es definitivo positivo.

¿Hay algo que pueda hacer para evaluar mis datos experimentales en dimensiones superiores? ¿Me dice algo útil sobre mis datos?

Soy un poco principiante en esta área, así que me disculpo si me he perdido algo obvio.

ralight
fuente
Parece que sus datos son demasiado escasos para las representaciones de alta dimensión. ¿Planea ejecutar modelos de regresión con estos datos?
Jonathan Thiele

Respuestas:

30

La matriz de covarianza no es positiva definida porque es singular. Eso significa que al menos una de sus variables se puede expresar como una combinación lineal de las otras. No necesita todas las variables, ya que el valor de al menos una puede determinarse a partir de un subconjunto de las otras. Sugeriría agregar variables secuencialmente y verificar la matriz de covarianza en cada paso. Si una nueva variable crea una singularidad, suéltela y continúe con la siguiente. Finalmente, debe tener un subconjunto de variables con una matriz de covarianza definida positiva.

Michael R. Chernick
fuente
19
+1. También vale la pena señalar que todas las matrices de covarianza son positivas definidas y todas las matrices positivas definidas son la matriz de covarianzas de alguna distribución multivariante. Por lo tanto, decir "matriz de covarianza definida no positiva" es un poco un oxímoron. Parece que el OP realmente solo decía que la matriz de covarianza de la muestra era singular, lo que puede suceder exactamente por colinealidad (como ha dicho) o cuando el número de observaciones es menor que el número de variables .
Macro
3
Algunos programas de estadísticas pueden ser inducidos a corregir este problema automáticamente. Por ejemplo, el regresscomando de Stata eliminará automáticamente variables adicionales cuando algunas sean colineales (y su salida se puede guardar en una forma que identifique estas variables y marque un subconjunto no colineal para uso futuro). Sin embargo, una complicación probable es que las variables pueden no ser necesariamente colineales, pero pueden estar lo suficientemente cerca como para que la propagación del error de coma flotante en la descomposición de Cholesky produzca estimaciones negativas del valor propio, haciendo que las variables sean colineales para todos los fines prácticos.
whuber
1
@whuber, también hay una funcionalidad similar R: los modelos de regresión eliminan automáticamente las variables del predictor lineal si existe una colinealidad exacta.
Macro
2
@whuber, es un poco hacky pero puedes hacer un truco similar. Si ges su modelo lineal, colnames(model.matrix(g))[-which(is.na(coef(g))==TRUE)][-1]debería devolver los nombres de los predictores ingresados ​​en el modelo que no son exactamente colineales. Esto funciona comprobando qué coeficientes eran NA(así es como Rindica que se eliminó una variable) y encontrando los nombres de columna correspondientes de la matriz modelo (eliminando la columna de intercepción). Por cierto, eso no funcionará si no hay términos colineales, por lo que which(is.na(coef(g))==TRUE)se requiere una declaración if para verificar que no esté vacía :)
Macro
8
@Macro Todas las matrices de covarianza son semi-definidas positivas. Cuando son singulares no son positivos definidos porque x'Ax> 0 para todos los vectores x para que la matriz A sea positiva definida. En el caso singular, x'Ax = 0 ocurre para algunas x.
Michael R. Chernick
0

Es un resultado válido. La estimación para ese componente de la matriz de covarianza es cero, ¡lo cual puede muy bien ser cierto! Puede conducir a dificultades de cálculo, pero algunos algoritmos en R (no sé sobre Matlab) pueden manejar esto. No entiendo por qué la gente se molesta por esto e insiste en adaptar modelos más parsimoniosos.

AS
fuente
-1

Un punto que no creo que se aborde anteriormente es que ES posible calcular una matriz de covarianza definida no positiva a partir de datos empíricos, incluso si sus variables no están perfectamente relacionadas linealmente. Si no tiene suficientes datos (particularmente si está tratando de construir una matriz de covarianza de alta dimensión a partir de un grupo de comparaciones por pares) o si sus datos no siguen una distribución normal multivariada, entonces puede terminar con relaciones paradójicas entre variables, como cov (A, B)> 0; cov (A, C)> 0; cov (B, C) <0.

En tal caso, no se puede ajustar un PDF normal multivariado, ya que no hay una distribución normal multivariada que cumpla con estos criterios: cov (A, B)> 0 y cov (A, C)> 0 necesariamente implica que cov (B, C )> 0.

Todo esto quiere decir que una matriz definida no positiva no siempre significa que se incluyen variables colineales. También podría sugerir que está intentando modelar una relación que es imposible dada la estructura paramétrica que ha elegido.

Adam Clark
fuente
1
Su respuesta es incorrecta en muchos niveles. De todos modos, considere una matriz de covarianza con 1 en la diagonal, y 1/2 para cov (componentes 1 y 2), 1/2 para cov (componentes 1 y 3) y -1/2 para cov (componentes 2 y 3) . La matriz de covarianza tiene valores propios de aproximadamente 0.15, 1.35, 1.50, que proporcionan un contraejemplo a la afirmación en su segundo párrafo.
Mark L. Stone
@ MarkL.Stone, tienes razón sobre el segundo párrafo, pero me pregunto si algo de esto es ambiguo y podría salvarse con una interpretación generosa. Por ejemplo, me pregunto si, en el párrafo 1, "no tengo suficientes datos ... tratar de construir una matriz de covarianza de alta dimensión a partir de un montón de comparaciones por pares" se refiere a tener muchos datos faltantes y usar las observaciones completas por pares para calcular cada elemento en la matriz de covarianza.
gung - Restablece a Monica