Úvod do SASu pro Windows - Část III.
Základní metody analýzy dat v SASu
SAS je registrovaná ochranná známka SAS Institute, Inc., Cary, NC,
USA
(c) 2000 Michal Kulich, 1998 Oliver Schabenberger
1. Popisné statistiky a exploratorní
analýza
2. Testování hypotéz
1. Popisné statistiky a
exploratorní analýza
V této kapitole budeme výpočty demonstrovat na datových
souborech OSTRICE a ANKETA, které uvádíme níže.
PROC FORMAT;
VALUE dusrez
1='Urea' 2='Amm. sulf.' 3='IBDU' 4='Urea(SC)';
VALUE ospod
1='2 roky' 2='5 let' 3='8 let';
RUN;
DATA ostrice;
LABEL blok = 'Číslo pozorování'
dusik = 'Režim hnojení dusíkem'
osetr = 'Ošetření podloží'
chloro = 'Chlorofyl v listech (mg/g)';
FORMAT dusik dusrez.
osetr ospod.;
INPUT blok dusik osetr chloro @@;
DATALINES;
1 1 1 3.8 1 1 2 5.3 1 1 3 5.9
1 2 1 5.2 1 2 2 5.6 1 2 3 5.4
1 3 1 6.0 1 3 2 5.6 1 3 3 7.8
1 4 1 6.8 1 4 2 8.6 1 4 3 8.5
2 1 1 3.9 2 1 2 5.4 2 1 3 4.3
2 2 1 6.0 2 2 2 6.1 2 2 3 6.2
2 3 1 7.0 2 3 2 6.4 2 3 3 7.8
2 4 1 7.9 2 4 2 8.6 2 4 3 8.4
;
RUN;
|
PROC FORMAT;
VALUE $pohlf 'F'='Žena' 'M'='Muž';
RUN;
DATA anketa;
LABEL pohl = 'Pohlaví'
vek = 'Věk'
prijem = 'Příjem (Kč/měs.)'
r1 = 'Obliba TV Nova'
r2 = 'Obliba Auto Škoda'
r3 = 'Obliba Coca Cola';
FORMAT pohl $pohlf.;
INPUT id pohl $ vek prijem r1 r2 r3;
DATALINES;
1 F 35 17 7 2 2
17 M 50 14 5 5 3
33 F 45 6 7 2 7
49 M 24 14 7 5 7
65 F 52 9 4 7 7
81 M 44 11 7 7 7
2 F 34 17 6 5 3
18 M 40 14 7 5 2
34 F 47 6 6 5 6
50 M 35 17 5 7 5
;
RUN;
|
1.1 Výpočet
jednoduchých popisných statistik
Základní popisné statistiky počítají například procedury
MEANS, UNIVARIATE a SUMMARY, které teď postupně probereme.
1.1.1 Popisné statistiky v PROC
MEANS
Základní volání:
PROC MEANS DATA=jmsoub;
VAR var1 ... varn;
RUN;
Procedura MEANS počítá počet nechybějících hodnot, průměr, směrodatnou
odchylku, minimum a maximum každé z numerických veličin uvedených v
příkazu VAR. Nevyhovuje-li nám tato sestava, protože chceme znát i jiné
popisné statistiky, musíme vypsat klíčová slova pro všechny požadované
statistiky jako argumenty PROC MEANS. Nabídka statistik procedury MEANS s
jejich klíčovými slovy je uvedena v tabulce.
N |
počet nechybějících hodnot |
VAR |
výběrový rozptyl |
NMISS |
počet chybějících hodnot |
USS |
součet čtverců |
MEAN |
průměr |
CSS |
součet čtverců od průměru |
STD |
výb. směrodatná odchylka |
CV |
výběrový variační koeficient |
MIN |
minimum |
STDERR |
směrodatná chyba průměru |
MAX |
maximum |
T |
T statistika (MEAN/STDERR) |
RANGE |
rozpětí |
PRT |
dosažená hladina (p-hodnota) oboustranného
T-testu pro hypotézu H0: EX=0 |
SUM |
součet |
Volání PROC MEANS potom vypadá třeba takto:
PROC MEANS DATA=jmsoub NMISS MEAN STDERR T PRT;
VAR var1 ... varn;
RUN;
Vybrané statistiky lze uložit do datového souboru k dalšímu zpracování.
K tomu slouží příkaz OUTPUT:
OUTPUT OUT=vystup MEAN=prum1 prum2 prum3 VAR=rozp1 rozp2 rozp3
Příkaz OUTPUT specifikuje jméno výstupního souboru v argumentu OUT= (bude
mit jedno pozorování). Ten je následován argumenty pro jednotlivé
požadované statistiky (viz tabulka) a ke každé statistice je za znaménkem
= uveden seznam veličin výstupního souboru, do nichž se uloží hodnoty této
statistiky pro jednotlivé veličiny ze seznamu VAR. V našem konkrétním
případě budou uloženy hodnoty průměrů a výběrových rozptylů prvních tří
veličin.
Zde je příklad, jenž počítá počty chybějících hodnot, průměry a
směrodatné chyby průměrů pro veličiny VEK, PRIJEM, R1 a R2 z datového
souboru ANKETA a uloží průměry pro VEK, PRIJEM a R1 do datového souboru
VYSTUP.
PROC MEANS DATA=anketa MAXDEC=3 NMISS MEAN STDERR;
VAR vek prijem r1 r2;
OUTPUT OUT=vystup MEAN=prumvek prumprij prumr1;
RUN;
Argument MAXDEC=3 omezuje počet desetinných míst při tisku výsledků na 3.
Zde je textový výstup z PROC MEANS:
Variable Label Nmiss Mean Std Error
--------------------------------------------------------------
VEK Věk 0 40.600 2.733
PRIJEM Příjem (Kč/měs.) 0 12.500 1.360
R1 Obliba TV Nova 0 6.100 0.348
R2 Obliba Auto Škoda 0 5.000 0.577
--------------------------------------------------------------
A zde je výstup z PROC PRINT DATA=vystup;
RUN;
OBS _TYPE_ _FREQ_ PRUMVEK PRUMPRIJ PRUMR1
1 0 10 40.6 12.5 6.1
1.1.2 Popisné statistiky v PROC
UNIVARIATE
PROC UNIVARIATE se liší tím, že nabízí trochu jiné statistiky
než PROC MEANS a její textový výstup se nedá modifikovat. Její použití je
jinak obdobné:
PROC UNIVARIATE DATA=jmsoub;
VAR var1 var2 var3;
OUTPUT OUT=vystup MEAN=prum1 prum2 prum3 VAR=rozp1 rozp2 rozp3;
RUN;
Příkaz OUTPUT funguje stejně jako v PROC MEANS, ale argumenty pro výstup
statistik jsou trochu jiné (podrobnosti nebudeme uvádět).
Příklad s daty ANKETA:
PROC UNIVARIATE DATA=anketa;
VAR vek prijem r1;
OUTPUT OUT=vystup MEAN=prumvek prumprij prumr1;
RUN;
Takhle vypadá textový výstup pro veličinu VEK:
Variable=VEK Věk
Moments Quantiles(Def=5)
N 10 Sum Wgts 10 100% Max 52 99% 52
Mean 40.6 Sum 406 75% Q3 47 95% 52
Std Dev 8.643559 Variance 74.71111 50% Med 42 90% 51
Skewness -0.5408 Kurtosis -0.16791 25% Q1 35 10% 29
USS 17156 CSS 672.4 0% Min 24 5% 24
CV 21.28955 Std Mean 2.733333 1% 24
T:Mean=0 14.85366 Pr>|T| 0.0001 Range 28
Num ^= 0 10 Num > 0 10 Q3-Q1 12
M(Sign) 5 Pr>=|M| 0.0020 Mode 35
Sgn Rank 27.5 Pr>=|S| 0.0020
Extremes
Lowest Obs Highest Obs
24( 4) 44( 6)
34( 7) 45( 3)
35( 10) 47( 9)
35( 1) 50( 2)
40( 8) 52( 5)
Kromě popisných statistik, které umí i PROC MEANS, tu máme i šikmost a
špičatost, výběrové kvantily, medián, modus, extrémní pozorování a několik
testových statistik (o těch bude pojednáno jinde).
1.1.3 Popisné statistiky v PROC
SUMMARY
PROC SUMMARY funguje úplně stejně jako PROC MEANS, ale
nevytváří žádný textový výstup, pokud ji o to nepožádáme uvedením
argumentu PRINT.
1.2
Výpočet popisných statistik přes kombinace úrovní faktorových veličin
Zde si ukážeme, jak počítat popisné statistiky pro podskupiny
pozorování definované hodnotami jedné nebo více faktorových veličin a
vysvětlíme použití procedur MEANS, UNIVARIATE a TABULATE k tomuto účelu.
PROC MEANS a PROC TABULATE používají příkaz CLASS k definici skupin podle
úrovní faktorových veličin a nevyžadují tedy předchozí setřídění datového
souboru. PROC UNIVARIATE používá příkaz BY, což znamená, že data musí být
nejdřív setříděna procedurou SORT. PROC TABULATE slouží zejména k
vytváření textového výstupu ve formě složitějších tabulek s požadovanou
úpravou.
1.2.1 Tabulky popisných statistik v PROC
MEANS
Představme si, že potřebujeme spočítat průměr a směrodatnou
odchylku množství chlorofylu v listech ostřice zvlášť pro každý druh
ošetření a každý způsob hnojení dusíkem. Protože v datech OSTRICE máme tři
úrovně ošetření (OSETR) a čtyři úrovně hnojení (DUSIK), dohromady existuje
12 možných kombinací hodnot těchto dvou veličin. Pro každou z 12 takto
vytvořených skupin počítáme průměr a výběrovou směrodatnou odchylku
veličiny CHLORO. Použijeme proceduru MEANS, v níž uvedeme jména
faktorových proměnných DUSIK a OSETR v příkazu CLASS takto:
PROC MEANS DATA=ostrice N MEAN STD MAXDEC=3;
CLASS dusik osetr;
VAR chloro;
RUN;
Zde je výstup:
Analysis Variable : CHLORO Chlorofyl v listech (mg/g)
DUSIK OSETR N Obs N Mean Std Dev
---------------------------------------------------------
Urea 2 roky 2 2 3.850 0.071
5 let 2 2 5.350 0.071
8 let 2 2 5.100 1.131
Amm. sulf. 2 roky 2 2 5.600 0.566
5 let 2 2 5.850 0.354
8 let 2 2 5.800 0.566
IBDU 2 roky 2 2 6.500 0.707
5 let 2 2 6.000 0.566
8 let 2 2 7.800 0.000
Urea(SC) 2 roky 2 2 7.350 0.778
5 let 2 2 8.600 0.000
8 let 2 2 8.450 0.071
---------------------------------------------------------
Smysluplnost počítání směrodatné odchylky ze dvou pozorování teď pomiňme.
Výsledek je jinak přesně to, co jsme si přáli. Můžeme si požádat i o
jakékoli jiné statistiky, které počítá PROC MEANS
a můžeme si je nechat uschovat do souboru:
PROC MEANS DATA=ostrice MEAN VAR RANGE MAXDEC=3;
CLASS dusik osetr;
VAR chloro;
OUTPUT OUT=ostat MEAN=prumcl VAR=varcl RANGE=rozcl;
RUN;
Zde je výpis souboru OSTAT:
PROC PRINT DATA=ostat; RUN
OBS DUSIK OSETR _TYPE_ _FREQ_ PRUMCL VARCL ROZCL
1 . . 0 24 6.35417 2.12085 4.8
2 . 2 roky 1 8 5.82500 2.12786 4.1
3 . 5 let 1 8 6.45000 1.89143 3.3
4 . 8 let 1 8 6.78750 2.40411 4.2
5 Urea . 2 6 4.76667 0.77467 2.1
6 Amm. sulf. . 2 6 5.75000 0.16700 1.0
7 IBDU . 2 6 6.76667 0.85467 2.2
8 Urea(SC) . 2 6 8.13333 0.49467 1.8
9 Urea 2 roky 3 2 3.85000 0.00500 0.1
10 Urea 5 let 3 2 5.35000 0.00500 0.1
11 Urea 8 let 3 2 5.10000 1.28000 1.6
12 Amm. sulf. 2 roky 3 2 5.60000 0.32000 0.8
13 Amm. sulf. 5 let 3 2 5.85000 0.12500 0.5
14 Amm. sulf. 8 let 3 2 5.80000 0.32000 0.8
15 IBDU 2 roky 3 2 6.50000 0.50000 1.0
16 IBDU 5 let 3 2 6.00000 0.32000 0.8
17 IBDU 8 let 3 2 7.80000 0.00000 0.0
18 Urea(SC) 2 roky 3 2 7.35000 0.60500 1.1
19 Urea(SC) 5 let 3 2 8.60000 0.00000 0.0
20 Urea(SC) 8 let 3 2 8.45000 0.00500 0.1
Všimněme si, že na rozdíl od výstupu z procedury MEANS na obrazovku nyní
SAS uvedl statistiky nejen pro oněch 12 kombinací, ale i pro celý soubor a
pro jednotliné úrovně DUSIK a OSETR zvlášť. Veličina _TYPE_ uvádí, o jaký
druh statistiky se jedná (0=všechno, 1 a 2=jednotlivé úrovně faktorů,
3=kombinace 2 faktorů), veličina _FREQ_ informuje o počtu použitých
pozorování.
V proceduře MEANS lze použít i příkaz BY namísto příkazu CLASS, ale
data pak musí být setříděna a výstup vypadá trochu odlišně.
1.2.2 Tabulky popisných statistik v
PROC UNIVARIATE
Před použitím PROC UNIVARIATE musíme data nejprve setřídit
podle faktorových veličin, jež definují požadované skupiny:
PROC SORT DATA=ostrice;
BY dusik osetr;
RUN;
a potom vyvoláme proceduru UNIVARIATE s příkazem BY:
PROC UNIVARIATE DATA=ostrice;
VAR chloro;
BY dusik osetr;
OUTPUT OUT=ostat2 N=nobs MEAN=prumchl STD=stdchl;
RUN;
Textový výstup obsahuje 12 sestav popisných statistik, které v tomto
případě nejsou příliš zajímavé, protože máme málo pozorování. Výstup do
souboru OSTAT2 nám dává
OBS DUSIK OSETR NOBS PRUMCHL STDCHL
1 Urea 2 roky 2 3.85 0.07071
2 Urea 5 let 2 5.35 0.07071
3 Urea 8 let 2 5.10 1.13137
4 Amm. sulf. 2 roky 2 5.60 0.56569
5 Amm. sulf. 5 let 2 5.85 0.35355
6 Amm. sulf. 8 let 2 5.80 0.56569
7 IBDU 2 roky 2 6.50 0.70711
8 IBDU 5 let 2 6.00 0.56569
9 IBDU 8 let 2 7.80 0.00000
10 Urea(SC) 2 roky 2 7.35 0.77782
11 Urea(SC) 5 let 2 8.60 0.00000
12 Urea(SC) 8 let 2 8.45 0.07071
1.2.3 Tabulky popisných statistik v
PROC TABULATE
Procedura TABULATE vytváří tabulky popisných statistik
zformátované podle přání uživatele. Kromě specifikace požadovaných
popisných statistik, proměnných, pro něž se statistiky mají počítat a
faktorů, jež rozdělují pozorování na skupiny, vyžaduje i relativně složitý
popis formátu výsledné tabulky. Použití této procedury budeme demonstrovat
pouze na dvou příkladech, podrobnější popis je uveden v manuálu SAS
Procedures Guide.
PROC TABULATE DATA=ostrice;
CLASS dusik osetr;
VAR chloro;
TABLE dusik*osetr, (N MEAN STD)*chloro;
RUN;
Příkaz CLASS uvádí faktorové proměnné, které budou definovat skupiny
pozorování, a příkaz VAR numerické proměnné, jejichž statistiky se budou
počítat. Formát tabulky je určen příkazem TABLE. První část příkazu TABLE
popisuje řádky tabulky, které budou v našem příkladě odpovídat všem 12
kombinacím faktorů DUSIK a OSETR. Druhá část příkazu TABLE (oddělená
čárkou) udává formát sloupců. V našem případě budou ve sloupcích tři
statistiky pro proměnnou CHLORO. Jejich klíčová slova v podstatě
odpovídají těm, která jsou uvedena v tabulce u PROC
MEANS. Zde je výsledná tabulka:
---------------------------------------------------------------
| | N | MEAN | STD |
| ----------------------------------------
| |Chlorofyl v |Chlorofyl v |Chlorofyl v |
| | listech | listech | listech |
| | (mg/g) | (mg/g) | (mg/g) |
---------------------------------------------------------------
|Režim |Ošetření | | | |
|hnojení |podloží | | | |
|dusíkem | | | | |
------------------------ | | |
|Urea |2 roky | 2.00| 3.85| 0.07|
| ----------------------------------------------------
| |5 let | 2.00| 5.35| 0.07|
| ----------------------------------------------------
| |8 let | 2.00| 5.10| 1.13|
---------------------------------------------------------------
|Amm. sulf.|2 roky | 2.00| 5.60| 0.57|
| ----------------------------------------------------
| |5 let | 2.00| 5.85| 0.35|
| ----------------------------------------------------
| |8 let | 2.00| 5.80| 0.57|
---------------------------------------------------------------
|IBDU |2 roky | 2.00| 6.50| 0.71|
| ----------------------------------------------------
| |5 let | 2.00| 6.00| 0.57|
| ----------------------------------------------------
| |8 let | 2.00| 7.80| 0.00|
---------------------------------------------------------------
|Urea(SC) |2 roky | 2.00| 7.35| 0.78|
| ----------------------------------------------------
| |5 let | 2.00| 8.60| 0.00|
| ----------------------------------------------------
| |8 let | 2.00| 8.45| 0.07|
---------------------------------------------------------------
Nevýhodou procedury TABULATE je, že používá k vytváření tabulek znaky,
které nejsou součástí české znakové sady. Tato tabulka již ale byla
upravena. Teď jeden složitější příklad:
PROC TABULATE DATA=ostrice;
CLASS dusik osetr;
VAR chloro;
TABLE dusik ALL, (osetr ALL)*MEAN*chloro;
KEYLABEL ALL='Dohromady'
MEAN='Průměr';
RUN;
----------------------------------------------------------------------------
| | Ošetření podloží | |
| ---------------------------------------- |
| | 2 roky | 5 let | 8 let | Dohromady |
| -----------------------------------------------------
| | Průměr | Průměr | Průměr | Průměr |
| -----------------------------------------------------
| |Chlorofyl v |Chlorofyl v |Chlorofyl v |Chlorofyl v |
| | listech | listech | listech | listech |
| | (mg/g) | (mg/g) | (mg/g) | (mg/g) |
----------------------------------------------------------------------------
|Režim hnojení dusíkem | | | | |
------------------------ | | | |
|Urea | 3.85| 5.35| 5.10| 4.77|
----------------------------------------------------------------------------
|Amm. sulf. | 5.60| 5.85| 5.80| 5.75|
----------------------------------------------------------------------------
|IBDU | 6.50| 6.00| 7.80| 6.77|
----------------------------------------------------------------------------
|Urea(SC) | 7.35| 8.60| 8.45| 8.13|
----------------------------------------------------------------------------
|Dohromady | 5.83| 6.45| 6.79| 6.35|
----------------------------------------------------------------------------
Procedurou TABULATE je samozřejmě možné vytvářet i tabulky četností
(klíčové slovo N).
1.3 Výpočet tabulek
četností a procent
Tabulky četností a procenta počítá PROC FREQ (libovolný počet
rozměrů) a PROC TABULATE (do tří rozměrů).
1.3.1 Tabulky četností v PROC FREQ
Procedura FREQ slouží k výpočtu, výpisu a ukládání
kontingenčních tabulek. Její struktura je
PROC FREQ DATA=tabdata;
TABLES var1*var2 var3*var4 </ parametry>;
/* < zbytek jsou nepovinné příkazy > */
WEIGHT vaha;
BY klasvar;
RUN;
Příkaz TABLES obsahuje seznam požadovaných tabulek.
Například var1*var2
znamená dvourozměrnou tabulku četností podle
úrovní veličin VAR1 (řádky) a VAR2 (sloupce). Jednorozměrná tabulka by
byla prostě var1 a trojrozměrná tabulka by
se psala var1*var2*var3. Seznam tabulek lze
psát zkráceným zápisem tvaru
(var1 var2 var3)*var4, což vytvoří tři
dvourozměrné tabulky. Příkaz WEIGHT
způsobí, že tabulky nebudou obsahovat četnosti, ale součty hodnot dané
veličiny (zde VAHA). Příkaz BY působí standartně:
spočítá se jedna tabulka pro každou úroveň veličiny KLASVAR. Předchozí
setřídění dat je nutné pro použití BY.
Příkaz TABLES má několik užitečných parametrů uváděných
za lomítkem na konci řádky. Parametr OUT=stabul
vytvoří soubor STABUL a uschová do něj poslední spočtenou tabulku. Přepínač
MISSING způsobí, že chybějící hodnoty jsou
chápány jako zvláštní úroveň faktorové proměnné.
Zde je aplikace procedury FREQ na data OSTRICE:
PROC FREQ DATA=ostrice;
TABLES blok*dusik / OUT=tabul;
RUN;
Textový výstup (v tomto případě trochu nudný) dává:
TABLE OF BLOK BY DUSIK
BLOK(Číslo pozorování) DUSIK(Režim hnojení dusíkem)
Frequency|
Percent |
Row Pct |
Col Pct |Urea |Amm. sul|IBDU |Urea(SC)| Total
| |f. | | |
----------------------------------------------
1 | 3 | 3 | 3 | 3 | 12
| 12.50 | 12.50 | 12.50 | 12.50 | 50.00
| 25.00 | 25.00 | 25.00 | 25.00 |
| 50.00 | 50.00 | 50.00 | 50.00 |
----------------------------------------------
2 | 3 | 3 | 3 | 3 | 12
| 12.50 | 12.50 | 12.50 | 12.50 | 50.00
| 25.00 | 25.00 | 25.00 | 25.00 |
| 50.00 | 50.00 | 50.00 | 50.00 |
----------------------------------------------
Total 6 6 6 6 24
25.00 25.00 25.00 25.00 100.00
Ve výstupním souboru TABUL je osm pozorování:
OBS BLOK DUSIK COUNT PERCENT
1 1 Urea 3 12.5
2 1 Amm. sulf. 3 12.5
3 1 IBDU 3 12.5
4 1 Urea(SC) 3 12.5
5 2 Urea 3 12.5
6 2 Amm. sulf. 3 12.5
7 2 IBDU 3 12.5
8 2 Urea(SC) 3 12.5
Nechceme-li v naší tabulce procenta řádková, sloupcová, resp. celková,
přidáme do příkazu TABLES přepínače NOROW, NOCOL, resp. NOPERCENT. Pak
dostaneme třeba
PROC FREQ DATA=ostrice; TABLES blok*dusik / NOROW NOCOL NOPERCENT; RUN
TABLE OF BLOK BY DUSIK
BLOK(Číslo pozorování) DUSIK(Režim hnojení dusíkem)
Frequency|Urea |Amm. sul|IBDU |Urea(SC)| Total
| |f. | | |
----------------------------------------------
1 | 3 | 3 | 3 | 3 | 12
----------------------------------------------
2 | 3 | 3 | 3 | 3 | 12
----------------------------------------------
Total 6 6 6 6 24
Jak je vidět, zabránit SASu v tištění nežádoucích detailů dá někdy dost
práce.
1.3.2 Tabulky četností v PROC
TABULATE
Procedura TABULATE umožňuje sestavovat tabulky četností,
procent a popisných statistik (viz též kapitola
1.2.3). Ovládání je poměrně složité, zde se omezíme na jediný
nekomentovaný příklad.
PROC TABULATE DATA=anketa;
CLASS pohl r3;
TABLE r3*(N PCTN<pohl ALL>), pohl ALL;
KEYLABEL N='Četnost'
PCTN='Proc.'
ALL='Dohromady';
RUN;
---------------------------------------------------------------
| | Pohlaví | |
| --------------------------- |
| | Žena | Muž | Dohromady |
---------------------------------------------------------------
|Obliba | | | | |
|Coca Cola | | | | |
------------------------ | | |
|2 |Četnost | 1.00| 1.00| 2.00|
| ----------------------------------------------------
| |Proc. | 50.00| 50.00| 100.00|
---------------------------------------------------------------
|3 |Četnost | 1.00| 1.00| 2.00|
| ----------------------------------------------------
| |Proc. | 50.00| 50.00| 100.00|
---------------------------------------------------------------
|5 |Četnost | .| 1.00| 1.00|
| ----------------------------------------------------
| |Proc. | .| 100.00| 100.00|
---------------------------------------------------------------
|6 |Četnost | 1.00| .| 1.00|
| ----------------------------------------------------
| |Proc. | 100.00| .| 100.00|
---------------------------------------------------------------
|7 |Četnost | 2.00| 2.00| 4.00|
| ----------------------------------------------------
| |Proc. | 50.00| 50.00| 100.00|
---------------------------------------------------------------
1.4
Krabicové diagramy, normální diagramy a testy normality
Procedura UNIVARIATE na požádání zhotoví velmi primitivní
listové diagramy (stem and leaf plots), krabicové diagramy (box plots) a
normální diagramy (normal probability plots) anebo provede testy
normality. Obrázky se tisknou znakově do OUTPUT window (proto jsou
primitivní) pomocí argumentu PLOT. Test normality se vypíše, je-li uveden
argument NORMAL. Je-li rozsah výběru do 2000, počítá se Durbin-Watsonova
statistika, jinak Kolmogorovova-Smirnovova. Zde je příklad:
PROC UNIVARIATE DATA=ostrice PLOT NORMAL; VAR chloro; RUN;
Následuje výňatek z výpisu, výsledek testu normality (Durbin-Watsonova) je
zvýrazněn tučně.
Univariate Procedure
Variable=CHLORO Chlorofyl v listech (mg/g)
Moments Quantiles(Def=5)
N 24 Sum Wgts 24 100% Max 8.6 99% 8.6
Mean 6.354167 Sum 152.5 75% Q3 7.8 95% 8.6
Std Dev 1.456314 Variance 2.120851 50% Med 6.05 90% 8.5
Skewness 0.085636 Kurtosis -0.84535 25% Q1 5.4 10% 4.3
USS 1017.79 CSS 48.77958 0% Min 3.8 5% 3.9
CV 22.91905 Std Mean 0.297269 1% 3.8
T:Mean=0 21.37515 Pr>|T| 0.0001 Range 4.8
Num ^= 0 24 Num > 0 24 Q3-Q1 2.4
M(Sign) 12 Pr>=|M| 0.0001 Mode 5.4
Sgn Rank 150 Pr>=|S| 0.0001
W:Normal 0.939364 Pr<W 0.1623
Stem Leaf # Boxplot
8 566 3 |
8 4 1 |
7 889 3 +-----+
7 0 1 | |
6 8 1 | |
6 00124 5 *--+--*
5 669 3 | |
5 2344 4 +-----+
4 |
4 3 1 |
3 89 2 |
----+----+----+----+
Normal Probability Plot
8.75+ * *+++
| * +++
| **+*++
| *++
| ++*
6.25+ **+***
| ***
| **+*+
| +++
| ++++*
3.75+ *++ *
+----+----+----+----+----+----+----+----+----+----+
-2 -1 0 +1 +2
Lepší grafické výstupy lze vytvořit pomocí vyšších grafických procedur
modulu SAS/GRAPH (viz zvláštní text).
1.5
Krabicové diagramy přes kombinace úrovní faktorových veličin
Při současném použití příkazu BY a argumentu PLOT v PROC
UNIVARIATE se vykreslí krabicový diagram po skupinách daných kombinacemi
všech úrovní veličin uvedených v příkazu BY. Jen krátký příklad:
PROC SORT DATA=ostrice; BY dusik; RUN;
PROC UNIVARIATE DATA=ostrice PLOT;
VAR chloro;
BY dusik;
RUN;
Variable=CHLORO Chlorofyl v listech (mg/g)
|
9 +
|
|
| +-----+
8.5 + *-----*
| | |
| | |
| | + |
8 + | |
| +-----+
| +-----+
| | |
7.5 + | |
| | |
| | |
| | |
7 + | |
| | |
| *--+--* 0
| | |
6.5 + | |
| | |
| | | |
| +-----+ | |
6 + | | +-----+
| | | | |
| | *--+--* |
| | | | |
5.5 + | | |
| +-----+ +-----+
| | | |
| | |
5 + | |
| | |
| *--+--*
| | |
4.5 + | |
| | |
| | |
| | |
4 + | |
| +-----+
| |
|
3.5 +
------------+-----------+-----------+-----------+-----------
DUSIK Urea Amm. sul IBDU Urea(SC)
2. Testování hypotéz
2.1 Jednovýběrový
t-test
Jednovýběrový t-test provádí procedura UNIVARIATE automaticky
a procedura MEANS na požádání (klíčová slova T a PRT). Obě procedury
počítají oboustranný test hypotézy H0: mi=0. Chceme-li testovat
jinou střední hodnotu než nulovou, musíme nejdříve všechny hodnoty
veličiny vhodně posunout. Zde je příklad, kde chceme testovat, zda je
střední slanost řeky rovna 2,5.
DATA reka;
INPUT slanost;
DATALINES;
1.6
2.6
2.4
2.3
2.5
2.7
2.6
2.2
;
RUN;
DATA reka; SET reka;
rozdil = slanost - 2.5;
RUN;
PROC UNIVARIATE DATA=reka; VAR rozdil; RUN;
/* anebo */
PROC MEANS DATA=reka T PRT; VAR rozdil; RUN;
Zde je část výstupu z PROC UNIVARIATE (výsledky t-testu jsou zvýrazněny
tučně):
Univariate Procedure
Variable=ROZDIL
Moments Quantiles(Def=5)
N 8 Sum Wgts 8 100% Max 0.2 99% 0.2
Mean -0.1375 Sum -1.1 75% Q3 0.1 95% 0.2
Std Dev 0.350255 Variance 0.122679 50% Med -0.05 90% 0.2
Skewness -1.68436 Kurtosis 3.26575 25% Q1 -0.25 10% -0.9
USS 1.01 CSS 0.85875 0% Min -0.9 5% -0.9
CV -254.731 Std Mean 0.123834 1% -0.9
T:Mean=0 -1.11036 Pr>|T| 0.3035 Range 1.1
Num ^= 0 7 Num > 0 3 Q3-Q1 0.35
M(Sign) -0.5 Pr>=|M| 1.0000 Mode 0.1
Sgn Rank -5.5 Pr>=|S| 0.4219
T je hodnota testové statistiky, Pr>|T| je dosažená
hladina testu. Zde je výstup z PROC MEANS:
Analysis Variable : ROZDIL
T Prob>|T|
----------------------
-1.1103588 0.3035
----------------------
2.2 Párový t-test
Párový t-test není nic jiného než jednovýběrový t-test aplikovaný na rozdíl hodnot
dvou korelovaných veličin. Příklad:
DATA kukurice;
INPUT pozemek odrA odrB;
rozdil = odrA - odrB;
DATALINES;
1 48.2 41.5
2 44.6 40.1
3 49.7 44.0
4 40.5 41.2
5 54.6 49.8
6 47.1 41.7
7 46.8 51.4
;
RUN;
PROC MEANS DATA=kukurice T PRT; VAR rozdil; RUN;
Analysis Variable : ROZDIL
T Prob>|T|
----------------------
1.9830204 0.0946
----------------------
2.3 Dvouvýběrový t-test
Dvouvýběrový t-test k porovnání středních hodnot dvou výběrů
se stejným rozptylem počítá mj. procedura TTEST. Hodnoty obou výběrů musí
být v datech uloženy v jediné numerické veličině (třeba X), zatímco jiná
veličina se dvěma úrovněmi (třeba S) určuje, do kterého výběru každé
pozorování patří. T-test se provede takto:
PROC TTEST DATA=mojedata;
CLASS S;
VAR X;
RUN;
Zde je příklad:
DATA reka;
INPUT sud slanost;
DATALINES;
5 5.0
5 6.9
5 6.0
5 5.8
5 2.8
5 5.3
5 4.1
5 4.5
3 1.6
3 2.6
3 2.4
3 2.3
3 2.5
3 2.7
3 2.6
3 2.2
;
RUN;
PROC TTEST DATA=reka;
CLASS sud;
VAR slanost;
RUN;
TTEST PROCEDURE
Variable: SLANOST
SUD N Mean Std Dev Std Error Variances T DF Prob>|T|
----------------------------------------------------- ---------------------------------------
3 8 2.36250000 0.35025501 0.12383385 Unequal -5.7867 8.1 0.0004
5 8 5.05000000 1.26603995 0.44761272 Equal -5.7867 14.0 0.0000
For H0: Variances are equal, F' = 13.07 DF = (7,7) Prob>F' = 0.0031
Výsledek dvouvýběrového t-testu je vyznačen tučně. Ve sloupci
T je hodnota T-statistiky,
DF obsahuje počet stupňů volnosti
a Prob>|T| dosaženou hladinu testu.
O řádek výš je výsledek Welchova testu,
dole je F test na porovnání
rozptylů.
2.4 Welchův test (porovnání
středních hodnot za nestejného rozptylu)
Welchův test je přibližný test na porovnání středních hodnot
dvou výběrů z normálního rozdělení při nestejném rozptylu
(Behrens-Fisherův problém). Testová statistika je stejná jako u t-testu,
ale počet stupňů volnosti referenčního t-rozdělení je aproximován. Welchův
test je uveden ve standartním výstupu procedury TTEST (viz příklad).
TTEST PROCEDURE
Variable: SLANOST
SUD N Mean Std Dev Std Error Variances T DF Prob>|T|
----------------------------------------------------- ---------------------------------------
3 8 2.36250000 0.35025501 0.12383385 Unequal -5.7867 8.1 0.0004
5 8 5.05000000 1.26603995 0.44761272 Equal -5.7867 14.0 0.0000
For H0: Variances are equal, F' = 13.07 DF = (7,7) Prob>F' = 0.0031
2.5 Znaménkový test
Znaménkový test porovnává medián náhodného výběru s nulou a je
automaticky počítán v proceduře UNIVARIATE.
PROC UNIVARIATE DATA=kukurice;
VAR rozdil;
RUN;
Univariate Procedure
Variable=ROZDIL
Moments Quantiles(Def=5)
N 7 Sum Wgts 7 100% Max 6.7 99% 6.7
Mean 3.114286 Sum 21.8 75% Q3 5.7 95% 6.7
Std Dev 4.155089 Variance 17.26476 50% Med 4.8 90% 6.7
Skewness -1.40445 Kurtosis 0.865916 25% Q1 -0.7 10% -4.6
USS 171.48 CSS 103.5886 0% Min -4.6 5% -4.6
CV 133.4203 Std Mean 1.570476 1% -4.6
T:Mean=0 1.98302 Pr>|T| 0.0946 Range 11.3
Num ^= 0 7 Num > 0 5 Q3-Q1 6.4
M(Sign) 1.5 Pr>=|M| 0.4531 Mode -4.6
Sgn Rank 10 Pr>=|S| 0.1094
Hodnota testové statistiky znaménkového testu je označena M(Sign)
a dosažená hladina testu je Pr>=|M|.
2.6 Jednovýběrový Wilcoxonův test
(signed rank)
Stejně jako znaménkový test, i jednovýběrový Wilcoxonův test
porovnává medián náhodného výběru s nulou a je automaticky počítán v
proceduře UNIVARIATE.
PROC UNIVARIATE DATA=kukurice;
VAR rozdil;
RUN;
Univariate Procedure
Variable=ROZDIL
Moments Quantiles(Def=5)
N 7 Sum Wgts 7 100% Max 6.7 99% 6.7
Mean 3.114286 Sum 21.8 75% Q3 5.7 95% 6.7
Std Dev 4.155089 Variance 17.26476 50% Med 4.8 90% 6.7
Skewness -1.40445 Kurtosis 0.865916 25% Q1 -0.7 10% -4.6
USS 171.48 CSS 103.5886 0% Min -4.6 5% -4.6
CV 133.4203 Std Mean 1.570476 1% -4.6
T:Mean=0 1.98302 Pr>|T| 0.0946 Range 11.3
Num ^= 0 7 Num > 0 5 Q3-Q1 6.4
M(Sign) 1.5 Pr>=|M| 0.4531 Mode -4.6
Sgn Rank 10 Pr>=|S| 0.1094
Hodnota testové statistiky Wilcoxonova testu je označena
Sgn Rank
a dosažená hladina testu je Pr>=|S|.
2.7 Dvouvýběrový
Wilcoxonův test (rank sum)
Tento test počítá procedura NPAR1WAY s argumentem WILCOXON.
Syntaxe je jinak úplně stejná jako u
dvouvýběrového t-testu.
PROC NPAR1WAY DATA=reka WILCOXON;
CLASS sud;
VAR slanost;
RUN;
N P A R 1 W A Y P R O C E D U R E
Wilcoxon Scores (Rank Sums) for Variable SLANOST
Classified by Variable SUD
Sum of Expected Std Dev Mean
SUD N Scores Under H0 Under H0 Score
5 8 100.0 68.0 9.51490060 12.5000000
3 8 36.0 68.0 9.51490060 4.5000000
Average Scores Were Used for Ties
Wilcoxon 2-Sample Test (Normal Approximation) (with Continuity Correction of .5)
S = 100.000 Z = 3.31060 Prob > |Z| = 0.0009
T-Test Approx. Significance = 0.0048
Kruskal-Wallis Test (Chi-Square Approximation)
CHISQ = 11.311 DF = 1 Prob > CHISQ = 0.0008
Výsledek je vyznačen tučně. S je součet
pořadí přes první skupinu, Z je standartisovaná
Wilcoxonova statistika, Prob>|Z| je dosažená
hladina testu spočítaná z normální aproximace.
2.8 F-test
rovnosti dvou rozptylů
F-test rovnosti rozptylů dvou výběrů z normálního rozdělení je
automaticky prováděn procedurou TTEST. Výstup z
příkladu je zde:
TTEST PROCEDURE
Variable: SLANOST
SUD N Mean Std Dev Std Error Variances T DF Prob>|T|
----------------------------------------------------- ---------------------------------------
3 8 2.36250000 0.35025501 0.12383385 Unequal -5.7867 8.1 0.0004
5 8 5.05000000 1.26603995 0.44761272 Equal -5.7867 14.0 0.0000
For H0: Variances are equal, F' = 13.07 DF = (7,7) Prob>F' = 0.0031
Pozor na interpretaci F statistiky! SAS ji
značí F', protože se vždy jedná o podíl většího a menšího odhadu rozptylu
obou výběrů, tj.
F' =
max(s12,s22)/min(s1
2,s22),
což je vždy větší než 1. Tento test zamítá pro velké hodnoty testové
statistiky a je to test oboustranný.
2.9 Chí-kvadrát test
dobré shody
Procedura FREQ umí počítat chí-kvadrát test dobré shody při
známých pravděpodobnostech. V podstatě se jedná o testování hypotézy, že
realisace vektoru z multinomického rozdělení odpovídá danému vektoru
pravděpodobností. Test této hypotézy se vyvolá zadáním argumentu TESTP=(p1
p2 .. pk) v příkazu TABLES, kde p1 .. pn jsou konkrétní hodnoty
hypotetických pravděpodobností.
Jako příklad se podívejme na počet dětí narozených v jednotlivých
měsících (Anděl, Matematická statistika). Hypotéza je, že děti se rodí
rovnoměrně.
DATA deti;
INPUT mesic pdni pdeti;
DATALINES;
1 31 21182
2 28 19960
3 31 22787
4 30 22805
5 31 23120
6 30 21859
7 31 21367
8 31 20357
9 30 20946
10 31 20037
11 30 18728
12 31 19592
;
RUN;
PROC FREQ DATA=deti;
TABLES mesic / TESTP=(0.08493 0.07671 0.08493 0.08219 0.08493 0.08219
0.08493 0.08493 0.08219 0.08493 0.08219 0.08493);
WEIGHT pdeti;
RUN;
Příkaz WEIGHT dává SASu na vědomí, že každé pozorování vstupních dat
representuje více než jedno dítě (počet dětí je uveden ve veličině PDETI).
V argumentu TESTP musíme uvést dvanáct hodnot teoretických
pravděpodobností. Tyto hodnoty jsou 28/365, 30/365 nebo 31/365, podle
toho, o jaký měsíc se jedná. Protože SAS požaduje vypsání konkrétních
hodnot a nelíbí se mu výrazy typu 28/365, musíme si všechny
pravděpodobnosti spočítat sami, zaokrouhlit je na rozumný počet
desetinných míst a ručně vypsat. Při práci s moderním softwarovým
produktem třetího tisíciletí, jako je SAS, se prostě neobejdeme bez
kalkulačky a dosyta si užijeme bezduchého kopírování řady číslic, s tím je
třeba se smířit.
A zde máme perně vydřený výsledek:
Test Cumulative Cumulative
MESIC Frequency Percent Percent Frequency Percent
-------------------------------------------------------------
1 21182 8.4 8.5 21182 8.4
2 19960 7.9 7.7 41142 16.3
3 22787 9.0 8.5 63929 25.3
4 22805 9.0 8.2 86734 34.3
5 23120 9.1 8.5 109854 43.5
6 21859 8.6 8.2 131713 52.1
7 21367 8.5 8.5 153080 60.6
8 20357 8.1 8.5 173437 68.6
9 20946 8.3 8.2 194383 76.9
10 20037 7.9 8.5 214420 84.8
11 18728 7.4 8.2 233148 92.2
12 19592 7.8 8.5 252740 100.0
Chi-Square Test for Specified Proportions
-----------------------------------------
Statistic = 1004.104 DF = 11 Prob = 0.001
Skutečná hodnota statistiky je 1003.744, chyba vznikla zaokrouhlením
teoretických pravděpodobností.
2.10 Testování nezávislosti
v kontingenční tabulce
V proceduře FREQ můžeme testovat nezávislost v tabulce typu M
x N pomocí chí-kvadrát testu, testu poměrem věrohodností (tzv.
G2 test) anebo Fisherovým faktoriálovým testem. Stačí přidat
argumenty CHISQ případně EXACT k příkazu TABLES.
Jako příklad budeme testovat, zda postoj voličů k zákonu právě
projednávanému parlamentem (třeba zákon o zachování hmotnosti) souvisí s
jejich politickou orientací (Zvára, Štěpán: Pravděpodobnost a matematická
statistika):
DATA pruzkum;
INPUT postoj $ orient $ pocet;
DATALINES;
pro levice 4
proti levice 7
pro pravice 9
proti pravice 5
;
RUN;
PROC FREQ DATA=pruzkum;
TABLES postoj*orient / CHISQ NOROW NOCOL NOPERCENT;
WEIGHT pocet;
RUN;
V proceduře FREQ vytváříme příkazem TABLES tabulku 2 x 2 podle postoje k
navrhovanému zákonu a politické orientace. Počet pozorování v jednotlivých
políčkách tabulky je uveden v proměnné POCET, kterou zadáme do příkazu
WEIGHT. Argument CHISQ příkazu TABLES požaduje provedení testů
nezávislosti. Protože se jedná o čtyřpolní tabulku, bude automaticky
proveden i Fisherův test. Ostatní argumenty potlačují výpis procent v
tabulce. Zde je textový výstup s vyznačenými relevantními částmi:
TABLE OF POSTOJ BY ORIENT
POSTOJ ORIENT
Frequency|levice |pravice | Total
----------------------------
pro | 4 | 9 | 13
----------------------------
proti | 7 | 5 | 12
----------------------------
Total 11 14 25
STATISTICS FOR TABLE OF POSTOJ BY ORIENT
Statistic DF Value Prob
------------------------------------------------------
Chi-Square 1 1.924 0.165
Likelihood Ratio Chi-Square 1 1.948 0.163
Continuity Adj. Chi-Square 1 0.968 0.325
Mantel-Haenszel Chi-Square 1 1.847 0.174
Fisher's Exact Test (Left) 0.163
(Right) 0.964
(2-Tail) 0.238
Phi Coefficient -0.277
Contingency Coefficient 0.267
Cramer's V -0.277
Sample Size = 2
Hodnota chí-kvadrát statistiky je 1,924 a hodnota G2 statistiky
je 1,948, obojí na 1 stupni volnosti. Dosažené hladiny jsou 0,165, resp.
0,163. Dosažená hladina oboustranného Fisherova testu je 0,238.
Zde je příklad na větší řídkou tabulku. Budeme testovat, zda v datech
ANKETA spolu souvisí pohlaví
respondenta (POHL) a obliba firmy Auto Škoda (R2).
PROC FREQ DATA=anketa;
TABLES pohl*r2 / CHISQ EXACT NOROW NOCOL NOPERCENT;
RUN;
Protože se nejedná o čtyřpolní tabulku, museli jsme požádat o Fisherův
test argumentem EXACT.
TABLE OF POHL BY R2
POHL(Pohlaví) R2(Obliba Auto Škoda)
Frequency| 2| 5| 7| Total
-------------------------------------
Žena | 2 | 2 | 1 | 5
-------------------------------------
Muž | 0 | 3 | 2 | 5
-------------------------------------
Total 2 5 3 10
STATISTICS FOR TABLE OF POHL BY R2
Statistic DF Value Prob
------------------------------------------------------
Chi-Square 2 2.533 0.282
Likelihood Ratio Chi-Square 2 3.314 0.191
Mantel-Haenszel Chi-Square 1 1.920 0.166
Fisher's Exact Test (2-Tail) 0.524
Phi Coefficient 0.503
Contingency Coefficient 0.450
Cramer's V 0.503
Sample Size = 10
WARNING: 100% of the cells have expected counts less
than 5. Chi-Square may not be a valid test
SAS varuje před asymptotickými testy, protože teoretické četnosti jsou
menší než 5. Podíváme-li se na Fisherův test, vidíme, že dosažená hladina
je 0,524.
Návrat na hlavní stránku