Resolvendo um sistema de equações com dados esparsos


11

Estou tentando resolver um conjunto de equações que possui 40 variáveis ​​independentes (x1, ..., x40) e uma variável dependente (y). O número total de equações (número de linhas) é ~ 300, e eu quero resolver o conjunto de 40 coeficientes que minimizam o erro total da soma dos quadrados entre y e o valor previsto.

Meu problema é que a matriz é muito esparsa e não sei a melhor maneira de resolver o sistema de equações com dados esparsos. Um exemplo do conjunto de dados é mostrado abaixo:

   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
....

Atualmente, estou usando um algoritmo genético para resolver isso e os resultados estão saindo com aproximadamente um fator de duas diferenças entre o observado e o esperado.

Alguém pode sugerir diferentes métodos ou técnicas capazes de resolver um conjunto de equações com dados esparsos.


2
Erro de digitação no título: sobressalente => esparso.
Aleksandr Blekh

Respostas:


11

Se bem entendi, este é o caso de regressão linear múltipla com dados esparsos ( regressão esparsa ). Supondo que, espero que você encontre os seguintes recursos úteis.

1) A palestra do NCSU mostra regressão esparsa com visão geral de algoritmos, notas, fórmulas, gráficos e referências à literatura: http://www.stat.ncsu.edu/people/zhou/courses/st810/notes/lect23sparse.pdf

2) o Recossistema oferece muitos pacotes , úteis para análises de regressão esparsas, incluindo:

3) Uma postagem de blog com um exemplo de solução de regressão esparsa , com base em SparseM: http://aleph-nought.blogspot.com/2012/03/multiple-linear-regression-with-sparse.html

4) Uma postagem no blog sobre o uso de matrizes esparsas no R , que inclui uma cartilha sobre o uso glmnet: http://www.johnmyleswhite.com/notebook/2011/10/31/using-sparse-matrices-in-r

5) Mais exemplos e algumas discussões sobre o tópico podem ser encontrados no StackOverflow : /programming/3169371/large-scale-regression-in-r-with-a-sparse-feature-matrix

ATUALIZAÇÃO (com base no seu comentário):

Se você estiver tentando resolver um problema de LP com restrições, poderá achar este artigo teórico útil: http://web.stanford.edu/group/SOL/papers/gmsw84.pdf .

Além disso, verifique o pacote R limSolve : http://cran.r-project.org/web/packages/limSolve . E, em geral, verifique os pacotes no CRAN Task View "Otimização e programação matemática" : http://cran.r-project.org/web/views/Optimization.html .

Por fim, verifique o livro "Usando R para Análise Numérica em Ciência e Engenharia" (de Victor A. Bloomfield). Possui uma seção sobre solução de sistemas de equações, representada por matrizes esparsas (seção 5.7, páginas 99-104), que inclui exemplos, com base em alguns dos pacotes mencionados acima: http://books.google.com/books? ID = 9ph_AwAAQBAJ & pg = PA99 & gpl = PA99 & dq = r + limsolve + esparso + matriz & fonte = bl & ots = PHDE8nXljQ & sig = sPi4n5Wk0M02ywkubq7R7KD_b04 & hl = en & sa = X & ei = FZjiU-ioIcjmsATGkYDAAg & ved = 0CDUQ6AEwAw # v = onepage & q = r% 20limsolve% 20sparse% 20matrix & f = falso .


3
Obrigado pela ótima resposta! Hesito em classificar o problema como regressão esparsa, já que não estou realmente tentando modelar e prever, mas sim resolver um conjunto de coeficientes. A razão pela qual estou usando algoritmos genéticos é porque também posso empregar restrições na equação. Se nenhuma outra resposta for apresentada, eu aceitarei isso de bom grado.
Mike1886

1
@ mike1886: O prazer é meu! Atualizei minha resposta, com base no seu comentário. Espero que ajude.
Aleksandr Blekh

7

A resposta de Aleksandr está completamente correta.

No entanto, a maneira como a questão é colocada implica que essa é uma questão simples de regressão simples de mínimos quadrados: minimizar a soma dos resíduos quadrados entre uma variável dependente e uma combinação linear de preditores.

Agora, embora possa haver muitos zeros em sua matriz de design, seu sistema não é muito grande: 300 observações em 40 preditores não são mais que médias. Você pode executar essa regressão usando R sem nenhum esforço especial para dados esparsos. Basta usar o lm()comando (para "modelo linear"). Use ?lmpara ver a página de ajuda. E observe que lm, por padrão, silenciosamente adicionará uma coluna constante à sua matriz de design (a interceptação) - inclua um -1no lado direito da sua fórmula para suprimir isso. No geral, supondo que todos os seus dados (e nada mais) sejam data.framechamados foo, você pode fazer isso:

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

E então você pode olhar para estimativas de parâmetros, etc. como este:

summary(model)
residuals(model)

Se o seu sistema for muito maior, digamos da ordem de 10.000 observações e centenas de preditores, analisar solucionadores esparsos especializados de acordo com a resposta de Aleksandr pode começar a fazer sentido.

Finalmente, em seu comentário à resposta de Aleksandr , você menciona restrições em sua equação. Se esse é realmente o seu problema principal, existem maneiras de calcular os mínimos quadrados restritos em R. Eu pessoalmente gosto pcls()do mgcvpacote. Talvez você queira editar sua pergunta para incluir o tipo de restrições (restrições de caixa, restrições de não-negatividade, restrições de integralidade, restrições lineares, ...) que você enfrenta?


1
Stephan, agradeço suas amáveis ​​palavras! Votou com sua resposta legal. Você pode estar interessado na atualização que fiz da minha resposta, com base no comentário do autor da pergunta.
Aleksandr Blekh
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.