7 votos

Distancia de Mahalanobis en datos singulares

Tengo un problema que no he podido resolver, aunque lo he intentado y me han ayudado en R foro.

Estoy tratando de calcular Mahalanobis distancias en un data.frame donde tengo varios cientos de grupos y varios cientos de variables. Haga lo que haga, obtengo el system is computationally singular: reciprocal condition number error.

Está claro que es singular, pero ¿hay alguna manera de deshacerse de él y ejecutar Mahalanobis ? ¿Debo olvidarme de resolver esto utilizando otro enfoque? En caso afirmativo, ¿qué otro método utilizar?

He subido el archivo de datos a mi FTP : Se trata de un archivo txt delimitado por tabulaciones y sin cabeceras.

Estaba trabajando con el R StatMatch Mahalanobis (también probó las estadísticas Mahalanobis ). Tengo una fecha límite para este proyecto (¡no una tarea!), y siempre podría usar esta función, así que pensé que podría mantener los cálculos cortos, pero ahora estoy perdido.

Migrado de Stack Overflow .

1 votos

es esencialmente un duplicado de esta pregunta donde el OP quiere calcular la distancia de Mahalanobis de un conjunto de datos con covarianza singular.

6voto

freerangemonkey Puntos 160

¿Por qué crees que es imposible que esa matriz sea singular?

Una descomposición QR muestra que el rango de esta matriz de 380 x 372 es sólo 300. En otras palabras, es altamente singular:

url <- "http://mkk.szie.hu/dep/talt/lv/CentInpDuplNoHeader.txt"
df <- read.table(file = url, header = FALSE)
m <- as.matrix(df)

dim(m)
# [1] 380 372
qr(m)$rank
# [1] 300

Examinar los valores singulares de la matriz es otra forma de ver lo mismo:

head(table(svd(df)$d))

# 5.76661502353373e-13 2.57650568058543e-12  0.00929562094651422 
#                   71                    1                    1 
#   0.0277990885015625   0.0398152894712022   0.0469713341003743 
#                    1                    1                    1

0 votos

Gracias @Josh por la rápida respuesta. Se trata de un conjunto de datos, para diferentes propiedades físicas y químicas de diferentes capas geológicas y no esperaría que fuera muy singular. Como sea, también calculé la svd y tienes toda la razón. De todos modos debo calcular la distancia de Maha. ¿Hay alguna idea o solución para hacerlo si tengo un conjunto de datos tan singular? En mis estudios anteriores nunca me ha pasado, aunque eran más pequeños y más especificados. Gracias

0 votos

Como alguien sugirió, añadí un pequeño valor (entre 0,0001-0,0009) a cada valor de datos. Esto ayudó a eliminar la singularidad. Gracias por su ayuda

4voto

Diego Avrale Puntos 31

Una matriz singular significa que algunos de los vectores son combinaciones lineales de otros. Por tanto, algunos vectores no añaden ninguna información útil al cálculo de la distancia de Mahalanobis. Una matriz inversa generalizada o pseudoinverso calcula efectivamente una matriz "inversa" que ignora parte de esta información no informativa. Esto es superior a otros métodos que efectivamente añaden una pequeña cantidad de información incorrecta (es decir, añaden una pequeña constante a todos los datos). Las matrices de covarianza pseudoinversas se han utilizado con éxito con la distancia de Mahalanobis, véase http://www.sciencedirect.com/science/article/pii/0146664X79900522 .

-1voto

Stefan Savev Puntos 16

Lo que yo sugeriría como solución es la distancia de Mahalanobis penalizada. Usted puede ver esta entrada del blog para los detalles http://stefansavev.com/blog/better-euclidean-distance-with-the-svd-penalized-mahalanobis-distance/ . También puede consultar "The Elements of Statistical Learning", de Hastie et al. en particular las secciones sobre la regresión de crestas (está relacionada) y buscar en el índice la distancia de Mahalanobis

1 votos

Buscamos respuestas autónomas, no respuestas que dependan fundamentalmente de enlaces que puedan pudrirse (y se trata de tu propio blog; por desgracia, los blogs suelen ser efímeros).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X