vreme = c(200, 450, 600, 700, 800, 1000, 1000, 1000, 450, 600)
status = c(1, 1, 0, 1, 1, 0, 0, 0, 1, 1)

# Nelson-Alenova ocena funkcije prezivljavanja u tacki t
NA_ocena = function(t, x, delta) {
  
  # sortiramo podatke po vremenu
  sortirano = order(x)
  x = x[sortirano]
  delta = delta[sortirano]
  
  # jedinstvena vremena
  vreme_unique = unique(x)
  
  hazard = 0
  for (xj in vreme_unique) {
    if (xj <= t) {
      d_j = sum(delta[x == xj])  # broj dogadjaja u trenutku xj
      R_j = sum(x >= xj) # broj onih pod rizikom pre trenutka xj
      hazard = hazard + d_j / R_j
    }
  }
  
  S_NA = exp(-hazard)
  return(S_NA)
}

# vektorizujemo funkciju
NA_ocena_vec = Vectorize(NA_ocena, vectorize.args = "t")

# racunamo ocenu za svaku tacku iz uzorka
N_A_vrednosti = NA_ocena_vec(vreme, vreme, status)
KM_vrednosti = KM_ocena_vec(vreme, vreme, status)

sortirano = order(vreme)
vreme = vreme[sortirano]
KM_vrednosti = KM_vrednosti[sortirano]
N_A_vrednosti = N_A_vrednosti[sortirano]

# ocena funkcije prezivljavanja
plot(vreme, KM_vrednosti, type = "s", ylim = c(0, 1), xlab = "Vreme", 
     ylab = "Kaplan-Majerova ocena", col = "blue") 
lines(vreme, N_A_vrednosti, type = "s", col = "red")

legend("topright", legend = c("Nelson-Alen", "Kaplan-Majer"),
       col = c("red", "blue"), lwd = 2, cex = 0.5)