【问题标题】:Convert a 28 level categorical variable to matrix将 28 级分类变量转换为矩阵
【发布时间】:2017-12-28 11:31:15
【问题描述】:

我有一个包含一列company的数据集,我将为这个数据集做回归建模。

我应该使用 model.matrix 转换它还是只在一列中分配 1-28 的值。

lm函数可以处理的情况下,将其转换为28列有什么相关性?

【问题讨论】:

  • lm 将在后台执行该精确转换。在回归之前进行转换的一个潜在优势是,如果您对相同的数据运行多次回归。执行一次转换可以加快该过程。通常情况下,最好依赖lm

标签: r statistics dataset data-analysis lm


【解决方案1】:

我应该使用 model.matrix 转换它还是只在一列中分配 1-28 的值?

你不应该这样做:

  • 如果您在一列中分配 1 到 28 的值,就好像说公司 28 的权重是公司 1 的 28 倍,而所有公司在您的分析中都需要具有相同的权重(假设这些是没有顺序关系的公司名称)。
  • 使用 model.matrix 会将您的公司列转换为虚拟变量(0 - 1 个标志),但您不需要这样做,因为 lm 会自动为您完成。

lm函数可以处理的情况下,转成28列有什么关系?

正如我之前提到的,lm 会为您执行此操作,因此您无需自己执行此操作。但是,我需要指出的是,您最终将得到 27 列(加上截距),因为其中一列(参考列)将被故意遗漏。原因是通过了解其他 27 家公司,您也隐含地知道第 28 家(即参考列与其他 27 家的组合 100% 相关,因此需要省略)。

【讨论】:

  • 有道理,@Imo 在评论中指出了一件有用的事情。如果我之前转换它的性能。
  • 我没有测试有无虚拟变量的实际性能,但是看到lm的源代码(有一个if-else语句使用model.matrix,它实际上是一行) 我认为这不会带来很大的推动作用。如果您想进行预测,您自己使用 model.matrix 会给您带来额外的开销,因为您还需要在新数据上使用 model.matrix
猜你喜欢
  • 2015-07-22
  • 2015-12-08
  • 2017-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
  • 2010-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多