检查您是否有 NA 值,您会收到错误,因为 glmnet 会检查您的任何列的标准偏差为零的位置。例如,我们在以下数据集中将第四列的第一个条目设置为 NA:
library(glmnet)
scaledData = data.frame(v1 = rnorm(100),v2=rnorm(100),
v3 = rbinom(100,1,0.5),v4 = rbinom(100,1,0.7))
scaledData[1,4] = NA
您可以查看:
glmnet:::weighted_mean_sd(as.matrix(scaledData[,-3]))
$mean
v1 v2 v4
0.03979154 0.14547529 NA
$sd
v1 v2 v4
0.8544635 1.0815797 NA
运行时出现相同的错误:
lasso_now=cv.glmnet(x=as.matrix(scaledData[,-3]),
y=as.matrix(scaledData[,3]),
alpha=1,nfolds = 5,type.measure="mse",
family = binomial(link = "logit"))
Error in if (any(const_vars)) { : missing value where TRUE/FALSE needed
您可以删除的一种方法如下:
scaledData = scaledData[complete.cases(scaledData),]
并运行它,注意二项式你不应该使用“mse”,你可以使用“deviance”、“class”或“auc”。
lasso_now=cv.glmnet(x=as.matrix(scaledData[,-3]),
y=as.matrix(scaledData[,3]),
alpha=1,nfolds = 5,type.measure="deviance",
family = binomial(link = "logit"))
lasso_now
Call: cv.glmnet(x = as.matrix(scaledData[, -3]),
y = as.matrix(scaledData[,3]),
type.measure = "deviance", nfolds = 5, alpha = 1,
family = binomial(link = "logit"))
Measure: GLM Deviance
Lambda Index Measure SE Nonzero
min 0.07643 1 1.427 0.01681 0
1se 0.07643 1 1.427 0.01681 0