Это мой первый вопрос здесь, в Stackoverflow, извините за ошибку. У меня есть несбалансированные данные панели , и я пытаюсь реализовать следующую модель для Winbugs с использованием пакета R2WinBUGS:
Model{
for(i in 1:N) {
for(t in 2:T) {
y[i,t] ~ dnorm(mu[i,t], tau.c)
mu[i,t] <- alpha[i] + omega[t] + gamma1*y[i, t-1] + beta1*x1[i,t] + beta2*x2[i,t] + beta3*x3[i,t]
for(i in 1:N) {
y[i,1] ~ dnorm(0, 0.01)
alpha[i] ~ dunif(-100, 100)
}
gamma1 ~ dnorm(0, 0.001)
beta1 ~ dnorm(0, 0.001)
beta2 ~ dnorm(0, 0.001)
beta3 ~ dnorm(0, 0.001)
for(t in 1: T) {
omega[t] ~ dunif(-100, 100)
}
tau.c ~ dgamma(0.01, 0.01)
sig2 <- 1/tau.c
}
Я новичок в языке R и WinBUGS, и я думаю, что мой проблема связана с преобразованием данных из R в Winbugs.
Как описано в руководстве Winbugs, есть три способа справиться с несбалансированными данными, и я пытаюсь использовать способ «заполнить прямоугольник angular» (см. рисунок, напечатанный из Руководства Winbugs)
введите описание изображения здесь
Мой код R для данных:
library(reshape2)
y <- as.matrix(dcast(unbal, id ~ year, value.var = "y")[,c(-1, -1)])
x1 <- as.matrix(dcast(unbal, id ~ year, value.var = "x1")[,c(-1, -1)])
x2 <- as.matrix(dcast(unbal, id ~ year, value.var = "x2")[,c(-1, -1)])
x3 <- as.matrix(dcast(unbal, id ~ year, value.var = "x3")[,c(-1, -1)])
N <- nrow(y)
T <- ncol(y)
С этим кодом я иметь каждую переменную моей модели в формате rect angular как запрос Winbugs (см. рисунок для переменной y).
введите здесь описание изображения
Возможно ли, что когда R экспортирует данные в WinBUGS, NA в переменных матрицы будут опущены, что изменит что-то в размерности матрицы? ? Помимо «N» и «T», должен ли я сообщать в объекте «данные» размерность матрицы? Мой код R для R2WinBUGS:
library(R2WinBUGS)
data = list("y", "x1", "x2", "x3", "N", "T")
set.seed(1234)
inits <- function(){
list( alpha=rnorm(N), omega= rnorm(T), beta1=rnorm(1),beta2=rnorm(1), beta3=rnorm(1),
tau.c=rgamma(1, 0.01, 0.01), teta1=rnorm(1))
}
inits()
parameters <- c("gamma1","beta1", "beta2", "beta3", "tau.c", "sig2")
model_base <- bugs(model.file= "model.txt",
data = data,
parameters = parameters,
inits = inits,
n.chains = 3,
n.iter = 200000, n.thin =2,
bugs.directory = "C:/WinBUGS14", debug = TRUE, codaPkg=TRUE)
При этом Winbugs возвращает ошибку: «использовано неопределенное node x1 ". Однако, если я сбалансировал свою панель (то есть, если у меня нет NA в моем образце), код отлично работает! Из-за этого я думаю, что моя проблема в преобразовании данных.
Я не знаю, как включить сюда небольшой образец моей панели, я надеюсь, что следующее может сработать:
> unbal
# A tibble: 1,017 x 6
t id y x1 x2 x3
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 1998 9 0.0274 0.160 5.45 1.36
2 2000 9 0.169 0.0741 4.96 1.68
4 2001 9 -0.134 0.135 4.90 1.58
5 2003 9 -0.228 0.950 8.67 1.69
6 2004 9 -0.116 1.62 13.1 2.28
7 1997 70 -0.0998 2.79 2.56 1.20
8 1998 70 -0.320 1.00 0.233 1.75
9 1999 70 -0.0971 -0.433 0.233 11.0
10 2000 70 -0.0721 -0.433 0.233 21.6
11 2001 70 -0.0870 10.2 0.233 76.0
12 2002 70 -0.127 -0.433 0.233 23.1
13 2004 70 -0.0706 10.2 0.233 117.
14 1999 152 -0.320 0.329 1.66 1.13
15 2000 152 0.230 0.520 3.71 2.98
Может ли кто-нибудь помочь мне с этой проблемой?