Straightliner
-
- Beiträge: 2
- Registriert: 11.02.2011, 15:18
Straightliner
Hallo an alle:
Mich beschäftigt eine verzwickte Frage:
Ich habe in einem Fragebogen eine große Batterie mit 10 Statements, zu denen jeweils angegeben werden soll, wie man dazu steht auf einer 5er-Skala.
Ich würde gerne alle Straightliner löschen, also diejenigen, die immer dasselbe geklickt haben.
In SPSS bedeutet das ja, dass sehn Variablen untersucht werden sollen auf ihre Ausprägungen. Der Syntax für das Löschen wäre sehr hilfreich.
Wichtig1: Es gibt auch die Ausprägung "Ich weiß nicht" - Hier soll es okay sein, immer diese gewählt zu haben.
Wichtig2: Deluxe wäre es, wenn schon bei 8 gleichen Antworten von 10 ein löschen möglich wäre.
Vielen Dank
Nurägchen
Mich beschäftigt eine verzwickte Frage:
Ich habe in einem Fragebogen eine große Batterie mit 10 Statements, zu denen jeweils angegeben werden soll, wie man dazu steht auf einer 5er-Skala.
Ich würde gerne alle Straightliner löschen, also diejenigen, die immer dasselbe geklickt haben.
In SPSS bedeutet das ja, dass sehn Variablen untersucht werden sollen auf ihre Ausprägungen. Der Syntax für das Löschen wäre sehr hilfreich.
Wichtig1: Es gibt auch die Ausprägung "Ich weiß nicht" - Hier soll es okay sein, immer diese gewählt zu haben.
Wichtig2: Deluxe wäre es, wenn schon bei 8 gleichen Antworten von 10 ein löschen möglich wäre.
Vielen Dank
Nurägchen
-
- Beiträge: 1733
- Registriert: 11.03.2010, 22:28
10 ist natürlich kein Problem, man berechnet eine Variable, die die Varianz der betrachteten Variablen enthält und codiert die für die eigenen Zwecke nochmal um (wenn NeueVariable=0 und irgendeine der ursprünglichen Variablen hat den Wert für "weiß nicht", dann...) und nimmt die Variable in die Filterbedingung.
Für "8 Gleiche" gibt es vermutlich eine elegante Lösung, eine unelegante wäre, 5 Variablen mit COUNT (Werte in Fällen zählen) zu erzeugen, je eine für jeden möglichen Wert. Gefiltert wird, wenn ANY dieser 5 Variablen >= 8 .
Für "8 Gleiche" gibt es vermutlich eine elegante Lösung, eine unelegante wäre, 5 Variablen mit COUNT (Werte in Fällen zählen) zu erzeugen, je eine für jeden möglichen Wert. Gefiltert wird, wenn ANY dieser 5 Variablen >= 8 .
-
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
RE
Hier die Lösung (allerdings sollte ein solches Modell stochastisch sein, vielleicht fällt mir noch ein stochastisches Modell ein.
Beispielsdaten:
Lösung:
Beispielsdaten:
Code: Alles auswählen
input program.
loop a =1 to 1000 by 1.
end case.
end loop.
end file.
end input program.
EXECUTE .
VECTOR v(10).
do repeat i = v1 to v10.
comp i = rv.binom(5,0.5).
end repeat.
EXECUTE .
EXE .
Lösung:
Code: Alles auswählen
DEFINE !a$1(b$1 =!tokens(1)
/c$1 = !tokens(1) ).
!do !var = !b$1 !to !c$1.
count !concat(D$1, !var) =v1 to v10 (!var ).
!doend.
EXE .
!enddefine.
!a$1 b$1 = 1 c$1 = 5.
COMPUTE max=MAX(D$11 to D$15).
EXECUTE.
SORT CASES BY max(D).
IF (max >= 8) fake=1.
IF (max < 8) fake=0.
val lab fake 0'kein Verdacht' 1' Fake Verdacht'.
EXE.
drfg2008
-
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
RE 2
Hier noch ein stochastisches Modell. Es basiert auf einer Autokorrelation zum Lag 1 über den r Pearson mit dem dazu gehörigen Fehler 1. Ordnung. Der Rechenaufwand ist wegen der sequenziellen Vorgehensweise allerdings sehr hoch und bestenfalls bis N=5.000 zu vertreten. Ansonsten müsste mit blockweisen Korrelationen gerechnet werden. Der Viewer ist beim Durchlauf abgeschaltet .
Code: Alles auswählen
*--------------------------- Testfile erstellen ----.
input program.
loop person =1 to 500 by 1.
end case.
end loop.
end file.
end input program.
exe.
comp v1 =RV.BINOM(5,0.5).
comp v2 =RV.BINOM(5,0.5).
comp v3 =RV.BINOM(5,0.5).
comp v4 =RV.BINOM(5,0.5).
comp v5 =RV.BINOM(5,0.5).
comp v6 =RV.BINOM(5,0.5).
comp v7 =RV.BINOM(5,0.5).
comp v8 =RV.BINOM(5,0.5).
comp v9 =RV.BINOM(5,0.5).
comp v10 =RV.BINOM(5,0.5).
EXE .
SORT CASES BY person(A).
SAVE OUTFILE='C:\user\<pfad eingeben>\testfile.sav'.
*einmalig den agg-file speichern .
input program.
loop var001 =1 to 1by 1.
end case.
end loop.
end file.
end input program.
EXECUTE .
comp var002 =0 .
comp person =0 .
SAVE OUTFILE='C:\user\<pfad eingeben>\agg.sav'.
* hier beginnt das Makro.
* ------------ Makro starten ------------------------------------------.
DEFINE !makro_stoch (start =!tokens(1)
/end = !tokens(1)
/testfile = !tokens(1)
/aggfile = !tokens(1)
/oms_outfile = !tokens(1)
/flipvar_1 = !token(1)
/flipvar_2 = !token(1)).
!do !var = !start !to !end.
GET FILE=!testfile.
FILTER OFF.
USE !var thru !var /permanent.
EXECUTE.
FLIP VARIABLES=!flipvar_1 to !flipvar_2.
SHIFT VALUES VARIABLE=var001 RESULT=var001_shift LAG=1.
OMS /DESTINATION VIEWER=NO /TAG='suppressall'.
oms select tables
/destination format = sav
outfile=!oms_outfile
/if commands = ['Correlations']
subtypes = ['Correlations'].
CORRELATIONS
/VARIABLES=var001 var001_shift
/PRINT=TWOTAIL NOSIG
/MISSING=PAIRWISE.
OMSEND .
GET FILE=!oms_outfile.
FILTER OFF.
USE 1 thru 2 /permanent.
EXECUTE.
DELETE VARIABLES Command_ to var001.
EXECUTE .
FLIP VARIABLES=Lagvar0011.
comp person = !var.
EXECUTE .
DELETE VARIABLES CASE_LBL.
EXECUTE .
ADD FILES /FILE=*
/FILE=!aggfile.
EXECUTE.
SAVE OUTFILE=!aggfile.
!doend.
SORT CASES BY person(A).
MATCH FILES /FILE=*
/FILE=!testfile
/BY person.
EXECUTE .
formats var001 var002 (f8.3).
rename variable var001 = pearson.
rename variable var002 = probability.
exe.
!enddefine.
!makro_stoch start = 1 end = 50 flipvar_1=v1 flipvar_2 =v10 testfile = 'C:\user\<pfad eingeben>\testfile.sav' aggfile = 'C:\user\<pfad eingeben>\agg.sav' oms_outfile ='C:\user\<pfad eingeben>\outfile.sav'.
drfg2008
-
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
RE
Hier noch eine ganz witzige Lösung für extrem große Datensätze (wo sogar die "if" Funktion schon den Rechner runter fährt):
die erste Variable mit 10 multiplizieren
die zweite Variable mit 100 multiplizieren
die dritte Variable mit 1000 multiplizieren
usw.
kommt als Summe dieser Berechnung eine Zahl heraus, die ganzzahlig durch 11 teilbar ist, dann sind die Werte gleich
5+50+500+5000+50000 =55555 z.B.
1+10+100+1000+10000=111111 usw.
IF is an expensive procedure: COMPUTE with RECODE is quicker and cheaper.
Beispiel stammt aus:
http://spssx-discussion.1045642.n5.nabb ... 71471.html
Gruß
die erste Variable mit 10 multiplizieren
die zweite Variable mit 100 multiplizieren
die dritte Variable mit 1000 multiplizieren
usw.
kommt als Summe dieser Berechnung eine Zahl heraus, die ganzzahlig durch 11 teilbar ist, dann sind die Werte gleich
5+50+500+5000+50000 =55555 z.B.
1+10+100+1000+10000=111111 usw.
IF is an expensive procedure: COMPUTE with RECODE is quicker and cheaper.
Beispiel stammt aus:
http://spssx-discussion.1045642.n5.nabb ... 71471.html
Gruß
drfg2008
-
- Beiträge: 2391
- Registriert: 06.02.2011, 19:58
re
Hier übrigens eine extrem schnelle Variante für große Datensätze (allerdings ohne p-Wert)
(Quelle: Gene Maguin auf dem Listserver der University of Georgia)
(Quelle: Gene Maguin auf dem Listserver der University of Georgia)
Code: Alles auswählen
input program.
vector y(10,f1.0).
loop id=1 to 100.
loop #i=1 to 10.
+ compute y(#i)=RV.BINOM(5,0.5).
end loop.
end case.
end loop.
end file.
end input program.
execute.
frequencies y1 to y10.
* 'x' is y1 to y9. 'y' is y2 to y10.
vector y=y1 to y10.
compute xbar=mean(y1 to y9).
compute ybar=mean(y2 to y10).
compute sumxy=0.
compute sumx2=0.
compute sumy2=0.
loop #i=1 to 9.
+ compute sumxy=sumxy+y(#i)*y(#i+1).
+ compute sumx2=sumx2+y(#i)*y(#i).
+ compute sumy2=sumy2+y(#i+1)*y(#i+1).
end loop.
compute corr=(sumxy/9-xbar*ybar)/sqrt((sumx2/9-xbar**2)*(sumy2/9-ybar**2)).
compute xvar=sumx2/9-xbar**2.
compute yvar=sumy2/9-ybar**2.
execute.
format xbar ybar sumxy sumx2 sumy2(f3.0) corr xvar yvar(f10.6).
drfg2008