повторение значения в многоуровневой симуляции - PullRequest
0 голосов
/ 28 января 2020

Я выполняю многоуровневое моделирование в R, но я застрял в том, как генерировать соответствующие значения для переменной. Значение должно быть разным для каждого года и штата, но одинаковым для отдельных лиц в штате. Код ниже. Любая помощь приветствуется. Спасибо, я прокомментировал код ниже для ясности

#--------Parameters---------#
seed <-  476;
n_state <-  length(state.name[1:4]); 
years <- 2007:2012
n_time <-  length(years);
n_id   <-  3;


#---------ID variables-------#
state <- rep(state.name[1:n_state], each=n_time*n_id)
time <- rep(years, time=n_state*n_id)
id <- rep(1:n_id, each=n_time, time=n_state)
idvar <- data.frame(state, time, id)
head(idvar, n=18)


#---------pre and post variable-------#
#first three years, the value of prepost_id (intervention) is 0 and the rest NA
prepost_id <- c(rep(0,3), rep(NA,(n_time - 3))) 


# Creating a function to generate whether or not there was an intervention
# within a state at a certain year

prepost <- function(prepost_val = prepost_id, n=1, prob =0.5, 
                    start=4, end =n_time){
  for (i in start: end) {

    prepost_val[i] <- ifelse(
      prepost_val[i-1] == 0,
      rbinom(n,1,prob=prob),
      prepost_val[i-1])
  }

  return(prepost_val)
}
prepost(prepost_val = prepost_id)

# repeating the process for all states
# Note that the value of the prepost() function should be somewhat different
# for the different state but the same for individuals within that state

prepostdata <- rep(replicate(n_state, prepost(prepost_val = prepost_id)), 
          time=n_id)

#------------dataset----------#
dta <- data.frame(state,time, id, prepostdata)
head(dta, n=18)

Это то, что я получил

# state    time  id  prepostdata
#  Alabama 2007  1           0
#  Alabama 2008  1           0
#  Alabama 2009  1           0
#  Alabama 2010  1           0
#  Alabama 2011  1           1
#  Alabama 2012  1           1
#  Alabama 2007  2           0
#  Alabama 2008  2           0
#  Alabama 2009  2           0
#  Alabama 2010  2           1 <---The problem: should be the same for all ids
#  Alabama 2011  2           1
#  Alabama 2012  2           1 
#  Alabama 2007  3           0
#  Alabama 2008  3           0
#  Alabama 2009  3           0
#  Alabama 2010  3           0
#  Alabama 2011  3           1
#  Alabama 2012  3           1

Но это то, что я хочу

# state    time  id  prepostdata
#  Alabama 2007  1           0
#  Alabama 2008  1           0
#  Alabama 2009  1           0
#  Alabama 2010  1           0
#  Alabama 2011  1           1
#  Alabama 2012  1           1
#  Alabama 2007  2           0
#  Alabama 2008  2           0
#  Alabama 2009  2           0
#  Alabama 2010  2           0 
#  Alabama 2011  2           1
#  Alabama 2012  2           1
#  Alabama 2007  3           0
#  Alabama 2008  3           0
#  Alabama 2009  3           0
#  Alabama 2010  3           0
#  Alabama 2011  3           1
#  Alabama 2012  3           1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...