【问题标题】:predict cv.glmnet giving me identical values for every row r预测 cv.glmnet 给我每行 r 相同的值
【发布时间】:2020-06-11 13:17:50
【问题描述】:

我在基因型的二进制数据集上使用cv.glmnet 来预测连续变量表型。数据看起来像这样,但有超过 200 个基因:

       Pheno K00074 K00100 K00179 K00180
1  18.063630      0      0      0      0
2  16.746644      0      0      0      0
3  16.016194      1      0      0      0
4  -1.469207      1      1      0      0
5  -3.047956      1      0      1      1
6  15.274531      1      0      0      0 

cv.glmnetpredict 的代码如下所示:

cv.lasso <- cv.glmnet(x = as.matrix(zx), y = unlist(zy), alpha = 1,
                      type.measure = 'mse',keep = TRUE) # runs the model
    
prediction<-predict(cv.lasso,s = cv.lasso$lambda.1se,
                    newx = as.matrix(batch1218.kegg[,-1]),type = 'class')

其中zx 只是基因存在/不存在的二进制列,zy 是表型列。 batch1218.kegg 是一组新的基因型数据,我想用它来预测表型。我的预测最终看起来像这样:

         1
1 6.438563
2 6.438563
3 6.438563
4 6.438563
5 6.438563
6 6.438563

每一行的所有数字都相同。其他表型也会发生同样的事情。我认为问题可能是与大量预测变量相比,我只使用了约 38 行表型数据。但想看看是否还有我正在处理的其他问题。

【问题讨论】:

  • 我们可能需要更多数据来帮助您,一般来说,最好发布足够多的数据来复制问题。您可以在数据的子集上使用 dput(例如,您在此处拥有的 6 行) - 我们需要一些 zxzybatch1218.kegg 来试用它
  • @AndrewBaxter 抱歉,我是个新手,在这里提问。我想我发现了我的问题,即套索将所有系数缩小到 0,因此实际上没有基因对大多数表型具有任何预测能力。对于确实具有一些重要基因的表型,预测结果存在一定的变异性。

标签: r regression prediction glmnet


【解决方案1】:

这通常发生在您选择的 lambda 错误时。改用“lambda.min”

【讨论】:

    【解决方案2】:

    这里使用示例数据集重现您的错误:

    library(glmnet)
    
    data = data.frame(Pheno=rnorm(200),K00074=rbinom(200,1,0.5),
    K00100=rbinom(200,1,0.5),K00179=rbinom(200,1,0.5),K00180=rbinom(200,1,0.5))
    
    zx = data[1:100,-1]
    zy = data$Pheno[1:100]
    
    batch1218.kegg = data[101:200,]
    
    cv.lasso <- cv.glmnet(x = as.matrix(zx), y = unlist(zy), alpha = 1,
                          type.measure = 'mse',keep = TRUE) # runs the model
    
    prediction<-predict(cv.lasso,s = cv.lasso$lambda.1se,
                        newx = as.matrix(batch1218.kegg[,-1]),type = 'class')
    
    head(prediction)
                 1
    101 0.07435786
    102 0.07435786
    103 0.07435786
    104 0.07435786
    105 0.07435786
    106 0.07435786
    

    您的因变量是连续的,即这是回归,类型不应该是“类”,但无论如何,如果所有最佳拟合都来自将所有变量减少到零,那么您只会得到截距为非-零,因此所有预测都是相同的值:

    coef(cv.lasso,s=cv.lasso$lambda.1se)
    5 x 1 sparse Matrix of class "dgCMatrix"
                         1
    (Intercept) 0.07435786
    K00074      .         
    K00100      .         
    K00179      .         
    K00180      . 
    

    查看您的数据框,如果您只有 4 个自变量/预测变量,那么套索是多余的。你可以应用一个简单的线性回归:

    head(predict(glm(Pheno ~ .,data=data[1:100,])))
              1           2           3           4           5           6 
     0.21560938  0.28477818  0.28477818 -0.05017303 -0.11487138 -0.18404019 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-02
      • 2019-07-17
      • 1970-01-01
      • 2018-09-02
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多