如何在 R 中同时使用数值/分类值运行序数逻辑回归分析?

机器算法验证 r 回归 物流 缺失数据 有序的logit
2022-02-16 22:24:57

基本数据:我有大约 1,000 人被标记为评估:“1”、[好]、“2”、[中] 或“3”[坏]——这些是我试图为人们预测的未来值. 除此之外,我还有一些人口统计信息:性别(分类:M / F)、年龄(数字:17-80)和种族(分类:黑人/白种人/拉丁裔)。

我主要有四个问题:

  1. 我最初试图将上述数据集作为多元回归分析运行。但我最近了解到,由于我的依赖是一个有序因子而不是一个连续变量,我应该使用序数逻辑回归来处理这样的事情。我最初使用的是类似的东西mod <- lm(assessment ~ age + gender + race, data = dataset),有人能指出我正确的方向吗?

  2. 从那里开始,假设我得到了我觉得很舒服的系数,我知道如何只为 x1、x2 等插入数值——但是我将如何处理种族,例如,有多个响应的地方:黑人/白种人/ 拉丁裔?因此,如果它告诉我高加索系数是 0.289,而我试图预测的某个人是高加索人,那么由于该值不是数字,我该如何将其重新插入?

  3. 我还缺少一些随机值——一些用于种族,一些用于性别等。我是否需要做任何额外的事情来确保这不会扭曲任何东西?(我注意到当我的数据集被加载到 R-Studio 时,当丢失的数据被加载为NA时,R 会说类似(162 observations deleted due to missingness)- 但如果它们被加载为空白,它什么也不做。)

  4. 假设所有这些都解决了,并且我有我想要预测的性别、年龄和种族的新数据——在 R 中是否有一种更简单的方法可以通过我的新系数公式来运行所有这些,而不是手动完成?(如果这个问题在这里不合适,我可以把它带回 R 论坛。)

2个回答

这里有一些信息可能会为您指明正确的方向。

关于您的数据,您所拥有的是具有多个类别的响应,并且无论何时您尝试对分类响应建模,您都可以尝试使用某种类型的广义线性模型 (GLM)。在您的情况下,您必须考虑有关您的响应的其他信息,即您的响应水平具有自然排序好>中>坏,请注意这与尝试对响应建模有何不同,例如某人用什么颜色气球可能会购买(红色/蓝色/绿色),这些值没有自然顺序。在使用有序响应执行此类模型时,您可能需要考虑使用比例优势模型。

http://en.wikipedia.org/wiki/Ordered_logit

我自己没用过,不过polr()MASS包里面的函数应该是有一些用处的,或者我用lrm()rms包里面的函数做了类似的分析,发现还是蛮有用的。如果您加载这些包,只需使用?polr?lrm获取功能信息。

好的背景,关于你的问题:

  1. 这应该在上面介绍,查看这些包/功能并阅读序数逻辑回归和比例优势模型

  2. 每当您有一个分类的协变量(种族/性别/头发颜色)时,您都希望将这些视为 R 编码中的“因素”,以便对它们进行适当的建模。了解什么是因素以及如何处理它们很重要,但本质上您将每个类别视为一个单独的级别,然后以适当的方式对其进行建模。只需阅读模型中的因素,您就应该能够梳理出正在发生的事情。请记住,将分类变量视为因素并不是 glm 模型或比例优势模型所独有的,而是所有模型处理分类变量的典型方式。 http://www.stat.berkeley.edu/classes/s133/factors.html

  3. 缺失值有时可能很麻烦,但如果您正在进行相当基本的分析,只需删除包含缺失值的数据行可能是安全的(这并不总是正确的,但根据您当前的经验水平,我是猜测你不需要关心何时以及如何处理缺失值的细节)。事实上,这几乎就是 R 所做的。如果您有用于建模的数据,如果您连续缺少响应信息或模型中的任何协变量,R 只会排除此数据(这是您看到的警告)。显然,如果您由于缺失而排除了大部分数据,那么您的结果可能会有偏差,尝试获取更多关于为什么有这么多缺失值的信息可能会很好,但是如果您 重新丢失 10,000 行数据中的 162 个观察值,我不会太担心。如果您对更多细节感兴趣,可以搜索处理丢失数据的方法。

  4. 几乎所有的 R 模型对象 ( lm, glm, lrm,...) 都将具有一个关联predict()函数,该函数将允许您计算当前建模数据集的预测值,另外还可以计算您希望预测结果的另一个数据集的预测值。只需搜索?predict.glm?predict.lm尝试获取有关您想要使用的任何模型类型的更多信息。这是人们希望对模型做的一件非常典型的事情,所以请放心,有一些内置的函数和方法可以让这样做相对简单。

祝你好运!

  1. 是的,订购 logit 或 probit 将是从哪里开始。这是关于使用 R 的有序 logit 的教程。其他 CV 问题可能会帮助您解决遇到的任何问题——尝试使用标签“logit”、“probit”和“ordinal”。

  2. 处理具有值的分类自变量的标准方法是将其虚拟编码为二进制值。这在此处进行了更全面的解释,但简而言之:一个类别的影响包含在截距中,并且系数适合其余类别。在您的示例中,对于高加索受访者,将有一个虚拟变量编码为 1,否则编码为 0。kk1caucasian

  3. 处理缺失数据很大程度上取决于手头的问题,是的,如何处理缺失数据可能会引入偏差。本书的摘录很好地描述了可能产生缺失数据的四种机制,这应该可以帮助您考虑手头问题中的潜在偏见。(特别是第 25.1 节,第 530 页。)

  4. 许多建模包都有某种predict功能,实际上上面链接的第一个教程包含一个演示。