2017-04-30 2 views
0

J'ai un réseau gaussien bayésien linéaire paramétré et j'essaie de faire des prédictions sur le modèle en utilisant rjags. Je peux le faire pour une observation mais je ne sais pas comment passer plusieurs observations. Voici un exempleGénérer des prédictions en utilisant JAGS

library(rjags) 
library(coda) 

modèle initial

mod <- textConnection("model { 
    mpg.hat <- (34.96055404 - 3.35082533* wt - 0.01772474* disp) 
    wt  ~ dnorm(3.21725, 1/0.9784574^2) 
    disp ~ dnorm(230.7219, 1/123.9387^2) 
    mpg  ~ dnorm(mpg.hat, 1/2.916555^2) 
}") 

# Evaluate and get prediction when wt=1 and disp is hidden 
m <- jags.model(mod, n.chains = 1, n.adapt = 1000, data=list(wt=1, disp=NA)) 
update(m, 10000) 
cs <- coda.samples(m, c("mpg", "wt", "disp"), 1e5) 
summary(cs) 

Cela fonctionne comme prévu, cependant, j'ai plusieurs lignes de données que je veux générer des prévisions pour. Si j'essaie d'étendre l'argument data=list( pour inclure plus de lignes, une erreur se produit. Ainsi, après réexécutant le texte du modèle, et la commande suivante j'obtiens l'erreur

m <- jags.model(mod, n.chains = 1, n.adapt = 1000, data=list(wt=1:2, disp=1:2)) 

Erreur dans jags.model (mod, n.chains = 1, n.adapt = 1000, data = liste (poids = 1: 2,:
erreur dans le nœud dnorm (230,722, (a1/(a123.939^2)))
Longueur en décalage de Node setValue

Comment puis-je étendre ceci à plus d'observations?

Répondre

1

Vous devez itérer à travers les lignes:

mod <- textConnection("model { 
    for (n in 1:N) { 
    mpg.hat[n] <- (34.96055404 - 3.35082533* wt[n] - 0.01772474* disp[n]) 
    mpg[n]  ~ dnorm(mpg.hat[n], 1/2.916555^2) 
    wt[n]  ~ dnorm(3.21725, 1/0.9784574^2) 
    disp[n] ~ dnorm(230.7219, 1/123.9387^2) 
    } 
}") 

Notez que vous devez ajouter à votre liste N de données ainsi:

data = list(N = 1, wt = 1, disp = NA) 
data = list(N = 2, wt = 1:2, disp = 1:2)