什么是虚拟变量
虚拟变量(Dummy Variable),又称哑变量或指示变量,是统计学和计量经济学中用于将定性数据(分类变量)转换为定量数据(数值变量)的一种方法。它通过赋予不同类别特定的数值(通常是0或1),使得分类变量能够被纳入回归模型等定量分析中。
- 定性数据(Categorical Data)
定性数据表示事物的类别或属性,可分为:
名义变量(Nominal Variable):类别间无顺序关系
例:性别(男/女)、地区(东部/中部/西部)、血型(A/B/O/AB)
有序变量(Ordinal Variable):类别间有顺序关系
例:教育水平(小学/中学/大学)、满意度(不满意/一般/满意) - 定量数据:
定量数据是可直接进行数学运算的数值型变量,分为连续变量和离散变量。
连续变量:身高、体重、温度
离散变量:年龄、家庭人口数
虚拟变量的定义
虚拟变量是一种只有0和1两种取值的变量,用于表示某一类别是否存在。例如:
- 性别:男(1),女(0)
- 地区:东部(1),非东部(0)
为什么需要虚拟变量
许多统计模型只能处理数值型变量,分类变量无法直接参与计算,而在实际中,有可能收到这些因素的影响,或者我们想要研究性别、地区、行业是否对收入有影响,这个时候就需要量化,将其变为虚拟变量。通过引入虚拟变量,可以将分类信息编码为数值,使其能够被模型识别和利用。
虚拟变量的构造方法
对于有 个类别的分类变量,通常需要引入 个虚拟变量。例如:
| 地区 | ||
|---|---|---|
| 东部 | 1 | 0 |
| 中部 | 0 | 1 |
| 西部 | 0 | 0 |
其中, 表示“东部”, 表示“中部”,西部作为基准组,即当 时,表示“西部”。
虚拟变量陷阱
在回归模型中,若为 个类别引入 个虚拟变量,会导致多重共线性(虚拟变量陷阱)。这是因为如上所述,基准组可以由前个变量表示。因此,通常只需引入 个虚拟变量,剩下的类别作为基准组。
如上述例子所示,为东部,为中部,当为西部。这个时候就没有必要额外引入一个变量了。
应用举例
假设我们要分析工资与性别的关系,可以建立如下回归模型:
\begin{align} 工资 = \beta_0 + \beta_1 \times 性别 + \epsilon \end{align}$$其中,性别为虚拟变量(男=1,女=0),$\beta_1$ 表示男性与女性工资的平均差异。 或者分析工资与地区的关系,则可以建立如下模型:
\begin{align}
工资 = \beta_0 + \beta_1 D_1 + \beta_1 \times D_2+ \epsilon
\end{align}
其中,$D_1=1,D_2=0$为东部,$D_1=0,D_2=1$为中部,当$D_1=0,D_2=0$为西部。 ## 结果解读 假设以性别对工资的影响为例,设模型为: $$\begin{align} 工资 = \beta_0 + \beta_1 \times D + \epsilon \end{align}$$其中,性别为虚拟变量$D$(男=1,女=0)。 假设回归结果为
\begin{align}
工资 = 5000 + 50 \times D + \epsilon
\end{align}
那么,当性别为女的时候,虚拟变量$D=0$,则会发现,性别为女时的回归就变为了:
\begin{align}
工资 = 5000 + 50 \times 0 + \epsilon
\end{align}
而当性别为男的bian为男的时候,虚拟变量$D=1$,则会发现,性别为男时的回归就变为了:
\begin{align}
工资 = 5000 + 50 \times 1 + \epsilon
\end{align}
从上述对比中可以发现,男性的工资比女性高50个单位。而 5000 是平均工资水平。若$\beta_1=50$系数在给定的显著性水平下显著,那么我们就有理由说,性别对工资有显著影响。 ### stata 实现 在这里我们还是使用 stata 自带的 auto 数据集来演示虚拟变量的使用。 导入数据集: ```stata . 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 以及进行虚拟变量处理了,可以通过下列命令查看。 ```stata . label list origin origin: 0 Domestic 1 Foreign ``` 在这里,origin 是 foreign 值标签。从这里可以发现,0 表示国内,1 表示国外。 从这个地方可以看出  若要从0 开始构建虚拟变量,我们需要将 foreign 恢复为原始值,在这个地方我们进行下列操作进行还原。 ```stata . 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的值是一样的。 接下来,我们进行虚拟变量的生成。 ```stata . 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 中,接着运行以下代码进行回归: ```stata . 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$有显著的影响。即表示国外车与国内车的平均价格差异