# Pri istrazivanju eksplozije rakete USS Challenger 1986., doslo je do zakljucka da je specifičan O-prsten otkazao
# Inženjeri su smatrali da verovatnoća otkazivanja ima veze sa spoljnom temperaturom pri lansiranju
challenger <- read.delim('challenger.txt') #ucitavanje podataka iz txt fajla
View(challenger) #pregled podataka, temp je temperatura u Fahrenheitu, a oring je podatak da li je došlo do otkazivanja


# Logistička regresija modeluje verovatnoću jedne klase binarne promenljive, u ovom slučaju verovatnoću otkazivanja pomenutog O-prstena
logistic_model <- glm(oring ~ temp, data = challenger, family = 'binomial') #sa family='binomial' naglašavamo da model predviđa verovatnoću
summary(logistic_model)
# Sličan prikaz kao i kod linearne regresije, imamo testove značajnosti individualnih koeficijenata (z-test)
# AIC(Akaike information criterion) je mera koja može da se koristi za upoređivanje više modela nad istim podacima, manja vrednost je bolja


logistic_model$fitted.values #verovatnoće koje model predviđa
beta_0 = logistic_model$coefficients[1]
beta_1 = logistic_model$coefficients[2]
plot(oring ~ temp, data = challenger)
xn = seq(50, 90, 0.1)
yn = predict(logistic_model, data.frame(temp = xn), type = 'response')
points(xn, yn, type = "l", col = "blue", lwd = 2) #model
abline(v = -beta_0/beta_1, col = "red") #granična linija modela (beta_0 + beta_1*x = 0)
# Sve levo od crvene linije ima verovatnoću > 0.5, pa bismo klasifikovali kao 1 (predviđamo otkazivanje)
# Desno je verovatnoća < 0.5 (predviđamo da neće doći do otkazivanja)


# Logistička regresija sa više atributa
library(mlbench)
data("PimaIndiansDiabetes")
data = PimaIndiansDiabetes
?PimaIndiansDiabetes #informacije o bazi

full_model <- glm(diabetes ~ ., data = data, family = 'binomial')#model sa svim atributima
summary(full_model)

# Pravimo model od dva najznačajnija atributa (po p-vrednostima testa značajnosti), radi vizuelizacije
model <- glm(diabetes ~ glucose + mass, data = data, family = 'binomial')
summary(model)


library(ggplot2)

predicted_probabilities = model$fitted.values
data$predictions = predicted_probabilities

# Prikazujemo na grafiku dva atributa, a bojom označavamo klasu (ciljnu promenljivu)
ggplot(data = data, aes(x = glucose, y = mass, color = as.factor(diabetes))) +
  geom_point()

# Prikazujemo sad bojom verovatnoću koju model predviđa
data$predictions = predicted_probabilities
p = ggplot(data = data, aes(x = glucose, y = mass, color = predictions)) + 
  geom_point() +
  scale_color_gradientn(colors = c("red","white","blue"), limits = c(0,1))
plot(p)

# Dodajemo graničnu liniju predikcije (p = 0.5) na grafik
beta_0 = model$coefficients[1]
beta_1 = model$coefficients[2]
beta_2 = model$coefficients[3]
p + geom_abline(intercept = -beta_0/beta_2, slope = -beta_1/beta_2, lwd = 1.5, col = 'green')
