1. ホーム
  2. r

[解決済み] predict() glmnet 関数のエラー: 未実装のメソッドです。

2022-02-05 02:32:59

質問

予測glmnet関数を使用すると、以下のようなエラーが発生します。

mydata <- read.csv("data.csv")
x <- mydata[,1:4]
y <- mydata[,5]
data <- cbind(x,y)
model <- model.matrix(y~., data=data)
ridgedata <- model[,-1]
train <- sample(1:dim(ridgedata)[1], round(0.8*dim(ridgedata)[1]))
test <- setdiff(1:dim(ridgedata)[1],train)
x_train <- data[train, ]
y_train <- data$y[train]
x_test <- data[test, ]
y_test <- data$y[test]
k=5
grid =10^seq(10,-2, length =100)
fit <- cv.glmnet(model,y,k=k,lambda = grid)
lambda_min <- fit$lambda.min
fit_test <- predict(fit, newx=x_test,s=lambda_min)

エラーは以下の通りです。

のエラー as.matrix(cbind2(1, newx) %*% nbeta) 評価エラー 関数 'as.matrix' のメソッドを選択する際に、引数 'x' を指定しました。エラー で cbind2(1, newx) %*% nbeta に対する未実装のメソッドです。 <data.frame> %*% <dgCMatrix>

デバッグを試みたのですが、どの辺が問題なのかよくわかりません。

as.matrix(cbind2(1, newx) %*% nbeta)

のコードが使用されており、何がこのエラーを引き起こしているのか。

解決方法は?

元のデータフレームには、予測変数の中に因子(カテゴリカル)変数があります。 このとき model.matrix に直接渡すと、この変数に対して何か意味のある処理を行います。 predict ということで、どうすればいいのかわからない。

newX <- model.matrix(~.-y,data=x_test)
fit_test<-predict(fit, newx=newX,s=lambda_min)

ところで、この例を、ほんの数行のデータで、最小限の/作り込んだ例で再現することができました ... 例えば、この設定は同じエラーを出します(私は、データ dd というのは、後者はRの組み込み関数だからです)。

set.seed(101)
dd <- data.frame(y=rnorm(5),
            a=1:5,b=2:6,c=3:7,d=letters[1:5])
model <- model.matrix(y~., data=dd)
n <- nrow(dd)
train <- sample(1:n, size=round(0.8*n))
test <- setdiff(1:n,train)