Запустите glm.mids для подмножества вмененных данных от мышей (R)
Я получаю сообщение об ошибке при попытке запустить glm.mids
на подмножестве mids
Вменение объекта:
library(mice)
imp2 = mice(nhanes)
glm.mids( (hyp==2)~bmi+chl, data=imp2, subset=(age==1) )
выдает загадочное сообщение об ошибке
"Error in eval(expr, envir, enclos) :
..1 used in an incorrect context, no ... to look in"
хотя синтаксис работает с обычным glm
на исходном наборе данных:
glm( (hyp==2)~bmi+chl, data=nhanes, subset=(age==1) )
Документация ?glm.mids
конкретно не обращается subset
но говорит, что вы можете передать дополнительные параметры на glm
, Если я не могу использовать subset
с glm.mids
Есть ли хороший способ подмножества mids
список объектов напрямую?
2 ответа
Я взял на себя смелость переписать glm.mids
, Это немного глупо. Кажется, проблема связана с неявной природой, с помощью которой атрибуты передаются в glm.
также смотрите эти посты:
https://stat.ethz.ch/pipermail/r-help/2003-November/041537.html
library(mice)
glm.mids=function (formula, family = gaussian, data, ...)
{
call <- match.call()
if (!is.mids(data))
stop("The data must have class mids")
analyses <- as.list(1:data$m)
for (i in 1:data$m) {
data.i <- complete(data, i)
analyses[[i]] <- do.call("glm",list(formula=quote(formula),family=quote(family),data=quote(data.i),...))
}
object <- list(call = call, call1 = data$call, nmis = data$nmis,
analyses = analyses)
oldClass(object) <- c("mira", "glm", "lm")
return(object)
}
imp2 = mice(nhanes)
glm.mids( (hyp==2)~bmi+chl, data=imp2 ,subset=quote(age==1))
Единственной частью, которую я переписал, был вызов функции glm из glm.mids. analyses[[i]] <- do.call("glm",list(formula=quote(formula),family=quote(family),data=quote(data.i),...))
В старой версии это читалось analyses[[i]] <- glm(formula, family = family, data = data.i,...)
Решение заключается в использовании
with(data=imp2, exp=glm((hyp==2)~bmi+chl, family=binomial , subset=(age==1) ))
(Я думаю) проблема в вашем вопросе заключается в использовании ...
в пределах glm.mids
функция. Они используются в аргументе функции, чтобы разрешить "Дополнительные параметры, передаваемые в glm". Однако когда ...
передаются в glm
позвонить в glm.mids
функции они не обрабатываются таким образом. В ?glm
...
являются "Для glm: аргументы, которые будут использоваться для формирования управляющего аргумента по умолчанию, если он не предоставлен напрямую". Таким образом, дополнительные аргументы не будут работать.
Чтобы увидеть это, упростим функцию
f1 <- function (formula, family = binomial, data, ...)
{
glm(formula, family = family, data = data, ...)
}
f1(formula=((hyp==2)~bmi+chl), data=nhanes, subset=(age==2))
#Error in eval(expr, envir, enclos) :
# ..1 used in an incorrect context, no ... to look in
Таким образом, аргумент подмножества не передается glm
вызов функции
Используя ответ от R: передать аргумент glm внутри функции R, мы можем немного изменить функцию
f2 <- function (formula, family = binomial, data, ...)
{
eval(substitute(glm(formula, family = family, data = data, ...)))
}
# This now runs
f2(formula=((hyp==2)~bmi+chl), data=nhanes, subset=(age==2))
# check
glm((hyp==2)~bmi+chl, data=nhanes, family="binomial", subset=(age==2))
Использование substitute
будет подставлять аргументы из функциональной среды (это требует более подробной информации - пожалуйста, не стесняйтесь обновлять)