我在一个基因型的二进制数据集上使用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.glmnet
和predict
代码如下所示:
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行表型数据,而不是大量的预测变量。但想看看是不是还有我要处理的问题。
发布于 2020-10-09 02:31:45
当您选择的lambda错误时,通常会发生这种情况。试试"lambda.min“吧
发布于 2020-11-07 13:51:50
下面是使用示例数据集重现错误的示例:
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',但在任何情况下,如果所有的最佳拟合都是将所有变量都减少到零,那么你只会得到非零的截距,因此所有的预测都是相同的值:
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
https://stackoverflow.com/questions/60434718
复制