R2WinBUGS: как работать с несбалансированными панельными данными в R - PullRequest
0 голосов
/ 25 мая 2020

Это мой первый вопрос здесь, в 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

Может ли кто-нибудь помочь мне с этой проблемой?

...