基于 glmnet 包的最佳区分组的变量
Variables that best discriminate groups based on the glmnet package
我最终想使用弹性网络回归方法找到一组最能区分三组(低、中、高)的蛋白质。
有可重现的示例代码:
tempcv <- cv.glmnet(x=as.matrix(iris[,-5]), y=iris[,5], family="multinomial",
nfolds=20, alpha=0.5)
coefsMin <- coef(tempcv, s="lambda.min")
那么我得到的是:
$setosa
5 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 15.119192
Sepal.Length -1.897589
Sepal.Width 5.455627
Petal.Length -2.807969
Petal.Width -5.942061
$versicolor
5 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 4.795799
Sepal.Length 1.726752
Sepal.Width .
Petal.Length -1.160588
Petal.Width -1.978123
$virginica
5 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) -19.914991
Sepal.Length .
Sepal.Width -3.925362
Petal.Length 4.536932
Petal.Width 9.236506
在这种情况下,使用每个系数的绝对值,我可以这样解释这个结果吗?
最能将“setosa”与其他两组(“versicolor”和“virginica”)区分开来的两个变量是 Sepal.Width (5.46) 和 Petal.Width (-5.94 ).
如果这是错误的,那么我如何select一些variables/features最能区分群体的东西?
非常感谢!!!
对于 glmnet,您获得的系数与输入的比例相同,来自 vignette:
Note that for family = "gaussian", glmnet standardizes to have unit
variance before computing its lambda sequence (and then unstandardizes
the resulting coefficients).
在您的示例中,自变量未按比例缩放。因此,系数的大小将取决于自变量的规模。例如,Sepal.Width
的系数意味着 Sepal.Width
的每个单位都会使对数几率增加 5.46。但是你可以看到它们的取值范围非常不同:
apply(iris[,1:4],2,range)
Sepal.Length Sepal.Width Petal.Length Petal.Width
[1,] 4.3 2.0 1.0 0.1
[2,] 7.9 4.4 6.9 2.5
只有当您在应用套索之前缩放自变量时,您的假设才成立。
一种选择是使用 vip to infer the variable importance, you can see this 来获取更多示例。
我最终想使用弹性网络回归方法找到一组最能区分三组(低、中、高)的蛋白质。
有可重现的示例代码:
tempcv <- cv.glmnet(x=as.matrix(iris[,-5]), y=iris[,5], family="multinomial",
nfolds=20, alpha=0.5)
coefsMin <- coef(tempcv, s="lambda.min")
那么我得到的是:
$setosa
5 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 15.119192
Sepal.Length -1.897589
Sepal.Width 5.455627
Petal.Length -2.807969
Petal.Width -5.942061
$versicolor
5 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) 4.795799
Sepal.Length 1.726752
Sepal.Width .
Petal.Length -1.160588
Petal.Width -1.978123
$virginica
5 x 1 sparse Matrix of class "dgCMatrix"
1
(Intercept) -19.914991
Sepal.Length .
Sepal.Width -3.925362
Petal.Length 4.536932
Petal.Width 9.236506
在这种情况下,使用每个系数的绝对值,我可以这样解释这个结果吗?
最能将“setosa”与其他两组(“versicolor”和“virginica”)区分开来的两个变量是 Sepal.Width (5.46) 和 Petal.Width (-5.94 ).
如果这是错误的,那么我如何select一些variables/features最能区分群体的东西?
非常感谢!!!
对于 glmnet,您获得的系数与输入的比例相同,来自 vignette:
Note that for family = "gaussian", glmnet standardizes to have unit variance before computing its lambda sequence (and then unstandardizes the resulting coefficients).
在您的示例中,自变量未按比例缩放。因此,系数的大小将取决于自变量的规模。例如,Sepal.Width
的系数意味着 Sepal.Width
的每个单位都会使对数几率增加 5.46。但是你可以看到它们的取值范围非常不同:
apply(iris[,1:4],2,range)
Sepal.Length Sepal.Width Petal.Length Petal.Width
[1,] 4.3 2.0 1.0 0.1
[2,] 7.9 4.4 6.9 2.5
只有当您在应用套索之前缩放自变量时,您的假设才成立。
一种选择是使用 vip to infer the variable importance, you can see this 来获取更多示例。