Resolviendo un sistema de ecuaciones con datos dispersos

11

Estoy tratando de resolver un conjunto de ecuaciones que tiene 40 variables independientes (x1, ..., x40) y una variable dependiente (y). El número total de ecuaciones (número de filas) es ~ 300, y quiero resolver el conjunto de 40 coeficientes que minimiza el error total de la suma del cuadrado entre y y el valor predicho.

Mi problema es que la matriz es muy escasa y no conozco la mejor manera de resolver el sistema de ecuaciones con datos dispersos. A continuación se muestra un ejemplo del conjunto de datos:

   y    x1  x2 x3 x4 x5 x6 ... x40
87169   14  0  1  0  0  2  ... 0 
46449   0   0  4  0  1  4  ... 12
846449  0   0  0  0  0  3  ... 0
....

Actualmente estoy usando un algoritmo genético para resolver esto y los resultados están saliendo aproximadamente con un factor de dos diferencia entre lo observado y lo esperado.

¿Alguien puede sugerir diferentes métodos o técnicas que sean capaces de resolver un conjunto de ecuaciones con datos dispersos?

mike1886
fuente
2
Error tipográfico en el título: spare => sparse.
Aleksandr Blekh

Respuestas:

11

Si te entiendo correctamente, este es el caso de la regresión lineal múltiple con datos dispersos ( regresión dispersa ). Suponiendo eso, espero que encuentre útiles los siguientes recursos .

1) Diapositivas de la conferencia NCSU sobre regresión dispersa con una visión general de algoritmos, notas, fórmulas, gráficos y referencias a la literatura: http://www.stat.ncsu.edu/people/zhou/courses/st810/notes/lect23sparse.pdf

2) Recosistema ofrece muchos paquetes , útiles para análisis de regresión dispersa, que incluyen:

3) Una publicación de blog con un ejemplo de solución de regresión dispersa , basada en SparseM: http://aleph-nought.blogspot.com/2012/03/multiple-linear-regression-with-sparse.html

4) Una publicación de blog sobre el uso de matrices dispersas en R , que incluye un manual sobre el uso de glmnet: http://www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r

5) Se pueden encontrar más ejemplos y algunas discusiones sobre el tema en StackOverflow : /programming/3169371/large-scale-regression-in-r-with-a-sparse-feature-matrix

ACTUALIZACIÓN (según su comentario):

Si está tratando de resolver un problema de LP con restricciones, puede encontrar útil este documento teórico : http://web.stanford.edu/group/SOL/papers/gmsw84.pdf .

Además, verifique el paquete R limSolve : http://cran.r-project.org/web/packages/limSolve . Y, en general, verifique los paquetes en la vista de tareas CRAN "Optimización y programación matemática" : http://cran.r-project.org/web/views/Optimization.html .

Finalmente, consulte el libro "Uso de R para el análisis numérico en ciencia e ingeniería" (por Victor A. Bloomfield). Tiene una sección sobre la resolución de sistemas de ecuaciones, representada por matrices dispersas (sección 5.7, páginas 99-104), que incluye ejemplos, basados ​​en algunos de los paquetes mencionados anteriormente: http://books.google.com/books? id = 9ph_AwAAQBAJ y pg = PA99 y lpg = PA99 y dq = r + limsolve + escasa + matriz y fuente = BL & ots = PHDE8nXljQ y sig = sPi4n5Wk0M02ywkubq7R7KD_b04 & hl = es & sa = X & ei = FZjiU-ioIcjmsATGkYDAAg y ved = 0CDUQ6AEwAw # v = OnePage y q = r% 20limsolve% 20sparse% 20matrix & f = false .

Aleksandr Blekh
fuente
3
Gracias por la gran respuesta! Dudo en clasificar el problema como una regresión dispersa, ya que realmente no estoy tratando de modelar y predecir, sino de resolver un conjunto de coeficientes. La razón por la que estoy usando algoritmos genéticos es porque también puedo emplear restricciones en la ecuación. Sin embargo, si no recibo ninguna otra respuesta, con mucho gusto lo aceptaré.
mike1886
1
@ mike1886: ¡Un placer! He actualizado mi respuesta, en base a tu comentario. Espero eso ayude.
Aleksandr Blekh
7

La respuesta de Aleksandr es completamente correcta.

Sin embargo, la forma en que se plantea la pregunta implica que esta es una pregunta directa de regresión de mínimos cuadrados ordinarios: minimizar la suma de los residuos cuadrados entre una variable dependiente y una combinación lineal de predictores.

Ahora, aunque puede haber muchos ceros en su matriz de diseño, su sistema como tal no es demasiado grande: 300 observaciones en 40 predictores no son más que medianas. Puede ejecutar dicha regresión usando R sin ningún esfuerzo especial para datos dispersos. Simplemente use el lm()comando (para "modelo lineal"). Use ?lmpara ver la página de ayuda. Y tenga en cuenta que lm, de forma predeterminada, agregará silenciosamente una columna constante de unidades a su matriz de diseño (la intercepción); incluya una -1en el lado derecho de su fórmula para suprimir esto. En general, suponiendo que todos sus datos (y nada más) están en una data.framellamada foo, puede hacer esto:

model <- lm(y~.-1,data=foo)

Y luego puede ver estimaciones de parámetros, etc. de esta manera:

summary(model)
residuals(model)

Si su sistema es mucho más grande, digamos en el orden de 10,000 observaciones y cientos de predictores, buscar soluciones dispersas especializadas según la respuesta de Aleksandr puede comenzar a tener sentido.

Finalmente, en su comentario a la respuesta de Aleksandr , usted menciona restricciones en su ecuación. Si ese es realmente su problema clave, hay formas de calcular mínimos cuadrados restringidos en R. Personalmente me gusta pcls()en el mgcvpaquete. ¿Quizás desee editar su pregunta para incluir el tipo de restricciones (restricciones de cuadro, restricciones de no negatividad, restricciones de integralidad, restricciones lineales, ...) que enfrenta?

Stephan Kolassa
fuente
1
Stephan, ¡aprecio tus amables palabras! Votó su buena respuesta. Es posible que le interese la actualización que hice a mi respuesta, según el comentario del autor de la pregunta.
Aleksandr Blekh