如何使用n-1个变量实现虚拟变量?


9

如果我有一个4级变量,理论上我需要使用3个虚拟变量。实际上,这是如何进行的?我是否使用0-3,我使用1-3并保留4的空白?有什么建议么?

注意:我将在R中工作。

更新:如果我只使用一列使用1-4对应于AD的列,将会发生什么?这会起作用还是会带来问题?


3
我认为UCLA ATS的页面对此进行了很好的解释。
caracal

4
只是要清楚一点,请注意将此变量编码为整数0-3或1-4或1-3 不是伪编码,并且不会与三个伪变量具有相同的效果。然而,这种不正确的编码回归公式和软件工作,并有是合理的输出:它只是将不符合预期的模式。(注:这回答了该问题的最新更新。
Whuber

Answers:


11

实际上,通常让人们选择的软件来处理和操纵虚拟变量。有几种处理方法。对于具有四个观测值的数据集,这里有几种常见的可能性,一个在A,B,C和D的每个级别。它们导致完全相同的模型拟合,但对参数的解释不同。一个人可以使用基本代数轻松地从一个转换为另一个。注意它们都是彼此线性组合;实际上,可以使用任何线性组合。

使用与第一级的差异(R中的默认值):

A 0 0 0
B 1 0 0
C 0 1 0
D 0 0 1

使用与上一级别的差异(SAS中的默认值):

A 1 0 0
B 0 1 0
C 0 0 1
D 0 0 0

使用“和”对比:

A    1    0    0
B    0    1    0
C    0    0    1
D   -1   -1   -1

使用“ helmert”对比:

A   -1   -1   -1
B    1   -1   -1
C    0    2   -1
D    0    0    3

1
我要说,出于纯粹性的考虑,严格来说,虚拟变量只是您示例的第一和第二。虚拟变量也称为指标对比变量。对我来说,Helmert偏差和其他替代类型的对比变量不应该称为哑元
ttnphns 2011年

1
@ttnphns我同意从技术的角度来看,Helmert对比并不构成伪编码,但是我认为将它们包含在此处是完全合理的。我不能告诉您是为了清楚起见还是建议更改答案。@ Aaron +1,如果您简要地解释这些不同编码方案的解释将有何不同,则此答案会更好。
gung-恢复莫妮卡

7

让我们假设您的变量级别是A,B,C和D。如果回归项中有一个常数项,则需要使用三个虚拟变量,否则,您必须拥有全部四个。

您可以使用许多在数学上等效的方法来实现虚拟变量。如果您在回归中具有一个常数项,则一种方法是选择一个级别作为“基准”级别,然后将其他三个级别与其进行比较。为了具体起见,让我们说基线水平是A。然后,当水平为B时,第一个虚拟变量的值为1,否则为0。每当电平为C时,第二个取值1,否则为0;而电平为D时,第二个取值1;否则为0。因为您的常数项始终等于1,所以第一个虚拟变量的估计系数将是对级别B和A之间的差的估计,对于其他虚拟变量也是如此。

如果没有常数项,则可以只使用四个虚拟变量(如上一个示例中所述),只需为A级添加一个即可。


关于在回归中具有常数项的重要性的注释。
亚伦(Aaron)

5

在R中,将变量定义为一个因子,它将为您实现:

x <- as.factor(sample(LETTERS[1:4], 20, replace = TRUE))
y <- rnorm(20)
lm (y ~ x)

哪个返回

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept)           xB           xC           xD  
     1.0236      -0.6462      -0.9466      -0.4234  

R中的“ lm”,“ factor”和“ formula”文档填写了一些详细信息。


1
+1这是对已经列出的答案的很好的补充。我们还应注意,如果您已经具有带有组名的变量(例如AD),则可以在分析函数调用中完成此操作,而无需执行以下步骤: lm(y ~ as.factor(x))
gung-恢复Monica

我使用伪变量的主要原因是我正在处理具有多个因子水平(> 32)的大型数据集,并且R中的某些程序包(即randomforest)无法处理具有多个因子水平的因子,因此我尝试看看假人是否可以解决。
screechOwl 2011年

1
您可以使用'model.matrix'构造回归设计矩阵:model.matrix(y〜x)(x仍然是一个因子)将为您提供带有虚拟变量的矩阵。我对randomforest软件包不熟悉,但是我怀疑您可以给任何函数一个从model.matrix获得的显式设计矩阵,并且model.matrix似乎可以用于许多(即数百个)级别。
灰色

ps:您可能需要编辑问题,以明确说明您关心的是可以在多个级别上使用的解决方案。问题大约
Gray

4

whuber在评论中告诉您,编码0-3或1-4编码而不是创建虚拟变量并不是您想要的。这是尝试-我希望能解释您将使用该模型做什么以及为什么它是错误的。

如果您对变量X进行编码,使得如果A则X = 1,如果B则X = 2,如果C则X = 3,如果D则X = 4,那么当您进行回归时,您只会得到一个参数。假设最终导致与X关联的估计参数为2。这将告诉您B的均值与A的均值之间的期望差为2。它还告诉您C的均值之间的期望差。 B的平均值为2。D和C的平均值。您将迫使这些组在方法上的差异遵循这种非常严格的模式。一个参数可以准确地告诉您您所有组的意思如何相互联系。

因此,如果您进行了这种编码,则不仅需要假设排序正确(因为在这种情况下,如果您希望从A增加到B,那么您还需要从B增加到C和C到D),但您还需要假设该差异是相同的!

相反,如果您执行建议的伪编码,则将允许每个组都有自己的均值-没有限制。这种模式更加明智,可以回答您想要的问题。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.