R 代码:model.matrix.default(mt, mf, contrasts) 中的错误:变量 1 没有级别

R code: Error in model.matrix.default(mt, mf, contrasts) : Variable 1 has no levels

我正在尝试建立一个逻辑回归模型,并将响应作为诊断(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

您的问题类似于 hererandomForest 分类器上报告的问题。
显然 glm 检查数据中的变量并抛出错误,因为 X 仅包含 NA 个值。

您可以通过

修复该错误
  1. 通过从数据集中完全删除 X,在将其交给 glm 之前设置 Cancer$X <- NULL 并在公式中留下 X (glm(diagnosis~.-id, data = Cancer, family = binomial));
  2. 或者通过将 na.action = na.pass 添加到 glm 调用(这将指示忽略 NA 警告,本质上)但仍然在公式本身中排除 X (glm(diagnosis~.-id-X, data = Cancer, family = binomial, na.action = na.pass))

但是,请注意,您仍然必须确保以 glm 易于理解的形式提供 diagnosis 变量。含义:值为 0 和 1 的数值向量、逻辑向量或因子向量

"For binomial and quasibinomial families the response can also be specified as a factor (when the first level denotes failure and all others success)" - from the glm-doc

只需定义Cancer$diagnosis <- as.factor(Cancer$diagnosis).

就我而言,这仍然会留下一些警告,但我认为这些警告来自数据或您的功能选择。它清除阻塞错误:)