Community deutschsprachiger SAS-Anwender und -Programmierer

Antworten
Dies ist eine offene Gruppe. Melden Sie sich an und klicken Sie auf die Schaltfläche „Gruppe beitreten“, um Mitglied zu werden und damit zu beginnen, Beiträge in dieser Gruppe zu veröffentlichen.
Highlighted
Contributor
Beiträge: 31
Reverse Arrangement Test

Guten Abend zusammen.

 

Hat denn zufällig jemand schon mal einen Reverse Arrangement als Stationaritätstest für eine Zeitreihe programmiert?

Ich habe zwischen 300 und 2000 Werte in der Reihe und befürchte, da das sicherlich nur mit grossen Matrizen-Operationen geht, an Kapazitätsgrenzen zu stossen. Über einen Hinweis würde ich mich freuen.

 

Grüße

Frank

Trusted Advisor
Beiträge: 1.115
Betreff: Reverse Arrangement Test

Hallo, Frank,

 

nein, mit diesem Test hatte ich leider noch nichts zu tun. Die Beschreibung in diesem Artikel hat mich aber dazu motiviert, eine einfache Simulation zu programmieren. Matrizenrechnung kommt darin nicht vor.

 

Im Artikel heißt es über die Teststatistik, "the tendency to normality is extremely rapid", und die Normalapproximation wird bereits für Datenreihen ab Länge 14 nahegelegt. In meiner Simulation wird der in diesem Sinne approximative, zweiseitige Test zum Niveau alpha auf t unabhängige "Zeitreihen" der Länge n angewandt (Stichproben einer Rechteckverteilung; hier sollte also die Nullhypothese gelten).

 

%let n=300;       /* Länge der Zeitreihe */
%let t=100000;    /* Anzahl Simulationen */
%let alpha=0.05;  /* Signifikanzniveau */

data sim;
call streaminit(271828);
array x[&n] _temporary_;
m=&n*(&n-1)/4;                    /* Erwartungswert der Teststatistik lt. Artikel */
s=sqrt(&n*(&n-1)*(2*&n+5)/72);    /* Standardabw. der Teststatistik lt. Artikel */
u=quantile('NORMAL', 1-&alpha/2);
do k=1 to &t;
  do r=1 to &n;                   /* Erzeugen der "Zeitreihe" */
    x[r]=rand('uniform');
  end;
  a=0;                            /* Berechnung der Teststatistik */
  do i=1 to &n-1;
    do j=i+1 to &n;
      a+(x[i]>x[j]);
    end;
  end;
  z=(a-m)/s;    /* z-Score */
  y=(abs(z)>u); /* Indikator für Signifikanz zum Niveau &alpha */
  output;
end;
keep k a y;
run;

proc freq data=sim;
tables y / binomial (level='1');
run;

Für alpha=0,05, t=100000 und n=300 (Laufzeit hier: 1,5 min) ergab sich eine Fehlerrate erster Art von 4,95 % (exaktes CI: 0,0481 - 0,0508), also tatsächlich sehr nah am gewählten Signifikanzniveau.


Für alpha=0,05, t=10000 und n=2000 (Laufzeit: 6,5 min) ergab sich eine Fehlerrate erster Art von 5,17 % (exaktes CI: 0,0474 - 0,0562), was ebenfalls für die Brauchbarkeit der Normalapproximation spricht.

 

Die Power des Tests könnte man bei Bedarf analog mit geeigneten Testdaten untersuchen.

 

Viele Grüße

 

Reinhard

Contributor
Beiträge: 31
Betreff: Reverse Arrangement Test

Hallo Reinhard,

 

das ist aber ein verblüffender Zufall: derselbe Artikel liegt vor mir auf dem Schreibtisch  Smiley (zwinkernd)

Ich habe zwischen 300 und 2000 Zahlenwerte, da steigt bei mir die array Definition aus. Aber da gibt es sicherlich Abhilfe.

Jedenfalls hatte ich nicht erwartet, dass das Problem mit so wenigen Zeilen abzuwickeln wäre.

Aber ich stecke auch nicht so tief im SAS drin :-(

Ich werde mit Deinem Code jetzt experimentieren und bin auf die Ergebnisse gespannt.

Vielen Dank für die voll ins Schwarze treffende Hilfe ;-)

 

Viele Grüße

Frank

Trusted Advisor
Beiträge: 1.115
Betreff: Reverse Arrangement Test

sauer schrieb:

 

(...) Ich habe zwischen 300 und 2000 Zahlenwerte, da steigt bei mir die array Definition aus. Aber da gibt es sicherlich Abhilfe. (...)


Wenn es die Genauigkeit der Werte zulässt, könnte man notfalls die Länge der Arrayvariablen auf einen Wert <8 reduzieren, um Speicherplatz zu sparen. Aber ich kann mir nur schwer vorstellen, dass das wirklich nötig sein sollte. Mit Arrays dieser Größenordnung habe ich schon in den späten 1990er-Jahren auf PCs gearbeitet, und in der Zwischenzeit hat sich doch gerade bei der üblichen RAM-Ausstattung einiges getan.

Super User
Beiträge: 6.939
Betreff: Reverse Arrangement Test

2000 Zahlenwerte * 8 bytes = 16K.

Da steigt kein Array aus, mit so einer mickrigen MEMSIZE würde SAS keinesfalls starten. Das muss einen anderen Grund haben.

---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
Contributor
Beiträge: 31
Betreff: Reverse Arrangement Test

Hallo Reinhard,

 

vielen Dank nochmal für Deine Simulation.

Hat mir sehr geholfen beim Weiterkommen Smiley (fröhlich)

Inzwischen konnte ich auch nachvollziehen, was meine Vorgänger gerechnet haben.

 

Viele Grüße

Frank