为什么在 R 中的 glm 函数中可以只传递 1 列给 glmnet?
Why can't pass only 1 coulmn to glmnet when it is possible in glm function in R?
为什么在 glmnet
包中的 glmnet
函数中不可能仅将 1 个解释变量传递给模型,而在基础中的 glm
函数中是可能的?
代码和错误如下:
> 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")
因为文档是这么说的。
For family="binomial" should be either a factor with two levels, or a
two-column matrix of counts or proportions (the second column is
treated as the target class; for a factor, the last level in
alphabetical order is the target class).
你有两个选择。要么构建一个矩阵,其中两列代表计数,要么将 x
转换为具有两个水平的因子。
我不知道为什么,但这是某种内部限制。这与罗曼上面所说的家庭无关。
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
这是我从包的维护者 (Trevor Hastie) 那里得到的这个问题的答案:
glmnet is designed to select variables from a (large) collection.
Allowing for 1 variable would have created a lot of edge case programming, and I was not interested in doing that.
Sorry!
为什么在 glmnet
包中的 glmnet
函数中不可能仅将 1 个解释变量传递给模型,而在基础中的 glm
函数中是可能的?
代码和错误如下:
> 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")
因为文档是这么说的。
For family="binomial" should be either a factor with two levels, or a two-column matrix of counts or proportions (the second column is treated as the target class; for a factor, the last level in alphabetical order is the target class).
你有两个选择。要么构建一个矩阵,其中两列代表计数,要么将 x
转换为具有两个水平的因子。
我不知道为什么,但这是某种内部限制。这与罗曼上面所说的家庭无关。
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
这是我从包的维护者 (Trevor Hastie) 那里得到的这个问题的答案:
glmnet is designed to select variables from a (large) collection. Allowing for 1 variable would have created a lot of edge case programming, and I was not interested in doing that. Sorry!