Você está na página 1de 8

1.

Vjebe Uvod i jednostavna linearna regresija


Ukratko ponovimo osnovne injenice o R-u. Objanjenje Objekti u R-u: Objekt Razliiti modovi u jednom objektu? vector Ne factor Ne array Ne matrix Ne data frame Da ts Ne list Da

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: =

Jednostavna linearna regresija


Jednostavnom linearnom regresijom modeliramo odnos izmeu dvije sluajne varijable i tako da ako imamo danu neku vrijednost od = , moemo predvidjeti vrijednost od . Preciznije, regresija sluajne varijable na sluajnu varijablu je [| = ] Regresija je linearna ako [| = ] = 0 + 1 gdje su 0 i 1 nepoznati parametri. Ako su 1 , , nezavisne realizacije od za vrijednosti 1 , , od , onda za = 1, , = [| = ] + = 0 + 1 + , gdje je sluajna greka od takva da je [|] = 0. U daljnjem tekstu emo modele uglavnom zapisivati primjerice u obliku = 0 + 1 1 + .
############################### #PRIMJER 1 ############################### #proizvodnja nekog proizvoda - predvidjeti koliko vremena treba ako znamo koliko proizvoda elimo. #Najprije postaviti working directory sa setwd ili iz izbornika production <- read.table("production.txt",header=TRUE) str(production) attach(production) #Prvo idemo nacrtati podatke, odlina stvar kod jednostavne linearne regresije je to to uvijek moemo napraviti. plot(RunSize,RunTime,xlab="Broj proizvedenih proizvoda", ylab="Vrijeme trajanja proizvodnje")

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

Najjednostavniji oblik formule je upravo jednostavna linearna regresija


y~x

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

Postoje i sloeniji regresijski modeli. Primjerice, R formula


y ~ u*v

= 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

daje model oblika

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)

#daje vektor koeficijenata # daje vektor reziduala podataka

fitted(m1) names(m1) m1$coefficients

# procijenjene vrijednosti zavisne varijable # rezultatima moemo pristupati i ovako

#scatter plot s pripadnim regresijskim pravcem plot(RunSize,RunTime,xlab="Broj proizvedenih proizvoda", ylab="Vrijeme trajanja proizvodnje") abline(m1)

Razumijevanje rezultata regresije


Klasine pretpostavke linearnog regresijskog modela su: 1. ovisi o na osnovu pretpostavljene linearne veze, tj. = 0 + 1 + , = 1, , , odnosno [| = ] = 0 + 1 , 2. greke 1 , , su nezavisne , 3. greke 1 , , imaju jednaku varijancu 2 (nepoznatu), 4. greke 1 , , su normalno distribuirane s oekivanjem 0 Pretpostavke na distribuciju greaka omoguavaju nam izvoenje statistikih testova. O provjerama pretpostavki neto kasnije.
#PRETPOSTAVLJAMO: klasicne pretpostavke modela, dakle nezavisne pogreke i normalno distribuirane N(0,\sigma^2) #INTERPRETACIJA REZULTATA #odmah vidimo rezultate t-testova i procjenu standardne devijacije summary(m1) #Uoimo p-vrijednost, jako mala, znai s tom vjerojatnou bi dobili barem ovakvu realizaciju kad bi hipoteza bila istinita. #Intervali pouzdanosti za parametre round(confint(m1,level=0.95),3)

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)

Set 1") Set 2") Set 3") Set 4")

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

shapiro.test(stanres) ne odbacujemo nultu hipotezu

#H0: podaci su iz normalne distribucije ->

#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)

Você também pode gostar