R:自举混合模型二元logistic回归

R:自举混合模型二元logistic回归,r,debugging,syntax,statistics-bootstrap,R,Debugging,Syntax,Statistics Bootstrap,我需要引导我的混合模型二元逻辑回归。该模型本身运行良好,并得到了专家朋友的批准和纠正,但自举版本存在缺陷。引导版本之前已经被CrossValidated的另一位专家朋友批准,但后来mods删除了我的帖子,说它不属于CrossValidated。但同样的代码恰好适用于简单的固定效应多元逻辑回归,尽管在这种情况下也有许多类似于此处警告的警告[除了针对lmer函数的单一警告:在mer_finalizeans:false convergence 8中] 您能告诉我错误在哪里以及如何调试它吗 非常感谢 我

我需要引导我的混合模型二元逻辑回归。该模型本身运行良好,并得到了专家朋友的批准和纠正,但自举版本存在缺陷。引导版本之前已经被CrossValidated的另一位专家朋友批准,但后来mods删除了我的帖子,说它不属于CrossValidated。但同样的代码恰好适用于简单的固定效应多元逻辑回归,尽管在这种情况下也有许多类似于此处警告的警告[除了针对lmer函数的单一警告:在mer_finalizeans:false convergence 8中]

您能告诉我错误在哪里以及如何调试它吗

非常感谢

我的代码是:我暂时将复制数保持得太低,无法调试代码:

library(boot)
library(lme4)

mixedGLM <- function(formula, data, indices) {
        d <- data[indices, ]
        (fit <- lmer(DV ~ (Demo1 +Demo2+Demo3 +Demo4 +Trt)^2 
                     + (1 | PatientID) + (0 + Trt | PatientID)
                     , family=binomial(logit), d))
        return(coef(fit))
      }

results <- boot(data=MixedModelData4 , statistic = mixedGLM, R= 2, formula= DV~Demo1 +Demo2 +Demo3 +Demo4 +Trt)
我不知道如何调试它,或者问题是否出在我的数据集上?我应该补充一点,我的数据集对所有变量都是以均值为中心的。DV只会被否定,因为均值为中心不允许R工作,而对二进制结果进行否定也会起到同样的作用

-----------------------------更新-------------------------------

我按照Henrik的建议将方法的PB值更改为LRT,拟合模型的过程已经完成,但获取p值的过程并未开始:

> results4 <- mixed(DV ~ (Demo1 +Demo2+Demo3 +Demo4 +Trt)^2 
+                   + (0 + Trt | PatientID),
+                   family=binomial(logit), data = MixedModelData4,
+                   method = "LRT", args.test = list(nsim = 2))
Fitting 17 lmer() models:
[.................]
Warning message:
In mixed(DV ~ (Demo1 + Demo2 + Demo3 + Demo4 + Trt)^2 + (0 + Trt |  :
  Due to missing values, reduced number of observations to 90

事实证明,在使用LRT时,p值不是通过自举获得的。因此,虽然没有自举,但结果已经准备好了。

如果您想从带有参数自举的GLMM获得p值,可以使用来自包afex的混合函数,该函数通过pbkrtest::PBmodcomp获得:

您甚至可以首先定义一个本地集群,即使用多个核心:

cl <- makeCluster(rep("localhost", 4))
results <- mixed(DV ~ (Demo1 +Demo2+Demo3 +Demo4 +Trt)^2 
                     + (1 | PatientID) + (0 + Trt | PatientID),
                     family=binomial(logit), data = d,
                     method = "PB", args.test = list(nsim = 1000, cl = cl))
最好安装所有三个软件包的开发版本,因为当前版本的pbkrtest是为lme4 1.0设计的,而lme4 1.0尚未在cran上:

r-forge的afex:install.packagesafex,repos=http://R-Forge.R-project.org PBKR测试来自: 来自github的lme4:
如果您想从带有参数引导的GLMM获得p值,可以使用afex包中的函数mixed,该函数通过pbkrtest::PBmodcomp:

您甚至可以首先定义一个本地集群,即使用多个核心:

cl <- makeCluster(rep("localhost", 4))
results <- mixed(DV ~ (Demo1 +Demo2+Demo3 +Demo4 +Trt)^2 
                     + (1 | PatientID) + (0 + Trt | PatientID),
                     family=binomial(logit), data = d,
                     method = "PB", args.test = list(nsim = 1000, cl = cl))
最好安装所有三个软件包的开发版本,因为当前版本的pbkrtest是为lme4 1.0设计的,而lme4 1.0尚未在cran上:

r-forge的afex:install.packagesafex,repos=http://R-Forge.R-project.org PBKR测试来自: 来自github的lme4:
两条快速评论:?引导-定义统计“传递的第一个参数将始终是原始数据。第二个参数将是索引向量”。此外,mixedGLM参数中的公式在mixedGLM中未定义。如果以长格式从数据中采样,将破坏重复度量中的相关性。非常感谢。您是吗u谈论这句话:结果请注意,我没有真正的重复测量,而是一个伪复制。我的患者在长格式数据集中重复。所以我不知道重复测量之间是否有真正的相关性或100%的伪相关性?我的演示变量在患者级别,但Trt治疗在患者级别治疗水平,对每名服用真实药物和安慰剂的患者重复……有关详细信息,请查看该链接。如果您定义了mixedGLM函数,则您的第一个参数是“公式”,但您尚未在mixedGLM函数体中定义“公式”。定义函数时,第一个参数应为实际数据&seco第二个指标。如果你从长格式中取样,你可能在第一次干预时,每个受试者在时间上只能得到一个测量值。最好在受试者级别转换为宽格式和取样。一些评论:1查看即将发布的lme4开发版本是一个非常好的主意,该版本具有一些内置功能[bootMer和confint…,method=boot]还有2个refit函数,它大大加快了速度;3在一些引导复制中经常会看到失败。下面是一些简短的注释:?引导-定义统计信息“传递的第一个参数始终是原始数据。第二个参数将是索引向量”。此外,mixedGLM参数中的公式在mixedGLM中没有定义。如果如果你从长格式的数据中取样,你将破坏重复测量中的相关性。非常感谢。你是在谈论这样的陈述:结果请注意,我没有真正的重复测量,而是一个伪复制。我的患者在长格式数据集中重复。所以我不知道我是否与即使是重复测量或100%伪相关性?我的演示变量在患者层面,但Trt治疗是在治疗层面,对每个服用真实药物和安慰剂的患者重复……有关详细信息,请查看该链接。在定义mixedGLM功能的地方,您可以
r第一个参数是“公式”,但您尚未在mixedGLM函数体中定义“公式”。定义函数时,第一个参数应该是实际数据,第二个参数是索引。如果你从长格式中取样,你可能在第一次干预时,每个受试者只能得到一次测量。最好在主题级别转换为广域和示例。一些评论:1查看即将发布的lme4开发版本,这将是一个非常好的主意,它具有一些内置功能[bootMer和confint…,method=boot],以及2可以大大加快速度的改装功能;3在一些引导复制中经常会看到失败。我只能说太棒了!:我正在安装R3并尝试您友好地链接到的软件包。这个问题是已知的,pbkrtest的作者正在解决它:但这意味着,您的模型/数据并没有真正表现良好。它在特定型号上失败了吗?或者尝试method=LRT而不是PB,并仅在有趣的比较中使用PBmodcomp。顺便说一句,method=LRT不基于参数引导计算p值,而是基于似然比测试。@vic如果使用method=LRT,则不是引导。只有method=PB使用引导。如果你使用的是大于1000的足够大的样本,这就是你的引导过程。@Vic正如我所说,pbkrtest的作者知道这个问题,并且正在研究它,但我不知道什么时候可以解决这个问题。因此,您可以从CRAN档案中使用旧版本的lme4<1和pbkrtest 0.3.4:。这应该更有效。我只能说太棒了!:我正在安装R3并尝试您友好地链接到的软件包。这个问题是已知的,pbkrtest的作者正在解决它:但这意味着,您的模型/数据并没有真正表现良好。它在特定型号上失败了吗?或者尝试method=LRT而不是PB,并仅在有趣的比较中使用PBmodcomp。顺便说一句,method=LRT不基于参数引导计算p值,而是基于似然比测试。@vic如果使用method=LRT,则不是引导。只有method=PB使用引导。如果你使用的是大于1000的足够大的样本,这就是你的引导过程。@Vic正如我所说,pbkrtest的作者知道这个问题,并且正在研究它,但我不知道什么时候可以解决这个问题。因此,您可以从CRAN档案中使用旧版本的lme4<1和pbkrtest 0.3.4:。这应该更有效。
Fitting 17 lmer() models:
[.................]
Obtaining 16 p-values:
[....
Error: pwrssUpdate did not converge in 30 iterations
In addition: Warning messages:
1: In mixed(DV ~ (Demo1 + Demo2 + Demo3 + Demo4 + Trt)^2 + (0 + Trt |  :
  Due to missing values, reduced number of observations to 90
2: In (function (fn, par, lower = rep.int(-Inf, n), upper = rep.int(Inf,  :
  failure to converge in 10000 evaluations
3: In (function (fn, par, lower = rep.int(-Inf, n), upper = rep.int(Inf,  :
  failure to converge in 10000 evaluations
4: In (function (fn, par, lower = rep.int(-Inf, n), upper = rep.int(Inf,  :
  failure to converge in 10000 evaluations
5: In (function (fn, par, lower = rep.int(-Inf, n), upper = rep.int(Inf,  :
  failure to converge in 10000 evaluations
6: In (function (fn, par, lower = rep.int(-Inf, n), upper = rep.int(Inf,  :
  failure to converge in 10000 evaluations
> results4 <- mixed(DV ~ (Demo1 +Demo2+Demo3 +Demo4 +Trt)^2 
+                   + (0 + Trt | PatientID),
+                   family=binomial(logit), data = MixedModelData4,
+                   method = "LRT", args.test = list(nsim = 2))
Fitting 17 lmer() models:
[.................]
Warning message:
In mixed(DV ~ (Demo1 + Demo2 + Demo3 + Demo4 + Trt)^2 + (0 + Trt |  :
  Due to missing values, reduced number of observations to 90
library(afex)
results <- mixed(DV ~ (Demo1 +Demo2+Demo3 +Demo4 +Trt)^2 
                     + (1 | PatientID) + (0 + Trt | PatientID),
                     family=binomial(logit), data = d,
                     method = "PB", args.test = list(nsim = 1000))
cl <- makeCluster(rep("localhost", 4))
results <- mixed(DV ~ (Demo1 +Demo2+Demo3 +Demo4 +Trt)^2 
                     + (1 | PatientID) + (0 + Trt | PatientID),
                     family=binomial(logit), data = d,
                     method = "PB", args.test = list(nsim = 1000, cl = cl))