1

代入オブジェクト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が、追加のパラメーターを に渡すことができると書かれていますglmsubsetを使用できない場合、リスト オブジェクトを直接glm.midsサブセット化する良い方法はありますか?mids

4

2 に答える 2

2

私は自由に書き直しglm.midsました。少しぎこちないです。この問題は、属性が glm に渡される暗黙の性質に起因しているようです。

これらの投稿も参照してください。

https://stat.ethz.ch/pipermail/r-help/2003-November/041537.html

http://r.789695.n4.nabble.com/Question-on-passing-the-subset-argument-to-an-lm-wrapper-td3009725.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.mids 内の glm 関数呼び出しでした。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,...)

于 2014-10-20T22:30:23.080 に答える
1

解決策は使用することです

with(data=imp2, exp=glm((hyp==2)~bmi+chl, family=binomial , subset=(age==1) ))


(私は思う)あなたの質問の問題は、関数...内での使用です。glm.midsこれらは関数の引数で使用され、「glm に渡される追加のパラメーター」を許可します。ただし、関数内の呼び出しに...渡されると、この方法では処理されません。には、 「glm の場合: 直接指定されていない場合にデフォルトの制御引数を形成するために使用される引数」があります。したがって、追加の引数は機能しません。glmglm.mids?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からの回答を使用して: R 関数内の glm に引数を渡すと、関数をわずかに変更できます。

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と、関数環境からの引数が置き換えられます (これには詳細が必要です - お気軽に更新してください)

于 2014-10-20T22:33:00.383 に答える