testing for structural change -...
TRANSCRIPT
Testing for Structural Change
Theory, Implementation and Applications
Achim Zeileis
Dortmund, 2003-11-14
Testen auf Strukturveranderung
Theorie, Implementierung und Anwendungen
Achim Zeileis
Dortmund, 2003-11-14
Uberblick
❆ Theorie:
Verallgemeinerte M-Fluktuationstests auf Parameterinstabilitat
❆ Implementierung:
Strukturbruchtests im R-Paket strucchange
❆ Anwendung:
Testen und Datierung von Strukturbruchen
Was ist ein Strukturbruch?
Betrachtet wird das lineare Regressionsmodell
yi = x>i βi + ui (i = 1, . . . , n),
wobei zum Zeitpunkt i:
❆ yi — abhangige Variable,
❆ xi — Regressorvektor mit k Elementen,
❆ βi — Vektor von k unbekannten Regressionskoeffizienten,
❆ ui — Fehlerterm.
Was ist ein Strukturbruch?
Getestet wird die Nullhypothese
H0 : βi = β0 (i = 1, . . . , n)
gegen
H1 : βi andert sich mit der Zeit
→ verallgemeinerte Fluktuationstests.
Was ist ein Strukturbruch?
Getestet wird die Nullhypothese
H0 : βi = β0 (i = 1, . . . , n)
gegen
H1 : βi andert sich mit der Zeit
→ verallgemeinerte Fluktuationstests.
bzw.
H∗1 : βi =
{βA (1 ≤ i ≤ i0)βB (i0 < i ≤ n)
→ F -Tests.
Warum Strukturbruche?
Zeit
Nila
bflu
esse
1880 1900 1920 1940 1960
600
800
1000
1200
1400
Warum Strukturbruche?
Weshalb sollte man auf Strukturveranderung testen wollen?
❆ Zentrales Interesse in vielen Anwendungen: ob, wann und wieandert sich der datengeneriende Prozeß?
❆ Nachweis einer Anderung durch Signifikanztest,
❆ auch als diagnostischer Test, da Modelle mit nicht beachteter Pa-rameterinstabilitat zu uninterpretierbaren Parameterschatzungen,verzerrter Inferenz und ungenauen Prognosen fuhren,
❆ exploratives Hilfsmittel zur Entdeckung von Struktur-veranderungen.
Verallgemeinerte Fluktuationstests
❆ Empirischer Fluktuationsprozeß spiegelt Fluktuation wider in
❖ Residuen,❖ Koeffizientenschatzungen,❖ M-scores (bspw. KQ or ML scores).
❆ Theoretischer Grenzprozeß ist bekannt.
❆ Wahl von Schranken, die vom Grenzprozeß (oder einem Funktionaldessen) mit einer bekannten Wahrscheinlichkeit α uberschrittenwerden.
❆ Uberschreitet der empirische Fluktuationsprozeß die theoretischenSchranken, so ist die Fluktuation unwahrscheinlich groß ⇒ Null-hypothese verwerfen.
Philosophie
The generalized fluctuation test framework ...
“... includes formal significance tests but its philosophy is basically
that of data analysis as expounded by Tukey. Essentially, the techni-
ques are designed to bring out departures from constancy in a graphic
way instead of parametrizing particular types of departure in advance
and then developing formal significance tests intended to have high
power against these particular alternatives.” (Brown, Durbin, Evans,
1975)
Generalisierte M-Fluktuationstests
Wie konnen Abweichungen von der Annahme θi = θ0 eingefangen
werden? Betrachte eine k- bzw. k + 1-dimensionale Score-Funktion
ψ(·) mit
Eθi=θ0[ψ(yi, xi, θ0)] = 0
Annahmen:
❆ Erwartungswert 0 bzgl. f(yi |xi, θ0)❆ Stabilisierende Varianzen:
1
n
n∑i=1
COV[ψ(yi, xi, θ0)] = Jnp−→ J,
Generalisierte M-Fluktuationstests
Typische Wahl fur ψ ist die partielle Ableitung einer Zielfunktion Ψ
ψ(y, x, θ) =∂Ψ(y, x, θ)
∂θ.
Beispielsweise: KQ oder ML.
Anstatt der Spezifikation einer vollen Likelihood:
❆ Mißpezifikationsmodelle: Quasi-ML, robuste M-Schatzung.
❆ Schatzgleichungen: Hilfsvariablen (IV), Verallgemeinerte Momen-tenmethode (GMM), Verallgemeinerte Schatzgleichungen (GEE).
Theor. M-Fluktuationsprozesse
Aggregation uber die Zeit zu einem kumulativen Fluktuationsprozeß:
Wn(t, θ) = n−1/2bntc∑i=1
ψ(yi, xi, θ).
Theor. M-Fluktuationsprozesse
Aggregation uber die Zeit zu einem kumulativen Fluktuationsprozeß:
Wn(t, θ) = n−1/2bntc∑i=1
ψ(yi, xi, θ).
Unter H0 gilt der folgende zentrale Grenzwertsatz:
J−1/2Wn(·, θ0)d−→ W (·).
Empirische M-Fluktuationsprozesse
Eine geeignete Schatzung θn von θ0 ist gegeben durch:
n∑i=1
ψ(yi, xi, θn) = 0.
Empirische M-Fluktuationsprozesse
Eine geeignete Schatzung θn von θ0 ist gegeben durch:
n∑i=1
ψ(yi, xi, θn) = 0.
Unter H0 gilt der folgende zentrale Grenzwertsatz:
J−1/2n Wn(·, θn) d−→ W0(·),
falls Jn ein konsistenter Schatzer der Kovarianzmatrix J.
Warum Implementierung?
❆ potentiellen Benutzern ermoglichen theoretische Resultate auf
Daten anzuwenden,
❆ Reproduzierbarkeit von Forschungsergebnissen,
❆ Kommunikation von statistischen Ideen und dem Verstandnis uber
die Umsetzung von Theorie in Praxis.
strucchange
strucchange bietet vereinheitlichte und flexible Werkzeuge, um:
❆ Fluktuationsprozesse und F -Teststatistiken anzupassen,
❆ die Prozesse/Statistiken zusammen mit ihren Schranken darzu-
stellen,
❆ so potentielle Bruchpunkte graphisch zu illustrieren,
❆ Signifikanztests durchzufuhren.
strucchange
Weitere Funktionalitat:
❆ Uberwachung von Strukturveranderung mit Fluktuationstests ba-
sierend auf:
❖ KQ-Residuen,
❖ Koeffizientenschatzungen.
❆ Datierung von Strukturbruchen:
❖ Bruchpunktschatzung,
❖ Konfidenzintervalle.
Nildaten
Zeit
Nila
bflu
esse
1880 1900 1920 1940 1960
600
800
1000
1200
1400
Nildaten
R> scus.nile <- efp(Nile ~ 1, type = "Score-CUSUM")R> plot(scus.nile)
Nildaten
R> scus.nile <- efp(Nile ~ 1, type = "Score-CUSUM")R> plot(scus.nile)
Score−based CUSUM test
Time
empi
rical
fluc
tuat
ion
proc
ess
1880 1900 1920 1940 1960
0.0
0.5
1.0
1.5
2.0
2.5
Nildaten
R> plot(scus.nile, functional = "meanL2")
Nildaten
R> plot(scus.nile, functional = "meanL2")
Score−based CUSUM test with mean L2 norm
Time
empi
rical
fluc
tuat
ion
proc
ess
1880 1900 1920 1940 1960
02
46
8
Nildaten
R> plot(scus.nile, functional = NULL)
Nildaten
R> plot(scus.nile, functional = NULL)
0.0
1.0
2.0
(Int
erce
pt)
0.0
1.0
(Var
ianc
e)
1880 1900 1920 1940 1960
Time
Score−based CUSUM test
Nildaten
R> sctest(scus.nile)
Score-based CUSUM test
data: scus.nilef(efp) = 2.6557, p-value = 2.992e-06
Nildaten
R> sctest(scus.nile)
Score-based CUSUM test
data: scus.nilef(efp) = 2.6557, p-value = 2.992e-06
R> sctest(scus.nile, functional = "meanL2")
Score-based CUSUM test with mean L2 norm
data: scus.nilef(efp) = 3.08, p-value = 0.005
Nildaten
R> bp.nile <- breakpoints(Nile ~ 1)R> plot(bp.nile)
Nildaten
R> bp.nile <- breakpoints(Nile ~ 1)R> plot(bp.nile)
●
●
●
●
●
●
0 1 2 3 4 5
1270
1280
1290
1300
1310
1320
BIC and Residual Sum of Squares
Number of breakpoints
●
●● ●
●
●
BICRSS
1600
000
2000
000
2400
000
2800
000
Nildaten
R> summary(bp.nile, breaks = 3)
Optimal (m+1)-segment partition:
Call:breakpoints.formula(formula = Nile ~ 1)
Breakpoints at observation number:
m = 1 28m = 2 28 83m = 3 28 68 83
Corresponding to breakdates:
m = 1 1898m = 2 1898 1953m = 3 1898 1938 1953
Fit:
m 0 1 2 3RSS 2835156.750 1597457.194 1552923.616 1538096.513BIC 1318.242 1270.084 1276.467 1284.718
Nildaten
R> confint(bp.nile)
Confidence intervals for breakpointsof optimal 2-segment partition:
Call:confint.breakpointsfull(object = bp.nile)
Breakpoints at observation number:2.5 % breakpoints 97.5 %
1 24 28 31
Corresponding to breakdates:2.5 % breakpoints 97.5 %
1 1894 1898 1901
Nildaten
Zeit
Nila
bflu
esse
1880 1900 1920 1940 1960
600
800
1000
1200
1400
Bruchpunktschatzung
Segmentiertes Regressionsmodell:
yi = x>i βj + ui (i = ij−1 + 1, . . . , ij),
wobei j = 1, . . . ,m+ 1 der Segmentindex ist.
m-Partition: die Menge der Bruchpunkte Im,n = {i1, . . . , im}Konvention: i0 = 0 und im+1 = n
Bruchpunktschatzung
Segmentiertes Regressionsmodell:
yi = x>i βj + ui (i = ij−1 + 1, . . . , ij),
wobei j = 1, . . . ,m+ 1 der Segmentindex ist.
m-Partition: die Menge der Bruchpunkte Im,n = {i1, . . . , im}Konvention: i0 = 0 und im+1 = n
Die Fehlerquadratsumme des segmentierten Modells ist:
RSS(i1, . . . , im) =m+1∑j=1
rss(ij−1 + 1, ij)
Bruchpunktschatzung
Dabei ist rss(ij−1 +1, ij) die minimale Fehlerquadratsumme im j-ten
Segment.
Gesucht:
(ı1, . . . , ım) = argmin(i1,...,im)RSS(i1, . . . , im)
uber alle Partitionen (i1, . . . , im) mit ij − ij−1 ≥ bnhc ≥ k
Optimalitatsprinzip von Bellman:
RSS(Im,n) = minmnh≤i≤n−nh
[RSS(Im−1,i) + rss(i+ 1, n)]
Verkehrstote in Großbritannien
Zeit
log 1
0(Ver
kehr
stot
e)
1970 1975 1980 1985
3.1
3.2
3.3
3.4
Verkehrstote in Großbritannien
R> re.seat <- efp(y ~ ylag1 + ylag12, data = seatbelt, type = "RE")R> plot(re.seat)
Verkehrstote in Großbritannien
R> re.seat <- efp(y ~ ylag1 + ylag12, data = seatbelt, type = "RE")R> plot(re.seat)
Fluctuation test (recursive estimates test)
Time
empi
rical
fluc
tuat
ion
proc
ess
1970 1975 1980 1985
0.0
0.5
1.0
1.5
Verkehrstote in Großbritannien
R> fs.seat <- Fstats(y ~ ylag1 + ylag12, data = seatbelt, from = 0.1)R> plot(fs.seat)
Verkehrstote in Großbritannien
R> fs.seat <- Fstats(y ~ ylag1 + ylag12, data = seatbelt, from = 0.1)R> plot(fs.seat)
Time
F s
tatis
tics
1972 1974 1976 1978 1980 1982
05
1015
20
Verkehrstote in Großbritannien
R> bp.seat <- breakpoints(y ~ ylag1 + ylag12, data = seatbelt, h = 0.1)R> plot(bp.seat, breaks = 5)
Verkehrstote in Großbritannien
R> bp.seat <- breakpoints(y ~ ylag1 + ylag12, data = seatbelt, h = 0.1)R> plot(bp.seat, breaks = 5)
●
●
●
●
●
●
0 1 2 3 4 5
−60
0−
590
−58
0−
570
BIC and Residual Sum of Squares
Number of breakpoints
●
●
●
●
●
●
BICRSS
0.24
0.26
0.28
0.30
0.32
Verkehrstote in Großbritannien
Zeit
log 1
0(Ver
kehr
stot
e)
1970 1975 1980 1985
3.1
3.2
3.3
3.4