Straightliner

Fragen und Diskussionen rund um die Arbeit mit SPSS. Für allgemeine Statistik-Themen, die nicht mit SPSS zusammenhängen, bitte das Statistik-Forum nutzen.
Antworten
nurägchen
Beiträge: 2
Registriert: 11.02.2011, 15:18

Straightliner

Beitrag von nurägchen »

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
Generalist
Beiträge: 1733
Registriert: 11.03.2010, 22:28

Beitrag von Generalist »

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 .
nurägchen
Beiträge: 2
Registriert: 11.02.2011, 15:18

Beitrag von nurägchen »

Vielen Dank an alle
Schaut schon ziemlich gut aus - werde mich morgen dransetzen und mal durchrechnen ;)
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

RE

Beitrag von drfg2008 »

Hier die Lösung (allerdings sollte ein solches Modell stochastisch sein, vielleicht fällt mir noch ein stochastisches Modell ein.


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
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

RE 2

Beitrag von drfg2008 »

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
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

RE

Beitrag von drfg2008 »

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ß
drfg2008
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

re

Beitrag von drfg2008 »

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)

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
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

re

Beitrag von drfg2008 »

so, und hier die Lösung in SPSS

DETECTANOMALY aus VAILDATEDATA, falls Lizenz vorhanden
drfg2008
drfg2008
Beiträge: 2391
Registriert: 06.02.2011, 19:58

re

Beitrag von drfg2008 »

P.S. den Autokorrelationsansatz würde ich doch eher fallen lassen.
drfg2008
Anzeige:Statistik und SPSS: Die besten Bücher
Als Buch oder E-Book - Jetzt bestellen
spss datenanalyse
SPSS - Moderne Datenanalyse - Jetzt bestellen!
statistik datenanalyse
Statistik - Der Weg zur Datenanalyse - Jetzt bestellen!
Antworten