2014-12-13 132 views
3

我是glmnet包中的新成员R,并且想根据glmnet.cv函数发布的研究论文中的建议指定lambda函数。文档建议我们可以提供一个递减的lambdas作为参数。但是,在文档中没有如何执行此操作的示例。我们如何指定一个自定义的lambda序列glmnet

这将是非常感激,如果有人可以建议如何去这样做。我通过100个奇值(nlambda默认值)的向量的函数?这个矢量的最小值和最大值应该有什么限制,如果有的话?此外,是他们的事情要记住关于nvarsnobs等,同时指定载体?

在此先感谢。

+0

这个问题可能是更适合http://stats.stackexchange.com。 – 2014-12-13 06:59:33

+0

的问题是如何如此看来适合所以'R'正确编码的过程。 – eipi10 2014-12-13 18:42:35

回答

0

这是相当容易的,虽然它没有很好的原始文档中解释;)

在我使用COX家庭,但你可以根据你的需要改变它

my_cvglmnet_fit <- cv.glmnet(x=regression_data, y=glmnet_response, family="cox", maxit = 100000) 

那么下面的你可以绘制由cv.glmnet创建的拟合对象,并且在绘图中可以轻松看到lambda最小的位置。其中一条虚线垂直线是最小的lambda,另一条是1se。

plot(my_cvglmnet_fit) 

以下行可以帮助您看到非零系数及其相应的值:

coef(my_cvglmnet_fit, s = "lambda.min")[which(coef(my_cvglmnet_fit, s = "lambda.min") != 0)] # the non zero coefficients 
colnames(regression_data)[which(coef(my_cvglmnet_fit, s = "lambda.min") != 0)] # The features that are selected 

这里有一些链接,可以帮助:
http://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html
http://blog.revolutionanalytics.com/2013/05/hastie-glmnet.html

6

您可以定义网格是这样的:

grid=10^seq(10,-2,length=100) ##get lambda sequence 
    ridge_mod=glmnet(x,y,alpha=0,lambda=grid) 
相关问题