Általános megjegyzések a feladatokhoz

Először szerepel az adatok leírása, majd utána az adatokhoz kapcsolódó kérdések találhatóak. Próbáljatok meg a kérdéseket önállóan vagy csoportokban megoldani, de a megoldásokat csak az eredmények ellenőrzésére használjátok. Ha elakadtok, akkor is próbáljátok meg a megoldást a dokumentációkban (pl. a magyar nyelvű R segítség, Biostatisztika nem statisztikusoknak c. könyv, illetve az órán kiadott segédlet) megtalálni.

A feladatok megoldása általában mindig az alábbi "menetrend" szerint történik: Először mindig elemezzük az adatainkat grafikusan! Milyen eloszlásúak a változóink? Milyen típusúak a változóink (numerikus, faktor, stb.)? Készítsük el a kérdésnek megfelelő ábrát! Gondoljuk végig, hogy az 1. pont alapján használhatunk-e paraméteres tesztet? A gyakorlaton tanultak alapján válasszuk ki az alkalmazandó teszt típusát! Végezzük el a statisztikai elemzést!

Jó szórakozást!

1. Hallgatók biometrikus adatai

Egy korábbi kurzus során adatokat gyűjtöttünk a hallgatók testmagasságáról, súlyáról, szemszínéről, valamint fejszámolási gyorsaságáról. Az adatokat a kurzuson részt vevő hallgatók gyűjtötték. A magasságot cm-ben mérték két alkalommal (magassag1 és magassag2 nevű változók). A súly értékek kg-ban szerepelnek (bevallás alapján). A szemszín értelemszerűen az adott hallgató szeme színét jelöli, összesen három csoport alakult így ki. A számolási sebesség mérése úgy történt, hogy két kétjegyű számot kellett fejben összeadni, a számoláshoz eltelt időt mértük másodpercben. Az itt található kérdések egy részét már a gyakorlaton is elemeztük, most ismétlésképpen nézzük ezeket kiegészítve néhány másik kérdéssel, amit az órán nem néztünk!

Az adatok az alábbi helyen találhatóak: http://web.unideb.hu/~lendvai/teaching/hallgatok.csv

Az adatokat elemezve válaszolj az alábbi kérdésekre!

1.1. A csoport összes egyedét tekintve, mekkora a testsúly átlaga, szórása? Mi a medián súly értéke?
1.2. A testmagasságot kétszer mérték le a hallgatók. Ábrázold az első mérést a második függvényében! Értelmezd az ábrát!
1.3. Van-e különbség a két magasság mérés között?
1.4. Készíts egy új változót magasság néven, amiben kiszámolod a két mért magasság (tehát magasság1 és magasság2) átlagát!
1.5. Van-e szignifikáns különbség a fiúk és lányok testmagassága között? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát! (Az elemzéshez és az ábrához használd az előző pontban létrehozott változót!)
1.6. Van-e szignifikáns különbség a fiúk és a lányok testsúlya között? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát!
1.7. Az összes egyedet tekintve van-e szignifikáns kapcsolat a testsúly és a magasság között? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát! (Az elemzéshez és az ábrához használd az 4. pontban létrehozott változót!)
1.8. Az összes egyedet tekintve van-e szignifikáns különbség a testsúlyban a különböző szemszínű egyedek között? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát!
1.9. Eltér-e a szemszínek eloszlása az alábbi feltételezett eloszlástól: kék 10%, zöld 10%, barna 80%? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát!
1.10. Van-e összefüggés a számolási gyorsaság és a testsúly között? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát!
1.11. Számoljunk egyfajta kondíció-indexet, ahol a testsúlyt elosztjuk a testmagassággal! Összefügg-e ez a változó a számolási gyorsasággal? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát!

2. Reggeli gabonapelyhek cukortartalma

Egy vizsgálatban megnézték, hogy mekkora egy áruház felső és alsó polcain található gabonapelyhek cukortartalma. (Az adatokat Sarah Sterling és Alex Greczek gyűjtötte 2004 decemberében a Meijer és Michigan-ben.)

Az adatokat elemezve válaszolj az alábbi kérdésekre!

2.1. Van-e különbség a felső és alsó polcon található gabonapelyhek cukortartalmában?

segítség: Az adatokat célszerű úgy átalakítani, hogy a cukortartalom egy változó legyen, és a polc magasságát (felső vagy alsó) egy külön változó, pl. "polc" tartalmazza!

3. Olimpiai aranyérmes úszási eredmények

Az alábbi adattábla az olimpiai aranyérmes férfiak 1500m-es gyorsúszásának eredményeit tartalmazza 1896-tól 2004-ig. A z adattábla változói: name: az olimpiai bajnok neve time: az olimpiai bajnok úszási ideje (mp-ben) year: az olimpia éve nationality: az olimpiai bajnok nemzetisége (az ország 3 betűs rövidítése) kontinens: melyik kontinensről származik az olimpiai bajnok.

Az adatokat elemezve válaszolj az alábbi kérdésekre!

3.1. Változott-e az egymást követő olimpiák során az úszási eredmény?
3.2. Hány olimpiai bajnok volt az egyes kontinensekről? Eltér-e ez az egyenletes eloszlástól (azaz, minden kontinens egyenlő arányban adott-e olimpiai bajnokot ebben a számban)?
3.3. Volt-e különbség az egyes kontinensek között az olimpiai bajnokok úszási idejében?
3.4. Mekkora volt az európai olimpai bajnokok közt a leggyorsabb, a leglassabb és a medián úszási eredmény?

A gyakorlati jegy megszerzéséért a 4. vagy az 5. feladatot kell megoldani, tetszés szerint lehet választani.

4. Hiperárak

Az adattábla a www.hiperarak.hu alapján készült. Különböző kategóriákban hasonlítja össze 4 országos áruházlánc áruházainak árait.

Az adatokat elemezve válaszolj az alábbi kérdésekre!

4.1. Az összes termék közül melyik áruházban lehet a legolcsóbb és melyikben a legdrágább terméket kapni? (Tehát itt egyszerűen az a kérdés, hogy az adattáblában szereplő termékek közül melyik a legolcsóbb és a legdrágább, és ezeket melyik áruház(ak)ban lehet kapni).
4.2. Mekkora a Tesco-ban kapható chips típusú termékek átlagos ára és szórása?
4.3. Az összes terméket figyelembe véve van-e szignifikáns különbség az egyes áruházak árai között?

5. Alvás

Aki egy kicsit biológiaibb példát szeretne, annak itt egy másik, érdekes adatsor, ami különböző emlősök alvási idejét tartalmazza (egyebek mellett). A változók (ezeknek csak egy részét fogjuk elemezni, de nem szedtem ki a többit, hogy ha valakit érdekel, tudjon vele játszani):

species: az állat (angol) neve body_weight: az állat testsúlya (kg-ban) brain_weight: az állat agytömege (g-ban) slowwave: slow wave sleep, "nem álmodó alvás" (óra/nap) paradox: paradoxical sleep, azaz "álmodó alvás" (óra/nap) total: slowwave + paradox, azaz az összes alvás ideje (óra/nap) lifespan: maximum élethossz (években) gestation: terhesség (nap) predation: predációs index (1-5), ahol 1 a legkisebb esély, hogy ragadozónak esik áldozatul exposure: alvás kitettségi index (1-5), azaz mennyire veszélyeztetett az állat alvás közben, ahol 1 a legkevésbé veszélyeztetett (pl. egy védett üreg mélyén alvó állat) danger: összesített veszély index (1-5), ahol 1 a legkisebb veszély

Az adatokat elemezve válaszolj az alábbi kérdésekre!

5.1. Melyik állat tölti a legtöbb és legkevesebb időt alvással egy nap? (A teljes alvással töltött időt nézzük!)
5.2. Összefügg-e szignifikáns mértékben a nem álmodó alvással töltött idő a predációs veszélyeztetettséggel?
5.3. Van-e szignifikáns összefüggés a 10 évnél rövidebb életű fajok álmodó és nem álmodó alvással töltött idejében?

Megoldások

1. Hallgatók biometrikus adatai

Az adatok beolvasása:

> hallgatók <- read.csv(file = "http://web.unideb.hu/~lendvai/teaching/hallgatok.csv", header = TRUE, sep = ";")
1.1. A csoport összes egyedét tekintve, mekkora a testsúly átlaga, szórása? Mi a medián súly értéke?

Először nézzük meg az adatokat grafikusan! Ha pl. van valami elírás az adatokban (valaki pl. 75 kg helyett 750 kg), akkor az azonnal kiderül.

> plot(hallgatók$súly)
Gyakorlas-002.jpg

Nézzük a kérdésre adott választ numerikusan:

> mean(hallgatók$súly)
[1] 63.69231
> sd(hallgatók$súly)
[1] 16.98717
> median(hallgatók$súly)
[1] 58
1.2. A testmagasságot kétszer mérték le a hallgatók. Ábrázold az első mérést a második függvényében! Értelmezd az ábrát!
> plot(magasság1 ~ magasság2, data = hallgatók, ylab = "testmagasság (cm) első mérés", xlab = "testmagasság (cm) második mérés")
Gyakorlas-004.jpg

Az összefüggés nyilván szoros, az eltérést a mérési hiba okozza.

1.3. Van-e különbség a két magasság mérés között?

Ehhez nem árt az adatokat átalakítani.

> mag <- c(hallgatók$magasság1, hallgatók$magasság2)
> mérés <- c(rep(1, length(hallgatók$magasság1)), rep(2, length(hallgatók$magasság2)))
> t.test(mag ~ mérés, paired = TRUE, var.equal = TRUE)
Paired t-test

data: mag by mérés
t = -0.0804, df = 12, p-value = 0.9373
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-2.162416 2.008570
sample estimates:
mean of the differences
-0.07692308

A paired = TRUE specifikáció azért kell, mert itt páros mérésekről van szó, azaz a két minta nem független, hisz ugyanazokat az embereket mértük le kétszer.

A két minta között messze nincs különbség (p = 0.937).

1.4. Készíts egy új változót magassag néven, amiben kiszámolod a két mért magasság (tehát magasság1 és magasság2) átlagát!
> hallgatók$magasság <- (hallgatók$magasság1 + hallgatók$magasság2)/2
1.5. Van-e szignifikáns különbség a fiúk és lányok testmagassága között? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát! (Az elemzéshez és az ábrához használd az előző pontban létrehozott változót!)
> plot(magasság ~ nem, data = hallgatók, main = "Ivari dimorfizmus a testmagasságban", xlab = "Nem", ylab = "Testmagasság (cm)")
Gyakorlas-007.jpg

Ábrázolhatjuk ezeket az adatokat oszlopdiagrammon is. Ehhez először kiszámoljuk az átlag magasságot nemenként:

> mag.fiúk <- mean(hallgatók$magasság[hallgatók$nem == "fiú"])
> mag.lányok <- mean(hallgatók$magasság[hallgatók$nem == "lány"])

Majd ezeket összefűzzük, és elnevezzük az értékeket:

> mag.fiúlány <- c(mag.fiúk, mag.lányok)
> names(mag.fiúlány) <- c("fiú", "lány")

Ugyanezt megtehetjük egyszerűbben is a tapply paranccsal. A két megközelítés ugyanazt az eredményt adja:

> mag.fl <- tapply(hallgatók$magasság, hallgatók$nem, mean)
> mag.fl
fiú lány
180.2500 164.5714
> mag.fiúlány
fiú lány
180.2500 164.5714

Kiszámoljuk az adatok standard hibáját (standard error, SE):

> mag.SE <- tapply(hallgatók$magasság, hallgatók$nem, sd)/sqrt(length(hallgatók$magasság))

Jöhet az oszlopdiagram:

> library(gplots)
> barplot2(mag.fl, plot.ci = TRUE, ci.u = mag.fl + mag.SE, ci.l = mag.fl, xlab = "Nem", ylab = "Testmagasság (cm)", ylim = c(0,
+ 200))
Gyakorlas-012.jpg

Nézzük meg, hogy milyen a magasság adatok eloszlása!

> hist(hallgatók$magasság, ylab = "Gyakoriság", xlab = "Testmagasság (cm)")
Gyakorlas-013.jpg

Az eloszlás normálnak tűnik, persze a kevés adat miatt kicsit "foghíjas". Tehát használhatunk paraméteres tesztet.

Két csoport különbségét t-próbával elemezhetjük:

> t.test(magasság ~ nem, data = hallgatók, var.equal = TRUE)
Two Sample t-test

data: magasság by nem
t = 5.8985, df = 11, p-value = 0.0001033
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
9.82822 21.52892
sample estimates:
mean in group fiú mean in group lány
180.2500 164.5714

Gyakorlásképp írjuk le a nullhipotézist és az alternatív hipotézist:

H0: A fiúk és a lányok testmagassága nem különbözik. HA: A fiúk és a lányok testmagassága különbözik.

A p érték jóval kisebb, mint 0.05, ezért a nullhipotézist elvetjük. Az eredményeket így prezentálhatjuk:

"A vizsgált mintában a fiúk és a lányok testmagassága szignifikánsan különbözött (t = 5.898, df = 11, p < 0.001)."

1.6. Van-e szignifikáns különbség a fiúk és a lányok testsúlya között? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát!

Ez ugyanez, mint fent, csak a súlyra Tehát: ábrát készítünk, megnézzük az adatok eloszlását, és ha lehet, t-próbával elemezzük az adatokat (mivel két független csoportot hasonlítunk össze).

> plot(súly ~ nem, data = hallgatók, xlab = "Nem", yab = "Súly (kg)")
Gyakorlas-015.jpg
> hist(hallgatók$súly)
Gyakorlas-016.jpg

Az eloszlás nagyobb mintában valószínűleg normál lenne, itt sem vészes az eltérés. Csinálhatjuk a t-próbát (gyakorlásképp), de azért megnézzük a nem-paraméteres párját is, a Mann-Whitney U-tesztet, hogy hogy kell csinálni.

> t.test(súly ~ nem, data = hallgatók)
Welch Two Sample t-test

data: súly by nem
t = 4.019, df = 5.773, p-value = 0.007544
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
9.999665 41.905097
sample estimates:
mean in group fiú mean in group lány
77.66667 51.71429

U-test:

> wilcox.test(súly ~ nem, data = hallgatók, paired = FALSE)
Wilcoxon rank sum test with continuity correction

data: súly by nem
W = 42, p-value = 0.003318
alternative hypothesis: true location shift is not equal to 0
1.7. Az összes egyedet tekintve van-e szignifikáns kapcsolat a testsúly és a magasság között? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát! (Az elemzéshez és az ábrához használd az 4. pontban létrehozott változót!)

Mivel itt két folytonos változó kapcsolatára vagyunk kíváncsiak, scatterplot-ot készítünk és korreláció analízist végzünk:

> plot(súly ~ magasság, data = hallgatók, xlab = "Magasság (cm)", ylab = "Súly (kg)")
Gyakorlas-019.jpg

Azt, hogy a kapcsolat szignifikáns-e elemezhetjük korreláció analízissel:

> cor.test(hallgatók$magasság, hallgatók$súly)
Pearson's product-moment correlation

data: hallgatók$magasság and hallgatók$súly
t = 5.8603, df = 11, p-value = 0.0001092
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.6134770 0.9606346
sample estimates:
cor
0.8702897

vagy lineáris modellel (lineáris regresszió):

> lin.mod1 <- lm(súly ~ magasság, data = hallgatók)
> summary(lin.mod1)
Call:
lm(formula = súly ~ magasság, data = hallgatók)

Residuals:
Min 1Q Median 3Q Max
-14.293 -5.285 -1.125 3.507 18.539

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -208.4551 46.5025 -4.483 0.000927 ***
magasság 1.5840 0.2703 5.860 0.000109 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 8.739 on 11 degrees of freedom
Multiple R-squared: 0.7574, Adjusted R-squared: 0.7354
F-statistic: 34.34 on 1 and 11 DF, p-value: 0.0001092
1.8. Az összes egyedet tekintve van-e szignifikáns különbség a testsúlyban a különböző szemszínű egyedek között? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát!

Itt azt kérdezzük, hogy több csoport átlaga között van-e szignifikáns eltérést, varianciaanalízist (ANOVA) végzünk. Az adatelemzést itt is az adatok ábrázolásával kezdjük:

> plot(súly ~ szem, data = hallgatók, xlab = "Szemszín", ylab = "Súly (kg)")
Gyakorlas-022.jpg

Az egyes csoportok változatossága között nagy a különbség, ez itt amiatt van, hogy az adatsor nagyon pici, de ezzel most nem foglalkozunk. Az elemzés hasonlóan történne egy nagyobb adattáblán is. Gyakorlásként ajánlom az alábbi, lényegesen nagyobb adatsort, amin számos hasonló elemzést el lehet végezni, ráadásul a mi adatsorunkhoz képest egy csomó érdekes változót tartalmaz: http://tinyurl.com/3ytcdbo

Visszatérve a mi kis adatsorunkhoz, először nézzük meg, hogy a szemszín változó faktorként van-e kódolva

> is.factor(hallgatók$szem)
[1] TRUE

Akkor jöhet a lineáris modell (ANOVA), az elemzés szintaxisa így néz ki:

> lin.mod2 <- lm(súly ~ szem, data = hallgatók)
> anova(lin.mod2)
Analysis of Variance Table

Response: súly
Df Sum Sq Mean Sq F value Pr(>F)
szem 2 227.8 113.88 0.352 0.7116
Residuals 10 3235.0 323.50

A különböző szemszínű hallgatók súlya nem különbözik egymástól szignifikáns mértékben (F2,10 = 0.352, p = 0.711).

1.9. Eltér-e a szemszínek eloszlása az alábbi feltételezett eloszlástól: kék 10%, zöld 10%, barna 80%? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát!

Nézzük először az adatok grafikus ábrázolását! Ez lehetséges kördiagrammal (általában nem javasolt ábratípus):

> pie(table(hallgatók$szem)/length(hallgatók$szem))
Gyakorlas-025.jpg

Talán jobb, ha oszlopdiagrammot készítünk:

> barplot(table(hallgatók$szem))
Gyakorlas-026.jpg

Mégjobb, ha a konkrét gyakoriságok helyett az arányokat ábrázoljuk és mellette feltűntetjük a várt értékeket

> tapasztalt <- table(hallgatók$szem)/length(hallgatók$szem)
> várt <- c(0.8, 0.1, 0.1)
> barplot(rbind(tapasztalt * 100, várt * 100), beside = T, ylim = c(0, 100), names.arg = c("barna", "kék", "zöld"), legend.text = c("tapasztalt",
+ "várt"), axis.lty = 1, ylab = "Szemszínek aránya (%)")
Gyakorlas-027.jpg

Először tehát létrehoztunk egy vektort tapasztalt névvel, ami kiszámítja, hogy mekkora az egyes szemszínek aránya. (A table funkció kiszámolja, hogy hány egyed van szemszínenként, majd ezt elosztottuk a teljes mintahosszal, amit a length fügvénnyel határoztunk meg.) Majd a feladatban megadott értékeknek megfelelően létrehoztunk egy várt nevű vektort.) A barplot függvény már ismerős, az új elem a legend.text amivel az oszlopok magyarázatát adjuk meg, az axis.lty = 1 pedig csak annyit csinál, hogy húz egy x tengelyt, de ez már csak "csicsa". :-)

Egy várt (elméleti) és egy tapasztalt eloszlás közötti különbséget Chi-négyzet teszttel elemezhetjük. A szintaxis a következő:

> chisq.test(x = table(hallgatók$szem), p = várt)
Chi-squared test for given probabilities

data: table(hallgatók$szem)
X-squared = 7.0962, df = 2, p-value = 0.02878

Itt egy figyelmeztető üzenetet kapunk, ami megint csak az alacsony mintaszám miatt van. Ha a tapasztalt gyakoriságok valamelyike kisebb, mint 5, ezt az üzenetet kapjuk. De ezt kiküszöbölhetjük a sim = TRUE szintaxissal, ami a p értéket egy szimulációs eljárással becsüli, ez a konkrét esetben megbízhatóbb:

> chisq.test(x = table(hallgatók$szem), p = várt, sim = TRUE)
Chi-squared test for given probabilities with simulated p-value (based on 2000 replicates)

data: table(hallgatók$szem)
X-squared = 7.0962, df = NA, p-value = 0.04048

Az eredmény szerint a szemszínek tapasztalt eloszlása eltér a 80-10-10%-tól.

1.10. Van-e összefüggés a számolási gyorsaság és a testsúly között? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát!
> plot(számolás ~ súly, data = hallgatók, xlab = "Súly (kg)", ylab = "Fejszámolási gyorsaság (mp)")
Gyakorlas-030.jpg

Van egy kilógó adatpontunk, ami befolyásolhatja az eredményt (bár az ábra alapján valószínűleg nem fogja). Mindenesetre biztosabb nem paraméteres korreláció analízist végezni, amit a method = "spearman" kiegészítéssel tudunk megtenni.

> cor.test(hallgatók$súly, hallgatók$számolás, method = "spearman")
Spearman's rank correlation rho

data: hallgatók$súly and hallgatók$számolás
S = 382.0497, p-value = 0.8722
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
-0.04958697

A fejszámolás sebessége és a testsúly között nincs összefüggés (r = -0.049, p = 0.872).

1.11. Számoljunk egyfajta kondíció-indexet, ahol a testsúlyt elosztjuk a testmagassággal! Összefügg-e ez a változó a számolási gyorsasággal? Ábrázold az eredményeket és közöld a hozzá tartozó statisztikát!

Kondíció index számolása:

> hallgatók$kondi <- hallgatók$súly/hallgatók$magasság
> plot(számolás ~ kondi, data = hallgatók, xlab = "Kondíció index", ylab = "Fejszámolási gyorsaság (mp)")
Gyakorlas-033.jpg

Ugyanaz érvényes, mint az előző feladatnál:

> cor.test(hallgatók$kondi, hallgatók$számolás, method = "spearman")
Spearman's rank correlation rho

data: hallgatók$kondi and hallgatók$számolás
S = 388, p-value = 0.8348
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
-0.06593407

Szintén nincs összefüggés.

2. Reggeli gabonapelyhek cukortartalma

2.1. Van-e különbség a felső és alsó polcon található gabonapelyhek cukortartalmában?

Az adatok beolvasása:

> pehely <- read.csv(file = "http://web.unideb.hu/~lendvai/teaching/cereals.csv", header = TRUE, sep = ";")

Ahogy azt a feladatban jeleztem, érdemes az adatokat átalakítani.

> cukor <- c(pehely$felso, pehely$also)
> polc <- c(rep("felso", length(pehely$felso)), rep("also", length(pehely$also)))
> polc <- factor(polc)
> plot(cukor ~ polc)
Gyakorlas-037.jpg

Nézzük az adatok eloszlását:

> hist(cukor)
Gyakorlas-038.jpg

Úgy tűnik, hogy a két csoportban eltér az adatok varianciája, biztosabb így a var.equal = T opciót kihagyni.

> t.test(cukor ~ polc)
Welch Two Sample t-test

data: cukor by polc
t = 5.5579, df = 164.601, p-value = 1.08e-07
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
2.223412 4.673664
sample estimates:
mean in group also mean in group felso
12.522222 9.073684

A különbség magasan szignifikáns: tehát az áruházakban az alacsonyabb cukortartalmú gabonapelyheket helyezik a felső polcokra. El lehet rajta gondolkozni, vajon miért.

3. Olimpiai aranyérmes úszási eredmények

Az adatok beolvasása:

> uszas <- read.csv(file = "http://web.unideb.hu/~lendvai/teaching/uszas.csv", sep = ";", header = TRUE)
3.1. Változott-e az egymást követő olimpiák során az úszási eredmény?

(Most csinálunk egy változót felirat névvel, hogy ezt ne kelljen később újra beírni, ha egy másik ábrát készítünk. Vegyük észre, hogy így az ábra ylab részében nem idézőjel közé tesszük a szöveget, hanem az objektumunkra hivatkozunk!)

> felirat <- "Aranyérmes ideje (mp)"
> plot(time ~ year, data = uszas, xlab = "Olimpia éve", ylab = felirat)
Gyakorlas-041.jpg

Úgy tűnik, van összefüggés. Lássunk rá egy statisztikai elemzést. Mivel itt két folytonos változónk van, ezért ezt megint csak korreláció elemzéssel vagy lineáris regresszióval végezhetjük.

Nézzük előbb az adatok eloszlását, vajon normál eloszlásúak-e?

> hist(uszas$time, xlab = felirat)
Gyakorlas-042.jpg

A változó eloszlása balra eltolt, nem normál, valamint a legelső adat eléggé kilóg a többi közül, ezért talán itt is biztonságosabb a Spearman-féle nem paraméteres korrelációt végezni:

> cor.test(uszas$year, uszas$time, method = "spearman")
Spearman's rank correlation rho

data: uszas$year and uszas$time
S = 5457.433, p-value = 1.118e-08
alternative hypothesis: true rho is not equal to 0
sample estimates:
rho
-0.865789

Az elemzés erős negatív összefüggést mutat ami magasan szignifikáns (r = -0.865, p < 0.001). Tehát idővel az úszási eredmények egyre jobbak lettek.

(Meg kell jegyezni, hogy az összefüggés látszólag nem lineáris, és pontosan erre is számítanánk, így itt a korreláció elemzés nem a legjobb módszer. Ráadásul az adatpontok nem is feltétlenül függetlenek, ezért itt finomabb statisztikai modellekkel is lehetne ezt elemezni, ami figyelembe veszi a nem-linearitást és az adatok nem függetlenségét, de ez már a "haladó" kurzus része lenne. :-) Elégedjünk most meg annyival, hogy a nullhipotézist, miszerint nincs összefüggés az évek és az úszási eredmények között, elvethetjük. A korrelációs modellünk szerint az úszási eredmények idővel csökkennek. )

3.2. Hány olimpiai bajnok volt az egyes kontinensekről? Eltér-e ez az egyenletes eloszlástól (azaz, minden kontinens egyenlő arányban adott-e olimpiai bajnokot ebben a számban)?

Ez könnyű:

> table(uszas$kontinens)
Afrika Amerika Ausztrália Európa
5 4 4 13

Az elemzést Chi-négyzet teszttel végezhetjük:

> chisq.test(x = table(uszas$kontinens))
Chi-squared test for given probabilities

data: table(uszas$kontinens)
X-squared = 8.7692, df = 3, p-value = 0.03252

(Mivel az egyenletes eloszlástól való eltérést teszteljük a várt eloszlást nem is kell megadni, a program automatikusan ehhez képest számolja a tesztet).

Úgy tűnik tehát, hogy az olimpiai bajnokok a véletlentől eltérő arányban jönnek az egyes kontinensekről, Európa pl. láthatóan több bajnokot adott.

3.3. Volt-e különbség az egyes kontinensek között az olimpiai bajnokok úszási idejében?

Lássunk rá egy ábrát!

> plot(time ~ kontinens, data = uszas, xlab = "kontinens", ylab = felirat)
Gyakorlas-046.jpg

Az látszik, hogy az amerikaiak a leglassabbak, és az európaiak is a lassabbak egy kicsit, mint az afrikaiak és az ausztrálok. Vajon szignifikáns ez a különbség? Ezt variancia analízissel teszteljük.

> uszas.model1 <- lm(time ~ kontinens, data = uszas)
> summary(uszas.model1)
Call:
lm(formula = time ~ kontinens, data = uszas)

Residuals:
Min 1Q Median 3Q Max
-12.323 -6.932 -1.930 4.893 19.700

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 218.160 4.113 53.047 < 2e-16 ***
kontinensAmerika 35.340 6.169 5.729 9.2e-06 ***
kontinensAusztrália 2.390 6.169 0.387 0.7022
kontinensEurópa 10.463 4.839 2.162 0.0418 *
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 9.196 on 22 degrees of freedom
Multiple R-squared: 0.6377, Adjusted R-squared: 0.5883
F-statistic: 12.91 on 3 and 22 DF, p-value: 4.459e-05
> anova(uszas.model1)
Analysis of Variance Table

Response: time
Df Sum Sq Mean Sq F value Pr(>F)
kontinens 3 3275.0 1091.66 12.909 4.459e-05 ***
Residuals 22 1860.4 84.57
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Ez az összefüggés szignifikáns, tehát van statisztikai különbség az egyes kontinensek aranyérmeseinek idejében. A summary tábla azt mutatja, hogy Afrikához képest a többi kontinens eredménye eltér-e (csak azért veszi a függvény Afrikát referenciának, mert ábácé sorrendben ez van legelől, de szükség esetén ezt át lehet állítani). Az látszik, hogy Amerika és Európa úszói is lassabbak az Afrikaiaknál. Az anova parancs pedig a faktor összes szintjét figyelembe véve egyetlen p értéket ad, hogy a kontinensek különböznek-e. Ez is alátámasztja azt, hogy igen. Mielőtt azonban elkeserednénk (vagy épp fellelkesednénk), fel kell tennünk a kérdést, hogy vajon nem lehet-e a dolog mögött az, hogy az európai aranyérmesek régebben nyertek, amikor még az úszási idők hosszabbak voltak, az afrikaiak meg mostanában, amikor már jobb eredményeket úsznak? Nézzük meg!

Ehhez jelöljük a különböző kontinensekről származó versenyzőket külön jellel. Ezt a plot függvényben a pch argumentum módosításával tudjuk megtenni. De akár színezhetjük is a col argumentum módosításával. Utána a legend fügvénnyel egy jelmagyarázatot adunk.

> kont <- as.numeric(uszas$kontinens)
> plot(time ~ year, data = uszas, xlab = "Olimpia éve", ylab = felirat, pch = kont, col = kont)
> legend("topright", legend = levels(uszas$kontinens), pch = 1:4, col = 1:4)
Gyakorlas-048.jpg

Jól látszik, hogy az amerikaiak csak a XIX. század végén és a XX. század elején nyertek ebben a számban olimpiát! Tehát ez magyarázhatja a kontinensek közötti különbséget. Ennek vizsgálatához kontrollálnunk kell arra, hogy melyik évben tartották az olimpiát (amiről már az előbb kiderítettük, hogy számít az úszási eredményben):

> uszas.model2 <- lm(time ~ year * kontinens, data = uszas)
> summary(uszas.model2)
Call:
lm(formula = time ~ year * kontinens, data = uszas)

Residuals:
Min 1Q Median 3Q Max
-6.8892 -2.3124 -0.4357 3.2270 6.5264

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.205e+02 3.141e+02 0.702 0.491687
year -1.181e-03 1.578e-01 -0.007 0.994109
kontinensAmerika 4.643e+03 9.909e+02 4.686 0.000184 ***
kontinensAusztrália 4.211e+02 4.367e+02 0.964 0.347660
kontinensEurópa 6.003e+02 3.256e+02 1.844 0.081748 .
year:kontinensAmerika -2.421e+00 5.183e-01 -4.670 0.000190 ***
year:kontinensAusztrália -2.137e-01 2.210e-01 -0.967 0.346346
year:kontinensEurópa -3.031e-01 1.638e-01 -1.851 0.080685 .
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 4.498 on 18 degrees of freedom
Multiple R-squared: 0.9291, Adjusted R-squared: 0.9015
F-statistic: 33.69 on 7 and 18 DF, p-value: 4.36e-09
> anova(uszas.model2)
Analysis of Variance Table

Response: time
Df Sum Sq Mean Sq F value Pr(>F)
year 1 3796.5 3796.5 187.6697 5.821e-11 ***
kontinens 3 523.1 174.4 8.6187 0.0009245 ***
year:kontinens 3 451.8 150.6 7.4443 0.0019133 **
Residuals 18 364.1 20.2
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Az eredmények azt mutatják, hogy a kontinens és az év hatása szignifikáns interakcióban van egymással. Ez azt jelenti, hogy bár az általános trend az, hogy a későbbi olimpiákon gyorsabbak az úszók (year: F1, 18 = 187.669, p < 0.001), és különbség van a kontinensek között (F3, 18 = 8.619, p < 0.001), az egyes kontinenseken az évek hatása más és más (year:kontinens interakció, F3, 18 = 7.444, p = 0.002) (kerekítve). Tehát az illesztett egyenes meredeksége más és más a különböző kontinensen: míg az amerikaiak a modern olimpiák elején nyertek ebben a számban, ott az idők gyorsan javultak, így az összefüggés erősen negatív, az afrikai úszók az utóbbi évtizedekben törtek fel, de náluk már nem látható az évekkel a javulás. Az alábbi ábra szemlélteti ezt:

Gyakorlas-051.jpg
Warning
Végezetül: bár ez az elemzés már többet mond, mint már korábban említettem, ez az elemzés még mindig nem teljesen korrekt, mert a lineáris variancia analízis számos fontos feltétele sérül, de erre most a bevezető kurzusban nem tértünk ki. Bonyolultabb statisztikai eljárásokkal ezeket az elemzéseket lehet tovább finomítani, de nekünk most ennyi bőven elég.
3.4. Mekkora volt az európai olimpai bajnokok közt a leggyorsabb, a leglassabb és a medián úszási eredmény?

Ez így a végére megint könnyű.

> boxplot(uszas$time[uszas$kontinens == "Európa"], xlab = "Európai úszók", ylab = felirat)
Gyakorlas-052.jpg

Szám szerint a leggyorsabb:

> max(uszas$time[uszas$kontinens == "Európa"])
[1] 246.2

Leglassabb:

> min(uszas$time[uszas$kontinens == "Európa"])
[1] 216.3

Medián:

> median(uszas$time[uszas$kontinens == "Európa"])
[1] 229.8

4. Hiperárak

Ezt a megoldást nyilván nem mutatom meg :-)

Viszont, akit esetleg érdekel, itt látható, hogy hogy készítettem az adatokat.

A cél, a hiperarak.hu oldalon feltűntetett adatok alapján meghatározni, hogy van-e szignifikáns különbség az ott szerepeltetett négy áruház árai között.

Mivel az adatok nem érhetők el valamilyen "adatbázis barát" táblázat formában, az adatokat ki kellett másolni az egyes lapokról. Mivel az összes árat túl munkaigényes lett volna bemásolni, így első lépésben véletlen mintát vettünk az oldal által felsorolt kategóriákból. Az oldalon 7 kategória volt található, ezeken belül további alkategóriák. Először tehát létrehoztam egy listát, ami tartalmazza azt, hogy az egyes kategóriákban hány alkategória szerepel:

> kategoriak <- list(1, 1:6, 1:9, 1:8, 1:16, 1:8, 1:2)

Majd mindegyikből véletlenszerűen kiválasztunk egyet, aminek az árait elemezni fogjuk.

beállítjuk a véletlenszám generátort, hogy mindenki ugyanazt az eredményt kapja:

> set.seed(1)

majd kisorsoljuk a vizsgálandó alkategóriákat:

> unlist(lapply(kategoriak, function(x) sample(x, 1)))
[1] 1 3 6 8 4 8 2

A sós kategóriában a "készétel" alkategória lett kisorsolva, de az oldalon ehhez az alkategóriához csak két ár tartozik, így ez nem alkalmas az elemzésre, választunk egy másik kategóriát, hátha itt több szerencsével (nagyobb mintaszámmal) járunk:

> set.seed(2)
> sample(kategoriak[[3]], 1)
[1] 2

Az így készült adatokat Excelbe másoltam, eltávolítottam a szóközöket, a "Ft"-okat és a "*"-okat meg a "-"-eket. Az adatfile-t beolvassuk az R-be:

> arak1 <- read.csv("http://web.unideb.hu/~lendvai/teaching/Hiperarak.csv", header = T, sep = ";")

Első körben ki kell szedni azokat az adatokat, ahol nincs minden áruházhoz adat:

> arak2 <- arak1[!is.na(arak1$Auchan) & !is.na(arak1$Tesco) & !is.na(arak1$Interspar) & !is.na(arak1$Cora), ]

Utána átalakítjuk a file-t, hogy az elemzéseknek megfelelő formátumban legyen:

> ár <- c(arak2$Auchan, arak2$Tesco, arak2$Interspar, arak2$Cora)
> hossz <- dim(arak2)[1]
> bolt <- c(rep("Auchan", hossz), rep("Tesco", hossz), rep("Interspar", hossz), rep("Cora", hossz))
> termék <- rep(arak2$alkategoria, 4)
> árak <- data.frame(ár, bolt, termék)
> save(árak, file = "hiperarak.Rdata")

Jó munkát!