我正在尝试为没有缺失值的数据集运行分类算法。这是数据集描述:
'data.frame': 59977 obs. of 6 variables:
$ gender : Factor w/ 2 levels "F","M": 2 2 2 2 2 2 1 1 2 2 ...
$ age : num 35.7 35.7 35.7 35.7 35.7 ...
$ code : Factor w/ 492 levels "ADN105","AXN16B",..: 128 128 128 363 363 363 104 104 221 221 ...
$ totalflags : num 4 4 4 4 4 4 3 3 2 2 ...
$ measure2 : num 30 30 30 1 1 1 23 23 22 22 ...
$ outcome : num 1 1 1 0 0 0 1 1 1 1 ...
- attr(*, "na.action")=Class 'omit' Named int [1:138] 3718 3719 5493 5494 5495 5496 7302 7303 8415 8416 ...
.. ..- attr(*, "names")= chr [1:138] "4929" "4930" "7384" "7385" ...
当我运行以下命令时
x <- Mydataset[,1:5]
y <- Mydataset[,6]
fit <- glmnet(x, y, family="binomial", alpha=0.5, lambda=0.001)
我得到了
Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs, :
NA/NaN/Inf in foreign function call (arg 5)
In addition: Warning message:
In lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs, :
NAs introduced by coercion
在运行glm模型之前,我这样做了:
Mydataset <- na.omit(Mydataset)
并检查确保没有NA存在:
sapply(Mydataset, function(y) sum(length(which(is.na(y)))))
我得到了:
gender age code totalflags measure2 outcome
0 0 0 0 0 0
我看了其他问题,找不到任何相关内容。感谢您的任何想法和帮助
编辑:答案
我做了一点挖掘并决定将数据框更改为数字矩阵,模型运行没有抱怨。这是帮助我的代码:
x <- data.matrix(Mydataset[,1:5])
y <- data.matrix(Mydataset[,6])
答案 0 :(得分:0)
最可能的原因是一个或多个级别内的因子变量数量很少或为零。先试试这个:
Mydataset [ c('gender', 'code') ] <-
lapply( Mydataset [ c('gender', 'code') ], factor)
如果这不起作用,那么您应该显示使用的实际代码以及所用对象的更好描述和名称。目前我们甚至不知道x
和y
是什么。
EDIT:
glmnet函数没有公式接口,并且没有设置为处理data.frames和因子的典型R回归函数允许的方式。查看x
的结构(仍然是列表/数据框)并查看?glmnet
的帮助页面并在数字矩阵时进行一些搜索处理因子的正确方法/ em>是预期的输入,我建议将您的因子转换为model.matrix
的假人。如果更改治疗对比的默认对比度方案,则可以更轻松地解释结果(参见https://stats.stackexchange.com/questions/69804/group-categorical-variables-in-glmnet):
contr.Dummy <- function(contrasts, ...){
conT <- contr.treatment(contrasts=FALSE, ...)
conT
}
options(contrasts=c(ordered='contr.Dummy', unordered='contr.Dummy'))
x.m <- model.matrix( ~.-1, x)
fit <- glmnet(x=x.m, y, family="binomial", alpha=0.5, lambda=0.001)