Hallo Zuammen!
Mein Problem ist, dass ich zur Anwendung geeigneter Clusterverfahren meine ordinalskalierten Werte in binäre Hilfsvariablen umwandeln möchte. Davon eindeutig zu unterscheiden ist die Median-Dichotomisierung.
Das Prinzip des Ersetzens soll wie folgt aussehen (Bei einer Skala von 1 - 4):
1 -> 0 0 0 1
2 -> 0 0 1 1
3 -> 0 1 1 1
4 -> 1 1 1 1
Meine Frage ist nur: Wie bringe ich das SPSS bei? Auch wenn ich alle Nullen und Einsen von Hand eintragen müsste, stellt sich für mich die grundsätzliche Frage, wie solch etwas in SPSS eingegeben werden muss.
Meine Ideen wären:
Ich habe 20 Variablen.
1)
Variable "Numerisch", 4 Stellen und "Nominal" deklarieren
In einer "Fall"-Zeile würde dann etwa bei Item 1 nicht "4" sondern "1111" stehen.
2)
Ich richte für jede bisher ordinalskalierte Variable 4 einzelne nominalskalierte Variablen ein. So käme ich auf eine Anzahl von 80 Variablen pro Fall.
Wer kann helfen?
Danke!!!
Ordinalskalierte Merkmale in binäre Hilfsvariablen umwandeln
-
- Beiträge: 4
- Registriert: 22.11.2006, 14:16
-
- Beiträge: 174
- Registriert: 12.05.2006, 12:00
Hast Du an so etwas gedacht?
Hallo ubwa10000297,
wie wärs hiermit?
If var_n=1 var_d11=0.
If var_n=1 var_d12=0.
If var_n=1 var_d13=0.
If var_n=1 var_d14=1.
If var_n=2 var_d21=0.
If var_n=2 var_d22=0.
If var_n=2 var_d23=1.
If var_n=2 var_d24=1.
If var_n=3 var_d31=0.
If var_n=3 var_d02=1.
If var_n=3 var_d03=1.
If var_n=3 var_d04=1.
If var_n=4 var_d41=1.
If var_n=4 var_d42=1.
If var_n=4 var_d43=1.
If var_n=4 var_d44=1.
Execute.
MedDokAss
wie wärs hiermit?
If var_n=1 var_d11=0.
If var_n=1 var_d12=0.
If var_n=1 var_d13=0.
If var_n=1 var_d14=1.
If var_n=2 var_d21=0.
If var_n=2 var_d22=0.
If var_n=2 var_d23=1.
If var_n=2 var_d24=1.
If var_n=3 var_d31=0.
If var_n=3 var_d02=1.
If var_n=3 var_d03=1.
If var_n=3 var_d04=1.
If var_n=4 var_d41=1.
If var_n=4 var_d42=1.
If var_n=4 var_d43=1.
If var_n=4 var_d44=1.
Execute.
MedDokAss
-
- Beiträge: 4
- Registriert: 22.11.2006, 14:16
Hallo MedDokAss,
vielen Dank für die Antwort.
Ja, so in etwa habe ich mir das vorgestellt. Das müsste eigentlich funktionieren.
Mein Problem ist eben, dass die Werteunterschiede in der verwendeten Skala (1-4) nicht sehr groß sind (ich habe aber auch schon erfolgreiche Untersuchungen gesehen, in denen nur 3 Ränge vorhanden waren). Bei anderen ordinalskalierten Variablen mit z.B. 10 Plätzen stelle ich mir die Anwendung metrischer Distanzen nicht so "gefährlich" vor, dies sieht man auch häufiger.
Tatsächlich scheint es mir, dass in der Literatur eine tiefergehende Behandlung bewußt "ausgeblendet" und auf metrische Verfahren verwiesen wird, da sich diese herangehensweise häufig in der praxis durchsetzt. Im Zusammenhang mit der Clusteranalyse anhand ordinalskalierter Variablen wird allerdings die Canberra-Metrik genannt, die jedoch in SPSS (so wie ich vermute) nicht vorhanden ist.
Viele Grüße
Stephan
vielen Dank für die Antwort.
Ja, so in etwa habe ich mir das vorgestellt. Das müsste eigentlich funktionieren.
Mein Problem ist eben, dass die Werteunterschiede in der verwendeten Skala (1-4) nicht sehr groß sind (ich habe aber auch schon erfolgreiche Untersuchungen gesehen, in denen nur 3 Ränge vorhanden waren). Bei anderen ordinalskalierten Variablen mit z.B. 10 Plätzen stelle ich mir die Anwendung metrischer Distanzen nicht so "gefährlich" vor, dies sieht man auch häufiger.
Tatsächlich scheint es mir, dass in der Literatur eine tiefergehende Behandlung bewußt "ausgeblendet" und auf metrische Verfahren verwiesen wird, da sich diese herangehensweise häufig in der praxis durchsetzt. Im Zusammenhang mit der Clusteranalyse anhand ordinalskalierter Variablen wird allerdings die Canberra-Metrik genannt, die jedoch in SPSS (so wie ich vermute) nicht vorhanden ist.
Viele Grüße
Stephan
-
- Beiträge: 174
- Registriert: 12.05.2006, 12:00
Cluster- u. Faktoranalyse nicht mein Spezialgebiet
Hallo ubwa10000297,
leider kenne ich mich in der Cluster- und auch der Faktoranalyse nicht aus. Weil so etwas in der Medizin eigentlich keine Rolle spielt. Dafür kenne ich mich mit der Syntax von SPSS relativ gut aus.
Gruß MedDokAss
leider kenne ich mich in der Cluster- und auch der Faktoranalyse nicht aus. Weil so etwas in der Medizin eigentlich keine Rolle spielt. Dafür kenne ich mich mit der Syntax von SPSS relativ gut aus.
Gruß MedDokAss
-
- Beiträge: 4
- Registriert: 22.11.2006, 14:16
Hallo MedDokAss,
Danke für Deinen Hinweis. Deinen vorigen Vorschlag habe ich einmal versucht, im Syntax-Editor umzusetzen, scheitere aber an einer Sache, bei der Du mir vielleicht nocheinmal mit Rat zur Seite stehen könntest.
Um nicht alle Variablennamen angeben zu müssen, habe ich von den Kommandos "DO REPEAT" und "LOOP" gebrauch gemacht. Dabei scheitere ich an den "Scratch"-Variablen, die ich unter anderem einsetze, um dynamisch Variablennamen zu erzeugen. Nach einem tieferen Blick in die Command Syntax Reference stellte sich heraus, dass Variablendeklarationen über Scratch-Variablen nicht funktionieren (Dazu das Handbuch:
-Scratch variables cannot be used in procedures and cannot be saved in a data file.
- Scratch variables cannot be assigned missing values, variable labels, or value labels.)
Gibt es hier eine Methode, dies zu machen?
Was ich machen möchte:
- Daten aus dem geöffneten Datenfile (*.sav) verarbeiten,
- transformierte Daten (samt Fallbeschriftung aus der ursprünglichen Datendatei) in eine neue Datei schreiben
Hier die Syntax:
FILTER BY Ber1.
/* Hier möchte ich die Binärvariablen deklarieren.
DO REPEAT p=A0_mitarb_anz,A1_angest_ant,A2_spezialisierung,A3_formalorga,A5_fertigung_art,A6_fertigung_proc,A7_anlagentec,A8_ih_freundl.
COMPUTE #X=1.
LOOP IF (#X LT 5). /* Schleife 4 mal durchlaufen
COMPUTE #mytempvar=CONCAT(p,'_b',#X).
VARIABLE LEVEL #mytempvar (NOMINAL).
COMPUTE #X=#X+1.
END LOOP.
END REPEAT.
DO REPEAT p=A0_mitarb_anz,A1_angest_ant,A2_spezialisierung,A3_formalorga,A5_fertigung_art,A6_fertigung_proc,A7_anlagentec,A8_ih_freundl.
/* Hier versuche ich im Fall von #mytempvar1 = A0_mitarb_anz_b1 als neue Variable anzulegen.
COMPUTE #mytempvar1=CONCAT(p,'_b1').
COMPUTE #mytempvar2=CONCAT(p,'_b2').
COMPUTE #mytempvar3=CONCAT(p,'_b3').
COMPUTE #mytempvar4=CONCAT(p,'_b4').
IF p=1 #mytempvar1=0.
IF p=1 #mytempvar2=0.
IF p=1 #mytempvar3=0.
IF p=1 #mytempvar4=1.
IF p=2 #mytempvar1=0.
IF p=2 #mytempvar2=0.
IF p=2 #mytempvar3=1.
IF p=2 #mytempvar4=1.
IF p=3 #mytempvar1=0.
IF p=3 #mytempvar2=1.
IF p=3 #mytempvar3=1.
IF p=3 #mytempvar4=1.
IF p=4 #mytempvar1=1.
IF p=4 #mytempvar2=1.
IF p=4 #mytempvar3=1.
IF p=4 #mytempvar4=1.
END REPEAT.
EXECUTE.
Viele Grüße,
Stephan
Danke für Deinen Hinweis. Deinen vorigen Vorschlag habe ich einmal versucht, im Syntax-Editor umzusetzen, scheitere aber an einer Sache, bei der Du mir vielleicht nocheinmal mit Rat zur Seite stehen könntest.
Um nicht alle Variablennamen angeben zu müssen, habe ich von den Kommandos "DO REPEAT" und "LOOP" gebrauch gemacht. Dabei scheitere ich an den "Scratch"-Variablen, die ich unter anderem einsetze, um dynamisch Variablennamen zu erzeugen. Nach einem tieferen Blick in die Command Syntax Reference stellte sich heraus, dass Variablendeklarationen über Scratch-Variablen nicht funktionieren (Dazu das Handbuch:
-Scratch variables cannot be used in procedures and cannot be saved in a data file.
- Scratch variables cannot be assigned missing values, variable labels, or value labels.)
Gibt es hier eine Methode, dies zu machen?
Was ich machen möchte:
- Daten aus dem geöffneten Datenfile (*.sav) verarbeiten,
- transformierte Daten (samt Fallbeschriftung aus der ursprünglichen Datendatei) in eine neue Datei schreiben
Hier die Syntax:
FILTER BY Ber1.
/* Hier möchte ich die Binärvariablen deklarieren.
DO REPEAT p=A0_mitarb_anz,A1_angest_ant,A2_spezialisierung,A3_formalorga,A5_fertigung_art,A6_fertigung_proc,A7_anlagentec,A8_ih_freundl.
COMPUTE #X=1.
LOOP IF (#X LT 5). /* Schleife 4 mal durchlaufen
COMPUTE #mytempvar=CONCAT(p,'_b',#X).
VARIABLE LEVEL #mytempvar (NOMINAL).
COMPUTE #X=#X+1.
END LOOP.
END REPEAT.
DO REPEAT p=A0_mitarb_anz,A1_angest_ant,A2_spezialisierung,A3_formalorga,A5_fertigung_art,A6_fertigung_proc,A7_anlagentec,A8_ih_freundl.
/* Hier versuche ich im Fall von #mytempvar1 = A0_mitarb_anz_b1 als neue Variable anzulegen.
COMPUTE #mytempvar1=CONCAT(p,'_b1').
COMPUTE #mytempvar2=CONCAT(p,'_b2').
COMPUTE #mytempvar3=CONCAT(p,'_b3').
COMPUTE #mytempvar4=CONCAT(p,'_b4').
IF p=1 #mytempvar1=0.
IF p=1 #mytempvar2=0.
IF p=1 #mytempvar3=0.
IF p=1 #mytempvar4=1.
IF p=2 #mytempvar1=0.
IF p=2 #mytempvar2=0.
IF p=2 #mytempvar3=1.
IF p=2 #mytempvar4=1.
IF p=3 #mytempvar1=0.
IF p=3 #mytempvar2=1.
IF p=3 #mytempvar3=1.
IF p=3 #mytempvar4=1.
IF p=4 #mytempvar1=1.
IF p=4 #mytempvar2=1.
IF p=4 #mytempvar3=1.
IF p=4 #mytempvar4=1.
END REPEAT.
EXECUTE.
Viele Grüße,
Stephan