##################
### DEVETI CAS ###
##################

# PROST LINEARNI REGRESIONI MODEL

# 1.
# broj sati ucenja
x <- c(4, 9, 10, 14, 4, 7, 12, 22, 1, 3, 8, 11, 5, 6, 10, 11, 16, 13, 13, 10)
# rezultati testa
y <- c(390, 580, 650, 730, 410, 530, 600, 790, 350, 400, 590, 640, 450, 520, 690, 690, 770, 700, 730, 640)
plot(x, y) # tackasti dijagram, proveravamo da li postoji linearna veza
model1 <- lm(y ~ x) 
model1 # jednacina prave
# Predvidjanje pomocu regresione linije vazi samo gde su podaci, izvan opsega nemamo nikakvu informaciju.

## Interval poverenja za srednju vrednost Y
predict(model1, data.frame(x = 10), interval = "confidence", level = 0.99)  
# verujemo s poverenjem od 99% da je prosecan broj poena na testu onih koji su ucili 10 sati za test izmedju 574.2 i 638.6.

## Traka poverenja
interval <- predict(model1, interval = "confidence", data.frame(x = seq(0, 25, 1)))
plot(x, y, xlab = "x", ylab = "y")
abline(model1) # regresiona prava
lines(seq(0, 25, 1), interval[ ,3], col = "purple")
lines(seq(0, 25, 1), interval[ ,2], col = "purple")
# Interval je najuzi za x_0 = mean(x)=9.45, jer je tu procena najpreciznija.

## Interval predvidjanja 
predvidjanje <- predict(model1, interval = "prediction", data.frame(x = seq(0, 25, 1)))
lines(seq(0, 25, 1), predvidjanje[ ,3], col = "aquamarine3")
lines(seq(0, 25, 1), predvidjanje[ ,2], col = "aquamarine3")
# Interval predvidjanja u svakoj tacki je siri nego interval poverenja za srednju vrednost.

## Testiranje hipoteze o parametrima regresije
summary(model1)
# p-vrednost testa je 0, pa odbacujemo H0, tj. zakljucujemo da je linearni model koristan za predvidjanje

## Dijagnostika modela
# Proveravamo pretpostavke koje se odnose na greske modela.
qqnorm(residuals(model1), ylab = "Residuals") 
qqline(residuals(model1)) # normalna raspodela gresaka
plot(fitted(model1), residuals(model1), xlab = "Fitted", ylab = "Residuals") # grafik tackastih ocena i reziduala
# jednaka disperzija za svako Ei 
# Oba grafika govore da pretpostavke nisu lose.

# 2.
obim <- c(30, 87, 129, 148, 168, 174, 177)
starost <- c(177, 484, 664, 1004, 1231, 1372, 1582)
plot(starost, obim) # tackasti dijagram, proveravamo da li postoji linearna veza
model2 <- lm(obim ~ starost) # prosta linearna regresija
abline(model2) # jednacina prave
summary(model2) # Testiranje hipoteze o parametrima regresije
# p-vrednost testa je mala (manja od 5%), pa odbacujemo H0, tj. zakljucujemo da je linearni model koristan za predvidjanje
# Dijagnostika modela
qqnorm(residuals(model2), ylab = "Residuals")
qqline(residuals(model2))
plot(fitted(model2), residuals(model2), xlab = "Fitted",ylab="Residuals")
# Oba grafika govore da pretpostavke nisu lose.

# Transformacija modela - nije obavezno
model3 <- lm(log(obim) ~ starost)
summary(model3)
qqnorm(residuals(model3), ylab = "Residuals")
qqline(residuals(model3))
plot(fitted(model3), residuals(model2), xlab = "Fitted", ylab = "Residuals")

# 3.
# instaliranje paketa
install.packages("PASWR")
library(PASWR)
Kinder # baza podataka
?Kinder # dodatne informacije o bazi podataka
# promenljive
visina <- Kinder$ht
tezina <- Kinder$wt
# ZA VEZBU


# VISESTRUKA LINEARNA REGRESIJA

# 4. 
stackloss # baza podataka
attach(stackloss)
# Nije moguce da crtamo visedimenzione promenljive, pa pravimo model sa svim promenljivim
# Jedna od najvaznijih stvari u visestrukoj regresiji je izbor modela, 
# tj. treba doneti odluku koja od nezavisnih promenljivih treba da ostane u modelu
vmodel1 <- lm(stack.loss ~ Air.Flow + Water.Temp + Acid.Conc.) # Krenemo od modela sa svim potencijalnim prediktorima pa izbacujemo jedan po jedan
# Cilj nam je doci do sto jednostavnijeg modela (tj. sa sto manje promenljivih) koji je jednako dobar kao i model sa svim prediktorima
summary(vmodel1) # vidimo da promenljiva Acid.Conc. nije statisticki znacajna (velika p vrednost 0.344), pa mozemo da je izbacimo iz modela
vmodel2 <- lm(stack.loss ~ Air.Flow + Water.Temp) # novi model
summary(vmodel2) 
anova(vmodel1, vmodel2) # Uporedjujemo model sa svim prediktorima i model s prediktorima Air.Flow i Water.Temp (Fiserov test)
# Vidimo da je p-vrednost velika pa smatramo da su modeli jednako dobri, a posto je drugi model jednostavniji opredelicemo se za njega 
# Drugi nacin poredjenja modela je koeficijent determinacije R^2: vidimo (iz poziva funkcije summary) da se kod ovih modela neznatno razlikuje R^2

## Predvidjanje
newdata <- data.frame(Air.Flow = c(72, 67, 55), Water.Temp = c(20, 11, 22)) # Pravimo bazu podataka sa podacima za koje zelimo da vrsimo predvidjanje
predict(vmodel2, newdata) # ocenjene vrednosti

# Dijagnostika modela -
qqnorm(residuals(vmodel2), ylab = "Residuals")
qqline(residuals(vmodel2))
plot(fitted(vmodel2), residuals(vmodel2), xlab = "Fitted", ylab = "Residuals")
# Oba grafika govore da pretpostavke nisu lose.

# Korelacija
cor(stackloss) # Meri jacinu veze izmedju promenljivih

# 5. 
# ZA VEZBU 