Page 1
KAUNO TECHNOLOGIJOS UNIVERSITETAS
MATEMATIKOS IR GAMTOS MOKSLŲ FAKULTETAS
TAIKOMOSIOS MATEMATIKOS KATEDRA
Giedrius Petrošius
JAV AVIACIJOS DUOMENŲ ANALIZĖ
PANAUDOJANT DIDŽIŲJŲ DUOMENŲ
MATEMATINIUS MODELIUS
Bakalauro darbas
Vadovas
asist . P.Palevičius
KAUNAS, 2015
Page 2
2
KAUNO TECHNOLOGIJOS UNIVERSITETAS
MATEMATIKOS IR GAMTOS MOKSLŲ FAKULTETAS
TAIKOMOSIOS MATEMATIKOS KATEDRA
TVIRTINU
Katedros vedėjas
doc . dr . N . Li s topadsk is
2015 06 11
JAV AVIACIJOS DUOMENŲ ANALIZĖ
PANAUDOJANT DIDŽIŲJŲ DUOMENŲ
MATEMATINIUS MODELIUS
Matematikos bakalauro baigiamasis darbas
Vadovas
a s i s t . P . Palev ič ius
Recenzentas 2015 06 11
Doc . Dr . Kri s t ina Lukoševič iū tė
At l iko
. . . . . . . . . . . . . . . MGTM 1 /1 gr . s tud .
G. Petroš ius
2015 06 11
KAUNAS, 2015
Page 3
3
KAUNO TECHNOLOGIJOS UNIVERSITETAS
MATEMATIKOS IR GAMTOS MOKSLŲ FAKU LTETAS
GIEDRIUS PETROŠIUS
TAIKOMOJI MATEMATIKA (612G10002)
Baigiamojo projekto „Pavadinimas“
AKADEMINIO SĄŽININGUMO DEKLARACIJA
20 15 m. Birželio 3 d.
Kaunas
Patvirtinu, kad mano, Giedriaus Petrošiaus, baigiamasis projektas tema „J AV aviac i jos
duomenų anal iz ė panaudojant d idž ių jų duomenų matemat in ius mode l ius .“ yra
parašytas visiškai savarankiškai ir visi pateikti duomenys ar tyrimų rezultatai yra teisingi ir gauti
sąžiningai. Šiame darbe nei viena dalis nėra plagijuota nuo jokių spausdintinių ar internetinių šaltinių,
visos kitų šaltinių tiesioginės ir netiesioginės citatos nurodytos literatūros nuorodose. Įstatymų
nenumatytų piniginių sumų už šį darbą niekam nesu mokėjęs. Aš suprantu, kad išaiškėjus nesąžiningumo faktui, man bus taikomos nuobaudos, remiantis
Kauno technologijos universitete galiojančia tvarka.
(parašas)
Page 4
4
Petrošius G. Analysis USA aviation data using big-data mathematical models: Bachelor‘s
work in applied mathematics / supervisor asist. P. Palevičius; Department of Applied
mathematics, Faculty of Mathematic and nature, Kaunas University of Technology. –
Kaunas, 2015.
SUMMARY
The aim of the bachelor thesis is to apply software based on mathematical methods for
effective Big data analysis.
This document consists of three main parts. In the first part of the bachelor thesis the Big data
definition, challenges and phases of its life cycle are discussed. It also provides information about data
processing tools and techniques. In the second part used RHadoop software architecture and work
principles is presented. Later it introduces a multiple regression model for Big data analysis. In the
third part the multiple regression analysis steps on USA aviation dataset is established.
Page 5
5
TURINYS
ĮŽANGA ............................................................................................................................................... 6
1.LITERATŪROS ANALIZĖ ............................................................................................................. 7
1.1 DIDIEJI DUOMENYS .............................................................................................................. 7
1.2 DIDŽIŲJŲ DUOMENŲ GYVAVIMO CIKLAS ...................................................................... 8
1.3 DIDŽIŲJŲ DUOMENŲ PROBLEMATIKOS .......................................................................... 9
1.4. DUOMENŲ BAZĖS ............................................................................................................... 10
1.4.1 RELIACINĖS DUOMENŲ BAZIŲ VALDYMO SISTEMOS ....................................... 10
1.4.2 NOSQL DUOMENŲ BAZĖS .......................................................................................... 10
1.4.3 HADOOP .......................................................................................................................... 11
1.5. BAIGIAMOJO PROJEKTO TEMA IR UŽDUOTYS ........................................................... 12
2. MEDŽIAGOS IR TYRIMŲ METODAI ....................................................................................... 13
2.1 PROGRAMINĖ ĮRANGA ....................................................................................................... 13
2.1.1 HADOOP FAILŲ PASKIRSTYMO SISTEMA .............................................................. 13
2.1.2 MAPREDUCE .................................................................................................................. 14
2.1.3 RHADOOP ........................................................................................................................ 14
2.2 TECHNIĖ ĮRANGA ................................................................................................................ 15
2.3 REGRESINĖ ANALIZĖ .......................................................................................................... 15
2.3.1 PRIKLAUSOMOJO KINTAMOJO REIKŠMIŲ PROGNOZAVIMAS ......................... 16
2.3.2 HIPOTEZĖ APIE REGRESINĖS FUNKCIJOS KOEFICIENTUS ................................ 17
2.3.3 STJUDENTO KRITERIJUS ATSKIRIEMS REGRESORIAMS .................................... 18
2.3.4 MULTIKOLINEARUMO TIKRINIMAS ........................................................................ 18
2.3.5 AUTOKORELIACIJOS TIKRINIMAS ........................................................................... 19
2.3.6 BREUŠO-PAGANO KRITERIJUS .................................................................................. 19
3. TYRIMŲ REZULTATAI IR JŲ APTARIMAS ............................................................................ 21
3.1 DUOMENŲ TYRIMAS .......................................................................................................... 21
IŠVADOS ........................................................................................................................................... 29
LITERATŪROS SĄRAŠAS .............................................................................................................. 30
PRIEDAS : JAV AVIACIJOS SKRYDŽIŲ ATRIBUTAI ............................................................... 31
PRIEDAS : PROGRAMOS TEKSTAS ............................................................................................. 33
Page 6
6
ĮŽANGA
Pasaulyje kas minutę sukuriama po 1,7 mln. mlrd. baitų, arba 360 000 DVD, duomenų –
daugiau kaip 6 megabaitai duomenų kiekvienam žmogui per dieną Todėl duomenų sektorius auga 40
proc. per metus arba septynis kartus sparčiau už visą informacinių ir ryšių technologijų rinką, o didieji
duomenys mums jau padeda diagnozuoti galvos smegenų traumas, surasti tinkamiausią vietą vėjo
jėgainėms, išvengti transporto spūsčių arba prognozuoti javų derlių besivystančiose šalyse.
Tradicinės technologijos ir analizės metodai nesugeba apdoroti tokio kiekio ir tipo duomenų.
Tačiau naujausi technologiniai pokyčiai leido mums rinkti, saugoti ir apdoroti duomenis naujais
metodais. Savo darbe duomenims apdoroti pasirinkau programinę sistemą sudarytą iš Apache Hadoop
ir statistinio paketo R.
Baigiamasis darbas susideda iš 3 pagrindinių dalių. Pirmojoje dalyje apibrėžiama didžiųjų
duomenų sąvoka, išnagrinėjama jos gyvavimo ciklas ir problematikos. Taip pat šiame skyriuje
apžvelgiama didžiųjų duomenų apdorojimo ir saugojimo alternatyvos. Antrojoje dalyje aprašoma
tyrime pasirinktos programinės įrangos RHadoop veikimo principai ir naudoti statistiniai modeliai.
Trečiojoje dalyje analizuojama JAV aviacijos duomenys, panaudojant daugialypės regresijos modelį,
pritaikytą didiesiems duomenims. Taip pat įvertintas šio modelio tinkamumas.
Page 7
7
1.LITERATŪROS ANALIZĖ
1.1 DIDIEJI DUOMENYS
Didieji duomenys (angl. Big data) yra platus terminas, paprastai pabrėžiantis, jog duomenų
apimtis tokia didelė, kad ją sunku apdoroti su turimomis technologijomis per priimtiną laiką. Kada
duomenis galima apibrėžti kaip didžiaisiais yra realiatyvu. Vienai kompanijai 10TB bus didieji
duomenys, kitai – keli petabaitai, todėl teisė spręsti ar duomenys didieji paliekama pačiam jų turėtojui.
Be to reikėtų atkreipti dėmesį, jog sugeneruojamas pasaulio duomenų kiekis kiekvienais metais auga
eksponentiškai (1.1. pav.), todėl ir didžiųjų duomenų apibrėžtis, bei prasmė kinta kasmet.
1.1 pav. Sugeneruojamo duomenų kiekio per metus histograma
Doug Laney (2001m) šiuos duomenis anglų kalboje apibūdino trijų žodžių deriniu,
vadinamuoju 3V apibrėžimu: volume (kiekis), velocity (greitis) ir variety (įvairovė). Šį apibrėžimą
Page 8
8
Forrester (2012m) praplėte iki ketvirtosios V – value (vertė), o kiek vėliau White (2012m) pridėjo ir
penktąją – verification (patikimumas) [1,2]:
„volume“– augantis sugeneruojamų duomenų kiekis;
„velocity“ - didėjantis tranzakcijų dažnis ir greitis;
„variety“ - didėjantis struktūrizuotų ir neturinčių aiškios struktūros duomenų šaltiniai;
„verification“ – duomenų patikimumas;
„ value“- vertė gauta iš analizuojamų duomenų;
Milžiniški duomenų kiekiai suteikia mums galimybę daug tiksliau išanalizuoti duomenis, ko
anksčiau nebuvo įmanoma atlikti dėl per mažo jų kiekio. Tačiau didėjant informacijos kiekiui, didėja
ir netikslumai. Todėl itin svarbu, kad atrinktieji duomenys būtų kiek įmanoma teisingesni. Taigi
analizuojant didelį kiekį duomenų gaunamas vertingesnis ir tikslesnis rezultatas, tačiau klaidų
pasitaikyti gali. Nauji duomenų gavybos metodai gali suteikti informacijos, tačiau nepaaiškinti
priežastinių ryšių. Būtent koreliacija tarp duomenų suteikia galimybę prognozuoti tam tikrus įvykius.
1.2 DIDŽIŲJŲ DUOMENŲ GYVAVIMO CIKLAS
Daugelis žmonių koncentruojas tik į duomenų analizavimą/modeliavimą, bet tai yra tik viena
iš duomenų gyvavimo ciklo sudedamųjų dalių. Šio ciklo pagrindinės dedamosios yra šios:
Duomenų generavimas. Didieji duomenys tai pasaulio stebėjimas aplink mus, nuo senyvo
žmogaus širdies ritmo, iki toksinų kiekio ore kuriuo mes kvėpuojame ar vartotojo aktyvumas
inernetinėje svetainėse.
Duomenų filtravimas ir struktūrizavimas. Duomenys dažniausiai nėra sutvarkyti ir nėra
tinkami analizei atlikti. Prieš išsaugojant surinktus duomenis būtini metodai ištraukti reikalingą
informaciją tinkamu formatu analizei ir pašalinti nepatikimus duomenys, kurie gali atsirasti dėl įvairių
jutiklių gedimų, šališkų žmonių vertinimų, pasenusios informacijos ir t.t.
Duomenų analizavimas/modeliavimas. Metodai skirti analizuoti didžiuosius duomenis
skiriasi nuo tradicinių statistinių metodų mažiems duomenims. Didieji duomenys dažnai yra
heterogeniški, dinamiški, tarpusavyje koreliuoti ir nepatikimi. Šios savybės labai apsunkina analizę,
bet pritaikius tinkamus modelius duomenys suteikia vertingų įžvalgų.
Rezultatų interpretavimas. Atlikus duomenų analizę analtikas turi įvertinti gautus rezultatus.
Jie gali būti nepatikimi, nes didžiųjų duomenų apdorijimo sistemose egzistuoja daug klaidų šaltinių:
programinės įrangos klaidos, pritaikyti modeliai, kurių prielaidos yra neišpildytos ir rezultatų
Page 9
9
pagrindimas klaidingais duomenimis. Todėl sprendimus gali daryti tik žmogus, o tam sistema turi
pateikti informaciją, kuri analitikui leistų lengvai suprasti ir užtikrinti rezultatų teisingumą.[3]
1.3 DIDŽIŲJŲ DUOMENŲ PROBLEMATIKOS
Nenuoseklumas ir neužbaigtumas. Didieji duomenys generuojami iš vis daugiau skirtingų
šaltinių, kurių patikimumas yra įvairus. Jis pasireiškia duomenų įrašų klaidomis arba neužfiksuotomis
reikšmėmis. Į šiuos aspektus būtina atsižvelgti analizuojant duomenis. Didieji duomenys turi
privalumą, kad neužfiksuotus įrašus kompensuoja duomenų apimtis ir tai dažniausiai nesutrugdo rasti
patikimus ryšius, tendencijas duomenyse. Sunkesnė užduotis yra atsirinkti patikimus duomenys
apjungtus iš įvairių šaltinių, kurie neiškreiptų duomenų analizės. Šio sudėtingo uždavinio sprendimui
pasitelkiami statistiniai modeliai.
Duomenų apimtis. Manipuliuoti greitai augančių duomenų srautais buvo įšūkis daug
dešimtmečių. Praeityje šis uždavinys buvo iš dalies išsprendžiamas pastoviu procesoriaus skaičiavimo
greitėjimu remiantis Muro dėsniu. Bet dabar padėtis pasikeitė ir duomenų augimas tapo greitesnis
negu proceriaus ar kitų resursų skaičiavimo greitėjimas.
Dabar kompiuterio procesoriaus darbo našumą spartina didinant branduolių skaičių. Šioje
procesoriaus architektūroje darbo našumas optimizuojamas naudojant pararelinius skaičiavimus tarp
branduolių. Deja ankščiau klasteryje pritaikytas lygiagretaus skaičiavimo modelis skirtas apdoroti
duomenims tarp mazgų, architektūriškai labai skiriasi nuo procesoriaus pararelinio sprendimo, dėl to
klasterio mazgai pilnai neišnaudoja savo resursų skaičiavimams atlikti. Šis efektas labiau pastebimas
kompiuterių debesijose, kuriose naudojami didžiuliai klasteriai duomenims manipuliuoti. Kadangi
tokie klasteriai nėra pigūs, reikia naujų technologijų, metodų duomenims apdoroti, kurie būtų
optimalūs kainos ir efektyvumo atžvilgiu, bei susidorotų su sistemos gedimais, nes didėjant sistemai,
didėja ir gedimų tikimybė.
Savalaikiškumas. Duomenų apimčiai augant vis didesnis dėmesys skiriamas jų išsaugojimo
metodams. Neapdorotų duomenų saugojimas yra neekonomiškas, todėl prieš juos išsaugojant
duomenų bazėse/saugyklose reikia realaus laiko technologijų duomenims sutraukti, filtruoti.
Savalaikiškumas tai pat svarbus ir elementų išgavimui pagal tam tikrus kriterijus iš turimų
didelės apmities duomenų. Atrinkinėti elementus skanuojant visą duomenų rinkinį yra nepraktiška, jų
greitam radimui yra naudojamas duomenų įrašų indeksavimas. Įsivaizduokime eismo reguliavimo
sistemą, kuri turi tūkstančių mašinų buvimo vietų ir šviesaforų būsenų duomenis. Sistemos paskirtis
prognozuoti būsimas mašinų spūstis pagal vairuotojo maršrutą ir pateikti alternatyvas. Tokiam
Page 10
10
uždavinio sprendimui reikia atlikti daugybę maršruto užklausų atsižvelgiant į kitų mašinų judėjimo
trajektorijas. Dėl tokios gausybės kriterijų, tokiai sistemai veikti efektyviai reikia sukurti naujus
indeksavimo metudus.
Komanda. Didžiųjų duomenų visapusiškam analizavimui neužtenka vien turėti didelės
programinės sistemos, bet taip pat reikia ir plataus spektro specialistų. Būtina įsitikinti, kad
darbuotojai gali tinkamai suvokti tyrimo eigą ir rezultatus, o nepaskęsti duomenų gausybėje.
Dabartinės kompanijos dažnai samdo skirtingos profesijos ekspertus programinės sistemos
darbui palaikyti, tiriamos problemos metodams sukurti, juos realizuoti ir greitiems bei tinkamiems
sprendimams priimti.
1.4. DUOMENŲ BAZĖS
1.4.1 RELIACINĖS DUOMENŲ BAZIŲ VALDYMO SISTEMOS
Internetui atsiradus tradicinės reliacinės duomenų bazių valdymo sistema (RDBVS) buvo
standartinis sprendimas duomenims saugoti ir jais manipuliuoti. RDBVS duomenys yra tvarkingai
išdėstyti lentelėse kurios yra susietos reliaciniais ryšiais. Tokia duomenų saugojimo struktūra leidžia
našiai vykdyti sudėtingas užklausas, tačiau duomenims vis didėjant RDBVS metodai tampa
neefektyvūs ypač kai susiduriame su kompleksiškais duomenų formatais. Reliacinių ryšių koncepcija
negali veiksmingai apdoroti labai didelės apimties (žr. 1.2 pav.) ar nestruktūrizuotų duomenų, tokių
kaip daugiamačiai masyvai ar grafiniai duomenys.
1.4.2 NOSQL DUOMENŲ BAZĖS
NoSQL duomenų bazių metodai tampa efektyvesni ir lankstesni lyginant su reliacinių
duomenų bazių metodais didžiųjų duomenų kontekste ir užima pastarųjų vietą. Šios duomenų bazės
neturi konkrečios schemos duomenims saugoti, taip duomenų struktūra gali būti modifikuojama laikui
bėgant priklausomai nuo jų panaudojimo poreikio. NoSQL duomenų bazės saugo duomenis
lankstesnėse struktūrose, dažniausiai tai daugiamačio masyvo, SciDB ir herarchinės raktas-reikšmė
tipo struktūros. Esant tokiems duomenų saugojimo formatams duomenims manipuliuoti yra taikomas
lygiagretus programavimas. Dėl to NoSQL duomenų bazes nesunkiai galima praplėsti vertikaliai t.y.
prijungti papildomos techninės įrangos, jeigu sistemai pritrūktų našumo ar duomenų talpos.[5]
Page 11
11
1.2 pav. Releiacinės ir NoSQL duomenų bazių našumo palyginimas
1.4.3 HADOOP
Tokioms kompanijoms kaip Facebook, Google, Amazon ar Yahoo suvaldyti intensyviai
augančius duomenų kiekius tapo nelengvu įšukiu. Tokiems duomenims prireikė įrankių, kurie būtų
parašyti lygiagrečiomis programavimo technikomis, pasižymėtų klaidų toleravimu, duomenų
išplečiamumu ir efektyviu jų valdymu. Šiom problemoms išspręsti Google pristatė MapReduce
programavimo modelį. Viena iš šio modelio implementacijų yra Apache Hadoop.
Apache Hadoop yra atvirojo kodo Java platforma skirta efektyviai apdoroti, analizuoti bei
saugoti didelės apimties duomenis kompiuterių klasteryje. Ji vartotojui leidžia nesigilinti į
kompleksiškus duomenų pasiskirstymo metodus, nes jie yra automatizuoti. Todėl galima
koncentruotis tik į programavimą ar užklausų rašymą. Hadoop taip pat pasižymi lankstumu ir turi
plačią ekosistemą, kuri susidaro iš:
Ambari.rankis skirtas valdyti ir stebėti Apache Hadoop klasterius. Šis įrankis suderintas su Hadoop
HDFS, Hadoop MapReduce, Hive, HCatalog, HBase, ZooKeeper, Oozie, Pig ir Sqoop plėtiniais.
Avro™. Duomenų publikacijos sistema.
Cassandra™. Duomenų išplečiamumu ir klaidų toleravimu pasižyminti duomenų bazė.
Chukwa™. Duomenų pasiskirstymo sistema duomenų rinkiniams valdyti.
HBase™. Duomenų bazė palaikanti didžiąsiais lenteles.
Hive™. Duomenų saugykla palaikanti d-hoc užklausas.
Page 12
12
Mahout™. Duomenų prognozavimo ir gavybos biblioteka.
Pig™. Platforma leidžianti rašyti paralelinius skaičiavimus aukštesnio lygio programavimo kalba.
Spark™. Greita didelių duomenų apdorojimo platforma.
ZooKeeper™. Aukšto lygio užduočių tvarkyklė paralelinėms užduotims sukordinuoti.
1.5. BAIGIAMOJO PROJEKTO TEMA IR UŽDUOTYS
Tyrimui atlikti pasirinkau Apache Hadoop programinę įrangą. Apie ją ir jos veikimo principus
plačiau bus pasakojama metodinėje dalyje. Baigiamojo projekto tema „J AV av iaci jos duomenų
ana l iz ė panaudojant d idž ių jų duomenų matemat in ius mode l ius “, tikslas pasitelkus
matematinius metodus efektyviai analizuoti didelės apimties duomenis. Projekto uždaviniai:
1. Atlikus literatūros apžvalgą, pasirinkti tinkamus įrankius dideliems duomenims analizuoti .
2. Pritaikyti regresijos modelį lėktuvo išvykimo vėlavimui prognozuoti.
3. Įvertinti modelio tinkamumą ir prielaidas.
Page 13
13
2. MEDŽIAGOS IR TYRIMŲ METODAI
2.1 PROGRAMINĖ ĮRANGA
Šiam darbui atlikti pasirinkau RHadoop programinę įrangą remiantis keliais kriterijais:
Atlikti skaičiavimus keliais kompiuteriais pasitelkus lygiagretųjį programavimą;
Gebėjimas analizuoti didelės apimties duomenis;
Galingos operacijos atliekamos trumpu programos tekstu;
Labai patogi darbo aplinka;
Didelis R statistinių komandų pasirinkimas;
Puikios R grafikos galimybės.
Apache Hadoop yra atvirojo kodo Java platforma skirta efektyviai apdoroti, analizuoti bei
saugoti didelės apimties duomenis kompiuterių klasteryje. Hadoop platformos branduolį sudaro
duomenu paskistymo sistema ir duomenų apdorojimo paradigma MapReduce.
2.1.1 HADOOP FAILŲ PASKIRSTYMO SISTEMA
Hadoop failų paskirstymo sistema (HDFS) yra skirta duomenų saugojimui. Sistema sudaryta
iš vieno vardo mazgo (angl. NameNode) ir duomenų mazgų (angl. DataNode) (žr. 2.3. pav.).
Vardo mazgas yra atasakingas už duomenų saugojimą sistemoje. Jis įrašomus duomenų failus
padalina į 128 MB blokelius (blokelių dydį galima koreguoti), sugeneruoja numatytą skaičių
kiekvieno blokelio kopijų ir jas paskirsto į skirtingus duomenų mazgus (žr. 2.2 pav.). Tuo pačiu metu
vardo mazgas išsaugo informacija apie blokelių buvimo vietą. Jeigu kuris nors duomenų mazgas
pažeidžiamas, vardo mazgas reikiamus duomenų blokelius pasiekia iš kito duomenų mazgo, kuriame
yra blokelio kopija. Šis procesas vadinamas klaidos toleravimo mechanizmu, jis gali būt kartojamas
kol nebeliks blokelio kopijos. Taip pat HDFS architektūra pasižymi pigumu, jei nebūtina pirkti
brangiai kainuojančių ir stabilių kompiuterių. Be to duomenų mazgų skaičių galima praplėsti iki
tenkinamos duomenų talpos ar skaičiavimo galingumo.
Page 14
14
2.2 pav. Hadoop failų paskirstymo sistemos architektūra
2.1.2 MAPREDUCE
MapReduce yra lygiagretaus programavimo platforma leidžianti apdoroti didelės apimties
duomenis kompiuterių klasteryje naudojant dvi funkcijas: Map ir Reduce. Platforma gaudama užduotį
kreipiasi į vardo mazgą, jis ją suskaido ir paskirsto duomenų mazgams. Tuomet kiekviename
duomenų mazge pradedama vykdyti map funkcija. Ji duomenims suteikia <raktas/reikšmė> poras.
Apdorojus juos, rezultatą taip pat pateikia <raktas/reikšmė> forma. Po šios fazės pradedama vykdyti
Reduce funkcija, kuri pašalina perteklinius duomenis ir pateikia galutinį rezultatą . MapReduce
platforma yra patogi, nes duomenų pasiskirstymo darbai yra automatizuoti, be to kuriame nors mazge
įvykusi skaičiavimo klaida neturės įtakos kitiems skaičiavimams, o neįvykdyta užduotis automatiškai
bus paskirta kitam mazgui[8].
2.1.3 RHADOOP
R yra viena iš galingiausių programinių įrangų statistiniams metodams taikyti ir duomenims
vizualizuoti. R plačiai naudojama tarp statistikų ir duomenų gavybos specialistų statistinėms
programoms sukurti ir duomenims analizuoti. Šis įrankis ypač pasižymi savo bibliotekų turtingumu,
kurių skaičius siekia beveik 5000.
Nors R programinė įranga yra galingas statistinis įrankis duomenims manipuliuoti, tačiau ji
negali dirbti su didelės apimties duomenimis, kurie viršija mašinos darbinę atmintį. Šiai problemai
išspręsti kompanija Revolution Analytics sukūrė tris R paketus, kurie R integruoja Hadoop sistemoje
(žr. 2.3 pav):
• rmr – paketas leidžia rašyti Hadoop MapReduce programas iš R aplinkos
Vardo mazgas
Duomenų mazgas 1
Duomenų mazgas 2
Duomenų mazgas 3
B1
B2 ...
B1
B3 ...
B2
B3 ...
Page 15
15
• rhdfs – paketas skirtas valdyti failų pasiskirstymo sistemą HDFS iš R aplinkos
• rhbase – paketas leidžia manipuliuoti duomenų baze HBase iš R aplinkos [9]
2.3 pav. Rhadoop architektūra
2.2 TECHNIĖ ĮRANGA
Šiam darbui atlikti buvo naudojamas dviejų Ubuntu l2.04 kompiuterių klasteris. Jų specifikacijos:
• Intel Core Duo E6420
• 2GB RAM
• Intel Core Duo E7500
• 4GB RAM
2.3 REGRESINĖ ANALIZĖ
Tarkime 𝒀 priklausomas kintamasis kurio reikšmes norime prognozuoti esant fiksuotiems
nepriklausomų kintamųjų 𝑿𝟏, 𝑿𝟐, …𝑿𝒌 reikšmėms. Tuomet tiesinės daugialypės regresines analizės
modelis yra
𝑌 = 𝛽0 + 𝛽1 ∙ 𝑋𝑖1 + 𝛽2 ∙ 𝑋𝑖2 + …+ 𝛽𝑘 ∙ 𝑋𝑖𝑘 + 𝜀𝑖, 𝑖 = 1, 𝑛 (𝟐. 𝟏)
čia 𝜀𝑖 yra atsitiktinė paklaida (atsitiktinis dydis). Modelio koeficientai 𝛽0, 𝛽1, … , 𝛽𝑘 nežinomi.
Tikrindami, ar modelis tinka, kartu randame ir koeficientų įverčius.
Šį modelį taip pat galime išreikšti matricinėje formoje
Page 16
16
𝑌 = 𝑋𝛽 + 𝜀
čia
𝑌 = [
𝑦1
𝑦2
⋮𝑦𝑛
], 𝑋 = [
1 𝑥11 𝑥12
1 𝑥21 𝑥22
⋮1
⋮𝑥𝑛1
⋮𝑥𝑛2
……⋱…
𝑥1𝐾
𝑥1𝐾
⋮𝑥𝑛𝐾
] .
2.3.1 PRIKLAUSOMOJO KINTAMOJO REIKŠMIŲ PROGNOZAVIMAS
Pažymėkime �� =
[ ��0
��1
⋮��𝑘]
parametrų 𝛽 = [
𝛽0
𝛽1
⋮𝛽𝑘
] taškinių įverčių vektorių. Tiesinės regresijos tikslas,
kad regresijos funkcijos
��(��) = ��(𝑥1, 𝑥2, . . , 𝑥𝑘) = ��0 + ��1 ∙ 𝑥1 + ��2 ∙ 𝑥2 + ⋯+ ��𝑘 ∙ 𝑥𝑘
kiek mažiau skirtųsi nuo 𝑦ш t.y. visi skirtumai (liekamosios paklaidos)
𝜀�� = 𝑦1 − ��(��) = 𝑦1 − ��0 + ��1 ∙ 𝑥1 + ��2 ∙ 𝑥2 + ⋯+ ��𝑘 ∙ 𝑥𝑘), 𝑖 = 1,2, . . , 𝑛
būtų kiek galima mažesnės.
Tokie parametrai randami mažiausių kvadratų sumos metodu, t.y parenkami taip, kad liekamųjų
paklaidų kvadratų suma 𝑆𝑆𝑒 būtų mažiausia. Mažiausių kvadratų tiesinių lygčių sistema matricinėje
formoje:
𝑌 = 𝑋��
𝑋𝑇𝑌 = 𝑋𝑇𝑋��
�� = (𝑋𝑇𝑋)−1 𝑋𝑇𝑌
Tačiau kalbant didžiųjų duomenų kontekste tokią lygčių sistemą išspręsti paprastais
metodais nepavyksta, nes duomenys netelpa darbinėje atmintyje.
Hadoop sistemoje matricos 𝑋 duomenys išsaugojami į blokelius 𝑋1, 𝑋2, … , 𝑋𝑚 (blokelių
skaičius gaunamas priklausomai nuo duomenų imties) „pjaustant“ ją vertikaliai. Metodas
apskaičiuoti �� įvertį Hadoop sistemoje yra išskaidomas keliais etapais:
1. Apskaičiuojamas kiekvieno blokelio kovariacijų matrica 𝑋𝑖𝑇𝑋𝑖
2. Randamas matricos 𝑋𝑇𝑋 įvertis 𝑋𝑇�� susumuojant visus 𝑋𝑖𝑇𝑋𝑖 t.y. 𝑋𝑇�� = ∑ 𝑋𝑖
𝑇𝑋𝑖 𝑚
𝑖=1
3. Analogiškai randamas įvertis 𝑋𝑇�� = ∑ 𝑋𝑖𝑇𝑌𝑖
𝑚
𝑖=1
4. Apskaičiuojama 𝑏 = (𝑋𝑇��)−1 𝑋𝑇��
Page 17
17
2.3.2 HIPOTEZĖ APIE REGRESINĖS FUNKCIJOS KOEFICIENTUS
Hipotezės formuluotė :
𝐇𝟎: 𝛽0 = 𝛽1 = . . . = 𝛽𝑘 = 0
𝐇𝐚 : bent vienas 𝛽𝑗 ≠ 0, 𝑗 = 1, . . . , 𝑘
Kriterijus tikrinamas apskaičiuojant Fišerio statistinę reikšmę 𝐹 reikšmę. bet ją apskaičiuoti
kitus statistinius koeficientus:
Bendroji nuokrypių kvadratų suma:
𝑆𝑆𝑝 = ∑(𝑦𝑖 − ��)2 =
𝑛
𝑖=1
𝑌𝑇𝑌 − 𝑛��2 (𝟐. 𝟐)
Regresinė nuokrypių kvadratų suma:
𝑆𝑆𝑅 = ∑(𝑦�� − ��)2 =
𝑛
𝑖=1
𝑏𝑇𝑋𝑇𝑌 − 𝑛��2 (𝟐. 𝟑)
Liekanų kvadratų suma:
𝑆𝑆𝑒 = ∑(𝑦𝑖 − 𝑦��)2 =
𝑛
𝑖=1
𝑌𝑇𝑌 − 𝑏𝑇𝑋𝑇𝑌 (𝟐. 𝟒)
Kad galėtume patikrinti hipotezę, sumos 𝑆𝑆𝑅 ir 𝑆𝑆𝑒 normuojamos:
𝑆𝑆𝑅 =
𝑆𝑆𝑅
𝑘 (𝟐. 𝟓)
𝑆𝑆𝑒 =
𝑆𝑆𝑅
𝑛 − 𝑘 − 1 (𝟐. 𝟔)
čia k – regresorių skaičius.
Tuomet apskaičiuojame 𝐹 =𝑆𝑆𝑅
𝑆𝑆𝑒 ⁄ . Pasirinkus reikšmingumo lygmenį 𝛼, hipotezę 𝐇𝟎
atmetame, jeigu 𝐹 > 𝐹𝛼(𝑘, 𝑛 − 𝑘 − 1), jos neatmetame kai 𝐹 ≤ 𝐹𝛼(𝑘, 𝑛 − 𝑘 − 1).
čia 𝐹𝛼(𝑘, 𝑛 − 𝑘 − 1) yra Fišerio skirstinio su k ir (n-k-1) laisvės laipsnių 𝛼 lygmens kritinė reikšmė.
Hipotezė 𝐇𝟎 neatmetame, jeigu 𝐹 ≤ 𝐹𝛼(𝑘, 𝑛 − 𝑘 − 1).
Page 18
18
2.3.3 STJUDENTO KRITERIJUS ATSKIRIEMS REGRESORIAMS
F kriterijus leidžia nustatyti, ar tarp visų koeficientų 𝛽0, 𝛽1, . . . , 𝛽𝑘 yra nenulinių, tuo tarpu
Stjudento kriterijus atsako į klausimą, ar konkretus koeficientas 𝛽𝑗 ≠ 0, tuo padedantis nuspręsti ar
atitinkamas regresorius šalinamas iš modelio.
Statistinė hipotezė:
𝐇𝟎: 𝛽0 = 0
𝐇𝐚 : 𝛽𝑗 ≠ 0, 𝑗 = 1, . . . , 𝑘
Kriterijaus statistika yra 𝑡𝑗 =��𝑗
𝑠��𝑗
⁄ , ��𝑗 − 𝑗 regresoriaus taškinis įvertis.
Regresijos koeficientų standartinis nuokrypis
𝑠��𝑗= 𝑠𝑒√𝑐𝑗𝑗 (𝟐. 𝟕)
čia 𝑐𝑗𝑗 kovariacijų matricos 𝐶 = (𝑋𝑇𝑋)−1 įstrižainės elementas.
Standartinė regresijos paklaida
𝑠𝑒 = √𝑆𝑆𝑒 (𝟐. 𝟖)
Tegul pasirinktas reikšmingumo lygmuo yra 𝛼. Hipotezę 𝐇𝟎 atmetame, jeigu |𝑡| > 𝑡𝛼/2(𝑛 −
𝑘 − 1), jos neatmetame, kai |𝑡| ≤ 𝑡𝛼/2(𝑛 − 𝑘 − 1) čia 𝑡𝛼/2(𝑛 − 𝑘 − 1) yra Stjudento skirstinio su
(n-k-1) laisvės laipsnių 𝛼/2 lygmens kritinė reikšmė.
2.3.4 MULTIKOLINEARUMO TIKRINIMAS
Daugialypės regresijos modelis tinkamiausias prognozuoti tada, kai visi nepriklausomi
kintamieji 𝑋1, 𝑋2, …𝑋𝑘 tarpusavyje nekoreliuoja, o priklausomybė sieja tik juos ir 𝑌. Kai tarp
kintamųjų 𝑋1, 𝑋2, …𝑋𝑘 yra stipriai koreliuojančių susiduriame su multikolinearumo problema.
Multikolinearumas nustatamos kiekvienam regresoriui atskirai:
1. Sudarome kiekvienam kintamajam regresijos lygtį sudarytą iš likusių regresorių
𝑋𝑙 = 𝛼0 + 𝛼1 ∙ 𝑋1 + ⋯+𝛼𝑖 ∙ 𝑋𝑖 + ⋯+ 𝛼𝑘 ∙ 𝑋𝑘 + 𝜀𝑖, 𝑙 ≠ 𝑖, 𝑙, 𝑖 = 1, 𝑘
2. Apskaičiuojame šių lygčių determinacijos koeficientus
Page 19
19
𝑅𝑙2 = 1 −
𝑆𝑆𝑒
𝑆𝑆𝑅 (𝟐. 𝟗)
čia 𝑆𝑆𝑒 ir 𝑆𝑆𝑅apskaičiuojami pagal (2.3) ir (2.4) formules
ir VIF
VIF =1
1 − 𝑅𝑙2 (𝟐. 𝟏𝟎)
3. Įvertiname multikolinearumą, jei (VIF)>4 tariama, kad kintamasis 𝑋𝑙 per daug
multikolinearus” t.y. kad regresijos modelyje palikus šį kintamąjį ir kintamuosiuos su
kuriais jis koreliuoja, gali kilti prognozių stabilumo problemų.
2.3.5 AUTOKORELIACIJOS TIKRINIMAS
Durbino – Vatsono kriterijus naudojamas, kai norima nustatyti ar modelis yra autoregresijos
modelis t.y kartais prognozės liekamosios paklaidos būna priklausomos, sukuriami modeliai su
koreliuojančiomis liekanomis. Durbino – Vatsono statistika d apskaičiuojama:
𝑑 =∑ (𝑒𝑖 − 𝑒𝑖−1)
2𝑛𝑖=2
∑ 𝑒𝑖2𝑛
𝑖=1
(𝟐. 𝟏𝟏)
Statistika 𝑑 kinta nuo 0 iki 4, jeigu jos reikšmė yra tarp 1,5 ir 2,5, dažniausiai tariama, kad
autokoreliacijos nėra.
2.3.6 BREUŠO-PAGANO KRITERIJUS
Breušo-pagano kriterijus tikrina ar liekamosios paklaidos dispersija nepriklauso nuo
regresorių reikšmių. Jeigu priklauso, tariama, kad kilo heteroskedastiškumo problema. Tikriname
hipotezę:
𝐇𝟎: 𝑉𝑎𝑟(𝜀2|𝑋1, 𝑋2, …𝑋𝑘) = 𝜎
𝐇𝐚 : 𝜎1 = 𝜎2 = ⋯ = 𝜎𝑘
Tikrinimo etapai:
1. Sudarome tiriamos lygties Y (2.1) liekamųjų paklaidų regresiją nuo prognozuotų
�� reikšmių
Page 20
20
𝜀𝑗2 = 𝜎0 + 𝛼1 ∙ ��𝑗, 𝑗 = 1, 𝑛 (𝟐. 𝟏𝟐)
kur ��𝑗 = 𝛽0 + 𝛽1 ∙ 𝑋𝑗1 + 𝛽2 ∙ 𝑋𝑗2 + ⋯+ 𝛽𝑗�� ∙ 𝑋𝑗𝑘
2. Apskaičiuojame šios lygties determinacijos koeficientą
𝑅2 = 1 −𝑆𝑆𝑒
𝑆𝑆𝑅 (𝟐. 𝟏𝟑)
3. Randame Fišerio statistiką
𝐹 =𝑅2
1⁄
(1 − 𝑅2)𝑛 − 2
⁄
Pasirinkus reikšmingumo lygmenį 𝛼, hipotezę 𝐇𝟎 atmetame, jeigu 𝐹 > 𝐹𝛼(1, 𝑛 − 2), jos
neatmetame kai 𝐹 ≤ 𝐹𝛼(1, 𝑛 − 2).čia 𝐹𝛼(1, 𝑛 − 2) yra Fišerio skirstinio su 1 ir (n-2) laisvės laipsnių
𝛼 lygmens kritinė reikšmė.
Page 21
21
3. TYRIMŲ REZULTATAI IR JŲ APTARIMAS
3.1 DUOMENŲ TYRIMAS
Tyrimui naudosime JAV aviacijos 2006-2008 skrydžių duomenis. Duomenys yra 8,9 GB dydžio
csv formato failuose. Duomenys turi 56 atributus (žr. 2 priede).
Tiriame lėktuvo išvykimo vėlavimo priklausomybę nuo personalo darbo vėlavymų , oro
sąlygų, techinės įrangos gedimų, saugumo ir lėktuvų gedimų .
𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 = 𝛽0 + 𝛽1 ∙ 𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙 + 𝛽2 ∙ 𝑂𝑟𝑜𝑉𝑒𝑙 + 𝛽3 ∙ 𝑇𝑒𝑐ℎ𝑉𝑒𝑙 +
+𝛽4 ∙ 𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙 + 𝛽4 ∙ 𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙 (𝟑. 𝟏)
Rasime regresinės lygties parametrų taškinius įverčius �� pagal �� = (𝑋𝑇𝑋)−1 𝑋𝑇𝑌 formulę.
Kadangi įprasta matricų daugybos metodas didžiųjų duomenų kontekste negalimas, nes duomenis
netelpa į darbinę atmintį, todėl pasitelkadami MapReduce paradigmą apskaičiuosime atskirus 𝑋𝑇𝑋 ir
𝑋𝑇𝑌 matricų įverčius ir tuomet apskaičiuosime taškinius įverčius ��.
𝑋𝑇𝑋 matricos radimo programos tekstas:
XtX = values(
from.dfs(
mapreduce(
input = X.index,
map =
function(., Xi) {
Xi = Xi[,-c(1,7)]
keyval(1, list(t(Xi) %*% Xi))},
reduce = function(., YY)
keyval(1, list(Reduce('+', YY))),
combine = TRUE)))[[1]]
Algoritmas sudarytas iš dviejų fazių:
1. Map :
Programa kiekvienam blokeliui priskiria duomenų matricą 𝑋 ir jos transponuotą matricą
𝑋𝑇 , tuomet apskaičiuoja atskiro blokelio matricą 𝑋𝑇𝑋 . Funckija grąžina duomenų porą
(raktas, reikšmė)=(1, 𝑋𝑇𝑋), čia 𝑋𝑇𝑋 yra sąraše.
2. Reduce :
Funkcija sumuoja matricas pagal raktus, kadangi visų matricų raktas lygus 1, todėl jos
visos susumuojamos. Susumuota matrica yra matricos 𝑋𝑇𝑋 įvertis 𝑋𝑇��.
Page 22
22
Analogiškai apskaičiuojame vektoriaus 𝑋𝑇𝑌 įvertį 𝑋𝑇��. Kadangi gauto matricos įverčio 𝑋𝑇��
eilutės ir stulpeliai, bei vektoriaus 𝑋𝑇�� ilgis priklauso nuo regresorių skaičiaus, dėl to šie matmenys
yra nedideli (𝑋𝑇��5×5, 𝑋𝑇��5×1). Todėl gautas duomenų struktūras galime užkrauti į R aplinką
(kompiuterio darbinės atminties užteks struktūroms išsaugot). Tuomet R funkcija solve()
išsprendžiame lygčių sistemą 𝑋𝑇�� = 𝑋𝑇�� ��.
Lentelė 3.1
Taškinių įverčių �� reikšmės
Taškinis įvertis Reikšmė
𝛽0 -3,2708
𝛽1 1,0273
𝛽2 0,9690
𝛽3 0,6260
𝛽4 1,0335
𝛽5 1,0503
Imties regresijos funkcijos analizinė išraiška (žr. 3.1 lentelę):
𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 = 𝛽0 + 𝛽1 ∙ 𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙 + 𝛽2 ∙ 𝑂𝑟𝑜𝑉𝑒𝑙 + 𝛽3 ∙ 𝑇𝑒𝑐ℎ𝑉𝑒𝑙 +
+ 𝛽4 ∙ 𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙 + 𝛽5 ∙ 𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙
𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 = −3,27 + 1,03 ∙ 𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙 + 0,97 ∙ 𝑂𝑟𝑜𝑉𝑒𝑙 + 0,63 ∙ 𝑇𝑒𝑐ℎ𝑉𝑒𝑙 +
+ 1,03 ∙ 𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙 + 1,05 ∙ 𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙 (𝟑. 𝟐)
Tikriname hipotezę „Regresija yra netiesinė“:
𝐇𝟎: 𝛽1 = 𝛽2 = 𝛽3 = 𝛽4 = 𝛽5 = 0
𝐇𝐚 : bent vienas 𝛽𝑗 ≠ 0, 𝑗 = 1, . . . ,4
Iš pradžių apskaičiuojame duomenų imtį n ir prognozuojamo kintamojo 𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 įrašų
vidurkį.
Programos tekstas:
Yvid=values(
from.dfs(
mapreduce(
input =X.index,
map = function(r, Xi)
keyval(1,cbind(nrow(Xi),sum(Xi[,7]))),
reduce=function(r, Xi)
keyval(1,sum(Xi[,2])/sum(Xi[,1])))
Page 23
23
Algoritmo fazės:
1. Map :
Funkcija grąžina kiekvieno blokelio duomenų porą (raktas, reikšmė), kur raktas=1, o
reikšmė- vektorius. Vektoriaus pirmoji komponente yra blokelio eilučių skaičius, antroji –
blokelio 𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 įrašų suma.
2. Reduce :
Programa susumuoja visus vektorius gautus Map fazėje. Po šios fazės grąžina vektorių,
kurio pirmoji komponentė yra analizuojamo duomenų eilučių skaičius, antorji- duomenų
imties 𝐴𝑡𝑣𝑦𝑘𝑖𝑚𝑜𝑉ė𝑙 įrašų vidurkis.
Rezultatas n=4499307 , ��=47,49.
Tuomet randame regresinę nuokrypių kvadratų suma 𝑆𝑆𝑅 ir liekanų kvadratų suma 𝑆𝑆𝑒.
Programos tekstas:
SS=values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
X=Xi[,1:6]
yProg=X%*%b
#SSe
e = Xi[,7]-yProg
a = sum(e^2)
#SSr
eVid = Yprog-Yvid[1]
с = sum(eVid^2)
keyval(1,cbind(a,с))},
reduce=function(., Xi)
keyval(1,cbind(sum(Xi[,1]),sum(Xi[,2]))),
combine = TRUE)
Algoritmo fazės:
1. Map :
Programa kiekvienam blokeliui priskiria duomenų matricą 𝑋, apskaičiuoja kiekvieno jo
įrašo regresinės lygties prognozuojama 𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 reikšmę pagal formulę (3.2), randa
jos ir esamos 𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 reikšmės skirtumą, visus šiuos skirtumus susumuoja. Taip
pat susumuoja blokelių įrašų prognozuojamos reikšmės 𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 ir analizuojamų
duomenų 𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛vidurkio (gautos iš Yvid funkcijos) skirtumus. Šias dvi sumas
Map funkcija grąžina kaip reikšmę, kurios raktas lygus 1.
2. Reduce :
Programa susumuoja visus vektorius gautus Map fazėje.
Page 24
24
Rezultatai: 𝑆𝑆𝑅 = 13105421762, 𝑆𝑆𝑒 = 1300552263.
Apskaičiuojame statistinius koeficientus:
𝑆𝑆𝑅 =
𝑆𝑆𝑅
𝑘= 261084352 (𝟑. 𝟑)
𝑆𝑆𝑒 =
𝑆𝑆𝑒
𝑛 − 𝑘 − 1= 289,06 (𝟑. 𝟒)
čia k regresorių skaičius.
Randame 𝐹 =𝑆𝑆𝑅
𝑆𝑆𝑒 ⁄ =9067723 statistiką. Pasirenkame reikšmingumo lygmenį 𝛼 = 0,05,
hipotezę 𝐇𝟎 atmetame, nes 𝐹 = 9067723 > 𝐹𝛼(5, 4499301 − 5 − 1)=2,21 t.y. bent vienas
populiacijos regresijos koeficientas nelygus nuliui ir tiesinės daugialypės regresijos modelis bent jau
iš dalies prognozėms tinka.
Dabar patikrinkime atskiro populiacijos koeficiento reikšmingumą:
𝐇𝟎: 𝛽0 = 0
𝐇𝐚 : 𝛽𝑗 ≠ 0, 𝑗 = 1, . . . ,5
Apskaičiuojame regresijos koeficientų standartinį nuokrypį ��𝑗 ir Stjudento statistiką 𝑡𝑗 pagal
formules:
𝑠��𝑗= √𝑆𝑆𝑒
∙ 𝑐𝑗𝑗 (𝟑. 𝟓)
𝑡𝑗 =��𝑗
𝑠��𝑗
⁄ (𝟑. 𝟔)
čia 𝑐𝑗𝑗 kovariacijų matricos 𝐶 = (𝑋𝑇𝑋)−1 įstrižainės elementas.
Lentelė 3.2
Taškinių įverčių �� standartiniai nuokrypiai ir Stjudento statistikos
Taškinis įvertis 𝒔��𝒋 𝒕𝒋
𝛽0 0,0115 -284,06
𝛽1 0,0002 4886,02
𝛽2 0,0004 2253,48
𝛽3 0,0003 2315,77
𝛽4 0,0034 300,39
𝛽5 0,0002 4936,29
Page 25
25
Pasirenkame reikšmingumo lygį 𝛼 = 0,05. Kadangi visų 𝛽��( 𝑗 = 1,5 ) Stjudento statistikų
moduliai (žr. 3.2 lentelę) didesni už 𝑡0,05/2(4499301 − 5 − 1)= 2,21 , visos hipotezės 𝐇𝟎 yra
atmetamos t.y. visi populiacijos koeficientai reikšmingai skiriasi nuo 0 ir visi kintamieji
(𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙, 𝑂𝑟𝑜𝑉𝑒𝑙, 𝑇𝑒𝑐ℎ𝑉𝑒𝑙, 𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙, 𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙) yra statistiškai reikšmingi
kintamojo 𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 prognozavimui.
Apskaičiuojame determinacijos koeficientą
𝑟2 = 1 −𝑆𝑆𝑒
𝑆𝑆𝑅 = 0,9097 (𝟑. 𝟕)
90,97% kintamojo 𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 sklaidos apie vidurkį galime paaiškinti kintomojo
𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 tiesine regresija nepriklausomų kintamųjų 𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙, 𝑂𝑟𝑜𝑉𝑒𝑙, 𝑇𝑒𝑐ℎ𝑉𝑒𝑙,
𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙 ir 𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙 atžvilgiu, likusi sklaidos dalis yra nepaaiškinama.
Įvertinkime regresijos lygties kintamųjų multikolinearumą. Sukonstruojame kiekvienam
regresoriui lygtis:
𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙 = 𝛼0 + 𝛼1 ∙ 𝑂𝑟𝑜𝑉𝑒𝑙 + 𝛼2 ∙ 𝑇𝑒𝑐ℎ𝑉𝑒𝑙 + 𝛼3 ∙ 𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙 +
+ 𝛼4 ∙ 𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙 + 𝜀 (𝟑. 𝟖)
𝑂𝑟𝑜𝑉𝑒𝑙 = 𝛼0 + 𝛼1 ∙ 𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙 + 𝛼2 ∙ 𝑇𝑒𝑐ℎ𝑉𝑒𝑙 + 𝛼3 ∙ 𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙 +
+ 𝛼4 ∙ 𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙 + 𝜀 (𝟑. 𝟗)
𝑇𝑒𝑐ℎ𝑉𝑒𝑙 = 𝛼0 + 𝛼1 ∙ 𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙 + 𝛼2 ∙ 𝑂𝑟𝑜𝑉𝑒𝑙 + 𝛼3 ∙ 𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙 +
+ 𝛼4 ∙ 𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙 + 𝜀 (𝟑. 𝟏𝟎)
𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙 = 𝛼0 + 𝛼1 ∙ 𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙 + 𝛼2 ∙ 𝑂𝑟𝑜𝑉𝑒𝑙 + 𝛼3 ∙ 𝑇𝑒𝑐ℎ𝑉𝑒𝑙 +
+ 𝛼4 ∙ 𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙 + 𝜀 (𝟑. 𝟏𝟏)
𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙 = 𝛼0 + 𝛼1 ∙ 𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙 + 𝛼2 ∙ 𝑂𝑟𝑜𝑉𝑒𝑙 + 𝛼3 ∙ 𝑇𝑒𝑐ℎ𝑉𝑒𝑙 +
+ 𝛼4 ∙ 𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙 + 𝜀 (𝟑. 𝟏𝟐)
RHadoop
Analogiškai kaip ir kintamajam 𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 šioms lygtims apskaičiuojame regresines
nuokrypių kvadratų sumas 𝑆𝑆𝑅 , liekanų kvadratų sumas 𝑆𝑆𝑒 ir determinacijos koeficientą 𝑟2. Tuomet
kiekvievam regresoriui apaskaičiuojame multikolinearumo koeficientą VIF:
VIF =1
1 − 𝑅2 (𝟑. 𝟏𝟑)
Page 26
26
Lentelė 3.3
Regresorių multikolinearumo koeficientai VIF
Regresorius 𝑹𝟐 VIF
𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙 0,050 1,05
𝑂𝑟𝑜𝑉𝑒𝑙 0,068 1,07
𝑇𝑒𝑐ℎ𝑉𝑒𝑙 0,049 1,05
𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙 0,001 1.00
𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙 0,049 1,05
Visų regresorių VIF <4 (žr. 3.3 lentelę) . Taigi, formaliai žiūrint, jokio kintamųjų
multikolinearumo nėra.
Patikrinkime ar gautas modelis (3,2) yra autoregresijos modelis. Apskaičiuojame Durbino –
Vatsono statistiką
𝑑 =∑ (𝜀𝑖 − 𝜀𝑖−1)
2𝑛𝑖=2
∑ 𝜀𝑖2𝑛
𝑖=1
= 1,76 (𝟑. 𝟏𝟒)
kadangi 1,5 < 𝑑 < 2,5 autokoreliacijos nėra t.y. vieno lėktuvo išvykimo vėlavimai nedaro įtakos kito
išvykimo vėlavimamas.
Patikrinkime ar liekamosios paklaidos dispersija nepriklauso nuo regresorių reikšmių. Jeigu
Tikriname hipotezę:
𝐇𝟎: 𝑉𝑎𝑟(𝜀2|𝑋1, 𝑋2, …𝑋𝑘) = 𝜎
𝐇𝐚 : 𝜎1 = 𝜎2 = ⋯ = 𝜎𝑘
Sudarome tiriamos lygties Y (3.12) liekamųjų paklaidų regresiją nuo prognozuotų �� reikšmių
𝜀𝑗2 = 𝜎0 + 𝛼1 ∙ ��𝑗, 𝑗 = 1, 𝑛 (𝟑. 𝟏𝟓)
Apskaičiuojame šios lygties determinacijos koeficientą ir Fišerio statistiką
𝑅2 = 1 −𝑆𝑆𝑒
𝑆𝑆𝑅= 0,32 (𝟑. 𝟏𝟔)
𝐹 =𝑅2
1⁄
(1 − 𝑅2)𝑛 − 2
⁄ = 2117317 (𝟑. 𝟏𝟕)
Pasirinkus reikšmingumo lygmenį 𝛼 = 0,05, 𝐇𝟎 atmetame, nes 𝐹 > 𝐹𝛼(1,4499299) = 3,84.
Page 27
27
Apskaičiuokime liekamųjų paklaidų vidurkį 𝜀 =𝑆𝑆𝑒
𝑛≈ 0.
Patikrinkime liekamųjų paklaidų normalumą. Normalumo testai yra nepatikimi, kai duomenų
apimtis didelė. Tačiau didelė imtis vizualiai leidžia pamatyti ar duomenys yra pasiskirstę pagal tam
tikrą skirstinį. Liekamųjų paklaidų normalumui nustatyti nubraižysime jų histogramą intervale
[−7 ∙sd,7∙ 𝑠𝑑], kur intervalo ilgį paimsime vieną septintąją dalį sd (3.18).
𝑠𝑑 = √1
𝑛∑(𝜀𝑖 − 𝜀)2
𝑛
𝑖=1
(𝟑. 𝟏𝟖)
Programos tekstas:
skirstinys =
values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
yProg=Xi[,1:6]%*%b
e = Xi[,7]-yProg
lentele <- cut(e, breaks=intervalai)
keyval(., list(table(lentele)))}
)))
Map faze:
1. Programa kiekvienam blokeliui apskaičiuoja liekamąsias paklaidas ir pagal nurodytus
intervalus (programoje intervalai) paklaidos suskirstomos į juos. Funkcija šias dažnių
lenteles grąžina sąraše.
Sąraše esančias dažnių lenteles susumuojame funkcija Reduce() ir gauta skirstinį pavaizduojame
grafiškai.
Page 28
28
3.1 pav. Liekamųjų paklaidų 𝜀 histograma
Vizualiai matyti (3.1 pav), kad liekamųjų pakalaidų 𝜀 skirstinys yra suderintas su standartiniu
normaliuoju skirstiniu.
Page 29
29
IŠVADOS
1. Atlikus literatūros analizę pasirinkau Apache Hadoop programinę įrangą tyrimui atlikti. Ją
integravau su R statistiniu paketu. Ši sistema yra galingas programavimo įrankis
išnaudojantis Apache Hadoop ir R privalumus:
Hadoop galimybę apdoroti duomenis kompiuterių klasteriuose
R funkcionalumą.
2. Apskaičiavus regresinį modelį:
𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 = −3,27 + 1,03 ∙ 𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙 + 0,97 ∙ 𝑂𝑟𝑜𝑉𝑒𝑙 + 0,63 ∙ 𝑇𝑒𝑐ℎ𝑉𝑒𝑙 +
+ 1,03 ∙ 𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙 + 1,05 ∙ 𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙
Šiame modelyje 90,97% kintamojo 𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 sklaidos apie vidurkį galime
paaiškinti kintomojo 𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 tiesine regresija nepriklausomų kintamųjų
𝑃𝑒𝑟𝑠𝑜𝑛𝑎𝑙𝑜𝑉𝑒𝑙, 𝑂𝑟𝑜𝑉𝑒𝑙, 𝑇𝑒𝑐ℎ𝑉𝑒𝑙, 𝑆𝑎𝑢𝑔𝑢𝑚𝑜𝑉𝑒𝑙 ir 𝐿𝑒𝑘𝑡𝑢𝑣𝑜𝑉𝑒𝑙 atžvilgiu.
3. Visiems modelio kintamiesiems hipotezė apie parametro lygybę 0 buvo atmestos t.y. visi
regresoriai yra statistiškai reikšmingi kintamojo 𝐼𝑠𝑉𝑒𝑙𝑎𝑣𝑖𝑚𝑎𝑠𝑀𝑖𝑛 prognozavimui. Visi
rodikliai nėra multikolinarūs.
4. Atlikus analizę nustatėme, jog regresijos paklaidos 𝜀 pasiskirstę pagal normalųjį skirstinį, jų
dispersija nepriklauso nuo regresorių reikšmių ir jie tarpusavyu nepriklausomi.
Page 30
30
LITERATŪROS SĄRAŠAS
[1]. Opresnik, David, and Marco Taisch. “The Value of Big Data in Servitization.” International
Journal of Production Economics 165 (July 2015): 174–84. doi:10.1016/j.ijpe.2014.12.036.
[2]. Fosso Wamba, Samuel, Shahriar Akter, Andrew Edwards, Geoffrey Chopin, and Denis
Gnanzou. “How ‘big Data’ Can Make Big Impact: Findings from a Systematic Review and a
Longitudinal Case Study.” International Journal of Production Economics 165 (July 2015):
234–46. doi:10.1016/j.ijpe.2014.12.031.
[3]. Jagadish, H. V., Johannes Gehrke, Alexandros Labrinidis, Yannis
Papahttp://www.mobogenie.com/pictureskonstantinou, Jignesh M. Patel, Raghu
Ramakrishnan, and Cyrus Shahabi. “Big Data and Its Technical Challenges.”
Communications of the ACM 57, no. 7 (July 1, 2014): 86–94. doi:10.1145/2611567.
[4]. Assunção, Marcos D., Rodrigo N. Calheiros, Silvia Bianchi, Marco A.S. Netto, and
Rajkumar Buyya. “Big Data Computing and Clouds: Trends and Future Directions.” Journal
of Parallel and Distributed Computing 79–80 (May 2015): 3–15.
doi:10.1016/j.jpdc.2014.08.003.
[5]. Jin, Xiaolong, Benjamin W. Wah, Xueqi Cheng, and Yuanzhuo Wang. “Significance and
Challenges of Big Data Research.” Big Data Research 2, no. 2 (June 2015): 59–64.
doi:10.1016/j.bdr.2015.01.006.
[6]. Marz, Nathan, and James Warren. Big Data: Principles and Best Practices of Scalable Real-
Time Data Systems. Shelter Island, NY: Manning, 2015.
[7]. Ganesh Chandra, Deka. “BASE Analysis of NoSQL Database.” Future Generation
Computer Systems 52 (November 2015): 13–21. doi:10.1016/j.future.2015.05.003.
[8]. Ghazi, Mohd Rehan, and Durgaprasad Gangodkar. “Hadoop, MapReduce and HDFS: A
Developers Perspective.” Procedia Computer Science 48 (2015): 45–50.
doi:10.1016/j.procs.2015.04.108.
[9]. Prajapati, Vignesh. Big Data Analytics with R and Hadoop: Set up an Integrated
Infrastrucutre of R and Hadoop to Turn Jour Data Analytics into Big Data Analytics.
Birmingham: Packt Publ, 2013.
[10]. Čekanavičius V., Murausk G.,Taikomoji regresinė analizė socialiniuose tyrimuose
[11].Čekanavičius V., Murauskas G., Statistika ir jos taikymai. D.1-Vilnius: TEV, 2000.-
Page 31
31
PRIEDAS : JAV AVIACIJOS SKRYDŽIŲ ATRIBUTAI
ATRIBUTAS ATRIBUTO REIKŠMĖ
Metai Skrydžio metai
Ketvirtis Skrydžio metų ketvirtis
Mėnesis Skrydžio mėnesis
Diena Skrydžio mėnesio diena
SavDiena Skrydžio savaitės diena
Data Skrydžio data
LektuvoID Lėktuvo ID
LinijaID Oro linijos ID
LekNumeris Lėktuvo numeris
IsUostas Išvykimo oro uosto miesto trumpinys
IsUostoMiestas Išvykimo oro uosto mietsas
IsUostoValstijaTrp Išvykimo oro uosto valstijos trumpinys
IsUostoValstijaKod Išvykimo oro uosto kodas
IsUostoValstija Išvykimo oro uosto valstija
IsUostoKodas Išvykimo oro uosto pasaulio kodas
AtUostas Atvykimo oro uosto miesto trumpinys
AtUostoMiestas Atvykimo oro uosto mietsas
AtUostoValstijaTrp Atvykimo oro uosto valstijos trumpinys
AtUostoValstijaKod Atvykimo oro uosto kodas
AtUostoValstija Atvykimo oro uosto valstija
AtUostoKodas Atvykimo oro uosto pasaulio kodas
CRSIsLaikas CRS išvykimo laikas
IsLaikas Realus išvykimo laikas
IsSkirtumas Realaus išvykimo ir numatyto išvykimo laiko skirtumas. Ankstensi
išvykimai žymimi minuso ženklu.
IsSkirtumasMin Realaus išvykimo ir numatyto išvykimo laiko skirtumas. Ankstensi
išvykimai žymimi 0.
IsSkirtumas15 Indikatorius nusakantis ar lėktuvo išvykimas vėlavo daugiau nei 15
minučių. ( 1 = taip)
IsIntervalas Išvykimo velamimo laiko intervalas (kas 15 minučių nuo <-15 iki >180)
CRSIsInt CRS išvykimo laiko intervalas
PakilimoLaikas Lėktuvo pakilimo laikas
IsRatai Lėktuvo ratų įtraukimo laikas
AtRatai Lėktuvo ratų ištraukimo laikas
NusileidimoLaikas Lėktuvo nusileidimo laikas
CRSAtLaikas CRS atvykimo laikas
Page 32
32
AtLaikas Realus atvykimo laikas
AtSkirtumas Realaus atvykimo ir numatyto atvykimo laiko skirtumas. Ankstensi
atvykimai žymimi minuso ženklu.
AtSkirtumasMin Realaus atvykimo ir numatyto atvykimo laiko skirtumas. Ankstensi
atvykimai žymimi 0.
AtSkirtumas15 Indikatorius nusakantis ar lėktuvo atvykimas vėlavo daugiau nei 15
minučių. ( 1 = taip)
AtIntervalas Atvykimo velamimo laiko intervalas (kas 15 minučių nuo <-15 iki >180)
CRSAtInt CRS atvykimo laiko intervalas
Atsauktas Indikatorius nusakantis ar reisas atšauktas (1=taip)
AtsaukimoPr Atšaukto reiso priežastis
Nukreiptas Indikatorius nusakantis ar reisas su persėdimo (1=taip)
CRSOreLaikas Lėktuvo ore praleistas CRS laikas
OreLaikas Lėktuvo ore praleistas laikas
SkrLaikas Skrydžio laikas
Skrydziai Skrydžių skaičius
Page 33
33
PRIEDAS : PROGRAMOS TEKSTAS
#Instalizuoja Hadoop R aplinkoje
Sys.setenv("HADOOP_HOME"="/home/hduser/hadoop")
Sys.setenv("HADOOP_CMD"="/home/hduser/hadoop/bin/hadoop")
Sys.setenv("HADOOP_STREAMING"="/home/hduser/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.5.2.jar")
Sys.setenv(HADOOP_CONF="/home/hduser/hadoop/conf")
library(rJava)
library(rmr2)
library(rhdfs)
hdfs.init()
#Duomenys patalpina į HDFS
hdfs.put("/home/hduser/Documents/Data/","/RHadoop/1/")
#input format
csv.input.format = make.input.format(format='csv', mode='text', streaming.format = NULL, sep=',', skip=1,
col.names = c("Year", "Quarter", "Month", "DayofMonth", "DayOfWeek"
, "FlightDate", "UniqueCarrier", "AirlineID", "Carrier",
"TailNum", "FlightNum", "Origin","OriginCityName" ,
"OriginState" , "OriginStateFips" ,
"OriginStateName" , "OriginWac" , "Dest" ,
"DestCityName" , "DestState" , "DestStatateFip" ,
"DestStateName" , "DestWac" , "CRSDepTime" ,
"DepTime", "DepDelay", "DepDelayMinutes" ,
"DepDel15", "DepatureDelayGroups", "DepTimeBlk" ,
"TaxiOut", "WheelsOff" , "WheelsOn",
"TaxiIn" , "CRSArrTime" , "ArrTime" ,
"ArrDelay", "ArrDelayMinutes" , "ArrDel15",
"AriivalDelayGroups" , "ArrTimeBlk" , "Cancelled" ,
"CancellationCode" , "Diverted" , "CRSElapsedTime",
"ActualElapsedTime" , "AirTime" , "Flights" ,
"Distance" , "DistanceGroup" , "CarrierDelay" ,
"WeatherDelay" , "NASDelay" , "SecurityDelay" ,
"LateAircraftDelay","X" ),
stringsAsFactors=F)
Sum =
function(., YY)
keyval(1, list(Reduce('+', YY)))
Page 34
34
#Nuskaitomi duomenys
X.index =
mapreduce(
input = listas,
input.format = csv.input.format,
map=
function(., Xi){
Xi= Xi[!is.na(Xi[,"DepDelayMinutes"]), ]
Xi= Xi[!is.na(Xi[,"CarrierDelay"]), ]
Xi= Xi[!is.na(Xi[,"WeatherDelay"]), ]
Xi= Xi[!is.na(Xi[,"NASDelay"]), ]
Xi= Xi[!is.na(Xi[,"SecurityDelay"]), ]
Xi= Xi[!is.na(Xi[,"LateAircraftDelay"]), ]
keyval(.,cbind(1 ,Xi[,"CarrierDelay"], Xi[,"WeatherDelay"],
Xi[,"NASDelay"],Xi[,"SecurityDelay"],Xi[,"LateAircraftDelay"],
Xi[,"DepDelayMinutes"]))})
XtX =
values(
from.dfs(
mapreduce(
input = X.index,
map =
function(., Xi) {
Xi = Xi[,-7]
keyval(1, list(t(Xi) %*% Xi))},
reduce = Sum,
combine = TRUE)))[[1]]
Xty =
values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
yi = Xi[,7]
Xi = Xi[,-7]
keyval(1, list(t(Xi) %*% yi))},
reduce = Sum,
combine = TRUE)))[[1]]
Page 35
35
b <-solve(XtX, Xty)
Yvid=values(
from.dfs(
mapreduce(
input =X.index,
map = function(r, Xi)
keyval(1,cbind(nrow(Xi),sum(Xi[,7]))),
reduce=function(r, Xi){
rows =sum(Xi[,1])
keyval(1,cbind(Yvidurkis=sum(Xi[,2])/rows,EiluciuSk=rows))}
)))
SSr=values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
X=Xi[,1:6]
yProg=X%*%b1
#SSe
e = Xi[,7]-yProg
a = sum(e^2)
#SSr
eVid = yProg-Yvid[1]
c = sum(eVid^2)
keyval(1,cbind(a,c))},
reduce=function(., Xi)
keyval(1,cbind(SS=sum(Xi[,1]),SSr=sum(Xi[,2]))),
combine = TRUE)
))
SSr=values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
eVid = Xi[,1:6]%*%b-Yvid
a = sum(eVid^2)
keyval(1,a)},
reduce=function(., Xi)
keyval(1,sum(Xi)),
Page 36
36
combine = TRUE)
))
r2 <- SSr[2]/(SSr[1]+SSr[2])
Fstat <- (SSr[2]/(5 - 1))/(SSr[1]/Yvid[2])
sd <- (SSr[1]/Yvid[2])^0.5
intervalai <-seq(from=-8*sd, to=8*sd, by=sd/9)
skirstinys =
values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
yProg=Xi[,1:6]%*%b
e = Xi[,7]-yProg
lentele <- cut(e, breaks=intervalai)
keyval(., list(table(lentele)))}
)))
skirstinys2 <- Reduce("+",skirstinys)
plot(skirstinys2)
plot(skirstinys2, ylab= "Dažnis", xlab="Liekamosios paklaidos, min")
DurVat=values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
yProg=Xi[,1:6]%*%b
e = Xi[,7]-yProg
n=nrow(Xi)
a=sum((e[2:n]-e[1:(n-1)])^2)
c=sum(e^2)
keyval(1,cbind(a,c))},
reduce=function(., Xi)
keyval(1,cbind(sum(Xi[,1]),sum(Xi[,2]))),
combine = TRUE)
))
Page 37
37
#Multikolnearumas
XtX =
values(
from.dfs(
mapreduce(
input = X.index,
map =
function(., Xi) {
Xi = Xi[,-c(2,7)]
keyval(1, list(t(Xi) %*% Xi))},
reduce = Sum,
combine = TRUE)))[[1]]
Xty =
values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
yi = Xi[,2]
Xi = Xi[,-c(2,7)]
keyval(1, list(t(Xi) %*% yi))},
reduce = Sum,
combine = TRUE)))[[1]]
b1 <-solve(XtX, Xty)
Yvid1=values(
from.dfs(
mapreduce(
input =X.index,
map = function(r, Xi)
keyval(1,cbind(nrow(Xi),sum(Xi[,2]))),
reduce=function(r, Xi){
rows =sum(Xi[,1])
keyval(1,cbind(Yvidurkis=sum(Xi[,2])/rows,EiluciuSk=rows))}
)))
SSr1=values(
from.dfs(
mapreduce(
input =X.index,
Page 38
38
map = function(., Xi) {
X=Xi[,-c(2,7)]
yProg=X%*%b1
#SSe
e = Xi[,2]-yProg
a = sum(e^2)
#SSr
eVid = yProg-Yvid1[1]
c = sum(eVid^2)
keyval(1,cbind(a,c))},
reduce=function(., Xi)
keyval(1,cbind(sum(Xi[,1]),sum(Xi[,2]))),
combine = TRUE)
))
r21 <- SSr1[2]/(SSr1[1]+SSr1[2])
###
XtX =
values(
from.dfs(
mapreduce(
input = X.index,
map =
function(., Xi)Breusch-Pagan TestBreusch-Pagan TestBreusch-Pagan Test {
Xi = Xi[,-c(3,7)]
keyval(1, list(t(Xi) %*% Xi))},
reduce = Sum,
combine = TRUE)))[[1]]
Xty =
values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
yi = Xi[,3]
Xi = Xi[,-c(3,7)]
keyval(1, list(t(Xi) %*% yi))},
reduce = Sum,
combine = TRUE)))[[1]]
Page 39
39
b2 <-solve(XtX, Xty)
Yvid2=values(
from.dfs(
mapreduce(
input =X.index,
map = function(r, Xi)
keyval(1,cbind(nrow(Xi),sum(Xi[,3]))),
reduce=function(r, Xi){
rows =sum(Xi[,1])
keyval(1,cbind(Yvidurkis=sum(Xi[,2])/rows,EiluciuSk=rows))}
)))
SSr2=values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
X=Xi[,-c(3,7)]
yProg=X%*%b2
#SSe
e = Xi[,3]-yProg
a = sum(e^2)
#SSr
eVid = yProg-Yvid2[1]
c = sum(eVid^2)
keyval(1,cbind(a,c))},
reduce=function(., Xi)
keyval(1,cbind(sum(Xi[,1]),sum(Xi[,2]))),
combine = TRUE)
))
r21 <- SSr2[2]/(SSr2[1]+SSr2[2])
###
XtX =
values(
from.dfs(
mapreduce(
input = X.index,
map =
function(., Xi) {
Xi = Xi[,-c(4,7)]
keyval(1, list(t(Xi) %*% Xi))},
Page 40
40
reduce = Sum,
combine = TRUE)))[[1]]
Xty =
values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
yi = Xi[,4]
Xi = Xi[,-c(4,7)]
keyval(1, list(t(Xi) %*% yi))},
reduce = Sum,
combine = TRUE)))[[1]]
b3 <-solve(XtX, Xty)
Yvid3=values(
from.dfs(
mapreduce(
input =X.index,
map = function(r, Xi)
keyval(1,cbind(nrow(Xi),sum(Xi[,4]))),
reduce=function(r, Xi){
rows =sum(Xi[,1])
keyval(1,cbind(Yvidurkis=sum(Xi[,2])/rows,EiluciuSk=rows))}
)))
SSr3=values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
X=Xi[,-c(4,7)]
yProg=X%*%b3
#SSe
e = Xi[,4]-yProg
a = sum(e^2)
#SSr
eVid = yProg-Yvid3[1]
c = sum(eVid^2)
Page 41
41
keyval(1,cbind(a,c))},
reduce=function(., Xi)
keyval(1,cbind(sum(Xi[,1]),sum(Xi[,2]))),
combine = TRUE)
))
r23 <- SSr3[2]/(SSr3[1]+SSr3[2])
###5
XtX =
values(
from.dfs(
mapreduce(
input = X.index,
map =
function(., Xi) {
Xi = Xi[,-c(6,7)]
keyval(1, list(t(Xi) %*% Xi))},
reduce = Sum,
combine = TRUE)))[[1]]
Xty =
values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
yi = Xi[,6]
Xi = Xi[,-c(6,7)]
keyval(1, list(t(Xi) %*% yi))},
reduce = Sum,
combine = TRUE)))[[1]]
b4 <-solve(XtX, Xty)
Yvid4=values(
from.dfs(
mapreduce(
input =X.index,
map = function(r, Xi)
keyval(1,cbind(nrow(Xi),sum(Xi[,5]))),
reduce=function(r, Xi){
Page 42
42
rows =sum(Xi[,1])
keyval(1,cbind(Yvidurkis=sum(Xi[,2])/rows,EiluciuSk=rows))}
)))
SSr4=values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
X=Xi[,-c(5,7)]
yProg=X%*%b4
#SSe
e = Xi[,5]-yProg
a = sum(e^2)
#SSr
eVid = yProg-Yvid4[1]
c = sum(eVid^2)
keyval(1,cbind(a,c))},
reduce=function(., Xi)
keyval(1,cbind(sum(Xi[,1]),sum(Xi[,2]))),
combine = TRUE)
))
r24 <- SSr4[2]/(SSr4[1]+SSr4[2])
###4
XtX =
values(
from.dfs(
mapreduce(
input = X.index,
map =
function(., Xi) {
Xi = Xi[,-c(6,7)]
keyval(1, list(t(Xi) %*% Xi))},
reduce = Sum,
combine = TRUE)))[[1]]
Xty =
values(
from.dfs(
Page 43
43
mapreduce(
input =X.index,
map = function(., Xi) {
yi = Xi[,6]
Xi = Xi[,-c(6,7)]
keyval(1, list(t(Xi) %*% yi))},
reduce = Sum,
combine = TRUE)))[[1]]
b5 <-solve(XtX, Xty)
Yvid5=values(
from.dfs(
mapreduce(
input =X.index,
map = function(r, Xi)
keyval(1,cbind(nrow(Xi),sum(Xi[,6]))),
reduce=function(r, Xi){
rows =sum(Xi[,1])
keyval(1,cbind(Yvidurkis=sum(Xi[,2])/rows,EiluciuSk=rows))}
)))
SSr5=values(
from.dfs(
mapreduce(
input =X.index,
map = function(., Xi) {
X=Xi[,-c(6,7)]
yProg=X%*%b5
#SSe
e = Xi[,6]-yProg
a = sum(e^2)
#SSr
eVid = yProg-Yvid5[1]
c = sum(eVid^2)
keyval(1,cbind(a,c))},
reduce=function(., Xi)
keyval(1,cbind(sum(Xi[,1]),sum(Xi[,2]))),
combine = TRUE)
))
r25 <- SSr5[2]/(SSr5[1]+SSr5[2])
Page 44
44
#Heter
X.het =
mapreduce(
input = X.index,
map=
function(., Xi){
yProg=Xi[,-7]%*%b
e = (Xi[,6]-yProg)^2
keyval(.,cbind(1 ,e, yProg))})
XtX =
values(
from.dfs(
mapreduce(
input = X.het,
map =
function(., Xi) {
Xi = Xi[,-2]
keyval(1, list(t(Xi) %*% Xi))},
reduce = Sum,
combine = TRUE)))[[1]]
Xty =
values(
from.dfs(
mapreduce(
input =X.het,
map = function(., Xi) {
yi = Xi[,2]
Xi = Xi[,-2]
keyval(1, list(t(Xi) %*% yi))},
reduce = Sum,
combine = TRUE)))[[1]]
bh <-solve(XtX, Xty)
Yvidh=values(
from.dfs(
mapreduce(
Page 45
45
input =X.het,
map = function(r, Xi)
keyval(1,cbind(nrow(Xi),sum(Xi[,2]))),
reduce=function(r, Xi){
rows =sum(Xi[,1])
keyval(1,cbind(Yvidurkis=sum(Xi[,2])/rows,EiluciuSk=rows))}
)))
SSh=values(
from.dfs(
mapreduce(
input =X.het,
map = function(., Xi) {
X=Xi[,c(1,3)]
yProgn=X%*%bh
#SSe
e = Xi[,2]-yProgn
a = sum(e^2)
#SSr
eVid = yProgn-Yvidh[1]
c = sum(eVid^2)
keyval(1,cbind(a,c))},
reduce=function(., Xi)
keyval(1,cbind(SSe=sum(Xi[,1]),SSr=sum(Xi[,2]))),
combine = TRUE)))
r2 <- SSh[2]/(SSh[1]+SSh[2])