使用glmnet进行甲基化数据的特征选择和建模(p >> N)


29

我想使用GLM和Elastic Net来选择那些相关功能+建立一个线性回归模型(即预测和理解,因此最好保留相对较少的参数)。输出是连续的。这是每基因50的情况。我一直在阅读有关该软件包的信息,但是我不确定要执行的步骤:2000050glmnet

  1. 执行CV选择lambda:
    cv <- cv.glmnet(x,y,alpha=0.5)
    (Q1)给定输入数据,您会选择其他alpha值吗?
    (Q2)在建立模型之前,我还需要做其他事情吗?

  2. 拟合模型:
    model=glmnet(x,y,type.gaussian="covariance",lambda=cv$lambda.min)
    (Q3)有什么比“协方差”更好的选择?
    (Q4)如果CV选择了lambda,为什么需要此步骤nlambda=
    (Q5)使用lambda.min还是更好lambda.1se

  3. 获取系数,看看哪些参数掉了(“。”):
    predict(model, type="coefficients")

    在帮助页面有很多种predict方法(例如predict.fishnetpredict.glmnetpredict.lognet等)。但是,正如我在一个示例中看到的那样,任何“简单”的预测都是如此。
    (Q6)我应该用predict或者predict.glmnet还是其他?

尽管我已经读过有关正则化方法的文章,但我在R和这些统计软件包中还是一个新手,因此很难确定我是否正在使我的问题适应代码。任何建议都将受到欢迎。

更新
基于 “如前所述,类train的对象包含一个称为的元素finalModel,这是具有通过重采样选择的调整参数值的拟合模型。该对象可以按传统方式用于生成新样本的预测,模型的预测功能。”

使用caret调整α和拉姆达:

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  

是否fitM取代先前的步骤2?如果是这样,如何立即指定glmnet选项(type.gaussian="naive",lambda=cv$lambda.min/1se)?
接下来的predict步骤,我可以替换modelfitM吗?

如果我做

  trc = trainControl(method=cv, number=10)  
  fitM = train(x, y, trControl = trC, method="glmnet")  
  predict(fitM$finalModel, type="coefficients")

完全有意义还是我错误地混合了两个包装词汇?

Answers:


42

第1部分

在弹性网中,对参数采用两种类型的约束

  1. 套索约束(即上的绝对值的大小βĴ
  2. 脊约束(即上的平方值的大小βĴ

α

αλλcv.glmnet

αλ

第2部分

Q3

ñ?glmnet

type.gaussian = "naive"

mn"naive"n

glmnet"naive"m>500

Q4

nlambdaα=0.5λλnlambda

Q5

lambda.minλλklambda.1seλlambda.minlambda.1seλķ最佳模型误差的CV估计值。

这是你的选择:

  1. 可能过于复杂或过度拟合的最佳模型: lambda.min
  2. 在不确定性的情况下,具有与最佳模型可比的误差的最简单模型: lambda.1se

第三部分

这是一个简单的过程,在R中会遇到很多问题predict()。99.9%的时间使用该函数。R将安排对作为第一个参数提供的对象使用正确的函数。

从技术上讲,predict是通用函数,具有针对不同类型(技术上称为)的对象的方法(函数的版本)。由创建的对象具有一个或多个特定类,这取决于实际安装的模型类型。glmnet(软件包)提供了用于这些不同类型对象的函数方法。R知道这些方法,并将根据提供的对象的类别选择适当的方法。glmnetpredict


2
太棒了!我已经读过有关插入符号的信息。不能100%知道插入符号和glmnet软件包之间的关系,因此我对问题进行了更新以阐明这些符号与软件包的“合并”或从glmnet到插入符号的切换。
PGreen

1
@PGreen:caret是一个R包装器程序包,它将来自100多个ML程序包的功能接口包装为更加一致,并添加了CV,gridsearch,修改了疯狂的参数默认值等。
smci

我只想添加一个用于alpha调整的方法,您可以使用它cva.glmnet(..)而不是just cv.glmnet(...)并同时调整alpha和lambda。然后,您可以minlossplot(cva.fit)查看哪个alpha效果最佳。这都是glmnetUtils的
Espen Riskedal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.