在R中进行线性回归时,如何有条件地删除因子的NA观察?

2024-03-02

我正在尝试在 R 中建立一个简单的线性回归模型。

模型中有三个因子变量。

模型是

lm(Exercise ~ Econ + Job + Position)

其中“锻炼”是数字因变量,即锻炼的时间量。

“经济”、“工作”、“职位”都是因子变量。

“经济”是指一个人是否有工作。 (级别=就业/未就业)

“工作”是一个人所从事的工作类型。该变量有五个级别。

“职位”是一个人在职场中的地位。该变量也有五个级别。

我尝试进行线性回归并得到一个错误,

"contrasts can be applied only to factors with 2 or more levels"

我认为这个错误是由于因子水平中的 NA 造成的,因为如果“Econ”等于“失业”,则“Job”和“Position”的值就为 NA。 (因为显然失业者没有工作类型和工作职位)

如果我像下面这样分别回归两个模型,则不会发生错误。

lm(Exercise ~ Econ)

lm(Exercise ~ Job + Position)

但是,我想要一种可以根据需要自动使用变量的模型,以及一张结果表。因此,如果“Econ”是“受雇”,则“Job”、“Position”变量将用于回归。如果“Econ”为“失业”,则“Job”、“Position”变量会自动从模型中删除。

我想要一个模型而不是两个模型的原因是通过将所有变量放入模型中,我可以看到“经济”(就业或失业)对“就业”人群的影响

如果我只是回归

lm(Exercise ~ Job + Position)

不知道就业效果如何。

我想到了一个解决方案,为“工作”和“职位”的所有 NA 值设置 0 =“失业水平”,但我不确定这是否能解决问题,并认为这可能会导致多重共线性问题。

有没有办法根据其他因素变量自动/有条件地删除 NA 观测值?

下面是我的可重现的例子。

    Exercise <- c(50, 30, 25, 44, 32, 50 ,22, 14)
    Econ <- as.factor(c(1, 0, 1, 1, 0, 0, 1, 1)) 
    # 0 = unemployed, 1 =  employed

    Job <- as.factor(c("A", NA, "B", "B", NA, NA, "A", "C"))

    Position <- as.factor(c("Owner", NA,"Employee", "Owner", 
                        NA, NA, "Employee", "Director")) 

    data <- data.frame(Exercise, Econ, Job, Position)

    str(data)

    lm(Exercise ~ Econ + Job + Position)

    lm(Exercise ~ Econ)

    lm(Exercise ~ Job + Position)

这里我想要的是第一个模型 lm(Exercise ~ Econ + Job + Position),但我得到一个错误,因为对于所有 Econ = 0(失业),Job 和 Position 值都是 NA。


如果您真的只想第一个模型运行而不会出现错误(假设您正在使用相同的缺失值处理),那么您可以这样做。

lm(Exercise ~ as.integer(Econ) + Job + Position)

请注意,您真正所做的只是找到与第三个模型相同的结果。

lm(Exercise ~ Job + Position) # third model
lm(Exercise ~ as.integer(Econ) + Job + Position) # first model

coef(lm(Exercise ~ Job + Position))
coef(lm(Exercise ~ as.integer(Econ) + Job + Position))

除非您改变处理缺失值的方式,否则您想要的第一个模型lm(Exercise ~ Econ + Job + Position)相当于第三个模型lm(Exercise ~ Job + Position)这就是原因。

默认情况下,na.action = na.omitlm功能。这意味着任何包含预测变量或响应变量缺失值的行都将被删除。您可以通过多种方式查看这一点。一种是通过申请model.matrix这是什么lm会在幕后做的。

model.matrix(Exercise ~ Econ + Job + Position)
  (Intercept) Econ1 JobB JobC PositionEmployee PositionOwner
1           1     1    0    0                0             1
3           1     1    1    0                1             0
4           1     1    1    0                0             1
7           1     1    0    0                1             0
8           1     1    0    1                0             0

正如您已经正确指出的那样,Econ = 0完全符合position = NA。因此,lm放弃这些观察,你最终会得到Econ具有单一值lm不知道如何处理单一水平的因素。我通过使用绕过了这个错误as.integer()但是,您最终仍然会得到只有一个值的预测变量。

Next, lm会默默地放弃这样的预测,这就是为什么你会得到一个NA对于系数as.integer(Econ)。这是因为默认为singular.ok = TRUE.

如果你要设置singular.ok = FALSE你会得到一个错误,基本上是说你正在尝试拟合一个只有一个预测变量值的模型。

lm(Exercise ~ as.integer(Econ) + Job + Position, singular.ok = FALSE)
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  singular fit encountered
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在R中进行线性回归时,如何有条件地删除因子的NA观察? 的相关文章

  • 按不规则时间间隔对数据进行分组求和(R语言)

    我正在看这里的 stackoverflow 帖子 R 计算一组内的观察次数 https stackoverflow com questions 65366412 r count number of observations within a
  • 如何绘制每条线之间具有特定距离的图形

    实际上 我尝试绘制一个图形 但它将所有列 线 放在一起并显示 因此它不具有代表性 我尝试制作模拟数据并向您展示我如何绘制它 并向您展示我想要的内容 我不知道如何制作像下面所示的示例的数据 但我在这里做了什么 set seed 1 M lt
  • 使用 pkg:sjPlot 函数创建一个生成部分斜体单元格的数据框

    我正在尝试创建一个简单的数据表 其中 Coral taxon 列中的属名称为斜体 而 spp 列中的属名称为斜体 属名后面的部分不大写 我尝试使用 expression 函数对 Coral taxon 的每一行进行编码 但没有成功 sum
  • 如何在 R 中将字符串解析为层次结构或树

    有没有办法将表示组的字符串解析为 R 中的层次结构 假设我的小组结构如下 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 3 1 1 3 1 1 1 3 2 1 1 3 3 1 2 1 2 1 1 2 1 1 1 2 1 2 1
  • 排序因素与水平

    有人能解释一下 R 中 ordered 参数的用途吗 R says ordered逻辑标志来确定级别是否应被视为有序 按给定的顺序 所以如果我有一个名为名称的因素并设置ordered TRUE names lt factor c fred
  • 如何自动启动我的 ec2 实例、运行命令然后将其关闭?

    我想每周对 redshift postgres 数据库中的数据运行一次机器学习模型 我使用以下命令将 R 脚本设置为休息 apiplumbr然后我将其设置为一项任务来管理pm2 我有它 所以任务会在ec2实例启动然后继续运行 要让 R 脚本
  • 按特定样本前缀对列名称向量进行子集化

    假设我有一个如下所示的数据框 ca01 lt c 1 10 ca02 lt c 2 11 ca03 lt c 3 12 stuff 1 lt rep test 10 other lt rep 9 10 data lt data frame
  • 从 R 中的方差分析 (glm) 中提取残余偏差

    我在 R 中安装了一个 glm 模型并采用了方差分析表 我需要提取 残余偏差 列 但它会产生错误 以下是代码 创建数据 counts lt c 18 17 15 20 10 20 25 13 12 outcome lt gl 3 1 9 t
  • 无法部署 ShinyApp:readTableHeader 在“raw”上发现不完整的最后一行(使用默认值:en_US)

    我已经拼命尝试部署我的闪亮应用程序大约一周了 但不幸的是我无法停止收到以下消息 Warning message Error detecting locale Error in read table file file header head
  • 将第 N 行上的 NA 行插入 data.frames 列表,其中 N 来自列表

    经过几个小时后 我发现自己无法解决以下问题 我有一个数据框列表 我想分别向每个 DF 插入 而不是替换 一行或多行 NA 始终至少一行 要插入的 NA 数量存储在单独的列表中 为了说明这一点 我有以下两个列表 list of datafra
  • 如何在 R 中合并同名列表中的数据框?

    我有一个包含很多数据框的列表 如果它们具有相同的名称 我想合并它们 即合并所有具有相同名称 a 和 b 的数据框 像这样 a lt aaaaa b lt bbbbb c lt ccccc g lt list df1 lt data fram
  • R中的字典数据结构

    在 R 中 我有 例如 gt foo lt list a 1 b 2 c 3 如果我输入foo I get a 1 1 b 1 2 c 1 3 我怎样才能看透foo仅获取 键 列表 在这种情况下 a b c R 列表可以具有命名元素 因此可
  • 将 ftransform 与折叠 R 包中的 fgroup_by 一起使用

    我正在尝试重现以下输出dplyr代码与R包裹collapse dplyr Code library tidyverse starwars gt select name mass species gt group by species gt
  • 使用 R 下载压缩数据文件、提取和导入数据

    EZGraphs 在 Twitter 上写道 很多在线 csv 都被压缩了 有没有办法下载 解压缩存档并使用 R 将数据加载到 data frame Rstats 我今天也尝试这样做 但最终只是手动下载 zip 文件 我尝试过类似的东西 f
  • R中的重叠矩阵

    我有以下数据框 id channel 1 a 1 b 1 c 2 a 2 c 3 a 我想创建并重叠矩阵 它基本上是一个方阵 行和列标签为 a b c 表中的每个条目显示每个通道共有多少个 id 例如 在上面的例子中 矩阵看起来像 a b
  • Quantmod 的简单功能不再起作用

    我明天要交论文 我收到了一条关于 quantmod 的非常奇怪的错误消息 这是我在过去几周使用这个包时从未遇到过的 我无法导入特定于道琼斯指数 DJI 的数据 我收到以下错误消息 getSymbols DJI src yahoo from
  • 列出 R 数据文件的内容而不加载

    我有时用print load myDataFile RData 当我加载数据文件时列出它的内容 有没有办法列出内容而不加载数据文件中包含的对象 我认为如果不加载对象就无法做到这一点 解决方案可能是使用包装器将 R 对象保存到save 该函数
  • 正态分布平均值的贝叶斯推理玩具 R 代码 [降雪量数据]

    我有一些降雪观测 x lt c 98 044 107 696 146 050 102 870 131 318 170 434 84 836 154 686 162 814 101 854 103 378 16 256 我被告知它遵循正态分布
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 需要在R中按行绑定列表数据

    我在 R 中按行绑定列表时遇到问题 我的列表数据集是 id 1 data k 1 id k b c 1 1 1 3 data k 2 id k b c 1 2 1 4 id 2 data k 1 id k b c 2 1 1 6 data

随机推荐

  • JaCoCo 在跳过 JaCoCo 执行后才生成 jacoco.exec

    我在我的模块之一中通过 JaCoCo 生成 AHP 报告时遇到问题 当构建开始时 我看到 JaCoCo 正确设置 argLine 为 INFO jacoco agent argLine set to javaagent lt gt m2 r
  • Sidekiq 中是否有控制台命令可以查看队列中的内容并清除队列?

    我习惯使用delayed jobs方法进入控制台来查看队列中的内容 以及在需要时轻松清除队列的方法 Sidekiq 中有类似的命令吗 谢谢 有一个符合人体工学的用于查看和管理队列的 API https github com mperham
  • 如果所有子节点都分配了类,则选择父节点

    我正在寻找一种有效的方法来遍历无序列表 该列表包含多个级别 其中包含类 selected 如果组中的所有 UL LI 都具有 selected 类 我需要将 selected 类添加到子 UL 的父 LI 中 ul li one lt th
  • 从 C++ 使用 Neo4j 数据库

    我的问题是我想从 C 程序使用 Neo4j 数据库 我读了很多 但仍然不知道如何开始 首先 我想在 Neo4j 和 C 之间建立连接 并且我想从 C 程序创建节点 任何人都有示例代码 或者有人可以帮忙 我该如何开始 对于即将推出的二进制远程
  • Rserve - 一台服务器上有多个实例?

    是否可以在一台服务器上同时运行 Rserve 的多个实例 例如 10 个实例意味着 10 个独立的 R 工作区通过同一台计算机上的 Rserve 监听不同端口 在 Oleksandr指定的同一文档中 它在第5 6页明确指出 在Windows
  • 透视变换三角点

    我试图找到从一个三角形到另一个三角形的等效点 理想情况下 我希望能够给出三角形 A 的 3 个点和三角形 B 的 3 个点 然后计算变换矩阵 然后将其应用于该点以找到等效点 我为此找到了一些 JavaScript 库 方法 但它们都使用四边
  • 使用 JavaScript 的 Chrome 和 Safari XSLT

    我有以下应用 XSLT 样式的代码 Test Xml xslTransform function xml xsl try code for IE if window ActiveXObject ex xml transformNode xs
  • 看不到 Safari 开发者 Timeline 的 Memory Instrument

    我正在尝试分析 Safari 浏览器中的 Web 应用程序内存使用情况 我在几个网站上看到 Safari 的 Web Inspector Timeline 可用于分析 Web 应用程序内存 但我没有看到 内存 选项 这是我所看到的 以下网站
  • 在 rich:dataTable 中使用 a4j:repeat 或 ui:repeat 无法正确呈现单选按钮

    使用时
  • 使复合小部件可拖动时出现问题

    我对 gwt n dnd 相对较新 我创建了一个复合小部件 当我尝试使复合小部件的对象可拖动时 它会抛出异常 dragHandle 必须实现 HasMouseDownHandlers HasMouseUpHandlers HasMouseM
  • Expression.ToString() 有效吗?

    我有一个生成的 lambda 但是当我想观看它时 它就像一个普通的 lambda 它只是不显示任何内容 当我打电话时expr Body ToString 我得到以下信息 var compareA 但表达式的 DebugView 工作正常 L
  • 如何使用两个不同的节点版本运行两个不同的nodejs应用程序[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我们有两个 Node js 应用程序 这两个应用程序不能在同一节点版本中运行 一个应用程序只能在node4 8 3中运行 另一个应用程
  • MapFragment 样式为 Dialog 导致 TextView 透明

    这是设置 我正在构建和显示样式为居中对话框的活动 这是为了显示不应在设备上全屏显示的分层内容 一种类型的内容是地图 所以我已经成功地将 MapFragment 加载到对话框样式的 FragmentActivity 中 这确实有效 问题是当我
  • 在 Python、NumPy 和 R 中创建相同的随机数序列

    Python NumPy 和 R 都使用相同的算法 Mersenne Twister 来生成随机数序列 因此 从理论上讲 设置相同的种子应该会在所有 3 个中产生相同的随机数序列 但事实并非如此 我认为这 3 个实现使用不同的参数导致了这种
  • 使用 Cocoa 和 Core Data 自动保存

    我正在开发一个非基于文档的核心数据应用程序 我希望更改发生时能够保存 这是用户对此类应用程序的期望 这也是苹果公司实施的iPhoto or iTunes 一种强力方法是设置一个计时器来频繁保存 然后 由保存触发的方法将吞掉所有验证错误 以免
  • Emacs 使用 Git-Rebase 将缓冲区恢复到奇怪的先前状态

    我在 OS X 上使用 Emacs 23 3 1 我从终端发出 git 命令 而不使用任何 Emacs 的 VC 功能 我将 Emacs 设置为在修改文件时刷新 这是通过我的 emacs 文件中的这些行启用的 custom set vari
  • 使用 javascript 处理文本区域上的 Enter 键

    我在页面上有 5 个文本区域 我希望在第一个文本区域上按 Enter 键时发生特定事件 在其他文本区域上按 Enter 键时发生不同的事件 您能否建议如何实现这一目标
  • 替代

    我正在尝试修复为我编写的旧脚本 我需要它运行而无需 我想从脚本内部运行该函数 而无需像该命令那样的内联代码 抱歉 我不是 JS 专家 但是我该怎么做呢 或者 如果您使用的是 jQuery function Your code here
  • BITS 多域传输文件

    如何在不同域的服务器之间传输文件 i e PS C Users Desktop gt Import Module bitstransfer PS C Users Desktop gt c get credential PS C Users
  • 在R中进行线性回归时,如何有条件地删除因子的NA观察?

    我正在尝试在 R 中建立一个简单的线性回归模型 模型中有三个因子变量 模型是 lm Exercise Econ Job Position 其中 锻炼 是数字因变量 即锻炼的时间量 经济 工作 职位 都是因子变量 经济 是指一个人是否有工作