R 代码:model.matrix.default(mt, mf, contrasts) 中的错误:变量 1 没有级别
Posted
技术标签:
【中文标题】R 代码:model.matrix.default(mt, mf, contrasts) 中的错误:变量 1 没有级别【英文标题】:R code: Error in model.matrix.default(mt, mf, contrasts) : Variable 1 has no levels 【发布时间】:2020-11-15 16:36:35 【问题描述】:我正在尝试建立一个以响应作为诊断的逻辑回归模型(2 个因素变量:B、M)。 我在构建逻辑回归模型时遇到错误:
Error in model.matrix.default(mt, mf, contrasts) :
variable 1 has no levels
我不知道如何解决这个问题。
R 代码:
Cancer <- read.csv("Breast_Cancer.csv")
## Logistic Regression Model
lm.fit <- glm(diagnosis~.-id-X, data = Cancer, family = binomial)
summary(lm.fit)
数据集参考:https://www.kaggle.com/uciml/breast-cancer-wisconsin-data
【问题讨论】:
嗨普里扬舒。你能提供更多信息吗?例如,您收到的错误的确切措辞是什么?另外,你能添加一个minimal reproducible example 吗? (要求其他人下载外部文件并不是最少,而且几乎不需要重现错误)。提供 mre 可以让其他人更轻松地帮助您。 【参考方案1】:您的问题与randomForest
分类器上报告的here 类似。
显然 glm
检查数据中的变量并引发错误,因为 X 仅包含 NA
值。
您可以通过以下方式修复该错误
-
从数据集中完全删除 X,设置
Cancer$X <- NULL
,然后将其交给 glm
,并将 X
留在公式中 (glm(diagnosis~.-id, data = Cancer, family = binomial)
);
或通过将 na.action = na.pass
添加到 glm
调用(这将指示忽略 NA 警告,本质上)但仍然在公式本身中排除 X (glm(diagnosis~.-id-X, data = Cancer, family = binomial, na.action = na.pass)
)
但是,请注意,您仍然必须确保以glm
可消化的形式提供diagnosis
变量。含义:值为 0 和 1 的数值向量、逻辑向量或因子向量
“对于二项式和准二项式族,响应也可以指定为一个因子(当第一级表示失败而其他所有成功时)” - 来自
glm
-doc
只需定义Cancer$diagnosis <- as.factor(Cancer$diagnosis)
。
就我而言,这仍然会留下一些警告,但我认为这些警告来自数据或您的功能选择。它清除了阻塞错误:)
【讨论】:
以上是关于R 代码:model.matrix.default(mt, mf, contrasts) 中的错误:变量 1 没有级别的主要内容,如果未能解决你的问题,请参考以下文章