什么是虚拟变量
虚拟变量(Dummy Variable),又称哑变量或指示变量,是统计学和计量经济学中用于将定性数据(分类变量)转换为定量数据(数值变量)的一种方法。它通过赋予不同类别特定的数值(通常是0或1),使得分类变量能够被纳入回归模型等定量分析中。
- 定性数据(Categorical Data)
定性数据表示事物的类别或属性,可分为:
名义变量(Nominal Variable):类别间无顺序关系
例:性别(男/女)、地区(东部/中部/西部)、血型(A/B/O/AB)
有序变量(Ordinal Variable):类别间有顺序关系
例:教育水平(小学/中学/大学)、满意度(不满意/一般/满意) - 定量数据:
定量数据是可直接进行数学运算的数值型变量,分为连续变量和离散变量。
连续变量:身高、体重、温度
离散变量:年龄、家庭人口数
虚拟变量的定义
虚拟变量是一种只有0和1两种取值的变量,用于表示某一类别是否存在。例如:
- 性别:男(1),女(0)
- 地区:东部(1),非东部(0)
为什么需要虚拟变量
许多统计模型只能处理数值型变量,分类变量无法直接参与计算,而在实际中,有可能收到这些因素的影响,或者我们想要研究性别、地区、行业是否对收入有影响,这个时候就需要量化,将其变为虚拟变量。通过引入虚拟变量,可以将分类信息编码为数值,使其能够被模型识别和利用。
虚拟变量的构造方法
对于有 $k$ 个类别的分类变量,通常需要引入 $k-1$ 个虚拟变量。例如:
| 地区 | $D_1$ | $D_2$ |
|---|---|---|
| 东部 | 1 | 0 |
| 中部 | 0 | 1 |
| 西部 | 0 | 0 |
其中,$D_1$ 表示“东部”,$D_2$ 表示“中部”,西部作为基准组,即当 $D_1 = 0,D_2 = 0$ 时,表示“西部”。
虚拟变量陷阱
在回归模型中,若为 $k$ 个类别引入 $k$ 个虚拟变量,会导致多重共线性(虚拟变量陷阱)。这是因为如上所述,基准组可以由前$k-1$个变量表示。因此,通常只需引入 $k-1$ 个虚拟变量,剩下的类别作为基准组。
如上述例子所示,$D_1=1,D_2=0$为东部,$D_1=0,D_2=1$为中部,当$D_1=0,D_2=0$为西部。这个时候就没有必要额外引入一个$D_3$变量了。
应用举例
假设我们要分析工资与性别的关系,可以建立如下回归模型:
\begin{align}
工资 = \beta_0 + \beta_1 D_1 + \beta_1 \times D_2+ \epsilon
\end{align}
\begin{align}
工资 = 5000 + 50 \times D + \epsilon
\end{align}
\begin{align}
工资 = 5000 + 50 \times 0 + \epsilon
\end{align}
\begin{align}
工资 = 5000 + 50 \times 1 + \epsilon
\end{align}
$$从上述对比中可以发现,男性的工资比女性高50个单位。而 5000 是平均工资水平。若$\beta_1=50$系数在给定的显著性水平下显著,那么我们就有理由说,性别对工资有显著影响。
stata 实现
在这里我们还是使用 stata 自带的 auto 数据集来演示虚拟变量的使用。
导入数据集:1
2
3
4
5
6
7
8
9
10
11
12. sysuse auto, clear
(1978 automobile data)
. tab foreign # 查看foreign变量的取值
Car origin | Freq. Percent Cum.
------------+-----------------------------------
Domestic | 52 70.27 70.27
Foreign | 22 29.73 100.00
------------+-----------------------------------
Total | 74 100.00
可以发现,foreign的取值为国内(Domestic)和国内(Foreign),在 stata 里面,foreign 以及进行虚拟变量处理了,可以通过下列命令查看。1
2
3
4
5. label list origin
origin:
0 Domestic
1 Foreign
在这里,origin 是 foreign 值标签。从这里可以发现,0 表示国内,1 表示国外。
从这个地方可以看出
若要从0 开始构建虚拟变量,我们需要将 foreign 恢复为原始值,在这个地方我们进行下列操作进行还原。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19. gen foreign_str = ""
(74 missing values generated)
. replace foreign_str = "Domestic" if foreign == 0
variable foreign_str was str1 now str8
(52 real changes made)
. replace foreign_str = "Foreign" if foreign == 1
(22 real changes made)
. tab foreign_str
foreign_str | Freq. Percent Cum.
------------+-----------------------------------
Domestic | 52 70.27 70.27
Foreign | 22 29.73 100.00
------------+-----------------------------------
Total | 74 100.00
这个地方我们生成了一个新变量,名为foreign_str,用来保存foreign变量的原始值。通过tab 查看可以发现,和 foreign的值是一样的。
接下来,我们进行虚拟变量的生成。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19. gen foreign_dummy = 0 # 生成新变量,并将其全部赋值为 0
. replace foreign_dummy = 1 if foreign_str == "Foreign" 将满足条件的值改为 1
(22 real changes made)
. tab foreign_dummy
foreign_dum |
my | Freq. Percent Cum.
------------+-----------------------------------
0 | 52 70.27 70.27
1 | 22 29.73 100.00
------------+-----------------------------------
Total | 74 100.00
.
end of do-file
.
至此,我们就完成了虚拟变量的构建,接下来就可以将其放入模型中进行回归处理了。
接下来,我们研究汽车价格和来源是否为国外的关系进行研究。在 stata 中,接着运行以下代码进行回归:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18. reg price foreign_dummy # 也可以将foreign_dummy换为foreign
Source | SS df MS Number of obs = 74
-------------+---------------------------------- F(1, 72) = 0.17
Model | 1507382.66 1 1507382.66 Prob > F = 0.6802
Residual | 633558013 72 8799416.85 R-squared = 0.0024
-------------+---------------------------------- Adj R-squared = -0.0115
Total | 635065396 73 8699525.97 Root MSE = 2966.4
-------------------------------------------------------------------------------
price | Coefficient Std. err. t P>|t| [95% conf. interval]
--------------+----------------------------------------------------------------
foreign_dummy | 312.2587 754.4488 0.41 0.680 -1191.708 1816.225
_cons | 6072.423 411.363 14.76 0.000 5252.386 6892.46
-------------------------------------------------------------------------------
.
end of do-file
从上述结果我们可以构建下列的回归方程:
$$\begin{align}
price = 6072.423 + 312.2587 \times foreign_dummy
\end{align}
$$但是在这里我们可以发现,$foreign_dummy$的$p $值为0.680,大于0.1,因此我们无法拒绝$H_0$,即$foreign_dummy$对$price$的贡献为0。则我们没有理由认为$foreign_dummy$对$price$有显著的影响。即表示国外车与国内车的平均价格差异