source("ocena_gustine_jezgrom_pom.r")

n = 100
x = rnorm(n)

m = function(x) {
  0.5 * x^2 + sin(3 * x)
}

sig = function(x) {
  0.1 + 0.05 * x
}

eps = rnorm(n)
y = m(x) + sig(x) * eps

NW_ocena = function(x0, x, y, h, jezgro) {
  w = jezgro((x0 - x) / h)
  sum(w * y) / sum(w)
}

plot(x, y, pch = 20)
# tacke u kojima odredjujemo ocenu
x0 = seq(-3, 3, length.out = 100)
lines(x0, m(x0), lwd = 1.5)
lines(x0, sapply(x0, NW_ocena, x = x, y = y, 
                 h = 0.1, jezgro = K_Gausovo), col = 2, lwd = 1.5)
lines(x0, sapply(x0, NW_ocena, x = x, y = y, 
                 h = 0.25, jezgro = K_Gausovo), col = 3, lwd = 1.5)
lines(x0, sapply(x0, NW_ocena, x = x, y = y, 
                 h = 0.5, jezgro = K_Gausovo), col = 4, lwd = 1.5)
lines(x0, sapply(x0, NW_ocena, x = x, y = y, 
                 h = 0.75, jezgro = K_Gausovo), col = 5, lwd = 1.5)
legend("bottomright",legend = c("true", "h = 0.1", "h = 0.25", "h = 0.5", "h = 0.75"),
       col=1:5, lty = 1, cex = 0.3)

# b)
plot(x, y, pch = 20)
lines(x0, m(x0), lwd = 1.5)
lines(x0, sapply(x0, NW_ocena, x = x, y = y, 
                 h = 0.25, jezgro = K_Gausovo), col = 2, lwd = 1.5)
lines(x0, sapply(x0, NW_ocena, x = x, y = y, 
                 h = 0.25, jezgro = K_Epanecnikovo), col = 3, lwd = 1.5)
lines(x0, sapply(x0, NW_ocena, x = x, y = y, 
                 h = 0.25, jezgro = K_bikvadratno), col = 4, lwd = 1.5)
lines(x0, sapply(x0, NW_ocena, x = x, y = y, 
                 h = 0.25, jezgro = K_trougaono), col = 5, lwd = 1.5)
lines(x0, sapply(x0, NW_ocena, x = x, y = y, 
                 h = 0.25, jezgro = K_uniformno), col = 6, lwd = 1.5)
legend("bottomright",legend = c("true", "Gausovo", "Epanecnikovo", "bikvadratno", "trougaono", "uniformno"),
       col = 1:6, lty=1, cex=0.3)
