Escolar Documentos
Profissional Documentos
Cultura Documentos
Niz podataka istog tipa Kategorijalna varijabla k-dimenzionalno polje podataka istog tipa Specijalan sluaj array-a za k=2 Skup nekoliko vektora ili factora istog ili razliitog tipa Podaci vremenskog niza Lista objekata bilo kojeg tipa
Openito o regresiji
Regresijska analiza koristi se za objanjenje ili modeliranje veze izmeu jedne varijable Y, koju zovemo zavisna varijabla, input ili response, i jedne ili vie varijabli 1 , , , koje zovemo zavisne varijable, output, prediktor ili explanatory. Ako je = 1, onda govorimo o jednostavnoj regresiji, inae o viestrukoj (ili multivarijantnoj) regresiji. Zavisna varijabla je neprekidna, a nezavisne mogu biti neprekidne ili diskretne (kategorijalne). Regresijom moemo predviati budue vrijednosti i objasniti vezu izmeu varijabli. Neka mogua proirenja ovih pretpostavki su kada je zavisna varijabla viedimenzionalna ili primjerice kada je kategorijalna. Opi regresijski model ima oblik = 1 , , + gdje je neka funkcija, a greka, koja sasvim sigurno postoji, zbog sluajne prirode varijable . Sluajna greka predstavlja varijaciju neobjanjenu modelom. elimo nekako doi do funkcije . Funkcija ima mnogo, pa pojednostavljujemo model tako da pretpostavljamo neki opi oblik, primjerice da je funkcija linearna = 0 + 1 1 + 2 2 + + + U tom sluaju govorimo o linearnoj regresiji (jednostavnoj ili viestrukoj). Linearnost znai linearnost u parametrima, varijable i dalje smiju biti transformirane. Iako se ovo ini kao velika restrikcija, u praksi se vrlo dobro ponaa. Problem traenja veze izmeu zavisne i nezavisnih varijabli sada se svodi na procjenu + 1 parametara. 1
Promatranjem ili pokusom dolazimo do vrijednosti = 1, , . , 1, , , , , Parametre obino procjenjujemo metodom najmanjih kvadrata, tj. traimo da su to one vrijednosti koje minimiziraju sumu kvadrata odstupanja stvarnih od predvienih vrijednosti. Tako dolazimo do procjene za parametre 0 , 1 , , Na osnovu njih definiramo Predviene vrijednosti: 0 + 1 1, + + , = Reziduali: =
Za procjenu parametara bilo kojeg linearnog modela (znai linearnog u parametrima) koristi se funkcija lm(). Osim podataka osnovni argument ove funkcije je tzv. R formula modela. 2
S lijeve strane je uvijek zavisna varijabla (response), zatim znak ~ i desna strana opisuje vezu izmeu nezavisnih varijabli (prediktora). Gornja formula jednostavno opisuje model jednostavne linearne regresije. Viestruka linearna regresija je model oblika = 0 + 1 1 + 2 2 + + + Primjerice za tri varijable R formula bi bila
y~x+y+z
= 0 + 1 + 2 + 3 + * u formuli oznaava da treba ukljuiti i sve kombinirane lanove (interakcija izmeu nezavisnih varijabli). Tako bi npr. za R formulu
y ~ u*v*w
dobili model = 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + Ponekad ne elimo sve kombinacije, a posebnu kombinaciju moemo dobiti koritenjem znaka : Primjerice, formula
y ~ u + v + w + u:v:w
= 0 + 1 + 2 + 3 + 4 + Jo jedan primjer je regresija bez konstantnog lana (intercepta) = 1 + koja se postie R formulom
y ~ x + 0
daje model
Ipak, treba imati neko opravdanje za ovakav model. Zato vjerujemo da ulaz 0 daje izlaz 0?
#FUNKCIJA lm() #Funkcija lm koristi se za procjenjivanje parametara linearnih modela. Prvi parametar je formula koja opisuje model m1 <- lm(RunTime~RunSize) m1
#Ekvivalentan poziv bio bi m1 <- lm(RunTime~RunSize, data=production) m1 #budui su varijable uitane u memoriju svojim imenima funkcijom attach, nepotrebno je naglaavati #o kojim podacima se radi. #Ve znamo da R ne daje gotovo nita kao rezultat ve im moramo sami pristupiti. #Dobili smo model, procijenili parametre. Ali tko garantira da model uope ima smisla? #Zato je vrlo vano analizirati model, tzv. dijagnostika modela. #Tu nam treba statistika. Jednostavni sumarni prikaz dobijemo s summary(m1)
coef(m1) residuals(m1)
#scatter plot s pripadnim regresijskim pravcem plot(RunSize,RunTime,xlab="Broj proizvedenih proizvoda", ylab="Vrijeme trajanja proizvodnje") abline(m1)
Interval pouzdanosti za regresijski pravac gdje lei regresijski pravac s nekom danom vjerojatnosti za danu vrijednost = . Procjena je vrijednost regresijskog pravac 0 + 1 . = Dakle, traimo pouzdani interval oko u kojem stvarna vrijednost lei s nekom unaprijed zadanom vjerojatnosti, npr. 0.95. Interval predikcije za stvarnu vrijednost od gdje se nalazi stvarna vrijednost od za odreenu vrijednost = . Oznaimo stvarnu vrijednost s . Naa procjena je opet 0 + 1 , = ali sada je greka = 0 + 1 + . Dakle, ovdje uzimamo u obzir eventualnu greku koju smo napravili procjenom parametara (kao gore) ali i greku samog modela koja dolazi od .
#Intervali pouzdanosti za Y - za danu vrijednost x, interval pouzdanosti za oekivanje od Y, vezan je uz parametar, gdje bi mogao biti pravac #ovo je pouzdani interval za E[Y|X=x] predict(m1,newdata=data.frame(RunSize=c(50,100,150,200,250,300,350)),interv al="confidence",level=0.95) novetocke <- data.frame(RunSize=seq(50,350,10)) novetocke pouz <- predict(m1,novetocke,interval="confidence",level=0.95) pouz plot(RunSize,RunTime,xlab="Broj proizvedenih proizvoda", ylab="Vrijeme trajanja proizvodnje") lines(novetocke[,"RunSize"], pouz[,"fit"]) lines(novetocke[,"RunSize"], pouz[,"lwr"],lty=3,col=2) lines(novetocke[,"RunSize"], pouz[,"upr"],lty=3,col=3) #Interval predikcije za Y - u kojem intervalu e biti Y za dane vrijednosti X, vezan uz sluajnu varijablu (jer Y je sl.var.) #dvije su neizvjesnosti, neizvjesnost dobivenog pravca i varijabilnost toaka oko pravca predict(m1,newdata=data.frame(RunSize=c(50,100,150,200,250,300,350)),interv al="prediction",level=0.95) novetocke <- data.frame(RunSize=seq(50,350,10)) novetocke pred <- predict(m1,novetocke,interval="prediction",level=0.95) pred plot(RunSize,RunTime,xlab="Broj proizvedenih proizvoda", ylab="Vrijeme trajanja proizvodnje") lines(novetocke[,"RunSize"], pred[,"fit"]) lines(novetocke[,"RunSize"], pred[,"lwr"],lty=3,col=2) lines(novetocke[,"RunSize"], pred[,"upr"],lty=3,col=3) #Analiza varijance - testiramo da li uope postoji ikakva veza u modelu, tj. da li je \beta_1=0. anova(m1) # odbacujemo nultu hipotezu summary(m1) # ovdje imamo vrijednost R^2 koja ukazuje na proporciju varijabilnosti objanjenu modelom # R^2 to blie 1, to bolji model detach(production)
DIJAGNOSTIKA MODELA
Model razvijamo pod nekim pretpostavkama pa bi bilo dobro uvjeriti se da su te pretpostavke uistinu zadovoljene.
#VALJANOST MODELA #NAKON PROCJENE PARAMETARA MODEL TREBA ANALIZIRATI! #Dobivena regresijska jednadba moe zapravo biti besmislen rezultat #Primjer attach(anscombe) am1 am2 am3 am4 <<<<lm(y1~x1) lm(y2~x2) lm(y3~x3) lm(y4~x4)
par(mfrow=c(2,2)) plot(x1,y1,xlim=c(4,20),ylim=c(3,14),main="Data abline(am1) plot(x2,y2,xlim=c(4,20),ylim=c(3,14),main="Data abline(am2) plot(x3,y3,xlim=c(4,20),ylim=c(3,14),main="Data abline(am2) plot(x4,y4,xlim=c(4,20),ylim=c(3,14),main="Data abline(am2) summary(am1) summary(am2) summary(am3) summary(am4)
Ovaj primjer pokazuje da rezultat regresijske procjene moe uistinu biti besmislen. Razlog tomu je injenica da takvi podaci ne zadovoljavaju pretpostavke modela. Provjera pretpostavljene veze u modelu Jedan od naina kako provjeriti zadovoljavaju li podaci uistinu nekakvu linearnu vezu je analiza reziduala dobivenog modela. Ovaj pristup posebno je vaan za viestruku linearnu regresiju budui ne moemo grafiki predstaviti podatke. Vrijedi sljedee heuristiko pravilo: Ako ne postoji znaajan uzorak u ponaanju reziduala tada je model valjan. Postojanje uzoraka ukazuje na postojanje neke informacije koja nije opisana modelom. Reziduale obino prikazuje u ovisnosti o procijenjenim y koordinatama toaka, ili kod jednostavne regresije, o x koordinatama.
#Jedan od nacina provjere valjanosti modela jest analiza reziduala #posebno vazan za visestruku regresiju, buduci nemamo scatter plot #Ako ne postoji znaajan uzorak u ponaanju reziduala tada je model valjan #postojanje uzoraka ukazuje na postojanje neke informacije koja nije opisana modelom #primjerice, slika 2 na kvadratnu komponentu nezavisne varijable par(mfrow=c(2,2)) plot(x1,am1$residuals,ylab="Residuals",xlim=c(4,20),ylim=c(3.5,3.5),main="Data Set 1") plot(x2,am2$residuals,ylab="Residuals",xlim=c(4,20),ylim=c(3.5,3.5),main="Data Set 2") plot(x3,am3$residuals,ylab="Residuals",xlim=c(4,20),ylim=c(3.5,3.5),main="Data Set 3") plot(x4,am4$residuals,ylab="Residuals",xlim=c(4,20),ylim=c(3.5,3.5),main="Data Set 4")
detach(anscombe)
Uoavanje outliera Osim obinih reziduala, postoje i standardizirani reziduali. To su zapravo vrijednosti reziduala, centrirane procjenom za oekivanje i podijeljeni procjenom za standardnu devijaciju. Ako su pretpostavke o grekama modela tone, onda bi standardizirani reziduali trebali biti normalno distribuirani, pa bi veina trebala biti u intervalu [-2,2]. Ako nije, radi se o potencijalnom outlieru.
#Osim klasinih reziduala, postoje i standardizirani reziduali, koji esto omoguavaju identifikaciju outliera #Primjer: amerike dravne obveznice #Cilj: modelirati cijenu obveznice u ovisnosti o kuponu koji nosi(nominalna vrijednost 100$) bonds <- read.table("bonds.txt",header=TRUE) str(bonds) attach(bonds) obv <- lm(BidPrice~CouponRate) summary(obv) par(mfrow=c(1,1)) plot(CouponRate,BidPrice,xlab="Coupon Rate (%)", ylab="Bid Price ($)",ylim=c(85,120),xlim=c(2,14)) abline(obv) #standardizirani reziduali (standres <- rstandard(obv)) plot(CouponRate,standres,xlab="Coupon Rate (%)", ylab="Standardized Residuals",xlim=c(2,14)) abline(h=2,lty=2) abline(h=-2,lty=2) identify(CouponRate,standres,Case) #izbacimo outliere - pokazuje se da odgovaraju tzv. cvjetnim obveznicama (flower bonds) koje imaju odreene porezne olakice obv2 <- update(obv, subset=(1:35)[-c(4,13,34,35)]) summary(obv2) #novi model plot(CouponRate[-c(4,13,34,35)],BidPrice[-c(4,13,34,35)],xlab="Coupon Rate (%)", ylab="Bid Price ($)",ylim=c(85,120),xlim=c(2,14),main="Regular Bonds") abline(obv2) #...i standardizirani reziduali stanres2 <- rstandard(obv2) plot(CouponRate[-c(4,13,34,35)],stanres2,xlab="Coupon Rate (%)", ylab="Standardized Residuals",xlim=c(2,14),ylim=c(-3,3),main="Regular Bonds") abline(h=2,lty=2) abline(h=-2,lty=2) detach(bonds)
Provjera normalne distribuiranosti reziduala i konstantnosti varijance Osobito vano za male uzorke, jer tada ne moemo raunati na CGT.
#Provjera normalne distribuiranosti pogreske(osobito vazno za male uzorke, jer onda ne mozemo raunat na CGT) i konstantnosti varijance production <- read.table("production.txt",header=TRUE) attach(production) m1 <- lm(RunTime~RunSize)
par(mfrow=c(2,2)) plot(m1) stanres <- rstandard(m1) hist(stanres) qqnorm(stanres) qqline(stanres) #normal probability plot
#za analizu da li je varijanca konstanta ili ne, promatramo ili standardiziranerez vs. fitted values ili standardiziranerez vs. x par(mfrow=c(2,2)) plot(m1) plot(m1,which=1) #primjer rastuce varijance cleaning <- read.table("cleaning.txt",header=TRUE) str(cleaning) attach(cleaning) m1 <- lm(Rooms~Crews) summary(m1) plot(Crews,rstandard(m1), xlab="Broj osoblja", ylab="Standardizirani reziduali") par(mfrow=c(2,2)) plot(m1)