# Deseti cas

# Kovarijacija. Korelacija.
# Dvodimenzione apsolutno neprekidne slucajne velicine.
# Importance sampling - uzorkovanje po znacajnosti.


# Kovarijacija:
#   Neka su X i Y slucajne velicine definisane na istom prostoru verovatnoca.
#   Kovarijacijom slucajnih velicina X i Y zovemo
#       cov(X, Y) = E(X*Y) - E(X)E(Y).

# Korelacija:
#   Neka su X i Y slucajne velicine definisane na istom prostoru verovatnoca.
#   Koeficijentom korelacije slucajnih velicina X i Y zovemo
#       cor(X, Y) = [E(X*Y) - E(X)E(Y)] / [sqrt(D(X))*sqrt(D(Y)).

# Osobine: 
#   -1 <= cor(X, Y) <= 1
#   cor(X, Y) = cov(X, Y) / [sqrt(D(X))*sqrt(D(Y))
#   cov(X, X) = D(X)
#   Ako je cor(X, Y) = 1, tada sa porastom X, linearno raste Y.
#   Ako je cor(X, Y) = -1, tada sa porastom X, linearno opada Y.
#   cor(X, Y) - pokazuje linearnu zavisnost te dve slucajne velicine.
#   Ako su X i Y nezavisne slucajne velicine => cor(X, Y) = 0.
#   Ako je cor(X, Y) = 0 IZ TOGA NE SLEDI nezavisnost X i Y!!!

# 1)
# Neka je X ~ Unif[-1,1]. Ispitati kovarijacije i 
# koeficijente korelacije sa sledecim slucajnim velicinama:
# a) Y = X + 1
# b) Z = -X^2 - X  

# a)
x = sort( runif(1000, -1, 1) )
y = x + 1

# kovarijacija:
cov(x, y)

#korelacija:
cor(x, y)

plot(x, y)

# b)
x = sort( runif(1000, -1, 1) )
z = -x^2 - x 

# kovarijacija:
cov(x, z)

#korelacija:
cor(x, z)


plot(x, z)



# 2)
# X i Y su obe Unif[0, 1]. Odrediti:
# a) P{max(X, Y) < 1/2 | 0 < X+Y < 1 }
# b) P{X^2 + Y^2 < 1/4 | 0 < X + Y < 1}


drugi_zadatak <- function(a = TRUE, b = FALSE)
{
  if(a)
  {
    x = runif(1)
    y = runif(1)
    if( x + y < 1)
    {
        if(max(x, y) < 1/2)
          return(cbind(1, 1))
      return(cbind(0, 1))
    }
    return(cbind(0, 0))
  }
  
  if(b)
  {
    x = runif(1)
    y = runif(1)
    if( x + y < 1)
    {
      if(x^2 + y^2 < 1/4)
        return(cbind(1, 1))
      return(cbind(0, 1))
    }
    return(cbind(0, 0))
  }
}
rez = rowMeans(replicate(10000, drugi_zadatak(a = TRUE), simplify = TRUE))
rez[1]/rez[2]



rez = rowMeans(replicate(10000, drugi_zadatak(a = FALSE, b = TRUE), simplify = TRUE))
rez[1]/rez[2]


# Teorijski rezultat.
pi/8


# 3) 
# Ako je X ~ Exp(1).
# Naci uslovnu gustinu
# f_X(x | 1 < x < 10)


# 4)
# X~EXp(a), dok je 
# Y = a/b *X, b > 0.
# Naci zakon raspodele slucajne velicine Y, 
# kao i vektora (X, Y). 


# Za y >= 0
# F_Y(y) = P{Y <= y} = P{Y <= b*y/a}
#        = F_X(b*y/a) = 1 - exp(-b*y/a * a)
#        = 1 - exp(-b*y), y >= 0

# Za y < 0. F_Y(y) = 0
# Pa vazi da je Y ~ Exp(b).

# U opstem slucaju nije moguce iz dve jednodimenzione raspodele
# naci dvodimenzione. Ali ovde je to moguce.
# F(x, y) = P{X<=x, Y<=y} = P{X<= min(x, b/a*y)},
# za x>=0 i y>=0, inace je nula.



# 5)
# Slucajna velicina X ~ Exp(a),
# dok Y ~ Unif[0, b].
# I nezavisne su.
# Naci gustinu za Z = |X-Y|

# resenje:
# Iz nezavisnosti imamo:
# f(x, y) = f(x)*f(y)

# Ovakav zadatak je komplikovan...


# 5*)
# Slucajna velicina X ~ Exp(``),
# dok Y ~ Exp(1).
# I nezavisne su.
# Naci gustinu za Z = |X-Y|.


# Resenje:
# Iz nezavisnosti imamo:
# f(x, y) = f(x)*f(y) = exp{-(x+y)}.

# F_Z(t) = P{Z <= t} = P{|X-Y| <= t} = P{X-t <= Y <= X+t}
#        = \integral_{0}^{t} \integral_{0}^{x+z} f(x, y) dy dx + 
#           + \integral_{t}^{+besk} \integral_{x-t}^{x+t} f(x, y) dy dx.
#        = 1- exp(-t), t>=0 i nula inace.
# => Z ~ Exp(1)


####################################################################################
##################### Importance sampling - uzorkovanje po znacajnosti #############
####################################################################################
# 
# Jedna od metoda smanjenja disperzije slucajne velicine. 
# Ima ogromnu primenu bas u Monte Karlo metodama.

# Osnovna ideja:
# Neke vrednosti slucajne velicine se imaju vecu znacajnost nego drugi
# (tj imaju vecu verovatnocu) za funkciju ili parametar koji ocenjujemo.
# Ako ove znacajnije vrednosti se budu pojavljivale cesce, disperzija
# ocene ce se smanjiti. S toga ova metoda se bazira na odabiru odgovarajuce raspodele
# koja maksimizuje odabir tih znacajnih vrednosti.

# Od znacaja je sledeca teorema:
# Neka je X diskretna slucajna velicina.
# Neka je g(x) funkcija iz R u R, a Y druga diskretna slucajna velicina
# i vazi da P(X= x) > 0 => P(Y = x) > 0. 
# Tada
# E(g(X)) = E(p_x(Y)/p_y(Y) * g(Y)),
# gde je p_x(x) = P(X = x), a p_y(x) = P(Y = x).

# Slicna teoram vazi za apsolutno neprekidne slucajne velicine.


# 6)
# Neka je slucajna velicina X in Normalne(0, 1) raspodele.
# A funkcija g(x) = 10 * exp(-5*(x-3)^4).
# Oceniti srednju vrednost.

# Monte Karlo
n = 10000
x = rnorm(n)
g_x = 10*exp(-5*(x-3)^4)

monte_karlo = mean(g_x)
monte_karlo

odstupanje_mk_metoda = sqrt(1/n * var(g_x))
odstupanje_mk_metoda

# uzorkovanje po znacenju
y = 3 + rnorm(n)
g_y = 10*exp(-5*(y-3)^4)
g_novo = g_y*dnorm(y, 0, 1)/dnorm(y, 3, 1)

UZ = mean(g_novo)
UZ
odstupanje_uz_metoda = sqrt(1/n * var(g_novo))
odstupanje_uz_metoda


# Razlika:
UZ - monte_karlo
odstupanje_uz_metoda - odstupanje_mk_metoda
