Я использую следующий код для расчета мощности для рандомизированного исследования со ступенчатым клином в открытой когорте. Этот код основан на пакете 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 отладить эти ошибки?