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 &lt;- 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 &lt;- as.factor(Cancer$diagnosis)

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

【讨论】:

以上是关于R 代码:model.matrix.default(mt, mf, contrasts) 中的错误:变量 1 没有级别的主要内容,如果未能解决你的问题,请参考以下文章

高效完成R代码

r语言qqplot怎么编程代码

R - 加密/锁定R代码和包[重复]

R验证源代码

r语言中怎样查看函数源代码

r R有用的代码片段