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?
fuente
Respuestas:
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)
R
ecosistema 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.html4) 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-r5) 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 .
fuente
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?lm
para ver la página de ayuda. Y tenga en cuenta quelm
, de forma predeterminada, agregará silenciosamente una columna constante de unidades a su matriz de diseño (la intercepción); incluya una-1
en el lado derecho de su fórmula para suprimir esto. En general, suponiendo que todos sus datos (y nada más) están en unadata.frame
llamadafoo
, puede hacer esto:Y luego puede ver estimaciones de parámetros, etc. de esta manera:
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 elmgcv
paquete. ¿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?fuente