8. Ályktanir um talnabreytur
Í þessum kafla munum við skoða aðferðir til að kanna ályktanir um meðaltöl og dreifni talnabreyta. Tilgátur rannsakenda miðast oft að því að því að kanna meðaltöl, oftar en ekki að bera tvö meðaltöl saman. Áður en það er gert er þó ávallt gott (oft nauðsynlegt) að kanna hvort breytileiki í þýðunum/breytunum sem við erum að rannsaka sé svipaður.
Við byrjum á að kanna mun á dreifni í tveimur (var.test()
) eða
fleiri normaldreifðum þýðum (bartlett.test()
). Við vindum okkur svo
í að framkvæma tilgátupróf og smíða öryggisbil fyrir meðaltöl í einu eða
tveimur þýðum. Ef úrtak er nægjanlega stór má ætíð framkvæma slík próf
með z-prófi og sé úrtakið lítið má nota t-próf ef breytan er
normaldreifð. T-prófið er íhaldssamara en z-prófið, þ.e.a.s. ef við
framkvæmum bæði t-próf og z-próf á sömu gögnunum þá mun t-prófið
hafa minni villulíkur. Því er hægt að réttlæta notkun t-prófs alltaf
þegar skilyrði fyrir z-próf eru uppfyllt. Gætið ykkar að það gildir ekki
í hina áttina. Því eru t-próf innbyggð í flest tölfræðiforrit, þar með
talið R, en z-próf eru minna notuð. Viljum við kanna meðaltöl í fleirum
en tveimur þýðum er það gert með einþátta fervikagreiningu en hún er
umfjöllunarefni kafla 9.
8.1. Ályktanir um dreifni
8.1.1. Dreifni í tveimur þýðum
8.1.1.1. var.test()
Athugið
Inntak: nöfn á tveimur talnabreytum eða nafn á talnabreytu og flokkabreytu
Úttak: gildi á prófstærð, p-gildi, öryggisbil og fleira
Helstu stillingar: alternative, conf.level
Forkröfur prófs: Normaldreifing
Við mötum var.test()
aðferðina á mismunandi hátt eftir því hvort
gögnin okkar séu á löngu eða víðu sniði (sjá kafla 2.7).
Algengast er að gögn séu á löngu sniði en þá inniheldur ein breyta
mælingar á talnabreytunni og gildin á annarri breytu gefa til kynna
hvaða hópi hver og ein mæling tilheyrir. Hins vegar geta gögnin verið á
víðu sniði þar sem búið er að skipta talnabreytunni upp í tvær breytur,
eina fyrir hvorn hóp.
Gerum nú ráð fyrir að við höfum normaldreifða breytu mælda í tveimur
þýðum og látum \(\sigma_1^2\) tákna dreifni þýðis 1 og
\(\sigma_2^2\) tákna dreifni þýðis 2. Gerum fyrst ráð fyrir að
mælingarnar séu vistaðar á víðu sniði, í breytunum
breyta1
og breyta2
. Til að kanna hvort dreifni þýðanna sé mismunandi
notum við:
var.test(breyta1,breyta2)
Ef við erum aftur á móti með mælingarnar okkar á löngu sniði þar sem
mælingarnar okkar eru geymdar í breytunni maeling
og flokkabreytan
(hopur
) inniheldur gildi sem gefa til kynna í hvaða flokki
mælingarnar tilheyra mötum við aðferðina með:
var.test(maeling~hopur)
Núlltilgátan er: \(H_0: \sigma^2_1 = \sigma^2_2\), en með
stillingunni alternative
ráðum við gagntilgátunni.
stilling |
gagntilgáta |
---|---|
alternative=“two.sided” |
\(H_1: \sigma^2_1 \neq \sigma^2_2\) |
alternative=“greater” |
\(H_1: \sigma^2_1 > \sigma^2_2\) |
alternative=“less” |
\(H_1: \sigma^2_1 < \sigma^2_2\) |
Viljum við kanna hvort dreifni í ferðatíma sé mismunandi á milli þeirra sem koma gangandi í skólann og þeirra sem gera það ekki (takið eftir að gögnin eru á löngu sniði):
var.test(konnun$ferdatimi_skoli~konnun$ferdamati_skoli=="Gangandi / skokkandi")
##
## F test to compare two variances
##
## data: konnun$ferdatimi_skoli by konnun$ferdamati_skoli == "Gangandi / skokkandi"
## F = 5.4739, num df = 166, denom df = 33, p-value = 2.875e-07
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 3.053460 8.912866
## sample estimates:
## ratio of variances
## 5.473898
Úr úttakinu má lesa m.a. eftirfarandi:
Gildið á prófstærðinni: \(f\) = 5.4739
p-gildið: 2.875e-07
Öryggisbilið: 95 percent confidence interval: \([3.053460, 8.912866]\)
Við sjáum að p-gildið er minna en 0.05 svo við höfnum núlltilgátunni og drögum þá ályktun að munur sé á dreifni ferðatíma eftir því hvort farið sé gangandi eða ekki. Við sjáum líka að 95% öryggisbil fyrir hlutfallið á dreifninni er \([3.053460, 8.912866]\). Hlutlausa ástandið er að hlutfallið sé 1 (því þá er dreifnin jöfn í báðum hópum). Takið eftir að öryggisbilið inniheldur ekki töluna 1 í samræmi við að við höfnum núlltilgátunni.
8.1.2. Dreifni í fleiri þýðum
8.1.2.1. bartlett.test()
Athugið
Inntak: nöfn á talnabreytu og flokkabreytu
Úttak: gildi á prófstærð, p-gildi, öryggisbil og fleira
Forkröfur prófs: Normaldreifing
Þegar þýðin/hóparnir eru fleiri en tveir má nota bartlett.test()
aðferðina. Við þurfum að mata aðferðina með vigri sem inniheldur
mælingarnar okkar og annan vigur sem tilgreinir hvaða hópi mælingarnar
tilheyra. Við notum svo bartlett.test()
aðferðina til að kanna hvort
munur sé á dreifni hópanna. Við mötum aðferðina með
bartlett.test(maeling ~ hopur)
Viljum við kanna hvort dreifni ferðatíma sé ólík á milli einhverra tveggja ferðamáta gerum við það með:
bartlett.test(konnun$ferdatimi_skoli~konnun$ferdamati_skoli)
##
## Bartlett test of homogeneity of variances
##
## data: konnun$ferdatimi_skoli by konnun$ferdamati_skoli
## Bartlett's K-squared = 31.33, df = 4, p-value = 2.622e-06
Við sjáum að gildið á prófstærðinni er \(31.33\) og p-gildið er \(2.622e-06\). P-gildið er minna en 0.05 og því höfnum við núlltilgátunni og ályktum að dreifnin sé misjöfn í einhverjum tveimur hóp.
8.2. Ályktanir um meðaltöl
8.2.1. Ályktanir um meðaltöl
8.2.1.1. t.test()
Athugið
Inntak: nöfn á einni eða tveimur talnabreytum eða nafn á talnabreytu og flokkabreytu
Úttak: gildi á prófstærð, p-gildi, öryggisbil og fleira
Helstu stillingar: paired, mu, alternative, conf.level
Forkröfur prófs: Meðaltöl normaldreifð, þ.e. mörg úrtök eða normaldreifð gögn
T-próf eru framkvæmd með skipuninni t.test()
. Hana má nota nota til
að draga ályktanir um meðaltöl eins þýðis, samanburð tveggja þýða jafnt
og samanburð paraðra mælinga, allt eftir því á hverju hún er mötuð og
hvaða stillingar eru gefnar. Fyrst munum við sjá hvernig skipunin er
notuð til að draga ályktanir um meðaltal þýðis. Að því loknu sjáum við
hvernig við berum saman meðaltöl tveggja þýða og að lokum berum við
saman paraðar mælingar.
8.2.2. Ályktanir um eitt meðaltal
Þegar skipunin t.test()
er mötuð með einungis einni breytu
framkvæmir hún t-próf fyrir eitt meðaltal. Aðrar stillingar eru:
mu
: Við prófum tilgátuprófið \(H_0: \mu =\)mu
.mu
er því viðmiðunargildi núlltilgátunnar.alternative
: Við gefum skipuninaalternative="two.sided"
ef gagntilgátan er tvíhliða,alternative="greater"
ef gagntilgátan er \(\mu > \mu_0\) ogalternative="less"
ef gagntilgátan er \(\mu < \mu_0\). Sjálfgefið er að hafa tvíhliða gagntilgátu.conf.level
: Þar tilgreinum við hvert öryggið (og þá um leið villulíkurnar) á að vera fyrir tilgátuprófið og öryggisbilið. Sjálfgefið er að hafa öryggið \(1-\alpha\) = 0.95.
Sjálfgefið er að kanna núlltilgátuna: \(H_0: \mu=0\). Slíkur
samanburður er óáhugaverður ef við viljum t.d. kanna ferðatíma nemenda í skólann
því líklega búa mjög fáir nemendur í háskólabíó. Könnum frekar hvort ferðatíminn
sé frábrugðinn 20 og tilgreinum það með stillingunni mu
.
t.test(konnun$ferdatimi_skoli, mu=20)
##
## One Sample t-test
##
## data: konnun$ferdatimi_skoli
## t = -0.57532, df = 200, p-value = 0.5657
## alternative hypothesis: true mean is not equal to 20
## 95 percent confidence interval:
## 17.46685 21.38887
## sample estimates:
## mean of x
## 19.42786
Í úttakinu eru fólgnar gífurlegar upplýsingar. Við fáum:
Prófstærðina: t = -0.57532
Fjölda frígráða: 200
p-gildið: \(0.5657\)
Öryggisbilið, með örygginu tilgreindu: 95 percent confidence interval: \([17.46685, 21.38887]\)
Úrtaksmeðaltalið: mean of x 19.42786
8.2.3. Ályktanir um mismun tveggja meðaltala
Þegar draga á ályktanir um mismun meðaltala tveggja þýða \(\mu_1-\mu_2\) og þegar framkvæma á tilgátupróf fyrir paraðar mælingar geta gögnin okkar verið á mismunandi formi. Annars vegar geta gögnin verið á löngu sniði, þar sem að ein breyta inniheldur mælingarnar á talnabreytunni og önnur breyta tilgreinir hvaða hópi hver og ein mæling tilheyrir. Algengast er að gögn séu geymd á slíku sniði og eru gögnin um ferðatíma og máta dæmi. Hins vegar geta gögnin verið á víðu sniði þar sem búið er að skipta talnabreytunni upp í tvær breytur, eina fyrir hvorn hóp.
Við mötum t.test()
aðferðina á mismunandi vegu eftir því á hvaða
sniði gögnin eru. Enn fremur er hægt að gefa eftirfarandi stillingar
mu
: Við prófum tilgátuprófið \(H_0: \mu_1 - \mu_2 =\)mu
.mu
er því viðmiðunargildi núlltilgátunnar.conf.level
: Þar tilgreinum við hvert öryggið (og þá um leið villulíkurnar) á að vera fyrir tilgátuprófið og öryggisbilið. Sjálfgefið er að hafa öryggið \(1-\alpha\) = 0.95.alternative
: Við gefum skipuninaalternative="two.sided"
ef gagntilgátan er tvíhliða,alternative="greater"
ef gagntilgátan er \(\mu_1 - \mu_2 > \delta\) ogalternative="less"
ef gagntilgátan er \(\mu_1 - \mu_2 < \delta\). Sjálfgefið er að hafa tvíhliða gagntilgátu.
Segjum sem svo að við viljum bera saman fyrri púls nemenda eftir kynjum. Þar sem ferðatímagögnin eru á löngu sniði gefum við skipunina:
t.test(konnun$ferdatimi_skoli~konnun$ferdamati_skoli=='Gangandi / skokkandi')
##
## data: konnun$ferdatimi_skoli by konnun$ferdamati_skoli == "Gangandi / skokkandi"
## t = 9.5068, df = 118.32, p-value = 2.889e-16
## alternative hypothesis: true difference in means between group FALSE and group TRUE is not equal to 0
## 95 percent confidence interval:
## 11.28187 17.21830
## sample estimates:
## mean in group FALSE mean in group TRUE
## 21.838323 7.588235
Í úttakinu eru fólgnar gífurlegar upplýsingar. Við fáum:
Prófstærðina: t = 9.5068
Fjölda frígráða: 118.32
p-gildið: 2.889e-16
Öryggisbilið, með örygginu tilgreindu: 95 percent confidence interval: \([11.28187,17.21830]\)
Úrtaksmeðaltölin: 21.838323, 7.588235
Séu gögnin á víðu sniði er t.test()
mötuð með breytunum tveimur sem
bera á saman. Í þessu tilviki komum við ferðatímagögnunum á vítt snið með
aðstoð skipunarinnar pivot_wider
, sem kynnt var í kassa
2.7.1.5.
ferdirvitt <- konnun %>% mutate(fotgangandi=(ferdamati_skoli=="Gangandi / skokkandi"))
%>% pivot_wider(names_from=fotgangandi,
values_from=ferdatimi_skoli, names_prefix="Gangandi_")
Athugið að ef við hefðum ekki notað stillinguna names_prefix
hefðum við fengið dálkanöfnin
TRUE
og FALSE
en það eru frátekin lykilorð í R. Við hefðum þó geta nálgast dálkana
með því að nota gæsalappir eða úrfellingarmerki, t.d. "TRUE"
.
Hérna framkvæmum við sama t-prófið með skipuninni:
t.test(ferdirvitt$Gangandi_FALSE, ferdirvitt$Gangandi_TRUE)
##
## Welch Two Sample t-test
##
## data: ferdirvitt$Gangandi_FALSE and ferdirvitt$Gangandi_TRUE
## t = 9.5068, df = 118.32, p-value = 2.889e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## 11.28187 17.21830
## sample estimates:
## mean of x mean of y
## 21.838323 7.588235
8.2.4. Ályktanir um mismun fleiri meðaltala
Eins og fjallað hefur verið um má nota z- og t-próf til að kanna mun á meðaltölum í tveimur þýðum. Viljum við kanna mun á meðaltölum í fleiri en tveimur þýðum notum við einþátta fervikagreiningu en hún er umfjöllunarefni kafla 9.
8.2.5. Ályktanir um mismun meðaltala paraðra mælinga
Þegar t-próf er framkvæmt fyrir mismun paraðra mælinga er skipunin
t.test()
mötuð með stillingunni:
paired=TRUE
Annars er skipunin mötuð á nákvæmlega sama hátt og í kafla 8.2.3 þegar borin eru saman tvö meðaltöl.
Þegar t-próf er framkvæmt til að bera saman mismun paraðra mælinga er enn fremur hægt að gefa aðferðinni eftirfarandi stillingar:
mu
: Við prófum tilgátuprófið \(H_0: \mu_d=\)mu
.mu
er því viðmiðunargildi núlltilgátunnar.conf.level
. Þar tilgreinum við hvert öryggið (og þá um leið villulíkurnar) á að vera fyrir tilgátuprófið og öryggisbilið. Sjálfgefið er að hafa öryggið \(1-\alpha\) = 0.95.alternative
: Við gefum skipuninaalternative=”two.sided”
ef gagntilgátan er tvíhliða,alternative=”greater”
ef gagntilgátan er \(\mu_d > \delta\) ogalternative=”less”
ef gagntilgátan er \(\mu_d < \delta\). Sjálfgefið er að hafa tvíhliða gagntilgátu.conf.level
: Þar tilgreinum við hvert öryggið (og þá um leið villulíkurnar) á að vera fyrir tilgátuprófið og öryggisbilið. Sjálfgefið er að hafa öryggið \(1-\alpha\) = 0.95.
Í púlsgögnunum liggur beint við að bera saman fyrri og seinni púls þeirra nemenda sem að hlupu í eina mínútu. Einnig væri áhugavert að kanna mun á fyrri og seinni. Byrjum á því að búa til tvær minni gagnatöflur, eina fyrir þá nemendur sem hlupu og aðra fyrir þá sem hlupu ekki.
pulshljop <- filter(puls, inngrip=='hljop')
pulskyrr<- filter(puls, inngrip=='sat_kyrr')
Könnum tilgátuna að púlsinn sé frábrugðinn fyrir og eftir krónukastið fyrir þá sem hlupu. Athugið að núna eru pöruðu mælingarnar tvær geymdar í tveimur dálkum og því eru gögnin á víðu sniði með því tilliti. Því mötum við skipunina á eftirfarandi hátt:
t.test(pulshljop$fyrriPuls, pulshljop$seinniPuls, paired=TRUE)
##
## Paired t-test
##
## data: pulshljop$fyrriPuls and pulshljop$seinniPuls
## t = -19.421, df = 179, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -28.40310 -23.16357
## sample estimates:
## mean of the differences
## -25.78333
Í úttakinu sjáum við:
Prófstærðina: t = \(-19.421\)
Fjölda frígráða: 179
p-gildið: \(6.1948544\times 10^{-46}\)
Öryggisbilið, með örygginu tilgreindu: 95 percent confidence interval: \(-28.4031\), \(-23.1636\)
Úrtaksmeðaltal mismunanna: mean of the differences \([-28.4031,-23.1636]\)
Við höfnum því núlltilgátunni og fullyrðum að munur sé á fyrri og seinni púls þeirra nemenda sem hlupu í eina mínútu.
Berum því næst saman púls þeirra nemenda sem sátu kyrrir á meðan hinir púluðu.
t.test(pulskyrr$fyrriPuls, pulskyrr$seinniPuls, paired=TRUE)
##
## Paired t-test
##
## data: pulskyrr$fyrriPuls and pulskyrr$seinniPuls
## t = -0.22089, df = 273, p-value = 0.8253
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -0.7597236 0.6064389
## sample estimates:
## mean of the differences
## -0.07664234
Hér er p-gildið \(0.825344\) og þar af leiðandi getum við ekki hafnað núlltilgátunni og megum því ekki draga ályktanir út frá tilgátuprófinu. Við megum þó ekki gleyma því að heilmiklar upplýsingar eru fólgnar í öryggisbilinu fyrir mismun mælinganna. Öryggisbilið er \([-0.7597,0.6064]\) svo við getum fullyrt með 95% vissu að púlsinn hafi ekki minnkað um meira en \(-0.7597\) slög á mínútu og ekki hækkað um meira en \(0.6064\) slög á mínútu. Við getum því hæglega fullyrt að breyting púlsins sé innan við eitt slag á mínútu.
8.3. Levene próf fyrir dreifni\(^\ast\)
Ef gögnin okkar fylgja normaldreifingu er Bartlett prófið sem fjallað
var um hér að framan besta prófið að nota til að kanna hvort munur sé á
dreifni hópanna. Ef gögnin fylgja ekki normaldreifingu er betra að nota
svo kallað Levene-próf. Skipunin leveneTest()
sem tilheyrir car
pakkanum framkvæmir Levene próf.
8.4. Stikalaus próf\(^\ast\)
8.4.1. Stikalaus próf\(^\ast\)
Ef skilyrði þess að hægt sé að framkvæma t-próf eru ekki uppfyllt er í
sumum tilvikum hægt að nota stikalaus próf þeirra í stað. Algengasta
stikalausa prófið er Wilcox prófið sem hægt er framkvæma með skipuninni
wilcox.test()
.
8.4.1.1. wilcox.test()
Athugið
Inntak: nöfn á einni eða tveimur talnabreytum eða nafn á talnabreytu og flokkabreytu
Úttak: gildi á prófstærð, p-gildi
Helstu stillingar: paired, mu, alternative
Forkröfur prófs: Munur á dreifingu er hliðrun um fasta
Prófið má framkvæma til að kanna eitt miðgildi eða bera saman tvö
miðgildi og þá einnig fyrir paraðar mælingar. Skipunin er mötuð á sama
hátt og t.test()
. Gætið ykkar að stikalaus próf geta einnig verið
skilyrðum háð. Sem dæmi þá krefst óparaða Wilcox prófið þess að eini
munurinn á dreifingu breytanna tveggja sé hliðrun um fasta tölu og því á
það ekki við ef breytileiki breytanna er ólíkur.
Hér fyrir neðan má sjá sömu dæmi og hér að ofan framkvæmd með
wilcox.test()
:
wilcox.test(puls$fyrriPuls,mu=70)
##
## Wilcoxon signed rank test with continuity correction
##
## data: konnun$ferdatimi_skoli
## V = 6159, p-value = 0.1073
## alternative hypothesis: true location is not equal to 20
wilcox.test(konnun$ferdatimi_skoli~konnun$ferdamati_skoli=='Gangandi / skokkandi')
##
## Wilcoxon rank sum test with continuity correction
##
## data: konnun$ferdatimi_skoli by konnun$ferdamati_skoli == "Gangandi / skokkandi"
## W = 4847.5, p-value = 6.877e-11
## alternative hypothesis: true location shift is not equal to 0
wilcox.test(pulshljop$fyrriPuls, pulshljop$seinniPuls, paired=TRUE)
##
## Wilcoxon signed rank test with continuity correction
##
## data: pulshljop$fyrriPuls and pulshljop$seinniPuls
## V = 8, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
wilcox.test(pulskyrr$fyrriPuls, pulskyrr$seinniPuls, paired=TRUE)
##
## Wilcoxon signed rank test with continuity correction
##
## data: pulskyrr$fyrriPuls and pulskyrr$seinniPuls
## V = 13897, p-value = 0.9758
## alternative hypothesis: true location shift is not equal to 0
8.5. Leiksvæði fyrir R kóða
Hér fyrir neðan er hægt að skrifa R kóða og keyra hann. Notið þetta svæði til að prófa ykkur áfram með skipanir kaflans. Athugið að við höfum þegar sett inn skipun til að lesa inn puls
gögnin sem eru notuð gegnum alla bókina.
# Gogn sott og sett i breytuna puls.
puls <- read.table ("https://raw.githubusercontent.com/edbook/haskoli-islands/main/pulsAll.csv", header=TRUE, sep=";")
# Setjid ykkar eigin koda her fyrir nedan:
# Sem daemi, skipunin head(puls) skilar fyrstu nokkrar radirnar i gognunum
# asamt dalkarheitum.
head(puls)