R glmnet错误-不一致参数

R glmnet错误-不一致参数,r,logistic-regression,glmnet,R,Logistic Regression,Glmnet,我一直在尝试使用下面指出的方法时遇到一个顽固的错误 我尝试了列出的有限建议(包括将数据设置为data.matrix)。我还尝试使用?glmnet中描述的“惩罚.box”设置,但没有任何积极的结果 df = structure(list(term = c(0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0,

我一直在尝试使用下面指出的方法时遇到一个顽固的错误

我尝试了列出的有限建议(包括将数据设置为data.matrix)。我还尝试使用?glmnet中描述的“惩罚.box”设置,但没有任何积极的结果

df = structure(list(term = c(0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0), int_rate = c(10.65, 15.27, 15.96, 13.49, 12.69, 7.9, 15.96, 18.64, 21.28, 12.69, 14.65, 12.69, 13.49, 9.91, 10.65, 16.29, 15.27, 6.03, 11.71, 6.03, 15.27, 12.42, 11.71, 11.71, 11.71, 9.91, 16.77, 11.71, 11.71, 7.51, 7.9, 15.96, 8.9, 15.96, 10.65, 9.91, 7.9, 12.42, 12.69, 7.51, 7.9, 18.25, 16.77, 6.03, 9.91, 8.9, 10.65, 6.03, 6.62, 9.91), emp_length = c(NA, 1, NA, NA, 1, 3, 8, 9, 4, 1, 5, NA, 1, 3, 3, 1, 4, NA, 1, 6, 3, NA, NA, 5, 1, 2, 2, NA, 1, 7, 5, 2, 2, 7, NA, 2, 1, 1, 1, 4, NA, 9, NA, NA, 6, NA, 6, NA, 5, 8), annual_inc = c(24000, 30000, 12252, 49200, 80000, 36000, 47004, 48000, 40000, 15000, 72000, 75000, 30000, 15000, 1e+05, 28000, 42000, 110000, 84000, 77385.19, 43370, 105000, 50000, 50000, 76000, 92000, 50004, 106000, 25000, 17108, 75000, 29120, 24044, 34000, 41000, 55596, 45000, 36852, 27000, 68004, 62300, 65000, 55000, 45600, 0000, 1e+05, 27000, 60000, 70000, 80000), delinq_2yrs = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 3L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), inq_last_6mths = c(1L, 5L, 2L, 1L, 0L, 3L, 1L, 2L, 2L, 0L, 2L, 0L, 1L, 2L, 2L, 1L, 2L, 0L, 0L, 0L, 3L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 2L, 0L, 0L, 1L, 3L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 2L), outcome = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), .Names = c("term", "int_rate", "emp_length", "annual_inc", "delinq_2yrs", "inq_last_6mths", "outcome"), row.names = c(NA, 50L), class = "data.frame")
X = select(df, -outcome)
Y = df$outcome
X_train = as.matrix(X[1:50,])
Y_train = as.matrix(Y[1:50])

library(glmnet)

model = glmnet(X_train, Y_train, family = "binomial")

summary(model)
以下是错误:

Error in drop(y %*% rep(1, nc)) : 
  error in evaluating the argument 'x' in selecting a method for     
function 'drop': Error in y %*% rep(1, nc) : non-conformable arguments
实际数据集为110个变量和~1mm的观测值,但上述部分数据集产生了相同的问题


有没有关于调试方法的建议

问题是您有
NA
条目是
emp_length
列,您不能将其包含在传递给
glmnet
的数据集中。您需要从数据集中删除包含
NA
值的行,或者对它们进行插补

下面是一些代码,您可以使用这些代码删除值并使
glmnet
正常工作

X = select(df, -outcome)
Y = df$outcome
X_train = as.matrix(X[1:50,])
Y_train = as.matrix(sample(0:1,50,replace=TRUE))

has_NA = apply(is.na(X_train), 1, any) #= 1 if any column in that row is NA
X_train = X_train[!has_NA,]
Y_train = Y_train[!has_NA,]

library(glmnet)    
model = glmnet(X_train, Y_train, family = "binomial")

怀疑您不应该执行
dep\u var=data.matrix(train$outcome)
。更可能只是使用
dep\u var=train$outcome
。还为已选择
的包提供库调用。可能有一个函数允许在不带引号的列名前面加减号,但看起来非常“非标准”。我之前尝试过这个解决方案,但没有解决问题。现在我添加了一个可复制的答案,有什么线索吗?还为select函数添加了dplyr包调用谢谢。你的解决方案没有解决问题。现在有了一个可复制的示例,您是否有进一步的见解?在您澄清它是
dplyr::select
之前,它是不可复制的。您还引用了未定义的原始数据。我使用
X=子集(df,-结果);Y=df$结果
。您的结果变量当前为全零,因此它似乎不是一个非常有用的示例。@是的,您的错误是由于您的
X
矩阵中有
NA
条目造成的。请参阅我的最新回复。正如@42所说,结果中也有所有的0,这并不有用,但这并不重要,因为
glmnet
仍然有效。