Aktuelles
Tutorials
Kursskripte
Dialogfelder
Syntaxdateien,
Makros und Skripte
Literatur
Tipps
Lizenzen
R+Python-Essentials
Patches und Hotfixe
Bugs
SPSS-Foren


Verantwortlich:
Dr. Hans Grüner

 
 
 

 

Informationen zu SPSS

 

Tipps und Lösungen

Im Folgenden werden einzelne Tipps und auch Lösungen vorgestellt, die vielleicht mitunter die Arbeit etwas erleichtern können oder die Funktionen zugänglich machen, die über das Menü nicht zugänglich sind. Die Liste wird sukzessive erweitert.

 

Desiderat: Es sollen in einer logistischen Regression auch polynomiale unabhängige Variablen verwendet werden (also x**2, x**3 etc.)

Lösung:

Es stehen dafür mehrere statistische Prozeduren zur Verfügung, wie in dieser Technote beschrieben.

Letzter Stand: 12.03.2016


Desiderat: Die Standardabweichung und die Varianz soll für eine Population und nicht für eine Stichprobe ausgegeben werden; es soll also N anstatt N-1 im Nenner verwendet werden.

Lösung:

Das folgende Vorgehen führt zum gewünschten Ergebnis:

Es wird eine Variable nach der Formel (N-1)/N für alle Fälle berechnet (nennen wir sie v_wt). Anschließend wird eine Variable als Konstante mit einem Wert von 1 für alle Fälle berechnet (nennen wir sie v_one).

Danach wird eine lineare Regression durch den Ursprung (keine Konstante - wird über die Schaltfläche Optionen eingestellt) gerechnet; v_one wird als unabhängige Variable, die interessierende Variable als abhängige Variable und v_wt als WLS-Gewichtung spezifiziert.

Das Mittel der Quadrate der nichtstandardisierten Residuen in der Anova-Tabelle ist die Varianz mit N als Nenner. Die Quadratwurzel davon, die Standardabweichung ist der Standardfehler des Schätzers in der Tabelle Modellzusammenfassung. Der Mittelwert der Variable ist übrigens der Regressionskoeffizient in der Tabelle Koeffizienten.

Letzter Stand: 13.11.2014


Desiderat: Eine numerische Variable soll in eine neue Textvariable übertragen werden, so, dass die Wertelabels der numerischen Variable zu den Datenwerten der Textvariable werden.
Eine numerische Variable mit den Ausprägungen 1 und 2 und den dazugehörigen Wertelabeln "Äpfel" und "Birnen" soll übertragen werden in eine neue Textvariable, die die Wertelabel der numerischen Variable als Datenwerte aufweist..

Lösung:

Die folgende Syntax führt zum gewünschten Ergebnis:

/* Der Datensatz mit der numerischen Variable obst wird erstellt.
DATA LIST free / obst.
BEGIN DATA.
1
2
END DATA.
VALUE LABELS obst 1 "Äpfel" 2 "Birnen".
EXECUTE.

/* Eine neue Variable mit 100 Stellen wird erstellt. Wenn nötig, Zahl erhöhen.
STRING obst_text (A100).

/* Testet, ob ein Wertelabel für einen Wert von obst existiert; wenn ja, wird obst_text dieses Wertelabel zugewiesen.
IF (CHAR.LENGTH(VALUELABEL(obst)) > 0) obst_text = VALUELABEL(obst).
EXECUTE.

/* Mit einigen LOCALE- und UNICODE-Einstellungen kann es führende Leerzeichen geben.
/* Diese Anweisung entfernt diese Leerzeichen. Wenn es Gründe gibt, die führenden Leerzeichen zu behalten, bitte die folgenden beiden Zeilen entfernen.
COMPUTE obst_text = LTRIM(obst_text).
EXECUTE.

/* Die Variablengröße wird anhand der Daten auf die benötigte Größe hin reduziert.
ALTER TYPE obst (AMIN).

Letzter Stand: 19.10.2011


Desiderat: Umkodieren einer Variable mit Definition eines nutzerdefinierten fehlenden Wertes
Eine Variable mit Ausprägungen 0, 1 und systemfehlender Wert soll in eine neue Variable umkodiert werden, so dass die Werte 1, 2 und nutzerdefinierter Wert 99 vorhanden sind..

Lösung:

Die folgende Syntax führt zum gewünschten Ergebnis:

DATA LIST / x (F2.0).
BEGIN DATA
0
0

1
1
END DATA.
EXECUTE.

DO IF SYSMIS(X).
COMPUTE Y = 99.
ELSE IF (X EQ 0).
COMPUTE Y=1.
ELSE IF (X NE 0).
COMPUTE Y=2.
END IF.
MISSING VALUES Y (99).
EXECUTE.

Das Ergebnis sieht dann so aus:

Bitte beachten, dass nur die obige Version der Syntax zum gewünschten Ergebnis führt; die folgende Version führt nicht zum Erfolg (der nutzerseitig definierte fehlende Wert wird nicht definiert!):

DO IF (X EQ 0).
COMPUTE Y=1.
ELSE IF (X NE 0).
COMPUTE Y=2.
ELSE IF SYSMIS(X).
COMPUTE Y = 99.
END IF.
MISSING VALUES Y (99).
EXECUTE.

Letzter Stand: 31.08.2011


Desiderat: Einem 3D-Streudiagramm eine Anpassungsebene hinzufügen
Einem Streudiagramm mit drei Dimensionen soll das Äquivalent einer Anpassungslinie, eine Anpassungsebene hinzugefügt werden.

Lösung:

Die Syntax der Grafik muss editiert werden. Dazu wird im Assistenten nach der Spezifizierung des Streudiagramms der Knopf "Einfügen" gedrückt. Danach öffnet sich ein Syntax-Fenster, in das die Spezifizierung des Plots als sogenannte Syntax-Anweisung eingefügt wird. Diese muss nun "per Hand" modifiziert werden. Es wird eine Element-Anweisung eingefügt. Möglich sind außer der linearen Anpassung auch andere Verfahren der Anpassung (siehe Handbuch zur GPL-Sprache).

Beispiel der Syntaxanweisungen mit rot hervorgehobenen Veränderungen:
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=salbegin salary jobtime MISSING=LISTWISE
REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: salbegin=col(source(s), name("salbegin"))
DATA: salary=col(source(s), name("salary"))
DATA: jobtime=col(source(s), name("jobtime"))
COORD: rect(dim(1,2,3))
GUIDE: axis(dim(1), label("Months since Hire"))
GUIDE: axis(dim(2), label("Beginning Salary"))
GUIDE: axis(dim(3), label("Current Salary"))
ELEMENT: point(position(jobtime*salbegin*salary))
ELEMENT: line(position(smooth.linear(jobtime*salbegin*salary)))
END GPL.

Hier nun ein Beispiel (mit der mitgelieferten Datendatei: Employee.sav):

Letzter Stand: 14.07.2011


Desiderat: Die Verteilung der einzelnen Fälle im Boxplot ausgeben
Die Verteilung der Fälle über den Wertebereich der metrischen Variable soll im Rahmen eines Boxplots zusätzlich mit eingezeichnet werden. Die resultierende Grafik kommt einem Violin-Plot sehr nahe.

Lösung:

Die Syntax der Grafik muss editiert werden. Dazu wird im Assistenten nach der Spezifizierung des Boxplots der Knopf "Einfügen" gedrückt. Danach öffnet sich ein Syntax-Fenster, in das die Spezifizierung des Plots als sogenannte Syntax-Anweisung eingefügt wird. Diese muss nun "per Hand" modifiziert werden. Zuerst wird eine Element-Anweisung eingefügt und die schon Bestehende modifiziert.

Beispiel der Syntaxanweisungen mit rot hervorgehobenen Veränderungen:
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=ps MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: ps=col(source(s), name("ps"))
DATA: id=col(source(s), name("$CASENUM"), unit.category())
COORD: rect(dim(1), transpose())
GUIDE: axis(dim(1), label("PS"))
ELEMENT: point.dodge.symmetric(position(bin.dot(ps, dim(1))), color(color.white), color.exterior(color.blue),
size(size."3"), shape(shape.circle), transparency.exterior(transparency."0.4"))

ELEMENT: schema(position(bin.quantile.letter(ps)), label(id), transparency(transparency."0.6"))
END GPL..

Über die "color"-, "size"- und "transparency"-Einstellungen kann entsprechend modifiziert werden (siehe GPL Reference Guide).

Hier nun ein Beispiel (mit der Datei Cars.sav):

Letzter Stand: 28.01.2010


Übersicht über die verschiedenen benötigten Versionen der SPSS-Erweiterungen (R und Python) bei der Vielzahl an unterschiedlichen SPSS-Versionen

Version von SPSS R-Version Python-Version
23 3.1.0 (Ist Bestandteil der SPSS-Installtion)
22 2.15.2 (Ist Bestandteil der SPSS-Installtion)
21 2.14.2  (Ist Bestandteil der SPSS-Installtion)
20 2.12.1  2.7 
19 2.10 2.6
18 2.8 2.6
17 2.7 2.5

Letzter Stand: 12.03.2016


Desiderat: Bei einem gestapelten Balkendiagramm soll die x-Achse durch mehrere einzelne Variablen definiert werden (und nicht durch die Ausprägungen einer einzigen Variable)
Bei einem Balkendiagramm sollen acht verschiedene Variablen, die beispielsweise als Items einer Skala zur politischen Partizipation mit 0 (= nicht getan) und 1 (= getan) kodiert wurden, die x-Achse definieren. Eine weitere Variable (z.B. zum Geschlecht) soll die Untergliederung der Säulen definieren.

Lösung:

Die Spezifizierung mit Hilfe des Grafik-Assistenten (Diagrammerstellung) ist etwas kompliziert. Aus der Grafikgalerie wird beispielsweise das gestapelte Balkendiagramm ausgewählt. Dann werden die zu verwendenden Variablen für die x-Achse markiert. (Falls diese nicht als metrisch - Skala - definiert sind, müssen sie mit Hilfe der rechten Maustaste zumindest temporär als metrisch deklariert werden. Dann wird der Block der markierten Variablen auf die y-Achse gezogen. Bei den Elementeigenschaften muss danach als Statistik die Summe für alle Variablen eingestellt werden. Anschließend wird noch die Variable zum Geschlecht als Stapelvariable rechts oben definiert. (Das Ganze funktioniert auch zum Beispiel mit einfachen Balkendiagrammen und mit Liniendiagrammen.)

In Form von Syntaxanweisungen sieht das folgendermaßen aus:
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=SUM(item1) SUM(item2) SUM(item3) SUM(item4) SUM(item5) SUM(item6) SUM(item7) SUM(item8) geschlecht MISSING=LISTWISE REPORTMISSING=NO
TRANSFORM=VARSTOCASES(SUMMARY="#SUMMARY" INDEX="#INDEX")
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: SUMMARY=col(source(s), name("#SUMMARY"))
DATA: INDEX=col(source(s), name("#INDEX"), unit.category())
DATA: geschlecht=col(source(s), name("geschlecht"), unit.category())
GUIDE: axis(dim(2), label("Summe"))
GUIDE: legend(aesthetic(aesthetic.color.interior), label("Geschlecht "))
SCALE: cat(dim(1), include("0", "1", "2", "3", "4", "5", "6", "7"))
SCALE: linear(dim(2), include(0))
SCALE: cat(aesthetic(aesthetic.color.interior), include("1", "2"))
ELEMENT: interval.stack(position(INDEX*SUMMARY), color.interior(geschlecht), shape.interior(shape.square))
END GPL.

Und noch das Beispiel als Grafik:

Letzter Stand: 28.03.2010


Desiderat: Fallzahl in Boxplots ausgeben
Es sollen bei Boxplots für jede Ausprägung der Variable auf der x-Achse die Fallzahlen mit in der Grafik ausgegeben werden. (Das ging früher mit der interaktiven Grafik, mit dem Assistenten zur Grafikerstellung geht es aber nicht mehr; die interaktive Grafik gibt es mittlerweile (Version 18) auch nicht mehr.)

Lösung:

Die Syntax der Grafik muss editiert werden. Dazu wird im Assistenten nach der Spezifizierung des Boxplots der Knopf "Einfügen" gedrückt. Danach öffnet sich ein Syntax-Fenster, in das die Spezifizierung des Plots als sogenannte Syntax-Anweisung eingefügt wird. Diese muss nun "per Hand" modifiziert werden. Zuerst wird eine TRANS-Anweisung eingefügt und dann ein Point-Element.

Beispiel der Syntaxanweisungen mit rot hervorgehobenen Ergänzungen:
GGRAPH
/GRAPHDATASET NAME="graphdataset" VARIABLES=land gewicht MISSING=LISTWISE REPORTMISSING=NO
/GRAPHSPEC SOURCE=INLINE.
BEGIN GPL
SOURCE: s=userSource(id("graphdataset"))
DATA: land=col(source(s), name("land"), unit.category())
DATA: gewicht=col(source(s), name("gewicht"))
DATA: id=col(source(s), name("$CASENUM"), unit.category())
TRANS: labelPosition = eval(0)
GUIDE: axis(dim(1), label("Herstellungsland"))
GUIDE: axis(dim(2), label("Gewicht (lbs.)"))
SCALE: cat(dim(1), include("1", "2", "3"))
SCALE: linear(dim(2), include(0))
ELEMENT: schema(position(bin.quantile.letter(land*gewicht)), label(id))
ELEMENT: point(position(land*labelPosition), size(size."0px"), label("N = "), label(summary.count()))
END GPL.

Hier nun ein Beispiel (mit der Datei Cars.sav):

Leider funktioniert die Ausgabe in einer Zeile nicht so wie im Handbuch zu GPL beschrieben, deshalb wurde als zweitbeste Lösung die Ausgabe in zwei Zeilen gewählt.

Letzter Stand: 16.12.2009

 

nach oben

Letzte Änderung: 17. Dezember 2016

Randzur Homepage der ZEDATRandKontaktRand