使用lm进行R线性回归 - 如何使用数千个值(如城市或邮政编码)处理分类变量?

时间:2016-03-17 22:25:38

标签: r regression

我使用R和线性回归方法函数lm()来构建零售店业务销售的预测模型。在我的数据集中的许多依赖特征变量中,有一些分类(因子)特征可以采用数千个不同的值,例如邮政编码(和/或城市名称)。例如,仅加利福尼亚就有超过6000种不同的邮政编码;如果我改为使用城市,那么有超过400个城市。

我知道lm()为分类要素的每个值创建一个变量。问题是当我运行lm()时,变量的爆炸需要大量的内存并且需要很长时间。如何使用我的分类变量来避免或处理这种情况?

1 个答案:

答案 0 :(得分:3)

您从邮政编码转移到城市的直觉很好。然而,问题是,是否存在进一步的空间聚合水平,它将捕获重要的空间变化,但是会导致创建较少的分类(即虚拟)变量?大概。根据您的问题,简单地包括农村/郊区/城市的假人可能只需要你。

在您的情况下,地理区域可能是捕获社会经济数据变化的代理。如果是这样,为什么不直接包括社会经济数据。为此,您可以使用您的城市/邮政数据链接到美国人口普查数据。

但是,如果您确实需要/想要包含城市,请尝试估算固定效果模型。内部估计器导致时间不变的分类系数,例如您的城市系数。

即使您找到了一种方法来获得R中400个城市的OLS估计值,我也强烈鼓励您不要使用OLS估算器,使用Ridge或Lasso估算器。除非您的数据量很大(自使用R以来它不会太大),否则包含如此多的虚拟变量将大大降低自由度,这可能导致过度拟合且通常估计不足的系数和标准错误。

在稍微复杂一点的语言中,当自由度较低时,当你估计OLS是“不适定”时你解决的最小化问题,因此你应该使用正则化。例如,岭回归(即Tikhonov正则化)将是一个很好的解决方案。但请记住,岭回归是一种有偏差的估计,因此您应该进行偏差校正。

我的解决方案按照我的偏好顺序排列:

  1. 聚集到更粗糙的空间区域(即可能是区域而不是城市)
  2. 固定效果估算器。
  3. 岭回归。
  4. 如果您不喜欢我的建议,我建议您在交叉验证时提出这个问题。 IMO你的问题更接近统计问题而不是编程问题。