Biorąc pod uwagę następujące dwa szeregi czasowe ( x , y ; patrz poniżej), jaka jest najlepsza metoda modelowania związku między długoterminowymi trendami w tych danych?
Oba szeregi czasowe mają znaczące testy Durbina-Watsona, gdy są modelowane jako funkcja czasu i żadne z nich nie jest stacjonarne (jak rozumiem ten termin, czy to oznacza, że musi on być tylko stacjonarny w resztach?). Powiedziano mi, że oznacza to, że powinienem wziąć różnicę pierwszego rzędu (przynajmniej może nawet 2 rzędu) każdej serii czasowej, zanim będę mógł modelować jedną jako funkcję drugiej, zasadniczo wykorzystując arimę (1,1,0 ), arima (1,2,0) itp.
Nie rozumiem, dlaczego musisz się zniechęcać, zanim będziesz mógł je wymodelować. Rozumiem potrzebę modelowania autokorelacji, ale nie rozumiem, dlaczego konieczne jest różnicowanie. Wydaje mi się, że zniechęcanie przez różnicowanie usuwa pierwotne sygnały (w tym przypadku trendy długoterminowe) w danych, którymi jesteśmy zainteresowani, i pozostawia „szum” o wyższej częstotliwości (luźno używając terminu szum). Rzeczywiście, w symulacjach, w których tworzę prawie idealną relację między jedną serią czasową a drugą, bez autokorelacji, różnicowanie szeregów czasowych daje mi wyniki, które są sprzeczne z intuicją dla celów wykrywania relacji, np.
a = 1:50 + rnorm(50, sd = 0.01)
b = a + rnorm(50, sd = 1)
da = diff(a); db = diff(b)
summary(lmx <- lm(db ~ da))
W tym przypadku b jest silnie związane z a , ale b ma więcej hałasu. Dla mnie to pokazuje, że różnicowanie nie działa w idealnym przypadku do wykrywania zależności między sygnałami o niskiej częstotliwości. Rozumiem, że różnicowanie jest powszechnie stosowane do analizy szeregów czasowych, ale wydaje się być bardziej przydatne do określania zależności między sygnałami o wysokiej częstotliwości. czego mi brakuje?
Przykładowe dane
df1 <- structure(list(
x = c(315.97, 316.91, 317.64, 318.45, 318.99, 319.62, 320.04, 321.38, 322.16, 323.04, 324.62, 325.68, 326.32, 327.45, 329.68, 330.18, 331.08, 332.05, 333.78, 335.41, 336.78, 338.68, 340.1, 341.44, 343.03, 344.58, 346.04, 347.39, 349.16, 351.56, 353.07, 354.35, 355.57, 356.38, 357.07, 358.82, 360.8, 362.59, 363.71, 366.65, 368.33, 369.52, 371.13, 373.22, 375.77, 377.49, 379.8, 381.9, 383.76, 385.59, 387.38, 389.78),
y = c(0.0192, -0.0748, 0.0459, 0.0324, 0.0234, -0.3019, -0.2328, -0.1455, -0.0984, -0.2144, -0.1301, -0.0606, -0.2004, -0.2411, 0.1414, -0.2861, -0.0585, -0.3563, 0.0864, -0.0531, 0.0404, 0.1376, 0.3219, -0.0043, 0.3318, -0.0469, -0.0293, 0.1188, 0.2504, 0.3737, 0.2484, 0.4909, 0.3983, 0.0914, 0.1794, 0.3451, 0.5944, 0.2226, 0.5222, 0.8181, 0.5535, 0.4732, 0.6645, 0.7716, 0.7514, 0.6639, 0.8704, 0.8102, 0.9005, 0.6849, 0.7256, 0.878),
ti = 1:52),
.Names = c("x", "y", "ti"), class = "data.frame", row.names = 110:161)
ddf<- data.frame(dy = diff(df1$y), dx = diff(df1$x))
ddf2<- data.frame(ddy = diff(ddf$dy), ddx = diff(ddf$dx))
ddf$ti<-1:length(ddf$dx); ddf2$year<-1:length(ddf2$ddx)
summary(lm0<-lm(y~x, data=df1)) #t = 15.0
summary(lm1<-lm(dy~dx, data=ddf)) #t = 2.6
summary(lm2<-lm(ddy~ddx, data=ddf2)) #t = 2.6
źródło
Też nie rozumiem tej rady. Różnicowanie usuwa trendy wielomianowe. Jeśli seria jest podobna ze względu na różnice w trendach, zasadniczo usuwa tę relację. zrobiłbyś to tylko wtedy, gdy spodziewasz się, że wycofane komponenty będą ze sobą powiązane. Jeśli ta sama kolejność różnicowania prowadzi do acf dla reszt, które wyglądają tak, jakby mogły pochodzić ze stacjonarnego modelu ARMA, w tym białego szumu, co może wskazywać, że obie serie mają te same lub podobne trendy wielomianowe.
źródło
W moim rozumieniu różnicowanie daje wyraźniejsze odpowiedzi w funkcji korelacji krzyżowej. Porównaj
ccf(df1$x,df1$y)
iccf(ddf$dx,ddf$dy)
.źródło