为什么 observation.weights 不允许我在 ltmle 中使用我的权重变量?

Why is observation.weights not letting me use my weight variable in ltmle?

我正在使用 ltmleparallel 函数 运行 对远程集群上的许多估算数据帧的列表进行分析。这是我的代码:

set.seed(500, kind = "L'Ecuyer-CMRG")
numcores <- future::availableCores()
cl <- parallel::makeCluster(numcores)
parallel:clusterEvalQ(cl, library(ltmle))
parallel:clusterEvalQ(cl, Avar <- c("var4", "var5", "var6")
parallel:clusterEvalQ(cl, Lvar <- c("var1", "var2", "var3")
parallel:clusterEvalQ(cl, Yvar <- c("var7", "var8")
parallel:clusterEvalQ(cl, wt <- c("weight")

list.of.imputed.dfs <- parallel:parLapply(cl = cl, list.of.imputed.dfs, function(x) {
Anodes = Avar,
Lnodes = Lvar,
Ynodes = Yvar,
survivaloutcome = T,
observation.weights = wt,
variance.method = "ic",
abar = list(c(1,1,1,1), c(0,0,0,0)))})

这段代码 运行s 当 observation.weights = wt, 被注释掉时,但是当我按照上面写的那样离开时给我一个错误。错误内容为:

Error in checkForRemoteErrors(val) :
4 nodes produced errors: first error: observation.weights must be NULL or a vector of length nrow(data) with no NAs, no negative values, and at least one positive value

我在所有估算的数据框中检查了我的权重变量的所有这些特征(所有这些特征都相同,因为在原始数据框中没有丢失权重)。我没有 NA,所有值都是正的。我的权重变量 class 是向量,我的值与 list.of.imputed.dfs 中每个数据帧的大小一样多。此外,权重变量是每个数据帧的第一个变量。

除了错误消息中的信息之外,还有什么原因导致我上面编写代码的方式不起作用?或者我是否遗漏了错误消息中的某些关键信息?

从要包含在每个估算数据帧中的变量中删除权重变量。

您需要将权重变量导出到集群核心,然后将权重变量作为列表添加到集群核心,如下所示:

clusterExport(cl, list("data"), envir=environment())
clusterEvalQ(cl, wt <- data$weight)

不要这样做:

parallel:clusterEvalQ(cl, wt <- c("weight")

然后 运行 像上面那样。