Matematiska institutionen Chalmers Tekniska Högskola och Göteborgs Universitet

Statistisk databehandling ht 1995

Demonstration 4: SPSS

Demonstrationen bygger på en (SAS-) laboration utvecklad av lektor Ziad Taib vid CTH.

Del 1. Undersökning av räkbestånd med SPSS

1. Inledning

Idén till uppgiften kommer från: B. Bergström “Demographic changes in a Pandalus borealis (Kröyer) population in connection with deep water renewal in a shallow silled fjord.”

Fem år i rad (1985-1989) har fem räkor fångats både före och efter vattenutbytet i Gullmarsfjorden. Räkornas storlek mättes och utgör ett gott mått på deras ålder. Data består sådeles av tio stickprov om vardera fem observationer. Man är intresserad av två frågor:

(1) Händer det någonting i samband med vattenutbytet som rubbar den demografiska balansen hos räkbeståndet? (2) Är räkpopulationen demografiskt stabil från år till år?

Datamaterialet finns i (ASCII-) filen D4-fil1.dat i directory /users/mdstud/sdb95. Filen är organiserad i fyra kolumner och har följande principiella utseende:

\begin{matrix}1 & 1 & 85 & … \\ ⋮ & ⋮ & ⋮ & ⋮ \\ 5 & 1 & 85 & … \\ 6 & 1 & 86 & … \\ ⋮ & ⋮ & ⋮ & ⋮ \\ 25 & 1 & 89 & … \\ 26 & 2 & 85 & … \\ ⋮ & ⋮ & ⋮ & ⋮ \\ 50 & 2 & 89 & … \end{matrix}

Den första kolumnen numrerar observationerna och i den andra anger koden 1 att observationen gjorts före vattenutbytet medan kod 2 betyder att den gjorts efter. Den tredje kolumnen anger vilket år observationen gjorts och den fjärde innehåller mätdata.

Mha några olika statistiska metoder prövas hypoteserna inga skillnader föreligger mellan storleksfördelningarna före och efter vattenutbytet och inga skillnader föreligger mellan olika år. Vi använder SPSS Motif Interface som är ett av flera sätt att köra SPSS.

2. Inläsning av datamaterialet

Kopiera först datafilen D4-fil1.dat till aktuellt arbetsområde mha kommandot

cp /users/mdstud/sdb95/D4-fil1.dat D4-fil1.dat

Starta sedan SPSS med UNIX-kommandot spss. En Startup Preferences dialog box visas. Klicka OK (med vänstra musknappen) för att acceptera “default” inställningar.

Efter stund visas SPSS Data Editor- och SPSS Output-fönstren.

Vi börjar med att läsa in filen D4-fil1.dat till SPSS. Klicka därför File (i Datafönstret) och sedan Read ASCII Data (i [File]-menyn).

I [Read ASCII Data File]-fönstrets [Files]-underfönster namnges alla *.dat-filer i aktuellt arbetsområde (dat är “default” extension för ASCII-filer): Leta reda på (ev behöver vertikalpilarna användas) och klicka D4-fil1.dat . Välj Freefield (variabler åtskilda med blanktecken) som filformat genom att klicka Freefield i [File Format]- underfönstret.

Det är nu dags att definiera variabler: [Define Freefield Variables]-fönstret erhålles genom att klicka Define . Där väljes Name och Data Type för våra fyra variabler. Klicka först i [Name]-underfönstret. Mata in namnet id och “döp” första variablen genom att klicka Add . Döp sedan i tur och ordning andra, tredje och fjärde variablen till saesong, aar resp laengd mha analogt förfarande. Våra variabler är numeriska (dvs ej “character”- värda string-variabler), så “default”-Data Type (Numeric) behöver ej ändras.

De fyra variablernas namn visas i [Defined Variables]-underfönstret följda av symbolen * som indikerar typen Numeric: string-variabler indikeras (An) där heltalet n är (maximala) längden i antal “characters”. Avsluta variabeldefinitionen genom att klicka OK .

Nu visas de första raderna av datamaterialet i SPSS Data Editor-fönstret. Då de tre första variablerna är heltal är det missvisande att ange dem med två decimaler (“default” för typen Numeric). Vi ändrar detta för id:

Gör först id till “aktuell variabel” (om den inte är det) genom att klicka i den svarta rutan ovanför kolumnen för id (första kolumnen). Klicka sedan Data + Define Variable . I [Define Variable]-fönstrets [Change Setting]-underfönster klickar vi Type och

ändrar sedan i [Define Variable Type]-fönstret Width till 2 och Decimal Places till 0.

Klicka sedan Continue och (då [Define Variable]-fönstret återkommer) OK .

Ändra på analogt sätt saesong och aar till Numeric1.0 resp Numeric2.0.

3. Envägsanalys av fråga (1): Händer det någonting i samband med vattenutbytet?

Vi skall undersöka om det finns signifikant skillnad mellan (de 25) laengd-värdena med saesong=1 och de med saesong=2. Vi använder t-test och Kruskall-Wallis test.

För t-test klicka Statistics + Compare Means + Independent Samples T Test . I

[Independent Samples T Test]-fönstret föreslås aar som variabelval. Ändra till laengd genom att först klicka på nedåtpilen (två gånger) och sedan “highlighta” laengd (med ett klick). Välj laengd som den variabel vars värden skall testas genom att klicka övre > : Valet konfirmeras genom att [Test Variable(s)]-underfönstret visar laengd. Välj Grouping Variable genom att först klicka fram saesong i underfönstret längst upp till vänster och sedan “highlighta” saesong och klicka undre > .

De värden för saesong som skall användas måste specificeras (valet är inte självklart om antalet värden är fler än två). Klicka därför Define Groups . I [Define Groups]-fönstret väljes Use specified value och sedan 1 som värde i [Group 1]-underfönstret och 2 i [Group 2]-underfönstret. Klicka sedan Continue + OK .

T-testen körs nu och resultatet p=0.143 visas i Output-fönstret.

Kruskal-Wallis test fås genom att klicka Statistics + Nonparametric Tests +

 K Independent Samples .
Välj laengd som Test Variable och saesong som Grouping Variable i [Tests for

Several Independent Samples]-fönstret. De saesong-värden som skall användas måste

anges. Klicka därför Define Range . I [Several Independent Samples:  Define

Range]-fönstret väljes 1 och 2 som Minimum resp Maximum. (Hypotetiska observationer med saesong-värdet 3 exkluderas då från undersökningen.) Klicka Continue och välj Test Type Kruskal-Wallis H (troligen “default”). Efter ett OK fås p-värdet 0.1538.

4. Envägsanalys av fråga (2): Är räkpopulationen stabil från år till år?

Vi skall här jämföra inverkan av fler än två “faktorer” (det finns fem) och t-test byts mot envägs variansanalys. Kruskall-Wallis ickeparametriska alternativ behålles.

Gör Statistics + ANOVA Models + Simple Factorial . Välj laengd som Depen-

dent variabel och aar som Factor i [Simple Factorial ANOVA]-fönstret. Klicka sedan

 Define Range och välj 85 (Minimum) - 89 (Maximum) i [Simple Factorial ANOVA:

Define Range]-fönstret. Avslutning med Continue + OK ger signifikansen p=0.000.

Gör Statistics + Nonparametric Tests + K Independent Samples för Kruskal-

Wallis test. I [Tests for Several Independent Samples]-fönstret kan “gamla” val finnas kvar men de försvinner om man klickar Reset . Välj laengd som Test Variable och aar som Grouping Variable. (Om Reset ej utnyttjades måste gamla val avlägsnas från Grouping Variable-listan medelst “highlight”-ning följt av < .) Välj 85

som Minimum och 89 som Maximum i [Several Independent Samples:  Define Range]-

fönstret. Efter det vanliga Continue + OK fås resultatet p=0.000.

5. Flervägsanalys av fråga (1)

Vid analysen av skillnader mellan olika år (fråga 2) erhölls klar signifikans. Så var ej fallet vid analysen av säsongens inverkan (fråga 1). Avsaknaden av signifikans kan bero på att saesong ej inverkar på fördelningen för laengd men också på att saesong i och för sig inverkar men att detta döljs av slumpeffekter. Det andra alternativet inträffar vid för små datamaterial, men också då klara effekter av saesong döljes av ännu större effekter orsakade av variabeln aar. I det senare fallet kan en tvåvägsanalys hjälpa.

Klicka Statistics + ANOVA Models + Simple Factorial . Välj laengd som Depen-

dent variabel och både aar och saesong som Factor(s). Välj området 85 - 89 för aar och 1 - 2 för saesong. Som tidigare blir aar signifikant med p=0.000. Även saesong blir nu (med välvillig avrundning) “en-stjärnigt” signifikant med p=0.053.

6. Avslutning och alternativ till SPSS Motif Interface

Det är lämpligt “spara” datamaterialet som en SPSS Data File: Då slipper man göra om variabeldefinitioner etc om materialet utnyttjas i en framtida SPSS-körning.

Klicka File + Save As . Mata in D4-fil1.sav i [Save As Data File]-fönstrets

[Selection]-underfönster. (File Format skall vara SPSS.) Klicka sedan OK och allt är klart. På liknande sätt kan innehållet i Output-fönstret sparas.

Avsluta SPSS-körningen med File + Exit . Om utskriften inte sparades frågar SPSS om vi inte vill spara: Klicka Yes , mata in D4.lst i [Save As !SPSS Output]-fönstrets [Selection]-underfönster och klicka OK . SPSS-körningen avslutas nu.

Trötta på allt klickandet kan det vara intressant att skriva ut filen spss.jnl.

DATA LIST
FILE='/users/mdstud/sdb95/lab_grupper/sdb95-?/D4-fil1.dat' FREE /id

* saesong * aar * laengd * .
EXECUTE.
PRINT FORMATS id (F2).
PRINT FORMATS saesong (F1).
PRINT FORMATS aar (F2).
T-TEST
GROUPS=saesong(1 2)
/MISSING=ANALYSIS
/VARIABLES=laengd
/CRITERIA=CIN(.95) .
NPAR TESTS
/K-W=laengd BY saesong(1 2)
/MISSING ANALYSIS.
ANOVA
VARIABLES=laengd
BY aar(85 89)
/MAXORDERS ALL
/METHOD UNIQUE
/FORMAT LABELS .
NPAR TESTS
/K-W=laengd BY aar(85 89)
/MISSING ANALYSIS.
ANOVA
VARIABLES=laengd
BY aar(85 89) saesong(1 2)
/MAXORDERS ALL
/METHOD UNIQUE
/FORMAT LABELS .

Denna kommandosekvens är (för SPSS) ekvivalent med det arbete vi utfört ovan mha SPSS Motif Interface. Det går att “göra om” arbetet med en sk “batch”-körning i SPSS Batch Mode. Detta utföres med UNIX-kommandot

spss -m spss.jnl

SPSS-körningar mha SPSS Motif Interface sparas (i kommandoform) i spss.jnl. Nya körningar blir “appended” till ev gammalt innehåll i spss.jnl. Man bör efter varje SPSSkörning antingen radera (om den ej behövs mer) eller byta namn på spss.jnl: Annars fås snart en spss.jnl-fil innehållande många körningar som det blir svårt att hitta i.

“Batch”-körning med egenhändigt (editor-) skrivna “batch”-filer är förbehållet kunniga användare säkra på SPSS kommandosyntax och på att ej göra programmeringsfel. Fördelen är förstås att man kan göra något annat medan själva SPSS-körningen pågår.

Ett annat alternativ till SPSS Motif Interface är en SPSS Prompted Session. Nu är körningen interaktiv fast med kommandon istf menyer. De kommando som användes är samma som (de som ges alla på en gång) vid “batch”-körning.

En SPSS Prompted Session startas med UNIX-kommandot spss -m. Pröva att göra om analyserna ovan med detta arbetssätt. (Använd kommandon från spss.jnl.) En SPSS Prompted Session avslutas med kommandot FINISH. Viktigast för dig är dock “escape”-funktionen Ctrl-C för att avbryta pågående felaktiga beräkningar.

Besläktad med SPSS Prompted Session är en sk SPSS Manager Session (spss +m). Här köres SPSS från en editor vilket har sina fördelar. Editorn är dock primitiv och liknar den som utnyttjades av “gamla” SAS (tre fönster etc).

Del 2. Aidstest med SPSS

1. Inledning

Man vill aidstesta en population med N individer. Vid individuell testning behövs N test vilket blir kostsamt. Alternativt kan man dela befolkningen i k grupper med n individer i varje grupp (antag att N = n×k), ta blodprov på varje individ, och samla proven från alla individer i en grupp i en blodpöl. Sedan testas varje pöl. Om ett test är negativt behövs inga fler test i pölen (/gruppen). Om testet är positivt testar man alla individer i pölen.

Låt p vara andelen smittade individer i populationen, och antag att p < 1 − 2^{−1/2}. Låt vidare I vara antalet positiva grupper och X antalet smittade individer i en typisk grupp.

Låt C=“totala antalet nödvändiga test”. Vår uppgift är att för några olika givna p-värden bestämma det n-värde som minimerar E{C}/N. (En analytisk lösning är svår.)

2. Teoretiska beräkningar

Man ser lätt att X är Bin(n, p)-fördelad. Därför blir

P {“en typisk grupp är positiv” } = P {X ≥1} = 1 − (1−p)^{n}.

Det följer att I är Bin(k, 1−(1−p)^{n})-fördelad. Alltså har vi

E{C}/N = E{k+I ×n}/N = 1/n + 1 − (1−p)^{n}.

Vi inför funktionen F (x, p) = 1/x + 1 − (1−p)^{x} och skall alltså för givna p-värden finna de n-värden som minimerar F (n, p).

3. Fortsatta teoretiska beräkningar (överkurs)

Eftersom p < 1 − 2^{−1/2} och x ln(x) är kontinuerlig gäller att

ln (1−p) > ln(2^{−1/2}) = \frac{1}{2} ln(\frac{1}{2}) ⇒ ln (1−p) > (\frac{1}{2} −ε) ln(\frac{1}{2} −ε) för något ε∈(0, \frac{1}{2}).

Om vi definierar K ≡ −[ln(1−p)]/(\frac{1}{2} −ε) gäller då att

x_{0} ≡ −K/ ln(1−p) = 1/(\frac{1}{2} −ε) > 2

F (x_{0}, p) = −[ln(1−p)]/K +1−(1−p)^{−K/ ln(1−p)} = (\frac{1}{2}−ε)+1−e^{−K} > (\frac{1}{2}−ε)+1−e^{ln( \frac{1}{2}−ε)} = 1.

Sammanfattat gäller att

F (1, p) = 1+p > 1 = \frac{1}{2} + 1 − (1−(1−2^{−1/2}))^{2} > F (2, p) < 1 < F (x_{0}, p) och x_{0} >2.

Eftersom lim_{x→∞} F (x, p) = 1 följer att derivatan (∂/∂x)F (x, p) byter tecken minst två gånger i intervallet x ∈ (0, ∞). (Derivatan måste vara negativ för något x ∈ [1, 2], positiv för något x∈[2, x_{0}] och negativ för något x∈[x_{0}, ∞).) Det gäller vidare att

(∂/∂x)F (x, p) = −x^{−2} − (1−p)^{x} ln(1−p) = 0
⇔ x^{−2} = (1−p)^{x}[− ln(1−p)]
⇔ g(x) ≡ 2 ln(x) + x ln(1−p) + ln[− ln(1−p)] = 0.

Men här är g′′(x) = −2x^{−2} < 0 så att g är konkav. Därför finns högst två x-värden för vilka g(x)=0 och därmed högst två x-värden för vilka (∂/∂x)F (x, p)=0.

Vi har visat att derivatan (∂/∂x)F (x, p) byter tecken precis två gånger för x ∈ (0, ∞). Eftersom lim_{x→0^{+}} F (x, p) = +∞ måste derivatans teckenväxlingar vara − + −, och eftersom lim_{x→∞} F (x, p) = 1 kan högst två av dessa teckenväxlingar inträffa innan x=2.

Sammanfattat kommer F (x, p) någonstans efter x=2 att växa över värdet 1 och vidare mot ett lokalt maximum. Därefter avtar F (x, p) för att då x → ∞ närma sig värdet 1 ovanifrån (ty derivatan är negativ för stora x-värden).

Låt n_{0} ≥ 2 vara det första n-värdet för vilket F (n_{0}, p) < F (n_{0}+1, p). Ett sådant n-värde existerar enligt ovan [ty annars når F aldrig över värdet F (2, p) som ju är mindre än 1.]

Det måste gälla att F (2, p)≥F (n_{0}, p) [ty annars hade F (n, p)<F (n+1, p) inträffat redan för något n-värde mindre än n_{0}]. Vidare börjar F (x, p) växa senast vid x = n_{0} +1 och börjar sedan inte avtaga förrän värdet 1 passerats “för gott”. Eftersom 1 > F (2, p) ≥ F (n_{0}, p) < F (n_{0}+1, p) enligt ovan följer att F (n, p) tar sitt minsta värde för n=n_{0}!

4. Minimering av E{C}/N mha SPSS

Det optimala n-värdet bestäms genom att jämföra F (2, p) med F (3, p), F (3, p) med F (4, p) osv tills för första gången F (n, p)<F (n+1, p); detta n minimerar E{C}/N. Proceduren utföres för p-värdena i filen /users/mdstud/sdb95/D4-fil2.dat med utseende

0.1 0.05 0.04 0.03 0.02 0.01 0.005 0.004 0.003 0.002 0.001 0.0005 0.0004 0.0003 0.0002 0.0001

Förse SPSS-programmet nedan med lämpliga uttryck för f1 och f2 (så att det bestämmer optimala n-värden): x^{y} skrives x**y i SPSS. Kör sedan programmet. (Nedan visas en SPSS Prompted Session; i filen /users/mdstud/sdb95/D4-del2.jnl finns programmet utan “promptar” lämpat för SPSS Batch Mode.)

SPSS> INPUT PROGRAM.
SPSS> DATA LIST FILE='/users/mdstud/sdb95/D4-fil2.dat' FREE / prob (F5.4).
SPSS> NUMERIC n (F6.0) f1 (F13.8) f2 (F13.8).
SPSS> COMPUTE n = 0.
SPSS> COMPUTE logp = LN(prob).
SPSS> SET MXLOOPS = 1000.
SPSS> LOOP.
SPSS> COMPUTE n = n + 1.
SPSS> COMPUTE f1 = .................
SPSS> COMPUTE f2 = .................
SPSS> END LOOP IF (f1 LT f2).
SPSS> PRINT / prob n f1.
SPSS> END INPUT PROGRAM.
SPSS> SET HIGHRES=OFF.
SPSS> PLOT /PLOT logp WITH n.