7

当可以从基础函数中传递时,为什么不能仅将 1 个解释变量glmnet从包中传递给函数中的模型?代码和错误如下:glmnetglm

> modelX<-glm( ifelse(train$cliks <1,0,1)~(sparseYY[,40]), family="binomial")
> summary(modelX)

Call:
glm(formula = ifelse(train$cliks < 1, 0, 1) ~ (sparseYY[, 40]), 
    family = "binomial")

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.2076  -0.2076  -0.2076  -0.2076   2.8641  

Coefficients:
               Estimate Std. Error  z value Pr(>|z|)    
(Intercept)    -3.82627    0.00823 -464.896   <2e-16 ***
sparseYY[, 40] -0.25844    0.15962   -1.619    0.105    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 146326  on 709677  degrees of freedom
Residual deviance: 146323  on 709676  degrees of freedom
AIC: 146327

Number of Fisher Scoring iterations: 6

> modelY<-glmnet( y =ifelse(train$cliks <1,0,1), x =(sparseYY[,40]), family="binomial"  )
Błąd wif (is.null(np) | (np[2] <= 1)) stop("x should be a matrix with 2 or more columns")
4

3 回答 3

9

这是我从包的维护者(Trevor Hastie)那里得到的这个问题的答案:

glmnet 旨在从(大)集合中选择变量。允许 1 个变量会创建很多边缘案例编程,而我对此不感兴趣。对不起!

于 2019-12-19T17:55:45.227 回答
1

我不知道为什么,但这是某种内部限制。正如上面罗曼所说,它与家庭无关。

glmnet(x = as.matrix(iris[2:4]), y = as.matrix(iris[1]))
## long output
glmnet(x = as.matrix(iris[1]), y = as.matrix(iris[1]))
Error in glmnet(x = as.matrix(iris[2]), y = as.matrix(iris[1])) : 
  x should be a matrix with 2 or more columns

这是代码中的一个简单检查https://github.com/cran/glmnet/blob/master/R/glmnet.R#L20

于 2016-09-20T14:27:41.603 回答
-2

因为文档是这样说的。

对于family="binomial" 应该是具有两个级别的因子,或者是计数或比例的双列矩阵(第二列被视为目标类;对于因子,按字母顺序排列的最后一级是目标类)。

你有两个选择。要么构造一个矩阵,其中两列代表计数,要么转换x为具有两个级别的因子。

于 2015-03-24T11:22:32.130 回答