library(faraway)
data(gala) #baza sa podacima o vrstama kornjaca sa ostrva Galapagos
gala #ispis cele baze
head(gala) #daje početak baze
names(gala) #da vidimo imena kolona:
help(gala) #detaljniji opis baze
summary(gala) #osnovne statistike

#pravljenje modela "pesacki"
x <- model.matrix(~Area+Elevation+Nearest+Scruz+Adjacent,gala) #matrica X
x
y <- gala$Species #vektor Y
y
#racunamo potrebne vrednosti za ocenu beta
xtxi<-solve(t(x)%*%x) # solve(x) daje inverz matrice
xtxi %*% t(x) %*% y # beta_kapa=(X^TX)^(-1)X^Ty

solve(crossprod(x,x),crossprod(x,y))  #isto kao sve prethodno; crossprod(x,y)=x^Ty

#linearni model - gotov algoritam
mdl<-lm(Species~Area+Elevation+Nearest+Scruz+Adjacent, data=gala)
mdl #prikaz modela
summary(mdl) #glavne karakteristike modela 
#da vidimo sve komponente modela koje mozemo pozvati
names(mdl) 
mdls<-summary(mdl)
names(mdls)

#osnovno u modelu:
mdl$residuals #reziduali
mdl$fitted #prilago]ene vrednosti
mdl$df.residual #broj stepeni slobodeone hi kvadrat raspodele raziduala (n-p)
mdl$coef #koeficijenti modela

#ocena za sigma
sqrt(deviance(mdl)/df.residual(mdl))  
mdls$sigma #isto

xtxi <- mdls$cov.unscaled#kovarijaciona matrica

#standardne greske
sqrt(diag(xtxi))*60.975  
mdls$coef[,2]            

#R^2
1-deviance(mdl)/sum((y-mean(y))^2)    
mdls$r.squared                        

#model postoji ako postoji (X^TX)^(-1), tj. ako su rand matrice i broj kolona jednaki
#"prezasiceni" modeli su modeli gde X ima vise vrsta nego kolona (vise promenljivih nego opservacija)

#probem 1
#pravimo jednu zavisnu kolonu kako matrica ne bi imala inverz
# razlika izmedju oblasti ostrva i njemu najblizeg ostrva 
gala$Adiff<-gala$Area-gala$Adjacent #nova promenljiva
g<-lm(Species~Area+Elevation+Nearest+Scruz+Adjacent+Adiff,gala) #dodavanje promenljive u model
summary(g)
#napraviljen je model iako je matrica singularna, model je bez Adiff, a staviljene su NA vrednosti
#uklanja prediktore od kraja ka pocetku (kako su navedene u modelu)


#problem 2
#veci problem ako je X^TX skoro singularna i nije ocigledno da su kolone zavisne
Adiffe <- gala$Adiff+0.001*(runif(30)-0.5)   #neki mnogo mali brojevi iz U[-0.005,0.005], blzak nuli
#da kolone budu "skoro linearno zavisne"
g <- lm(Species ~ Area+Elevation+Nearest+Scruz+Adjacent+Adiffe,gala)
summary(g)
#napravljen je model sa ogromnim std greskama za Area, Adiffe i Adjacent 
#standardna greska u ovim sitvacijama nije velika samo za jednu promenljivu,vec istovremeno za vise njih)

#PRIMER: baza teengamb, napraviti model za kolonu 'gamble' u odnosu na ostale kolone, 
# a) Koji procenat varijacije zavisne promenljive je objasnjen nezavisnim promenljivim?
# b) koja opservacija ima najveci rezidual? dati broj opservacije
# c) odrediti srednju vrednost i medijanu residuala.
# d) odrediti korelaciju reziduala i ocena za gamble.
# e) odrediti korelaciju reziduala i kolone income.
# f) odrediti, kada bi sve ostalo bilo konstantno, koliko bi se kockanje razlikovalo za zenu i muskarca?

data(teengamb)
help(teengamb)

model<-lm(gamble~sex+status+income+verbal,data=teengamb)
summary(model)

#b)
max(residuals(model))
which.max(residuals(model))

#c)
mean(residuals(model))
median(residuals(model))

#d)
#korelacija treba da je oko nula:
cor(residuals(model),fitted(model))

#e)
cor(residuals(model),teengamb$income)

#f)
summary(model)
#iz summary, iz koeficijenta uz kolonu 'sex'(koja uzima vrednosti 0 ili 1) vidimo da bi muskarac u proseku trosio 22 funte vise godisnje na kockanje

