2016-02-03 36 views
2

我試圖使用索引作爲響應(D47),溫度作爲預測因子(Temp)並考慮離散變量(材料)的隨機效應來建模貝葉斯迴歸。我發現了關於非等級迴歸的非常好的信息,有些帖子甚至包括這些模型的預測策略。儘管如此,在我的模型中預測D47值時,我發現了一個顯着的問題,主要是因爲隨機截取。JAGS隨機效應模型預測

在預測JAGS迴歸期間有沒有辦法處理隨機截距?

謝謝您的回答,

克里斯蒂安

model1<-"model { 
# Priors 
mu_int~dnorm(0, 0.0001) # Mean hyperparameter for random intercepts 
sigma_int~dunif(0, 100) # SD hyperparameter for random intercepts 
tau_int <- 1/(sigma_int*sigma_int) 
for (i in 1:n) { 
alpha[i]~dnorm(mu_int, tau_int) # Random intercepts 
} 
beta~dnorm(0, 0.01) # Common slope 
sigma_res~dunif(0, 100) # Residual standard deviation 
tau_res <- 1/(sigma_res*sigma_res) 
# Likelihood 
for (i in 1:n) { 
mu[i] <- alpha[Mat[i]]+beta*Temp[i] # Expectation 
D47[i]~dnorm(mu[i], tau_res) # The actual (random) responses 
} 
}" 
+1

什麼,具體而言,是「顯着問題「? –

+0

問題是:我可以使用這個JAGS模型預測D47值嗎?我還沒有找到任何關於基於JAGS隨機攔截模型的預測的信息。謝謝 – CristianR

回答

3

當然,你可以用隨機攔截的預測,所有你需要做的是將其指定爲某種形式的導出量的。

嘗試在模型中添加這樣的內容。

for(i in 1:(n)){ 
D47_pred[i] <- dnorm(mu[i], tau_res) 
} 

然後跟蹤D47_pred作爲參數。

編輯:

此外,你需要改變你如何指定爲前隨機攔截。這將需要幾步(更新代碼來自評論)。

您需要在您的數據列表中添加一個新常數,該常數表示向量Mat中唯一組的數量。我已經標記它M在這種情況下(例如,4組墊,M = 4)

for (j in 1:(M)){ 
alpha[j] ~ dnorm(mu_int, tau_int) # Random intercepts 
} 

該規範只是使隨機攔截的正確數量模型

+0

我真的很感謝你的幫助和解釋!這解決了我的問題。謝謝! – CristianR

+0

親愛的@M_Fidino,我已經在Alpha上列出了你的建議,但是我有一個錯誤: 'jags.model錯誤(file = textConnection(model1),data = dat,inits = list(init.rng1 ,: 運行時錯誤: 第7行編譯錯誤。 嘗試重新定義節點alpha [18]',有沒有其他替代您的建議?謝謝! – CristianR

+0

哦!我認爲你需要做的是這個而不是.. 。你需要在你的數據列表中添加一個新的常量,它表示向量Mat中唯一的組的數量,在這種情況下我標記爲M(例如Mat中的4個組,M = 4) 對於(j,1:(M)){ alpha [j]〜dnorm(mu_int,tau_int) }' 發生此錯誤的原因是您在「Mat」向量中有重複的數字,並且您正在告訴它有效地寫入其自身,而不希望這樣做。這個規範只是爲你的模型做了正確數量的隨機截取。 –