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
2 answers
- o primeiro é entre
coef()
(que devolve uma lista de matrizes) efixef()
(que devolve um vector do efeito fixo coeficientes): eu presumo quefixef()
é o que você queria, embora você possa querer algo comoc(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
##
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')])))