首页 > 解决方案 > R中的错误:尚未实现的方法%*%

问题描述

我正在解决一个问题,但收到如下错误:

Error in cbind2(1, newx) %*% nbeta : 
not-yet-implemented method for <data.frame> %*% <dgCMatrix>

这是我的代码:

X.A = model.matrix(College.lm.A)[,-1]
# 
library(glmnet)
# # obtain the optimal lambda by cross-validation
lambda_1se = cv.glmnet(X.A, set.A$Apps)$lambda.1se
# 
# # refit glmnet using the chosen lambda
lasso.A.CV = glmnet(X.A, set.A$Apps, lambda = lambda_1se)
coef(lasso.A.CV)
# 
# # compare
coef_comp = cbind(OLS = coef(College.lm.A),
                  Ridge.CV = as.numeric(coef(lasso.A.CV)))
coef_comp
# 
# # get the model.matrix of the set B
X.b = model.matrix(lm(Apps ~., data=set.B))[,-1]
# 
# # calculate the mse.
#(set.B$Apps - predict(College.lm.A, set.B))
mse.lasso.cv = mean((set.B$Apps - predict(lasso.A.CV, set.B)^2))
data.frame(mse.ols, mse.lasso.cv)

我应该如何解决这个问题?

我尝试添加 model.matrix,并将倒数第二行更改为 mse.lasso.cv = mean((set.B$Apps - predict(model.matrix(lasso.A.CV), set.B)^2)) Then 它也给了我一个错误"Error in terms.default(object) : no terms component nor attribute"

我应该如何解决这个问题?

标签: rglmnet

解决方案


第一个参数用于套索模型对象,第二个参数,你应该传递一个矩阵,你也不需要重新拟合 cv.glmnet 的结果,你可以通过调用 s="lambda.1se" 来预测:

library(glmnet)

set.A = data.frame(matrix(runif(500),ncol=10))
set.A$Apps = rnorm(50)

X.A = model.matrix(Apps ~.,data=set.A)[,-1]
lasso.A.CV = cv.glmnet(X.A, set.A$Apps)

set.B = data.frame(matrix(runif(500),ncol=10))
set.B$Apps = rnorm(50)

X.b = model.matrix(Apps ~.,data=set.B)[,-1]
mse.lasso.cv = mean((set.B$Apps - 
predict(lasso.A.CV, X.b, s = "lambda.1se") ^2))

推荐阅读