首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >预测cv.glmnet为每一行r提供相同的值

预测cv.glmnet为每一行r提供相同的值
EN

Stack Overflow用户
提问于 2020-02-27 13:48:24
回答 2查看 372关注 0票数 3

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

代码语言:javascript
运行
AI代码解释
复制
       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代码如下所示:

代码语言:javascript
运行
AI代码解释
复制
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是一组新的基因型数据,我想用它来预测表型。我的预测最终是这样的:

代码语言:javascript
运行
AI代码解释
复制
         1
1 6.438563
2 6.438563
3 6.438563
4 6.438563
5 6.438563
6 6.438563

其中每一行的所有数字都是相同的。我在其他表型上也得到了同样的结果。我认为问题可能是我只处理了大约38行表型数据,而不是大量的预测变量。但想看看是不是还有我要处理的问题。

EN

回答 2

Stack Overflow用户

发布于 2020-10-09 02:31:45

当您选择的lambda错误时,通常会发生这种情况。试试"lambda.min“吧

票数 1
EN

Stack Overflow用户

发布于 2020-11-07 13:51:50

下面是使用示例数据集重现错误的示例:

代码语言:javascript
运行
AI代码解释
复制
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

你的因变量是连续的,即这是回归,类型不应该是'class',但在任何情况下,如果所有的最佳拟合都是将所有变量都减少到零,那么你只会得到非零的截距,因此所有的预测都是相同的值:

代码语言:javascript
运行
AI代码解释
复制
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个自变量/预测值,套索就太夸张了。您可以只应用简单的线性回归:

代码语言:javascript
运行
AI代码解释
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60434718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档