Prop odds model: unable to resolve node...

2011-12-01
2012-11-06
  • screenager83
    screenager83
    2011-12-01

    Hi, I'm trying to fit a proportional odds model where 'volume' is the ordinal
    response (K categories) and 'temp30' is a dicotomic factor, but I receive the
    following error:

    Errore in jags.model(model.file, data = data, inits = inits, n.chains =
    n.chains, :

    RUNTIME ERROR:

    Compilation error on line 18.

    Unable to resolve node eta

    This may be due to an undefined ancestor node or a directed cycle in the graph

    This is the code:

    model{

    for (i in 1:N) {

    for (j in 1:K-1) {

    logit(cump) <- eta-b*temp30_+delta[assessor_]

    }

    p <- cump

    for (j in 2:K-1) {

    p <- cump-cump

    }

    p <- 1-cump

    volume_ ~ dcat(p)

    }

    b ~ dnorm(0,0.001)

    OR <- exp(b)

    tau ~ dgamma(0.001,0.001)

    sigma.u <- 1/sqrt(tau)

    for (aux in 1:L) {

    delta ~ dnorm(0,tau)

    }

    eta ~ dnorm(0,1) I(,eta)

    for (aux in 2:K-2) {

    eta ~ dnorm(0,1) I(eta,eta)

    }

    eta ~ dnorm(0,1) I(eta,)

    }

    Any suggestioon?

    Many thanks in advance and best wishes,

    Alessandro Magrini___

     
  • Martyn Plummer
    Martyn Plummer
    2011-12-01

    As the error message says, you have a directed cycle in your model: eta is
    defined in terms of eta and eta is defined in terms of eta. This is not
    allowed in JAGS.

    You want to impose a prior ordering on eta ... eta. Specifically, these are
    the order statistics of K-1 samples from a normal(0,1) distribution. An
    alternative way of getting this is given in the manual

    for (j in 1:(K-1)) {
       eta.raw[j] ~ dnorm(0,1)
    }
    eta <- sort(eta.raw)
    

    Your mileage may vary. You can fit your original model in WinBUGS, however.

     
  • screenager83
    screenager83
    2011-12-02

    Thanks a lot for the reply. I've tryed this:

    model{

    for (i in 1:N) {

    for (j in 1:(K-1)) {

    logit(cum) <- eta-b.temp30*temp30_+delta[assessor_]

    }

    p <- cum

    for (j in 2:(K-1)) {

    p <- cum-cum

    }

    p <- 1-cum

    volume_ ~ dcat(p)

    }

    for (j in 1:(K-1)) {

    eta.raw ~ dnorm(0,1)

    }

    eta <- sort(eta.raw)

    b.temp30 ~ dnorm(0,0.001)

    tau ~ dgamma(0.001,0.001)

    sigma.u <- 1/sqrt(tau)

    for (j in 1:L) {

    delta ~ dnorm(0,tau)

    }

    }

    and I get:

    "Error in setParameters(init.values[_], i) : Error in node eta. Attempt to set
    value of non-variable node"

    Am I wrong?____

     
  • Martyn Plummer
    Martyn Plummer
    2011-12-02

    Set initial values for "eta.raw" not "eta", which is no longer a stochastic
    node in this revised model.

     
  • screenager83
    screenager83
    2011-12-02

    Yeah, now it works well!

    Thanks very very much and congratulations for your software

     
  • screenager83
    screenager83
    2012-11-06

    Hi,

    I'm updating this old topic to ask for information about the difference between writing:

    for (j in 1:(K-1)) {
       eta.raw[j] ~ dnorm(0,1)
    }
    eta <- sort(eta.raw)
    

    and

    eta[1] ~ dnorm(0,1)
    eta[2] ~ dnorm(0,1)T(eta[1],)
    ...
    eta[K-1] ~ dnorm(0,1)T(eta[K-2],)
    

    the first solution has proven to be more efficient, I suppose because no sampled value is discarded, but is really analogous to the truncation, which is the theoretically correct way to solve the problem?

    If so, why? (anyway, avoid an in depth technical explanation...)

     
    Last edit: Martyn Plummer 2012-11-06
  • Martyn Plummer
    Martyn Plummer
    2012-11-06

    No these are definitely not the same.

    Suppose you have no data and are just sampling from the prior. In the first case, eta[1] is the smallest of (K-1) standard normal distributions. For K=11, eta[1] has mean -1.54 and standard deviation (SD) 0.59. In the second case, eta[1] has a standard normal distribution with mean 0 and SD 1