Felicitaciones, has encontrado un error. La predicción para dynlm
con nuevos datos se rompe si se utilizan variables rezagadas. Para ver por qué mirar la salida de
predict(model)
predict(model,newdata=data)
Los resultados deberían ser los mismos, pero no lo son. Sin newdata
argumento, la predict
función básicamente toma el model
elemento de la dynlm
salida. Con newdata
argumento predict
intenta formar una nueva matriz modelo a partir de newdata
. Dado que esto implica analizar la fórmula suministrada dynlm
y la fórmula tiene una función L
, que se define solo internamente en la función dynlm
, se forma la matriz de modelo incorrecta. Si intenta depurar, verá que la variable dependiente retrasada no se retrasa en el caso de newdata
que se proporcione un argumento.
Lo que puede hacer es retrasar la variable dependiente e incluirla en el newdata
. Aquí está el código que ilustra este enfoque. Lo uso set.seed
para que sea fácilmente reproducible.
library(dynlm)
set.seed(1)
y<-arima.sim(model=list(ar=c(.9)),n=10) #Create AR(1) dependant variable
A<-rnorm(10) #Create independant variables
B<-rnorm(10)
C<-rnorm(10)
y<-y+.5*A+.2*B-.3*C #Add relationship to independant variables
data=cbind(y,A,B,C)
#Fit linear model
model<-dynlm(y~A+B+C+L(y,1),data=data)
Aquí está el comportamiento con errores:
> predict(model)
2 3 4 5 6 7 8 9 10
3.500667 2.411196 2.627915 2.813815 2.468595 1.733852 2.114553 1.423225 1.470738
> predict(model,newdata=data)
1 2 3 4 5 6 7 8 9 10
2.1628335 3.7063579 2.9781417 2.1374301 3.2582376 1.9534558 1.3670995 2.4547626 0.8448223 1.8762437
Formar el newdata
#Forecast fix.
A<-c(A,rnorm(1)) #Assume we already have 1-step forecasts for A,B,C
B<-c(B,rnorm(1))
C<-c(C,rnorm(1))
newdata<-ts(cbind(A,B,C),start=start(y),freq=frequency(y))
newdata<-cbind(lag(y,-1),newdata)
colnames(newdata) <- c("y","A","B","C")
Compare el pronóstico con el ajuste del modelo:
> predict(model)
2 3 4 5 6 7 8 9 10
3.500667 2.411196 2.627915 2.813815 2.468595 1.733852 2.114553 1.423225 1.470738
> predict(model,newdata=newdata)
1 2 3 4 5 6 7 8 9 10 11
NA 3.500667 2.411196 2.627915 2.813815 2.468595 1.733852 2.114553 1.423225 1.470738 1.102367
Como puede ver para los datos históricos, el pronóstico coincide y el último elemento contiene el pronóstico de 1 paso por delante.
dynlm
paquete no proporcionará pronósticos para sus variables dependientes. Proporcionar pronósticos para sus variables dependientes requerirá un modelo para explicarlas y probablemente datos adicionales. Le sugiero que lea algo sobre la regresión multivariada, como "Análisis estadístico multivariado aplicado" de Johnson y Wichern. o un curso sobre pronósticos: duke.edu/~rnau/411home.htm