Actualización eficiente de la regresión lineal al agregar observaciones y / o predictores en R

15

Me interesaría encontrar formas en R para actualizar eficientemente un modelo lineal cuando se agrega una observación o un predictor. biglm tiene una capacidad de actualización al agregar observaciones, pero mis datos son lo suficientemente pequeños como para residir en la memoria (aunque tengo una gran cantidad de instancias para actualizar). Hay maneras de hacer esto con las manos desnudas, por ejemplo, para actualizar la factorización QR (consulte "Actualización de la factorización QR y el problema de los mínimos cuadrados", por Hammarling y Lucas), pero espero una implementación existente.

alegre
fuente

Respuestas:

6

Si el algoritmo que está buscando es realmente algo así como Applied Statistics 274 , 1992, Vol 41 (2), entonces podría usar biglm ya que no requiere que mantenga sus datos en un archivo.

Dirk Eddelbuettel
fuente
Gracias, pero ¿puede biglm actualizar en los predictores de números? Pensé que solo actualizaba las observaciones.
Gappy
¿Existe una solución de forma cerrada para agregar predictores? Necesita el equivalente para inv (X'X), ¿existe eso para agregar una columna? En cualquier caso, ¿no son sus problemas 'pequeños' como, por ejemplo, unos pocos (diez) miles por unos cientos? ¿Realmente importa?
Dirk Eddelbuettel
2
Hay formas cerradas simples para actualizar una SVD y fórmulas más complicadas para QR. Los ahorros computacionales pueden ser significativos al resolver miles de modelos. Se pueden implementar en R, pero requiere un poco de trabajo. Es un lindo proyecto.
Gappy
2
Bueno, entiendo que hay un equipo de TI capaz en su tienda. Estoy seguro de que pueden implementar algo mordaz para ti.
Dirk Eddelbuettel
4

pag en la complejidad de la actualización de los coeficientes de un p-variable de regresión lineal.

A pesar de buscar días hace un par de meses, no he podido encontrar un equivalente en R (ten en cuenta que hay muchas funciones de actualización qr. en cran, pero cuando miras debajo del capó son falsas, es decir, llaman lm.update todos iguales).

Actualización : intente en la fuente del paquete 'saltos'. En la fuente R, encontrará una función 'leaps.forward', que llama a una rutina FORTRAN 'forwrd', ubicada en / src del paquete que parece implementar la actualización QR de rango 1.

usuario603
fuente
3

¿Por qué no prueba la capacidad de actualización del objeto de modelo lineal?

update.lm( lm.obj, formula, data, weights, subset, na.action)

Echa un vistazo a estos enlaces

  • Para una explicación general de la función de actualización:

http://stat.ethz.ch/R-manual/R-devel/library/stats/html/update.html

  • Para una explicación particular sobre update.lm:

http://www.science.oregonstate.edu/~shenr/Rhelp/update.lm.html

deps_stats
fuente
3
Hay dos cosas que no funcionan con la actualización (NB: update.lm está en desuso). Primero, usa fórmulas. Esto en sí mismo hace que la ejecución sea un 400% más lenta que lm.fit (). En segundo lugar, reestima todo el modelo. No hay ganancias de eficiencia aquí.
Gappy
Gracias por el hecho, he estado usando la actualización para modelos medianos. Probablemente no sea útil en su caso.
deps_stats
1

También he estado buscando desde hace mucho tiempo un equivalente a la actualización matlab qr, ¡los saltos parecen una buena manera!

En R, puede observar la función recresid () en el paquete strucchange, que proporcionará residuos recursivos cuando agregue una observación (¡no variable!). Supongo que esto requerirá poca modificación para obtener betas recursivas (¿el betar en el código?).

Matifou
fuente