R: regressão logística binária de modelo misto inicializada utilizando bootMer() do novo pacote lme4

quero usar a nova funcionalidade bootMer() do novo pacote lme4 (a versão de desenvolvimento actual). Sou novo em R e não sei que Função devo escrever para o seu argumento divertido. Diz que precisa de um vector numérico, mas não faço ideia do que essa função irá executar. Então eu tenho uma fórmula de modelo misto que é lançada para o bootMer(), e tem um número de réplicas. Então não sei o que essa função externa faz? É suposto ser um modelo para métodos de inicialização? Não são. métodos de inicialização já implementados em He bootMer? Então por que eles precisam de uma "estatística de interesse"externa? E que estatísticas de interesse devo usar?

a seguinte sintaxe é adequada para trabalhar? R continua em erro gerando que a diversão deve ser um vetor numérico. Eu não sei como separar as estimativas do "fit" e até devo fazer isso em primeiro lugar? Posso apenas dizer que estou perdido com essa discussão "divertida". Também não sei se devo passar a fórmula de brilho de modelo misto() usando a variável "Mixed5" ou devo passar alguns ponteiros e referências? I see in the examples that X (the first argument of bootMer() is a *lmer () object. I wanted to write * Mixed5 but it rendered an error.

Muito obrigado.

o meu código é:

library(lme4)
library(boot)

(mixed5 <- glmer(DV ~ (Demo1 +Demo2 +Demo3 +Demo4 +Trt)^2 
                 + (1 | PatientID) + (0 + Trt | PatientID)
                 , family=binomial(logit), MixedModelData4))


FUN <- function(formula) {
  fit <- glmer(DV ~ (Demo1 +Demo2 +Demo3 +Demo4 +Trt)^2 
               + (1 | PatientID) + (0 + Trt | PatientID)
               , family=binomial(logit), MixedModelData4)
  return(coef(fit))
}

result <- bootMer(mixed5, FUN, nsim = 3, seed = NULL, use.u = FALSE,
        type = c("parametric"),
        verbose = T, .progress = "none", PBargs = list())

result
FUN
fit

e o erro:

Error in bootMer(mixed5, FUN, nsim = 3, seed = NULL, use.u = FALSE, type = c("parametric"),  : 
  bootMer currently only handles functions that return numeric vectors

-------------------------------------------------------- Atualização -----------------------------------------------------

Editei o código como o Ben instruiu. O código funcionou muito bom, mas o SEs e os preconceitos eram todos zero. Também sabe como extrair os valores de P desta saída (estranho para mim)? Devo utilizar mistura() da embalagem afex?

o meu código revisto:

library(lme4)
library(boot)

(mixed5 <- glmer(DV ~ (Demo1 +Demo2 +Demo3 +Demo4 +Trt)^2 
                + (0 + Trt | PatientID)
                 , family=binomial(logit), MixedModelData4))


FUN <- function(fit) {
  fit <- glmer(DV ~ (Demo1 +Demo2 +Demo3 +Demo4 +Trt)^2 
               + (1 | PatientID) + (0 + Trt | PatientID)
               , family=binomial(logit), MixedModelData4)
  return(fixef(fit))
}

result <- bootMer(mixed5, FUN, nsim = 3)

result

-------------------------------------------------------- Atualização 2 -----------------------------------------------------

eu também tentei o seguinte, mas o código gerou avisos e não deu nenhum resultado.

(mixed5 <- glmer(DV ~ Demo1 +Demo2 +Demo3 +Demo4 +Trt 
                 + (1 | PatientID) + (0 + Trt | PatientID)
                 , family=binomial(logit), MixedModelData4))

FUN <- function(mixed5) {
  return(fixef(mixed5))}

result <- bootMer(mixed5, FUN, nsim = 2)

Aviso mensagem:

In bootMer(mixed5, FUN, nsim = 2) : some bootstrap runs failed (2/2)
> result

Call:
bootMer(x = mixed5, FUN = FUN, nsim = 2)

Bootstrap Statistics :
WARNING: All values of t1* are NA
WARNING: All values of t2* are NA
WARNING: All values of t3* are NA
WARNING: All values of t4* are NA
WARNING: All values of t5* are NA
WARNING: All values of t6* are NA

-------------------------------------------------------- Atualização 3 -----------------------------------------------------

este código também gerou avisos:

FUN <- function(fit) {
  return(fixef(fit))}

result <- bootMer(mixed5, FUN, nsim = 2)

os avisos e resultados:

Warning message:
In bootMer(mixed5, FUN, nsim = 2) : some bootstrap runs failed (2/2)
> result

Call:
bootMer(x = mixed5, FUN = FUN, nsim = 2)

Bootstrap Statistics :
WARNING: All values of t1* are NA
WARNING: All values of t2* are NA
WARNING: All values of t3* are NA
WARNING: All values of t4* are NA
WARNING: All values of t5* are NA
WARNING: All values of t6* are NA
Author: Siguza, 2013-08-26

2 answers

Existem basicamente duas confusões (simples) aqui.
  • o primeiro é entre coef() (que devolve uma lista de matrizes) e fixef() (que devolve um vector do efeito fixo coeficientes): eu presumo que fixef() é o que você queria, embora você possa querer algo como c(fixef(mixed),unlist(VarCorr(mixed))).
  • o segundo é que FUN deve tomar um objecto modelo montado como entrada ...

Por exemplo:

library(lme4)
library(boot)

mixed <- glmer(incidence/size ~ period + (1|herd),
               weights=size, data=cbpp, family=binomial)

FUN <- function(fit) {
    return(fixef(fit))
}

result <- bootMer(mixed, FUN, nsim = 3)

result

## Call:
## bootMer(x = mixed, FUN = FUN, nsim = 3)
## Bootstrap Statistics :
##      original      bias    std. error
## t1* -1.398343 -0.20084060  0.09157886
## t2* -0.991925  0.02597136  0.18432336
## t3* -1.128216 -0.03456143  0.05967291
## t4* -1.579745 -0.08249495  0.38272580
## 
 10
Author: Ben Bolker, 2013-08-26 13:22:33

Este pode ser o mesmo problema, que eu relatei como um problema aqui. Pelo menos leva à mesma mensagem de erro inútil e levou-me um tempo também.

Isso significaria que tens falhas nos teus dados, que o ler ignora, mas que matam o bootMer.

Tenta:

(mixed5 <- glmer(DV ~ (Demo1 +Demo2 +Demo3 +Demo4 +Trt)^2 
                 + (1 | PatientID) + (0 + Trt | PatientID)
                 , family=binomial(logit), na.omit(MixedModelData4[,c('DV','Demo1','Demo2','Demo3','Trt','PatientId')])))
 2
Author: Ruben, 2013-12-04 16:54:23