Dopasowałem model z kilkoma zmiennymi niezależnymi, z których jedną jest opóźnienie zmiennej zależnej, używając pakietu dynlm.
Zakładając, że mam prognozy o krok do przodu dla moich zmiennych niezależnych, w jaki sposób mogę uzyskać prognozy o krok do przodu dla moich zmiennych zależnych?
Oto przykład:
library(dynlm)
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)
#Forecast
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))
y=window(y,end=end(y)+c(1,0),extend=TRUE)
newdata<-cbind(y,A,B,C)
predict(model,newdata)
A oto przykład użycia pakietu dyn, który działa.
library(dyn)
#Fit linear model
model<-dyn$lm(y~A+B+C+lag(y,-1),data=data)
#Forecast
predict(model,newdata)the dyn packages, which works:
r
dynamic-regression
Zach
źródło
źródło
dynlm
pakietu nie zapewni prognoz dla zmiennych zależnych. Dostarczenie prognoz dla zmiennych zależnych będzie wymagać modelu, aby je wyjaśnić i prawdopodobnie dodatkowych danych. Sugeruję przeczytanie czegoś o regresji wielowymiarowej, takiej jak „Applied Multivariate Statistics Analysis” autorstwa Johnsona i Wichern. lub kurs z prognozowania: duke.edu/~rnau/411home.htmOdpowiedzi:
Gratulacje, znalazłeś błąd. Prognozy dla
dynlm
nowych danych są niepoprawne, jeśli zostaną użyte zmienne opóźnione. Aby zobaczyć, dlaczego spójrz na wynikWyniki powinny być takie same, ale nie są. Bez
newdata
argumentówpredict
funkcja w zasadzie pobieramodel
element zdynlm
wyniku. Za pomocąnewdata
argumentupredict
próbuje utworzyć nową matrycę modelunewdata
. Ponieważ wiąże się to z analizowaniem dostarczonej formuły,dynlm
a formuła ma funkcjęL
, która jest zdefiniowana tylko wewnętrznie w funkcjidynlm
, powstaje niepoprawna macierz modelu. Jeśli spróbujesz debugować, zobaczysz, że opóźniona zmienna zależna nie jest opóźniana w przypadku podanianewdata
argumentu.Co możesz zrobić, to opóźnić zależną zmienną i uwzględnić ją w
newdata
. Oto kod ilustrujący to podejście. Używam,set.seed
aby było łatwo powtarzalne.Oto błędne zachowanie:
Utwórz
newdata
Porównaj prognozę z dopasowaniem modelu:
Jak widać w przypadku danych historycznych, prognoza jest zbieżna, a ostatni element zawiera prognozę o 1 krok do przodu.
źródło
lag(y,-1)+lag(y,-2)
?W odpowiedzi na prośbę @ md-azimul-haque, przekopałem swój 4-letni kod źródłowy i znalazłem następującą odpowiednio nazwaną funkcję. Nie jesteś pewien, czy tego właśnie szuka @ md-azimul-haque?
źródło