Exemplo n.º 1
0
def rprior(size, hyperparameters):
    """ returns untransformed parameters """
    parameters = zeros((L, size))
    parameters[0, :] = random.uniform(low=0,
                                      high=hyperparameters["high"],
                                      size=size)
    parameters[1, :] = random.uniform(low=0,
                                      high=hyperparameters["high"],
                                      size=size)
    #parameters[0, :] = random.exponential(scale = 1 / hyperparameters["b1_rate"], size = size)
    #parameters[ell, :] = norm.rvs(size = size, loc = hyperparameters["b_mean"], scale = hyperparameters["b_sd"])
    return parameters


## Prior hyperparameters
modeltheta = ParameterModel(name="logistic diffusion model theta", dimension=L)
modeltheta.setHyperparameters(hyperparameters)
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setParameterNames(["tau, sigma"])
modeltheta.setTransformation(["log", "log"])  #(["none", "none"])
#modeltheta.setRprior({}) #seems useless
#modeltheta.setRprior(["priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["b1_rate"],\
#    "priorfunction <- function(x) dnorm(x, sd = %.5f)" % hyperparameters["b_sd"]])
#modeltheta.setRprior(["priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["b1_rate"],\
#    "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["b1_rate"]])
set_argu = []
for m in range(L):
    set_argu.append("priorfunction <- function(x) dexp(x, rate = %.5f)" %
                    hyperparameters["b1_rate"])
modeltheta.setRprior(set_argu)
Exemplo n.º 2
0
    sigma_w = 1 / gamma.rvs(hyperparameters["sigma_w_shape"], scale =
            hyperparameters["sigma_w_scale"], size = size)
    sigma_v = 1 / gamma.rvs(hyperparameters["sigma_v_shape"], scale = hyperparameters["sigma_v_scale"], size = size)
    parameters = zeros((2, size))
    parameters[0, :] = sigma_w
    parameters[1, :] = sigma_v
    return parameters

## Prior hyperparameters
hyperparameters = { \
        "sigma_w_shape": 1, \
        "sigma_w_scale": 1, \
        "sigma_v_shape": 1, \
        "sigma_v_scale": 1}

modeltheta = ParameterModel(name = "Periodic Gaussian model theta", dimension = 2)
modeltheta.setHyperparameters(hyperparameters)
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setParameterNames(["expression(sigma[w]^2)", "expression(sigma[v]^2)"])
modeltheta.setTransformation(["log", "log"])
modeltheta.setRtruevalues([10, 1])
InverseGammaTemplate = """
priorfunction <- function(x){
    shape <- %.5f 
    scale <- %.5f
    return(scale**shape / gamma(shape) * x**(- shape - 1) * exp(-scale / x))
}
"""
modeltheta.setRprior([InverseGammaTemplate %
    (hyperparameters["sigma_w_shape"], hyperparameters["sigma_w_scale"]), \
        b_all += parameters[ell] - log(hyperparameters["high"]) #uniform prior 
    return b_all

def rprior(size, hyperparameters):
    """ returns untransformed parameters """ 
    parameters = zeros((L, size))
    for ell in range(L):
        ##same as random.normal
        #if ell==0:
        parameters[ell, :] = random.exponential(scale = 1.0 / hyperparameters["b1_rate"], size = size)
        #else:
        #    parameters[ell, :] = norm.rvs(size = size, loc = hyperparameters["b_mean"], scale = hyperparameters["b_sd"]) 
    return parameters

## Prior hyperparameters
modeltheta = ParameterModel(name = "Nested LGSSM model theta", dimension = L)
modeltheta.setHyperparameters(hyperparameters)
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setParameterNames(["expression(B)"])
#transType = ["log"]
transType = []
for m in range(L):
    transType.append("log")
modeltheta.setTransformation(transType) #(["none", "none"])
#modeltheta.setRprior({}) #seems useless
#modeltheta.setRprior(["priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["b1_rate"],\
#    "priorfunction <- function(x) dnorm(x, sd = %.5f)" % hyperparameters["b_sd"]])
#modeltheta.setRprior(["priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["b1_rate"],\
#    "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["b1_rate"]])
set_argu = []
## Prior hyperparameters
hyperparameters = { \
        "eps_shape": 2, "eps_scale": 1, \
        "w_shape": 2, "w_scale": 1, \
        "r_scale": 1, \
        "K_mean": 1, "K_sd": 1, "K_a": 0, "K_b": 10**10, \
        "theta_scale": 1, \
        "n0_mean": 1, "n0_sd": 1, "n0_a": 0, "n0_b": 10**10}

def updateHyperparametersWithData(hyperparameters, observations):
    hyperparameters["K_mean"] = mean(observations)
    hyperparameters["K_sd"] = 2 * sqrt(var(observations))
    hyperparameters["n0_mean"] = mean(observations)
    hyperparameters["n0_sd"] = 2 * sqrt(var(observations))
    return hyperparameters


modeltheta = ParameterModel(name = "Population Dynamic model theta (M2), reparameterized", dimension = 6)
modeltheta.setHyperparameters(hyperparameters)
modeltheta.setUpdateHyperparametersWithData(updateHyperparametersWithData)
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setParameterNames(["expression(sigma[epsilon]^2)", "expression(sigma[W]^2)", \
        "expression(log(N[0]))", "expression(r)", "expression(K)", "expression(theta)"])
modeltheta.setTransformation(["log", "log", "none", "log", "log", "log"])
modeltheta.setRtruevalues([0.05**2, 0.05**2, log(1), 0.18, 1, 0.2])



Exemplo n.º 5
0
    parameters = zeros((5, size))
    parameters[0, :] = mu
    parameters[1, :] = beta
    parameters[2, :] = xi
    parameters[3, :] = omega2
    parameters[4, :] = lamb
    return parameters

hyperparameters = { \
        "mu_mean": 0, "mu_sd": sqrt(2), \
        "beta_mean": 0, "beta_sd": sqrt(2), \
        "xi_rate": 0.2, "omega2_rate": 0.2, \
        "lambda_rate": 1}


modeltheta = ParameterModel(name = "SV one-factor", dimension = 5)
modeltheta.setHyperparameters(hyperparameters)
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setParameterNames(["expression(mu)", "expression(beta)", \
        "expression(xi)", "expression(omega^2)", "expression(lambda)"])
modeltheta.setTransformation(["none", "none", "log", "log", "log"])
modeltheta.setRprior(["priorfunction <- function(x) dnorm(x, sd = %.5f)" % hyperparameters["mu_sd"], \
                            "priorfunction <- function(x) dnorm(x, sd = %.5f)" % hyperparameters["beta_sd"], \
                            "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["xi_rate"], \
                            "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["omega2_rate"], \
                            "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["lambda_rate"]])



Exemplo n.º 6
0
    parameters[0, :] = xi
    parameters[1, :] = omega2
    parameters[2, :] = lamb
    return parameters

def dInitDistribution(parameters):
    """ takes transformed parameters """
    xi_part = parameters[0] - 1 * exp(parameters[0])
    omega2_part = parameters[1] - 1 * exp(parameters[1])
    lamb_part = parameters[2] - 1 * exp(parameters[2])
    return xi_part + omega2_part + lamb_part




modeltheta = ParameterModel(name = "SV one-factor", dimension = 3)
modeltheta.setHyperparameters(hyperparameters)
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setInitDistribution(rInitDistribution, dInitDistribution)
modeltheta.setParameterNames(["expression(xi)", "expression(omega^2)", "expression(lambda)"])
modeltheta.setTransformation(["log", "log", "log"])
modeltheta.priorandtruevaluesspecified = True
modeltheta.Rparameterstruevalues = "trueparameters <- c(0.5, 0.0625, 0.01)"
modeltheta.Rpriorfunctions = ["priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["xi_rate"], \
                            "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["omega2_rate"], \
                            "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["lambda_rate"]]



Exemplo n.º 7
0
    """ Takes transformed parameters.  When the parameter is transformed, 
    a jacobian appears in the formula.
    """
    # the following is the log density of Y = logit(U) when U is Uniform(0,1)
    rho_part = safelogdlogit(array([parameters[0]]))
    return rho_part[0]

def rprior(size, hyperparameters):
    """ returns untransformed parameters """
    rho = random.uniform(size = size, low = 0.01, high = 0.99) 
    parameters = zeros((1, size))
    parameters[0, :] = rho
    return parameters

## Prior hyperparameters
modeltheta = ParameterModel(name = "Simplest model theta", dimension = 1)
modeltheta.setHyperparameters({})
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setParameterNames(["expression(rho)"])
modeltheta.setTransformation(["logit"])
uniformprior = \
"""
priorfunction <- function(x){
    return(1)
}
"""
modeltheta.setRprior([uniformprior])


Exemplo n.º 8
0
    sigma = random.exponential(scale=1 / hyperparameters["sigma_rate"],
                               size=size)
    parameters = zeros((3, size))
    parameters[0, :] = nu
    parameters[1, :] = xi
    parameters[2, :] = sigma
    return parameters


## Prior hyperparameters
hyperparameters = { \
        "nu_rate": 0.2, \
        "xi_rate": 0.5, \
        "sigma_rate": 0.2}

modeltheta = ParameterModel(name="Athletics records", dimension=3)
modeltheta.setHyperparameters(hyperparameters)
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setParameterNames(
    ["expression(nu)", "expression(xi)", "expression(sigma)"])
modeltheta.setTransformation(["log", "log", "log"])

Rpriornu = "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters[
    "nu_rate"]
Rpriorxi = "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters[
    "xi_rate"]
Rpriorsigma = "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters[
    "sigma_rate"]
modeltheta.setRprior([Rpriornu, Rpriorxi, Rpriorsigma])
Exemplo n.º 9
0
    parameters[0, :] = mu
    parameters[1, :] = beta
    parameters[2, :] = xi
    parameters[3, :] = omega2
    parameters[4, :] = lamb
    parameters[5, :] = lambadd
    parameters[6, :] = w
    return parameters

hyperparameters = { \
        "mu_mean": 0, "mu_sd": sqrt(2), \
        "beta_mean": 0, "beta_sd": sqrt(2), \
        "xi_rate": 0.2, "omega2_rate": 0.2, \
        "lambda1_rate": 1, "lambdaadd_rate": 0.5}

modeltheta = ParameterModel(name="SV multi-factor", dimension=7)
modeltheta.setHyperparameters(hyperparameters)
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setParameterNames(["expression(mu)", "expression(beta)", \
        "expression(xi)", "expression(omega^2)", "expression(lambda[1])", "expression(lambda[2] - lambda[1])", \
        "expression(w[1])"])
modeltheta.setTransformation(
    ["none", "none", "log", "log", "log", "log", "logit"])
modeltheta.setRprior(["priorfunction <- function(x) dnorm(x, sd = %.5f)" % hyperparameters["mu_sd"], \
                      "priorfunction <- function(x) dnorm(x, sd = %.5f)" % hyperparameters["beta_sd"], \
                      "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["xi_rate"], \
                      "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["omega2_rate"], \
                      "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["lambda1_rate"], \
                      "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["lambdaadd_rate"], \
                      "priorfunction <- function(x) 1"])
                        scale=hyperparameters["tau_scale"],
                        size=size)
    parameters = zeros((2, size))
    parameters[0, :] = sigma
    parameters[1, :] = tau
    return parameters


## Prior hyperparameters
hyperparameters = { \
        "sigma_shape": 1, \
        "sigma_scale": 1, \
        "tau_shape": 1, \
        "tau_scale": 1}

modeltheta = ParameterModel(name="Linear Gaussian model theta", dimension=2)
modeltheta.setHyperparameters(hyperparameters)
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setParameterNames(["expression(sigma^2)", "expression(tau^2)"])
modeltheta.setTransformation(["log", "log"])
modeltheta.setRtruevalues([0.8, 0.4])
InverseGammaTemplate = """
priorfunction <- function(x){
    shape <- %.5f 
    scale <- %.5f
    return(scale**shape / gamma(shape) * x**(- shape - 1) * exp(-scale / x))
}
"""
modeltheta.setRprior([InverseGammaTemplate % (hyperparameters["sigma_shape"], hyperparameters["sigma_scale"]), \
InverseGammaTemplate % (hyperparameters["tau_shape"], hyperparameters["tau_scale"])])
Exemplo n.º 11
0
    nu = random.exponential(scale = 1 / hyperparameters["nu_rate"], size = size)
    xi = random.exponential(scale = 1 / hyperparameters["xi_rate"], size = size)
    sigma = random.exponential(scale = 1 / hyperparameters["sigma_rate"], size = size)
    parameters = zeros((3, size))
    parameters[0, :] = nu
    parameters[1, :] = xi
    parameters[2, :] = sigma
    return parameters

## Prior hyperparameters
hyperparameters = { \
        "nu_rate": 0.2, \
        "xi_rate": 0.5, \
        "sigma_rate": 0.2}

modeltheta = ParameterModel(name = "Athletics records", dimension = 3)
modeltheta.setHyperparameters(hyperparameters)
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setParameterNames(["expression(nu)", "expression(xi)", "expression(sigma)"])
modeltheta.setTransformation(["log", "log", "log"])

Rpriornu = "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["nu_rate"]
Rpriorxi = "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["xi_rate"]
Rpriorsigma = "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["sigma_rate"]
modeltheta.setRprior([Rpriornu, Rpriorxi, Rpriorsigma])



#modeltheta.plottingInstructions = ["No observations", "No evidence"]
#modeltheta.additionalPlots = """
Exemplo n.º 12
0
    return parameters


## Prior hyperparameters
hyperparameters = { \
        "eps_shape": 2, "eps_scale": 1, \
        "w_shape": 2, "w_scale": 1, \
        "r_scale": 1, \
        "K_mean": 1, "K_sd": 1, "K_a": 0, "K_b": 10**10, \
        "theta_scale": 1, \
        "n0_mean": 1, "n0_sd": 1, "n0_a": 0, "n0_b": 10**10}


def updateHyperparametersWithData(hyperparameters, observations):
    hyperparameters["K_mean"] = mean(observations)
    hyperparameters["K_sd"] = 2 * sqrt(var(observations))
    hyperparameters["n0_mean"] = mean(observations)
    hyperparameters["n0_sd"] = 2 * sqrt(var(observations))
    return hyperparameters


modeltheta = ParameterModel(
    name="Population Dynamic model theta (M2), reparameterized", dimension=6)
modeltheta.setHyperparameters(hyperparameters)
modeltheta.setUpdateHyperparametersWithData(updateHyperparametersWithData)
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setParameterNames(["expression(sigma[epsilon]^2)", "expression(sigma[W]^2)", \
        "expression(log(N[0]))", "expression(r)", "expression(K)", "expression(theta)"])
modeltheta.setTransformation(["log", "log", "none", "log", "log", "log"])
    parameters[1, :] = random.uniform(low=0,
                                      high=hyperparameters["high"],
                                      size=size)
    parameters[2, :] = random.uniform(low=hyperparameters["low"],
                                      high=hyperparameters["high"],
                                      size=size)
    parameters[3, :] = random.uniform(low=0,
                                      high=hyperparameters["high"],
                                      size=size)
    #parameters[0, :] = random.exponential(scale = 1 / hyperparameters["b1_rate"], size = size)
    #parameters[ell, :] = norm.rvs(size = size, loc = hyperparameters["b_mean"], scale = hyperparameters["b_sd"])
    return parameters


## Prior hyperparameters
modeltheta = ParameterModel(name="logistic diffusion model theta", dimension=L)
modeltheta.setHyperparameters(hyperparameters)
modeltheta.setPriorlogdensity(logdprior)
modeltheta.setPriorgenerator(rprior)
modeltheta.setParameterNames(["tau, sigma, r, b"])
modeltheta.setTransformation(["log", "log", "none",
                              "log"])  #(["none", "none"])
#modeltheta.setRprior({}) #seems useless
#modeltheta.setRprior(["priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["b1_rate"],\
#    "priorfunction <- function(x) dnorm(x, sd = %.5f)" % hyperparameters["b_sd"]])
#modeltheta.setRprior(["priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["b1_rate"],\
#    "priorfunction <- function(x) dexp(x, rate = %.5f)" % hyperparameters["b1_rate"]])
set_argu = []
for m in range(L):
    set_argu.append("priorfunction <- function(x) dexp(x, rate = %.5f)" %
                    hyperparameters["b1_rate"])