charles-river-analytics / figaro

Figaro Programming Language and Core Libraries

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Extrapolation problem

Vlad-Karpov opened this issue · comments

commented

Hello
Can you help me?
I don't understand how to do that:

/**

  • y = Q1 * x + Q0
  • Q1=1/2
  • Q0=1/6
  • real data
  • x 1 2 3
  • y 4/6 7/6 10/6
  • suppose Q1 and Q0 unknown
  • and
  • input data (random observe)
  • x 1 2 3
  • y 1 1/2 2
  • need to find Q1 and Q0

*/
class LineEx {

val Q1: Uniform = Uniform(-10.0, 10.0)
val Q0: Uniform = Uniform(-10.0, 10.0)

val e1 = Normal(fx(Q1, Q0, 1.0), 0.5)
val e2 = Normal(fx(Q1, Q0, 2.0), 0.5)
val e3 = Normal(fx(Q1, Q0, 3.0), 0.5)

def fx(q1: Element[Double], q0: Element[Double], x: Double): Element[Double] = {
q1 * Constant(x) ++ q0
}

def resolve(): Array[Double] = {
e1.observe(1.0)
e2.observe(0.5)
e3.observe(2.0)
val likliHood = e1 * e2 * e3
val priorDistribution = Q1 * Q0
val mg = MetropolisHastings(ProposalScheme.default, likliHood * priorDistribution)
mg.start()
val r = Array(
mg.computeExpectation(Q1, (d: Double) => {
println(s"Q1=${d}")
d
}),
mg.computeExpectation(Q0, (d: Double) => {
println(s"Q0=${d}")
d
})
)
mg.stop()
mg.kill()
r
}

}

this code doesn't work

thanks!