2015-03-11 2 views
0

Я пытаюсь запустить байесовскую регрессионную модель с использованием rjags, а мои данные имеют 4 соответствующих условия. Модель отлично работает при свертывании условий, однако я не понимаю, где/как указать, что я хочу, чтобы эта модель выполнялась отдельно для каждого условия, но все же дайте мне вывод coda.samples, который позволяет мне сравнивать значения бета-версии (я бы хотел 4 Beta0 и 4 Beta1, по одному для каждого условия). Вот моя модель:Как указать rjags для запуска иерархической модели с несколькими условиями

order_model <- 
    "model { 
beta_0 ~ dnorm(0, .0000001) 
beta_1 ~ dnorm(0, .0000001) 
sigma ~ dunif(0, 100) 
sigma_u0 ~ dunif(0,100) 
sigma_u1 ~ dunif(0,100) 
sigma_i0 ~ dunif(0,100) 


for (i in 1:num_items) { 
    w_0i[i] ~ dnorm(0, 1/sigma_i0^2) 
} 

for (i in 1:num_subj+1) { 
    u_0s[i] ~ dnorm(0, 1/sigma_u0^2) 
    u_1s[i] ~ dnorm(0, 1/sigma_u1^2) 
} 
for (i in 1:length(rt)) { 
    rt[i] ~ dnorm((beta_0 + w_0i[item[i]] + u_0s[subject[i]]) + (beta_1 + u_1s[subject[i]]) * order[i], 1/sigma^2) 
} 
}" 

Где предмет и пункт называют получить смещение фиксированных эффектов, и «КТ» является непрерывным зависимым переменным. Условие кодируется в векторном «условии» со значениями 1: 4.

Я предполагаю, что мне нужен еще один цикл, но я не знаю, где.

+1

Добро пожаловать в StackOverflow. Когда вы задаете вопрос, высказывание оправданий о том, насколько вы новичок в этой теме, это плохая идея: 1) это всегда не имеет отношения к вопросу; 2) это затрудняет чтение, потому что эти оправдания - это просто дополнительный текст, который люди должны прочитать, чтобы понять этот вопрос. В этом нет ничего ужасного, многие из них так поступают, но они, конечно же, не должны. Ради лучших вопросов:) – gvlasov

ответ

2

Я думаю, вам просто нужно индексировать beta_0 и beta_1 используя условие так:

rt[i] ~ dnorm((beta_0[condition[i]] + w_0i[item[i]] + u_0s[subject[i]]) + (beta_1[condition[i]] + u_1s[subject[i]]) * order[i], 1/sigma^2) 

[Или, может быть beta_0 [условие [при условии [я]], в зависимости от того, как данные структурированы]

и:

for(c in 1:4){ 
     beta_0[c] ~ dnorm(0, .0000001) 
     beta_1[c] ~ dnorm(0, .0000001) 
    } 

Вы можете следить за 4 значения beta_0 и beta_1 и сравнить их с помощью выхода из зазубрин - либо сравнить заслуживающие доверие интервалов, или сделать попарные сравнения по су отрывая один уровень от другого, а затем посмотрим на достоверные интервалы разницы.

Мэтт