Ошибка дублирования ключей в пакете Simstudy и ссылка на переменные, ранее не определенная ошибка - PullRequest
0 голосов
/ 25 февраля 2020

Я попытался запустить следующий код и обнаружил несколько ошибок в пакете simstudy.

library(simstudy)
clusterDef <- defData(varname = "u_3", dist = "normal", formula = 0, 
                   variance = 25.77, id="clus") #cluster-level random effect
clusterDef <- defData(clusterDef, varname = "error", dist = "normal", formula = 0, 
                   variance = 38.35) #error termeriod 
clusterDef <- defData(clusterDef, varname = "ind", dist = "nonrandom",   
                   formula = 25) #individuals per cluster

#Generate individual-level random effect and treatment variable 
indDef <- defDataAdd(varname = "u_2", dist = "normal", formula = 0,
                     variance = 120.62)

#Generate clusters of data
set.seed(12345)

cohortsw <- genData(3, clusterDef)
cohortswTm <- addPeriods(cohortsw, nPeriods = 6, idvars = "clus", perName = "period")
cohortswTm <- trtStepWedge(cohortswTm, "clus", nWaves = 3, lenWaves = 1, startPer = 1, grpName = "trt")
cohortswTm <- genCluster(cohortswTm, cLevelVar = "clus", numIndsVar = "ind", level1ID = "id")

Ошибка в vecseq (f__, len__, if (allow.cartesian || notjoin ||! AnyDuplicated (f__,: объединить результаты в 2700 строк; более 468 = nrow (x) + nrow (i). Проверьте наличие дублирующихся значений ключей в i, каждое из которых снова и снова присоединяется к одной и той же группе в x. Если это нормально, попробуйте с помощью = .EACHI запустить j для каждой группы, чтобы избежать большого выделения. вы уверены, что для продолжения выполните sh, перезапустите с allow.cartesian = TRUE, в противном случае, пожалуйста, найдите это сообщение об ошибке в FAQ, Wiki, Stack Overflow и средство отслеживания проблем data.table для получения совета.

cohortswTm <- addColumns(indDef, cohortswTm)

#Define coefficients for time as a categorical variable 
timecoeff1 <- -5.42
timecoeff2 <- -5.72
timecoeff3 <- -7.03
timecoeff4 <- -6.13
timecoeff5 <- -9.13

#Generate outcome y 
y <- defDataAdd(varname = "Y", formula = "17.87 + 5.0*trt + timecoeff1*I(period == 1) + timecoeff2*I(period == 2) + timecoeff3*I(period == 3) + timecoeff4*I(period == 4) + timecoeff5*I(period == 5) + u_3 + u_2 + error", dist = "normal")

#Add outcome to dataset
cohortswTm <- addColumns(y, cohortswTm)

Ошибка: переменные, на которые ссылаются, ранее не были определены: timecoeff1, timecoeff2, timecoeff3, timecoeff4, timecoeff5

Кто-нибудь знает, почему я получаю ошибки, которые были выделены выше? Как бы я исправить код, чтобы предотвратить их возникновение?

Любая помощь очень ценится.

1 Ответ

0 голосов
/ 27 февраля 2020

Первая ошибка возникает из-за того, что вы пытаетесь создать данные отдельного уровня в каждом кластере, но каждый кластер появляется неоднократно (в течение 6 периодов). genCluster ожидает, что cLevelVar является уникальным идентификатором. В этом случае вы можете сгенерировать 6 особей на кластер за период времени, изменив команду genCluster на

cohortswTm <- genCluster(cohortswTm, cLevelVar = "timeID", 
      numIndsVar = "ind", level1ID = "id")

. Этот код создает «закрытую» когорту, особи наблюдаются только за один период. Создание открытой когорты, где людей также можно наблюдать с течением времени, немного сложнее и описано здесь .

Вторая ошибка возникает из-за того, что определения данных могут содержать только переменные, которые были определены в контексте определения данных. Итак, любые константы должны быть в формуле. (Сама формула может быть обновлена ​​с помощью updateDef и updateDefAdd, если вы хотите исследовать эффекты различных ковариатных уровней.)

Вот как следует определить y:

y <- defDataAdd(varname = "Y", formula = "17.87 + 5.0*trt - 
    5.42*I(period == 1) - 5.72*I(period == 2) - 7.03*I(period == 3) -
    6.13*I(period == 4) - 9.13*I(period == 5) + u_3 + u_2 + error", 
    dist = "normal")
...