42 votos

Error "sistema es computacionalmente singular" al ejecutar un glm

Estoy utilizando el paquete robustbase para ejecutar una estimación glm. Sin embargo, cuando lo hago, obtengo el siguiente error:

Error in solve.default(crossprod(X, DiagB * X)/nobs, EEq) : 
  system is computationally singular: reciprocal condition number = 1.66807e-16

¿Qué significa/indica esto? ¿Y cómo puedo solucionarlo?

PD. Si necesitas algo (la fórmula/especificación o los datos) para responder, con gusto lo proporcionaré.

1 votos

Pasé mucho tiempo en este error, pero eché un vistazo a esta página que lo resolvió para mí kaggle.com/c/house-prices-advanced-regression-techniques/… Básicamente, simplemente puedes cambiar el método que utiliza MICE. Yo estaba usando PPN y lo cambié a CART.

1 votos

39voto

Nick Russo Puntos 51

Significa que su matriz de diseño no es invertible y, por lo tanto, no se puede utilizar para desarrollar un modelo de regresión. Esto se debe a columnas linealmente dependientes, es decir, variables fuertemente correlacionadas. Examine la covarianza (o correlación) par a par de sus variables para investigar si hay alguna variable que se pueda eliminar potencialmente. Está buscando covarianzas (o correlaciones) >> 0. Alternativamente, probablemente pueda automatizar esta selección de variables utilizando una regresión paso a paso hacia adelante.

Esto también puede resultar de tener más variables que observaciones, en cuyo caso es probable que su matriz de diseño no sea de rango completo. Esto es un poco más complicado de solucionar, pero hay formas. Creo que la regresión lasso se supone que funciona bien cuando los datos son "más anchos" que "largos".

Tenga en cuenta: si decide probar lasso o selección paso a paso, está haciendo mucho más (en términos de selección de variables) que simplemente manejar la multicolinealidad.

3 votos

Gracias, dos preguntas: 1. ¿Conoces algún procedimiento en r que pueda funcionar bien para mí al depurar esto? 2. Puedo ver que cuando ejecuto el mismo modelo exacto con los mismos datos con glm() en lugar de glmrob() no obtengo errores. ¿Tiene sentido eso, o implica un error en la función glmrob()?

6 votos

No estoy de acuerdo con la sugerencia de utilizar la selección paso a paso. Eso suele ser casi siempre un enfoque deficiente. -1

9voto

PinaColada Puntos 1

He tenido exactamente el mismo problema. Mi profesor me dijo que esto se debe a que una de mis variables es mucho más grande que las demás. (En mi caso, el volumen de operaciones era mucho más grande que los rendimientos en dos momentos diferentes.) El problema se debe a limitaciones en las operaciones y precisión de punto flotante, no a algo inherentemente matemático o estadístico.

Por lo tanto, he dividido la variable más grande por 1000000.

data$Volume <- data$Volume / 1000000

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