3

cv.glmnet モデルの auc 値を返す関数があり、ほとんどの場合ではありませんが、cv.glmnet 関数を実行すると次のエラーが返されます。

drop(y % % rep(1, nc)) のエラー: 関数 'drop' のメソッドを選択する際に引数 'x' を評価する際のエラー: y % % rep(1, nc) のエラー: 適合しない引数

エラーについて少し読んだことがありますが、私が見つけた唯一の提案は、as.matrix() の代わりに data.matrix() を使用することでした。私の関数は次のとおりです(「フォーム」は目的の変数を含む式で、「dt」はデータフレームです):

auc_cvnet <- function(form, dt, standard = F){
      vars = all.vars(form)
      depM = dt[[vars[1]]]
      indM = data.matrix(dt[vars[-1]])
      model = cv.glmnet(indM, depM, family = "binomial", nfolds=3, type.measure="auc", standardize = standard)

      pred = predict(model, indM, type = "response")
      tmp = prediction(pred, depM)
      auc.tmp = performance(tmp, "auc")
      return(as.numeric(auc.tmp@y.values))
    }

この関数を別の関数に実装しています。この関数は、いくつかの変数の組み合わせを反復処理して、どの変数の組み合わせがうまく機能するかを確認します (かなり強引な方法です)。とにかく、エラーがスローされたときに反復の式を印刷し、その式だけで関数を呼び出したところ、正常に機能しました。残念ながら、エラーをスローする呼び出しを特定することはできません。それ以外の場合は、より多くの情報を提供しようとします。データ フレームには約 30 行あり、110 行のより大きなデータ セットでコードを実行してもエラーは発生しません。また、どちらのデータセットにも NA はありません。

誰かがこれを前に見たことがありますか、または何か考えがありますか? ありがとう!

4

2 に答える 2

7

信じられないかもしれませんが、今日も同じエラーが発生しました。あなたのデータセットがわからないので、それが何であるかはわかりませんが、私にとっては、y 変数 (あなたの depM) として渡していたデータはすべて True 値の列でした。cv.glmnet は、y 変数に True 値と False 値が含まれている場合にのみ有効なモデルを返します。

cv.glmnet が True と False の両方を必要とする理由を説明できればいいのですが、関数自体の理解が不足しています (現状では、与えられたコードを適応させているだけです)。トラブルシューティングに役立つ場合に備えて、これを投稿すると思いました。幸運を!

于 2014-07-17T22:03:22.810 に答える