BraMira / APPR-2014-15

Repozitorij z gradivi za predmet Analiza podatkov s programom R v študijskem letu 2014/15
MIT License
0 stars 0 forks source link

4. faza #8

Closed BraMira closed 9 years ago

BraMira commented 9 years ago

Za 4. fazo sem se tudi po predlogu profesorja usmerila bolj na analizo podatkov po regijah, zato sem uvozila tudi nove podatke po regijah. Hotela sem primerjati podatke s prileganjem v tabelah ZadRegije, EkoRast in PovpR. Težavo imam v PovpR, kjer imam drugačen vrstni red vrstic kot v ZadRegije. Poleg tega pa zaradi tega, ker so v ZadRegije na voljo podatki samo za leti 2012 in 2013, za prileganje ne dobim lepih grafov, a se da mogoče narediti, da bi upoštevala obe leti v enem grafu, torej da bi bilo lm(X2012 in X2013 ~ Povprecje.2012 in 2013) Ali pa to ni najbolj primeren način analize, mi priporočate še kakega drugega?

jaanos commented 9 years ago

Če hočeš preurediti vrstice ene razpredelnice v vrstni red druge, si lahko pomagaš s funkcijo match, npr.

m <- match(rownames(EkoRast), rownames(PovpR))
PovpR <- PovpR[m,]

Podatke lahko dobiš tudi iz več stolpcev - pomembno je, da imaš vektorje z ujemajočimi podatki (v tvojem primeru torej, da imaš na istem mestu v obeh vektorjih podatke za isto regijo in leto). Lahko bi torej naredila kaj takega:

povp.r <- c(X2012, X2013)
zad <- c(Povprecje.2012, Povprecje.2013)
lin2 <- lm(povp.r ~ zad)

Mimogrede: trenutno se proti koncu programa analiza.r nanašaš na spremenljivko lin, ki je nikjer ne definiraš - najbrž želiš tam uporabiti lin1.

BraMira commented 9 years ago

A je potem bolj pravilno graf narisat takole plot(Povprecje.2013,X2013) par(new=TRUE) plot(Povprecje.2012,X2012,axes=FALSE) ali plot(zad,povp.r). A se mi sploh splača linearno prileganje delat, ker ne zdi se mi preveč uporabno, ali je v mojem primeru boljše z lowess, loess in gam(ta mi trenutno ne dela).

jaanos commented 9 years ago

Smiselno je seveda narisati tiste podatke, iz katerih si zgradila model. Prvi način ni ustrezen, saj dejansko rišeš en graf preko drugega, pri čemer imata lahko oba grafa različna merila osi. Drugi način je v redu, saj enostavno prikaže vse podatke, iz katerih gradiš model.

Morda bi vseeno želela ločiti podatke glede na leto, npr. z barvo. Lahko bi naredila vektor barv z ustrezno barvo za vsak podatek, lahko pa tudi narišeš točke za vsako leto posebej:

plot(range(zad), range(povp.r), "n") # pripravimo koordinatni sistem
points(Povprecje.2013, X2013, col = "red")
points(Povprecje.2012, X2012, col = "blue")

Sicer pa boš morala sama presoditi, ali je linearno prileganje smiselno. Sam bi rekel, da se neka šibka povezanost sicer kaže, vprašanje pa je, ali je statistično pomembna (ampak to ni bistvo tega predmeta). Navsezadnje je tudi to, da je npr. neka korelacija manjša od pričakovane, lahko zanimiva informacija. Seveda v poročilu tudi interpretiraj, kar vidiš na grafu (npr. višje plače so očitno pogoj, ne pa tudi zagotovilo za višje zadovoljstvo).

Kar se tiče uporabe drugih modelov, je tako, da so najbolj uporabni v primerih, ko se kaže neka korelacija, ki pa jo je težko opisati z enim samim polinomom (npr. če ponekod izgleda povezanost linearna, drugod kvadratna itd.). V primerih, ko ni izrazite korelacije, se morda izplača delati čim enostavnejši model.

Za uporabo funkcije gam moraš uvoziti knjižnico mgcv.

BraMira commented 9 years ago

Iz tabele Podjetja bi rada še pokazala(na grafu), da se v 2008-2013 št. podjetij povečalo, št. zaposlenih pa zmanjšalo, vendar se mi zdi, da trenuten graf tega ne prikazuje najbolje. Kako bi to lahko drugače pokazala?

Zanima me še kako napoveš podatke in jih prikažeš na grafu, vem, da naj bi napoved izgledala nekako takole predict(lin2,data.frame(zad=seq(1,5,1))) vendar mi ni čisto jasno kaj naj bi to pomenilo.

Eno težavico imam pa še pri risanju pdf-a Povprečne_plače.pdf, saj mi nariše dva pdf-a, kjer pri enem ne štima kodiranje.

jaanos commented 9 years ago

Trenutni graf ti kaže samo to, da kjer je več zaposlenih, je več podjetij - oboje je seveda posledica populacije vsake regije. Rast števila podjetij in padec števila zaposlenih bo najlažje prikazati vsako posebej na svojem grafu (na podoben način kot prikazuješ število zaposlenih na podjetje). Oba podatka bi morda bilo smiselno deliti s populacijo posameznih regij, da bodo podatki na samem grafu bolj primerljivi.

Funkcija predict ti za dani model in vsak podatek v razpredelnici (iz stolpca z istim imenom kot spremenljivka, iz katere gradiš model) napove vrednost spremenljivke, ki jo napoveduješ. Če torej namesto seq(1,5,1) podaš vektor vrednosti, za katere te zanima napoved, dobiš vektor ustreznih napovedi. Seveda lahko to uporabiš tudi za risanje modela na obstoječ graf, npr.

curve(predict(lin2,data.frame(zad=x)), add = TRUE)

(če imaš linearen model, bo sicer enostavneje narediti abline(lin2)). Če želiš vizualizirati svojo napoved, lahko pred tem nekoliko razširiš območje grafa s parametroma xlim in ylim pri ukazu plot. Potem lahko dorišeš vodoravne oziroma navpične črte (najlažje kar z abline ter parametroma h in v), s katerimi prikažeš vrednost ene spremenljivke, ko druga doseže določeno vrednost (lahko se npr. vprašaš "kdaj bo moja spremenljivka presegla neko mejo"). Seveda si lahko pomagaš tudi s funkcijo predict, ki ji podaš konkretne podatke, da dobiš točne številke (ki jih lahko vključiš v graf, ali pa napišeš v poročilo).

Kar se tiče datoteke Povprečne_plače.pdf, naj najprej opozorim, da se izogibaj šumnikom v imenih datotek, saj lahko povzročajo probleme. Kaj natančno pa misliš s tem, da nariše dva PDF-ja - da imaš dva grafa v datoteki in pri enem ni v redu kodiranje? Sicer sem moral pri zagonu v Windowsih v glavnem programu pri klicu programa analiza.r dodati še parameter encoding = "UTF-8", a tako v Linuxu kot v Windowsih mi je pravilno izrisalo grafa in šumnike na njih.

BraMira commented 9 years ago

Pdf-u sem spremenila ime, tako da sedaj deluje.

Pri risanju napovedi mi ne deluje za model loess, je kje napaka?

Zanima me tudi, če se da napoved narediti z lowess?

jaanos commented 9 years ago

Funkcija loess naredi model, ki lahko napoveduje samo znotraj intervala, ki zajema tvoje podatke - zato se krivulja na robu tega intervala konča. Podobno je tudi z lowess, ki pa niti ne zgradi modela, pač pa enostavno vrne koordinate točk zglajene krivulje. Napoved znotraj intervala lahko potem delaš z npr. linearno interpolacijo med dvema zaporednima točkama, kamor pade tvoj podatek.

Mimogrede, na grafe dodaj legendo, ki prikazuje, katera črta ustreza kateremu modelu. V poročilo vključi tudi enačbe krivulj za modele, pridobljene z lm.

BraMira commented 9 years ago

Hvala za pomoč.

Prosila bi, če mi lahko projekt še enkrat pregledate, če je potrebno še kaj spremeniti, saj sem drugače zaključila.

jaanos commented 9 years ago

Izgleda vse v redu, tako da sem kar dodal povezavo, s profesorjem se pa domeni za termin zagovora. Če boš še kaj spreminjala, odpri issue na repozitoriju za zagovore.