如果我有一个4级变量,理论上我需要使用3个虚拟变量。实际上,这是如何进行的?我是否使用0-3,我使用1-3并保留4的空白?有什么建议么?
注意:我将在R中工作。
更新:如果我只使用一列使用1-4对应于AD的列,将会发生什么?这会起作用还是会带来问题?
如果我有一个4级变量,理论上我需要使用3个虚拟变量。实际上,这是如何进行的?我是否使用0-3,我使用1-3并保留4的空白?有什么建议么?
注意:我将在R中工作。
更新:如果我只使用一列使用1-4对应于AD的列,将会发生什么?这会起作用还是会带来问题?
Answers:
实际上,通常让人们选择的软件来处理和操纵虚拟变量。有几种处理方法。对于具有四个观测值的数据集,这里有几种常见的可能性,一个在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
让我们假设您的变量级别是A,B,C和D。如果回归项中有一个常数项,则需要使用三个虚拟变量,否则,您必须拥有全部四个。
您可以使用许多在数学上等效的方法来实现虚拟变量。如果您在回归中具有一个常数项,则一种方法是选择一个级别作为“基准”级别,然后将其他三个级别与其进行比较。为了具体起见,让我们说基线水平是A。然后,当水平为B时,第一个虚拟变量的值为1,否则为0。每当电平为C时,第二个取值1,否则为0;而电平为D时,第二个取值1;否则为0。因为您的常数项始终等于1,所以第一个虚拟变量的估计系数将是对级别B和A之间的差的估计,对于其他虚拟变量也是如此。
如果没有常数项,则可以只使用四个虚拟变量(如上一个示例中所述),只需为A级添加一个即可。
在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”文档填写了一些详细信息。
lm(y ~ as.factor(x))
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),但您还需要假设该差异是相同的!
相反,如果您执行建议的伪编码,则将允许每个组都有自己的均值-没有限制。这种模式更加明智,可以回答您想要的问题。