Ошибка: имя переменной _ ранее определено - PullRequest
0 голосов
/ 04 марта 2020

Я использую следующий код для расчета мощности для рандомизированного исследования со ступенчатым клином в открытой когорте. Этот код основан на пакете simstudy, и я адаптировал свой код по следующей ссылке: https://www.rdatagen.net/post/analyzing-the-open-cohort-stepped-wedge-trial-with-binary-outcomes/ для имитации набора данных панели.

library(simstudy)
library(nlme)
library(gendata)
library(data.table)

#Define random effects, errors, and number of individuals per cluster
clusterDef <- defData(varname = "u_3", dist = "normal", formula = 0, variance = 25.77, id="cluster") #cluster-level random effect
clusterDef <- defData(clusterDef, varname = "error", dist = "normal", formula = 0, variance = 38.35) #error term 
#clusterDef <- defData(clusterDef, varname = "ind", dist = "nonrandom", formula = 25) #individuals per cluster

#Generate cluster-level data
set.seed(12345)
cohortsw <- genData(3, id = "cluster")
cohortswTm <- addPeriods(cohortsw, nPeriods = 6, idvars = "cluster", perName = "period")
cohortstep <- trtStepWedge(cohortswTm, "cluster", nWaves = 3, lenWaves = 1, startPer = 1, grpName = "Ijt")

cohortstep <- addColumns(clusterDef, cohortstep)

#Generate individual patient-level data
pat <- genCluster(cohortswTm, cLevelVar = "timeID", numIndsVar = 25, level1ID = "id")

dx <- merge(pat, cohortstep, by = c("cluster", "period"))
setkey(dx, id, period)

#Define outcome y 
outDef <- defDataAdd(varname = "y", formula = "17.87 + 5.0*Ijt - 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 + error", dist = "normal")

dx <- addColumns(outDef, dx)

#Fit multi-level model to simulated dataset
stepcohort <- lme(y ~ factor(period) + factor(Ijt), random = ~1|cluster, data = dx, method = "REML")

#Power analysis 
powercrosssw <- function() {

  cohortsw <- genData(3, clusterDef)
  cohortswTm <- addPeriods(cohortsw, nPeriods = 6, idvars = "cluster", perName = "period")
  cohortstep <- trtStepWedge(cohortswTm, "cluster", nWaves = 3, lenWaves = 1, startPer = 1,  grpName = "Ijt")

  cohortstep <- addColumns(clusterDef, cohortstep)
  pat <- genCluster(cohortswTm, cLevelVar = "timeID", numIndsVar = "n", level1ID = "id")
  dx <- merge(pat, cohortstep, by = c("cluster", "period"))
  setkey(dx, id, period)
  dx <- addColumns(outDef, dx)

}

bresult <- NULL
presult <- NULL

i=1

while (i < 1000) {

  cohortsw <- powercrosssw()

  #Fit multi-level model to simulated dataset
  stepcohort <- tryCatch(lme(Yijt ~ factor(period) + factor(Ijt), data = cohortswTm, random = ~1|clus/id, method = "REML"), 
    warning = function(w) { "warning" }
  )

  if (! is.character(stepcohort)) {

    coeff <- coef(summary(stepcohort))["factor(Ijt)1", "Value"]
    pvalue <- coef(summary(stepcohort))["factor(Ijt)1", "p-value"]
    bresult <- c(bresult, coeff)
    presult <- c(presult, pvalue)
    i <- i + 1
  }

}

Когда я запускаю код до «Включая многоуровневую модель», то все работает нормально. Однако, когда я включаю все остальное, я получаю это сообщение:

Ошибка: имя переменной u_3, определенное ранее

, что, как я полагаю, связано с ошибкой в ​​функции, которая Я создал (powercrosssw). В экспериментальных целях я попытался удалить следующую строку:

  cohortstep <- addColumns(clusterDef, cohortstep)

Но я столкнулся с другой ошибкой: ...

Ошибка в rep (id2, n): недействительно аргумент 'times'

Как мне go отладить эти ошибки?

...