¿Cómo puedo calcular eficazmente un ajuste OLS para N variables múltiples para una ventana móvil?
Ya he resuelto cómo hacerlo para ajustes lineales de 1 y 2 variables, me gustaría extenderlo al caso general de N variables si es posible (o al menos a 3). No quiero calcular toda la regresión para cada ventana individual, quiero actualizar mi cálculo con cada nuevo punto de datos.
Por ejemplo, para un ajuste de una variable de la forma yi=α+βxi+ϵiyi=α+βxi+ϵi (donde ϵϵ es el término de error)
β=(nn∑i=1xiyi−n∑i=1xin∑i=1yi)/(nn∑i=1x2i−(n∑i=1xi)2)β=(nn∑i=1xiyi−n∑i=1xin∑i=1yi)/(nn∑i=1x2i−(n∑i=1xi)2)
α=(n∑i=1yi−βn∑i=1xi)/nα=(n∑i=1yi−βn∑i=1xi)/n
En este caso sólo tengo que mantener los valores de rodadura de ∑x∑x , ∑y∑y , ∑xy∑xy y ∑x2∑x2 y puedo calcular rápidamente los parámetros de ajuste en cada paso de la ventana sin tener que volver a hacerlo todo.
He conseguido lo mismo para un ajuste múltiple de 2 variables de la forma: yi=α+β1xi1+β2xi2+ϵiyi=α+β1xi1+β2xi2+ϵi
Es bastante desordenado: ∑X1Y=n∑i=1xi1yi−1n(n∑i=1xi1n∑i=1yi)∑X1Y=n∑i=1xi1yi−1n(n∑i=1xi1n∑i=1yi) ∑X2Y=n∑i=1xi2yi−1n(n∑i=1xi2n∑i=1yi)∑X2Y=n∑i=1xi2yi−1n(n∑i=1xi2n∑i=1yi) ∑X1X2=n∑i=1xi1xi2−1n(n∑i=1xi1n∑i=1xi2)∑X1X2=n∑i=1xi1xi2−1n(n∑i=1xi1n∑i=1xi2) ∑X1X1=n∑i=1x2i1−1n(n∑i=1xi1)2 ∑X2X2=n∑i=1x2i2−1n(n∑i=1xi2)2
entonces obtenemos d=(∑X1X1∑X2X2)−(∑X1X2)2 β1=1d(∑X2X2∑X1Y−∑X1X2∑X2Y) β2=1d(∑X1X1∑X2Y−∑X1X2∑X1Y)
De nuevo, aquí sólo necesito mantener sumas rodantes de ∑x1 , ∑x2 , ∑y , ∑x1y , ∑x2y , ∑x1x2 , ∑x21 y ∑x22 para calcular la regresión, no necesito hacer el ajuste individualmente para cada ventana, y así es muy rápido. (Tenga en cuenta que sólo me importa el β valores).
Ahora quiero ampliarlo a 3 variables (y posiblemente más). He empezado a trabajar con el álgebra y es peliagudo. Estoy seguro de que debo estar perdiendo un truco o un patrón aquí que hace que la extensión a 3 + variables relativamente fácil.
¿Puede alguien sugerirme cómo puedo ampliar mi técnica anterior a 3 variables (o posiblemente más) o de otro modo calcular eficientemente el β para una ventana enrollable? Gracias.