Moemu
文章67
标签46
分类9

文章分类

一言

文章归档

笔记·Stata选修课快速入门

笔记·Stata选修课快速入门

本文将快速指导你如何快速入门 Stata 并通过选修课考试

开始之前

首先介绍一下我们这篇文章使用的数据源和结构

问卷组成

由于泄露老师的课题不太好,因此我们只能简要介绍一下问卷的结构和几道典型题目,但这对于我们来说已经够用了

本文使用到的问卷是由 8 道单选题、1 道矩阵量表题、3道填空题组成的问卷星问卷(其中有一题是建议题,在本文中可被忽略),导出的数据大致如下:

No Q1 Q2 Q3 Q4_1 Q4_2 Q4_3 Q4_4 Q4_5 Q4_6 Q4_7 Q4_8 Q4_9 Q4_10 Q5 Q6 Q7 Q8 Q9 Q10 Q11
2 4 1 2 1996 0 2 2
3 1 10 5 1 1 1989 6000 2 2

其中 Q1Q3, Q5Q6, Q10Q11 是单选题、Q4 是矩阵量表题、Q8Q9是填空题,Q12是建议意见反馈题(在上表中被忽略),单选题的结构大致如下:

Q6.您的户籍性质:

  1. 农业户口 2. 非农业户口 3. 居民户口 4. 其他(请注明):_______

了解完这些,我们就可以正式开始了

导入数据

若无特殊说明,H3 标题都代表的是对应的 Stata 命令

clear

用于清除内存中的所有数据

import

导入外部数据

导入 Excel 文件

1
import excel using "path", sheet("sheet_name") firstrow

其中, firstrow 表示第一行是变量名,sheet 用于指示目标表

导入 CSV 文件 & 纯文本文件

1
import delimited using "path", delimiter(",") clear

其中, clear 将在文件导入前清空历史数据, delimiter 指定分隔符,默认为逗号

批量导入

1
import delimited using "C:\data\*.csv", delimiter(",") clear case(preserve)

其中,case(preserve) 表示保持原始变量大小写的形式

use

加载 Stata .dta 文件

一般用法: use file.dta

选项:

  • clear 加载之前清空内存中的数据

添加标签

在 Stata 中,label 语句用于给变量和变量值添加标签(描述性信息),它有以下形式

类型 功能
label variable 给变量添加描述性标签
label define 定义一个值标签(value label)
label values 将定义好的值标签应用到变量

其中,label definelabel values 经常被组合使用

label variable

换言之,给变量添加描述,描述内容通常对应问卷设问

示例

原始试题:

Q6.您的户籍性质:

  1. 农业户口 2. 非农业户口 3. 居民户口 4. 其他(请注明):_______

数据文件组成:

No Q6
1 1
2 3

Stata 语句:

1
label variable Q6 "户籍性质"

说明 Q6 变量表示的是户籍

label define

给变量中的值定义一个标签集合,标签内容通常对应问卷选项

Stata 语句:

1
label define 户籍性质标签 1 "农业户口" 2 "非农业户口" 3 "居民户口" 4 "其他"

定义了一个名为 “户籍性质标签” 的标签集合,带有 4 个选项标签

label values

应用标签集合到变量中

Stata 语句:

1
label values Q6 户籍性质标签

给变量 Q6 贴上”户籍性质标签”的标签集合


最终效果

1
2
3
4
5
6
7
8
9
10
11
. tab Q6

     户籍性 |
         质 |      Freq.     Percent        Cum.
------------+-----------------------------------
   农业户口 |      6,594       65.06       65.06
 非农业户口 |      1,891       18.66       83.72
   居民户口 |      1,603       15.82       99.54
       其他 |         47        0.46      100.00
------------+-----------------------------------
      Total |     10,135      100.00

label other

  • label drop mylabel 删除一个值标签定义
  • label clear 清除变量上的值标签
  • label values q1 q2 q3 mylabel 批量加入多个值标签

清洗数据

tab(tabulate)

生成频数分布表(单变量)或列联表(双变量)

变体:

  • tab varname 生成单变量频数表

    1
    2
    3
    4
    5
    6
         Gender |      Freq.     Percent        Cum.
    ------------+-----------------------------------
           Male |         45       45.00       45.00
         Female |         55       55.00      100.00
    ------------+-----------------------------------
          Total |        100      100.00

    选项:

    • miss 查找缺省值,缩写 m
    • sort 按频率排序
  • tab var1 var2 生成双变量交叉表

    1
    2
    3
    4
    5
    6
    7
              |         Smoke (Smoking Status)
       Gender |         No          Yes |     Total
    ----------+----------------------+----------
         Male |         30           15 |        45
       Female |         40           15 |        55
    ----------+----------------------+----------
        Total |         70           30 |       100

    选项:

    • row 显示每行的百分比(即每个单元格占该行总的比例)
    • col 显示每列的百分比
    • cell 显示每个单元格占总样本的比例
    • chi2 添加卡方检验结果(判断两个变量是否独立)
    • nokey 不显示值标签解释

sum(summarize)

查看数据集中一个或多个变量的基本统计特征,包括:

  • 观测数(Number of observations)
  • 均值(Mean)
  • 标准差(Standard deviation)
  • 最小值(Min)
  • 最大值(Max)

一般用法: sum [varlist]

详细统计信息: sum [varlist], detail

带条件使用: sum [varlist] condition

示例:

1
2
3
4
5
. sum Q6

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
          Q6 |     10,135    1.516823    .7706682          1          4

codebook

查看数据集中变量的结构和取值分布情况,一般用于检查缺失值或找出潜在的数据问题

内容包括:

  • 变量名(Variable)
  • 类型(type)
  • 标签(label)
  • 最小值 / 最大值(min/max)
  • 唯一值个数(unique values)
  • 缺失值比例(missing)
  • 频数最高的几个值(top patterns)

一般用法: codebook <varlist>

选项:

  • compact 简洁模式,只显示关键信息
  • notes 显示变量的注释信息(如果有)
  • tabulate(#) 对分类变量显示频数表(# 表示最多显示多少个类别)
  • problems 只显示可能有问题的变量(如异常值、缺失值过多等)

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
. codebook Q9

-------------------------------------------------------------------------------------
Q9                                                                       2020年总收入
-------------------------------------------------------------------------------------

                  Type: Numeric (long)

                 Range: [90,1000000]                  Units: 1
         Unique values: 793                       Missing .: 0/8,103

                  Mean: 40227.2
             Std. dev.: 61677.8

           Percentiles:     10%       25%       50%       75%       90%
                           2500      9600     25000     50000     90000

drop

删除变量(列)或观测值(行)

变体:

  • drop var1 var2 ... 删除变量
  • drop if condition 删除观测值。删除缺失值: drop if missing(varname)

ren(rename)

重命名变量名或变量标签

一般用法: ren oldvar newvar

重命名多个变量: rename (old1 old2) (new1 new2)

gen(generate)

生成新变量(即创建新的列)

一般用法: gen 新变量名 = 表达式

使用条件控制: gen newvar = var if condition

示例:

原始试题:

Q9.2020年,您的年税后/可支配收入大约是()元。

数据文件组成:

No Q9
1 21100
2 20000

Stata 语句及运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
. label variable Q9 "2020年总收入"
. sum Q9

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
          Q9 |     10,135    32605.92    66197.84         -2    3000000

. tab Q9

   2020年总 |
       收入 |      Freq.     Percent        Cum.
------------+-----------------------------------
         -2 |         88        0.87        0.87
         -1 |        320        3.16        4.03
          0 |      1,613       15.92       19.94
          1 |          1        0.01       19.95
          3 |          1        0.01       19.96
         20 |          1        0.01       19.97
         30 |          1        0.01       19.98
         50 |          1        0.01       19.99
         70 |          1        0.01       20.00
         75 |          1        0.01       20.01
         80 |          1        0.01       20.02
         82 |          1        0.01       20.03
         90 |          1        0.01       20.04
        100 |          6        0.06       20.10
...
    1500000 |          1        0.01       99.99
    3000000 |          1        0.01      100.00
------------+-----------------------------------
      Total |     10,135      100.00

. drop if Q9<90 | Q9>1000000
(2,033 observations deleted)

. sum Q9

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
          Q9 |      8,103    40227.21     61677.8         90    1000000

. gen 月收入=Q9/12 

. label variable 月收入  "2024年月收入"


. sum  月收入

    Variable |        Obs        Mean    Std. dev.       Min        Max
-------------+---------------------------------------------------------
      月收入 |      8,103    3352.267    5139.817        7.5   83333.34

recode

重新编码变量的取值

语法: recode varname (rule), gen(newvar) | into(newvar)

  • varname:需要重编码的原始变量。
  • (rule):指定如何将原始值映射到新值。
  • gen(newvar):生成一个新变量(推荐使用)。
  • into(newvar):在已有变量中覆盖结果(慎用)。

其中 rule 写法如下:

写法 含义
(min/val=new) 小于等于 val 的都变为 new
(val/max=new) 大于等于 val 的都变为 new
(lower/upper=new) 在 lower 到 upper 之间的变为 new

示例:

示例 1:将年龄分成年龄段(生成新变量)

1
recode age (18/25=1 "18-25") (26/35=2 "26-35") (36/50=3 "36-50"), gen(age_group)

这会创建一个新变量 age_group,将 age 变量按区间划分:

原始值范围 新值
18 - 25 1
26 - 35 2
36 - 50 3

注意:括号中的 "标签" 是可选的,用于给每个组添加描述性标签(需要配合 label define 使用)。


示例 2:合并类别变量

假设你有一个性别变量 gender,取值为:

  • 1 = Male
  • 2 = Female
  • 3 = Other

你想把 Other 合并进 Female(即 2):

1
recode gender (1=1) (2=2) (3=2), gen(gender_new)

这样 gender_new 的取值只有 12


示例 3:处理缺失值或异常值

如果你想把某些异常值设为缺失值:

1
recode income (9999999=.) , gen(income_clean)

这会将所有等于 9999999 的值设置为缺失值(.)。

保存数据

save

保存内存中的数据到文件中

一般用法: save file.dta

选项:

  • replace 覆盖已有文件
  • version(x) 指定版本兼容格式

est(estimates)

存储、管理、比较和输出回归模型估计结果,通常与 reg 搭配使用

变体:

  • est store name 将当前估计结果保存为 name
  • est table name1 name2 ... 显示多个保存过的模型结果
  • est restore name 恢复之前保存的模型
  • est drop name 删除保存的模型
  • est clear 清除所有已保存的模型
  • estimates save / load 将估计结果保存到文件或从文件加载

esttab

将回归模型估计结果输出到 Word / Excel

使用前需要安装:

1
ssc install esttab

一般用法:

1
2
3
4
esttab model1 model2 model3 using results.rtf, replace ///
    title("工作满意度影响因素分析") ///
    label booktabs se star(* 0.1 ** 0.05 *** 0.01) ///
    stats(N r2_a)

选项:

选项 含义
nogaps 不在系数和标准误之间留空行(紧凑显示)
compress 紧凑排版,节省空间
b(%20.3f) 系数保留 3 位小数,并用 20 个字符宽度对齐
se(%7.3f) 标准误保留 3 位小数,用 7 个字符宽度对齐
  • nogaps 不在系数和标准误之间留空行(紧凑显示)
  • compress 紧凑排版,节省空间
  • b(%20.3f) 系数保留 3 位小数,并用 20 个字符宽度对齐
  • ``se(%7.3f)` 标准误保留 3 位小数,用 7 个字符宽度对齐

示例:

1
2
3
4
5
reg 工作满意度 i.婚姻状况  年龄  性别   // 基础模型
est store 模型1
reg 工作满意度 i.婚姻状况  年龄  性别  月收入 i.教育程度 // 基础模型
est store 模型2
esttab 模型1 模型2 using 回归输出结果1.rtf,	replace star(* 0.10 ** 0.05 *** 0.01 ) nogaps compress b(%20.3f) se(%7.3f)  r2(%9.3f) ar2 obslast scalars(F)

数据分析

卡方检验(tab2)

用于测量两个变量之间是否独立。

a的取值,一般是0.01(对应置信水平99%)、0. 05 (对应置信水平95%,默认)、0.1(对应 置信水平90%,这是底限,不能再低了)

指令: tab2 varlist, by(varname)

又或者: tab2 主变量 其他变量1 其他变量2 ..., chi2 [其他选项]

参数:

  • chi2 / chi 添加卡方检验
  • row / col 显示行/列百分比
  • cell 显示单元格百分比
  • missing 包括作为一个类别的缺失值
  • all 显示所有类型的百分比,相当于 row col cell

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

. tab2 婚姻状况 性别, row col chi2 nokey

-> tabulation of 婚姻状况 by 性别  

RECODE of Q11 |
    (婚姻状况 |         性别
            ) |        男         女 |     Total
--------------+----------------------+----------
         未婚 |       320        184 |       504     <-- 频数
              |     63.49      36.51 |    100.00    <-- 行百分比
              |     15.01      10.41 |     12.92    <-- 列百分比
--------------+----------------------+----------
    已婚/同居 |     1,719      1,452 |     3,171 
              |     54.21      45.79 |    100.00 
              |     80.63      82.13 |     81.31 
--------------+----------------------+----------
    离婚/丧偶 |        93        132 |       225 
              |     41.33      58.67 |    100.00 
              |      4.36       7.47 |      5.77 
--------------+----------------------+----------
        Total |     2,132      1,768 |     3,900 
              |     54.67      45.33 |    100.00 
              |    100.00     100.00 |    100.00 

          Pearson chi2(2) =  32.2475   Pr = 0.000  <-- chi2: 卡方值; Pr: P 值

上面的示例输出结果显示 p 值非常小(< 0.001),说明 婚姻状况与性别之间存在统计显著的关系

也就是说,不同性别在婚姻状况上的分布不是随机的,是有差异的。

T 检验(ttest)

判断两个组之间的均值是否存在显著差异

数据要求: 因变量一般适用于数值型变量,也可以用于定序变量(级数最好超过5级的态度量表)

内容 解释
Obs 观测数量
Mean 均值
Std. Err 标准误(衡量样本均值估计的精度)
Std. dev. 标准差
t t 统计量
Degrees of freedom (df) 自由度
**p-value (Pr > t
Confidence interval [95% Conf. Interval] 95% 置信区间

单样本 T 检验

检验一个变量的平均值是否等于某个特定值

一般用法: ttest 变量名 == 数值

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

. ttest 月收入 = 5500

One-sample t test
------------------------------------------------------------------------------
Variable |     Obs        Mean    Std. err.   Std. dev.   [95% conf. interval]
---------+--------------------------------------------------------------------
  月收入 |   3,900    5017.525    102.4511     6398.07    4816.662    5218.388
------------------------------------------------------------------------------
    mean = mean(月收入)                                           t =  -4.7093
H0: mean = 5500                                  Degrees of freedom =     3899

   Ha: mean < 5500             Ha: mean != 5500               Ha: mean > 5500
 Pr(T < t) = 0.0000         Pr(|T| > |t|) = 0.0000          Pr(T > t) = 1.0000

.

部分数据解读:

  • [95% conf. interval] = [4816.662, 5218.388] :总体均值的 95% 置信区间,也就是说我们有 95% 的信心认为真实的平均月收入在这个区间内。
  • H0(原假设):总体平均月收入 = 5500
  • Ha(备择假设): 总体平均月收入 ≠ 5500(双尾)
  • t = -4.7093 :计算出的 t 统计量,负号表示样本均值小于 5500。
  • Degrees of freedom (自由度) = 3899 :由样本量决定。
  • Ha(备择假设):总体平均月收入 < 5500 | != 5500 | > 5500

我们有三种不同的备择假设:

备择假设 p 值 含义
平均收入 < 5500 0.0000 极其显著
平均收入 ≠ 5500(双尾) 0.0000 极其显著
平均收入 > 5500 1.0000 完全不支持

结论:

通过单样本 t 检验发现,样本的平均月收入为 5017.53 元,显著低于 5500 元(p < 0.001),拒绝“平均月收入等于 5500”的原假设。

独立样本 t 检验

比较两个独立群体的平均值是否有显著差异

一般用法: ttest 变量名, by(分组变量)

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

. ttest 月收入, by(性别)

Two-sample t test with equal variances
------------------------------------------------------------------------------
   Group |     Obs        Mean    Std. err.   Std. dev.   [95% conf. interval]
---------+--------------------------------------------------------------------
|   2,132    5732.543    153.5135    7088.271    5431.491    6033.595
|   1,768    4155.298    126.6787    5326.535    3906.842    4403.754
---------+--------------------------------------------------------------------
Combined |   3,900    5017.525    102.4511     6398.07    4816.662    5218.388
---------+--------------------------------------------------------------------
    diff |            1577.245    204.2707                1176.757    1977.732
------------------------------------------------------------------------------
    diff = mean(男) - mean(女)                                    t =   7.7213
H0: diff = 0                                     Degrees of freedom =     3898

    Ha: diff < 0                 Ha: diff != 0                 Ha: diff > 0
 Pr(T < t) = 1.0000         Pr(|T| > |t|) = 0.0000          Pr(T > t) = 0.0000

结论:

独立样本 t 检验结果显示,男性的平均月收入显著高于女性(p < 0.001),两组差异为 1577 元。

配对样本 t 检验

检验同一样本在前后两次测量值或在一次测量中两种量表分数/ 测验分数的均值,确定二者之间是否显著不同

一般用法: ttest 变量1 == 变量2

方差检验

robvar

检验不同组别之间的方差是否相等

一般用法: robvar 变量名, by(分组变量)

输出:

统计量 描述
W0 使用组内中位数偏差的对数标准差回归(最常用)
W1 使用组内均值偏差的对数标准差回归
W2 使用组内均值偏差的标准差直接回归
  • 如果 p 值 < 0.05 :拒绝“方差相等”的原假设 → 方差不齐性
  • 如果 p 值 ≥ 0.05 :不能拒绝原假设 → 可以认为方差相等

如果反差不齐性并且你需要做 t 检验,应该使用 unequalwelch 选项

1
ttest 月收入, by(性别) unequal

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

. robvar 月收入,by(教育程度)

  RECODE of |
        Q10 |
    (教育程 |       Summary of 2024年月收入
) |        Mean   Std. dev.       Freq.
------------+------------------------------------
   小学及以 |   2567.4288   2776.9831         619
       初中 |   3925.7338   5211.6473       1,245
  高中/中专 |   4831.0771   4892.7945         858
   大专及以 |   7594.6576   8621.3015       1,178
------------+------------------------------------
      Total |   5017.5251     6398.07       3,900

W0  =  66.010015   df(3, 3896)     Pr > F = 0.00000000

W50 =  45.904817   df(3, 3896)     Pr > F = 0.00000000

W10 =  48.852170   df(3, 3896)     Pr > F = 0.00000000

此处P=0.0000,即可以使用 welch方法

oneway

检验三个或以上独立组的均值是否相等

前提: 正态性, 方差齐性, 独立性

一般用法: oneway 因变量 分组变量, tabulate bonferroni scheffe sidak

kwallis

非参数检验 ,用于比较三个或以上独立组的中位数是否存在显著差异

一般用法: kwallis 因变量, by(分组变量)

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

. kwallis 月收入, by(教育程度)

Kruskal–Wallis equality-of-populations rank test

  +------------------------------------+
  |       教育程度 |   Obs |  Rank sum |
  |----------------+-------+-----------|
  |     小学及以下 |   619 | 747313.00 |
  |           初中 | 1,245 |  2.10e+06 |
  | 高中/中专/技校 |   858 |  1.74e+06 |
  |     大专及以上 | 1,178 |  3.01e+06 |
  +------------------------------------+

  chi2(3) = 682.770
     Prob =  0.0001

  chi2(3) with ties = 684.057
               Prob =  0.0001

此处 P=0.0001,远小于0.05,说明不同教育程度群体的月收入中位数存在显著差异,需进一步进行事后检验确定哪些组间存在差异。

dunntest

在 Kruskal-Wallis 检验显著后,用于确定具体哪些组之间存在差异

使用前需要安装:

1
ssc install dunntest

若该命令不能运行,通过运行search dunntest,选择其中一个安装包进行安装。

一般用法: dunntest 因变量, by(分组变量) method(bonferroni|holm|none)

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

. dunntest 月收入, by(教育程度)

Kruskal–Wallis equality-of-populations rank test

  +------------------------------------+
  |       教育程度 |   Obs |  Rank sum |
  |----------------+-------+-----------|
  |     小学及以下 |   619 | 747313.00 |
  |           初中 | 1,245 |  2.10e+06 |
  | 高中/中专/技校 |   858 |  1.74e+06 |
  |     大专及以上 | 1,178 |  3.01e+06 |
  +------------------------------------+

  chi2(3) = 682.770
     Prob =  0.0001

  chi2(3) with ties = 684.057
               Prob =  0.0001


              Dunn's Pairwise Comparison of 月收入 by 教育程度              
                              (No adjustment)                               
Col Mean-|
Row Mean |   小学�     初中   高中/�
---------+---------------------------------
    初中 |  -8.717981
         |     0.0000
         |
  高中/� |  -1.39e+01  -6.873605
         |     0.0000     0.0000
         |
   大专� |  -2.42e+01  -1.90e+01  -1.04e+01
         |     0.0000     0.0000     0.0000

这是 Dunn 检验的结果矩阵 ,显示的是每两组之间进行成对比较的 Z 值和对应的 p 值。

表格中每一行表示一个组(Row),与上面的列(Column)组进行比较。负值表示 Row 组的收入中位数低于 Col 组。

对比组 Z 值 p 值 是否显著(p < 0.05)
初中 vs 小学 -8.72 0.0000
高中 vs 小学 -13.9 0.0000
高中 vs 初中 -6.87 0.0000
大专 vs 小学 -24.2 0.0000
大专 vs 初中 -19.0 0.0000
大专 vs 高中 -10.4 0.0000

结论: 在控制多重比较误差的情况下,所有教育程度组之间的月收入中位数都存在统计上显著的差异(p < 0.001)。 且随着教育程度提高,收入水平显著上升。

相关分析(pwcorr)

计算变量之间的皮尔逊相关系数(Pearson Correlation Coefficient) ,可以帮助我们快速了解多个连续变量之间两两的相关程度。

一般用法: pwcorr varlist [if] [in] [, options]

选项:

  • sig: 显示每个相关系数的显著性 p 值
  • star(#): 标记显著水平(如star(0.05)表示 p < 0.05 的相关系数标 *)
  • obs: 显示每对变量使用的样本数量
  • print(#) 只显示相关系数大于 # 或小于 -# 的值(用于筛选强相关)
  • pwlistwise 使用 listwise 删除缺失值(默认是 pairwise)

示例:

1
2
3
4
5
6
7
8
9
10
11
12
. pwcorr 工作满意度  月收入 年龄, obs star(.05) 

             |  工作~度   月收入     年龄
-------------+---------------------------
  工作满意度 |   1.0000 
             |     3900
             |
      月收入 |   0.1095*  1.0000 
             |     3900     3900
             |
        年龄 |   0.0070  -0.1617*  1.0000 
             |     3900     3900     3900

以工作满意度与年龄为例:

  • 相关系数 r = 0.007,加了 * 号则表示 p < 0.05
  • Obs = 3900

结论:

  1. 工作满意度 与 月收入 之间存在 :
    • 微弱正相关(r = 0.1095)
    • 统计显著(p < 0.05)
  2. 工作满意度 与 年龄 之间 :
    • 几乎没有相关性(r = 0.0070)
    • 不显著(p > 0.05)
  3. 月收入 与 年龄 之间存在 :
    • 微弱负相关(r = -0.1617)
    • 统计显著(p < 0.05)

在 3900 个有效样本中,工作满意度与月收入呈微弱正相关,月收入与年龄呈微弱负相关,而工作满意度与年龄几乎无关。

回归分析(reg)

执行线性回归分析,适用于研究一个连续因变量、与一个或多个自变量之间的线性关系。

基本用法: reg 因变量 自变量1 自变量2 ...

选项:

beta 输出标准化回归系数(便于比较不同变量的影响大小)
vce(robust) 使用稳健标准误(处理异方差问题)
noconstant 不包含常数项(截距)
level(99) 设置置信区间为 99%(默认是 95%)
  • beta : 输出标准化回归系数(便于比较不同变量的影响大小)
  • vce(robust): 使用稳健标准误(处理异方差问题)
  • noconstant 不包含常数项(截距)
  • ``level(99)` 设置置信区间为 99%(默认是 95%)

输出结果:

指标 含义
Number of obs 样本数量
F(model, residual) F 检验值,判断整个模型是否显著
Prob > F F 检验的 p 值,小于 0.05 表示模型整体显著
R-squared 决定系数,表示模型能解释因变量变异的比例
Adj R-squared 调整后的决定系数R^2(考虑了变量个数)
Root MSE 模型的标准误,越小越好

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

. reg 工作满意度 i.婚姻状况  年龄  性别

      Source |       SS           df       MS      Number of obs   =     3,900
-------------+----------------------------------   F(4, 3895)      =      4.81
       Model |  85.9465517         4  21.4866379   Prob > F        =    0.0007
    Residual |  17399.7724     3,895   4.4672073   R-squared       =    0.0049
-------------+----------------------------------   Adj R-squared   =    0.0039
       Total |   17485.719     3,899   4.4846676   Root MSE        =    2.1136

------------------------------------------------------------------------------
  工作满意度 | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
-------------+----------------------------------------------------------------
    婚姻状况 |
  已婚/同居  |    .155059   .1159594     1.34   0.181     -.072288     .382406
  离婚/丧偶  |   .0520416    .183447     0.28   0.777    -.3076197    .4117028
             |
        年龄 |    .000486    .003471     0.14   0.889    -.0063191    .0072911
        性别 |   .2719668   .0690616     3.94   0.000     .1365664    .4073672
       _cons |   7.033628   .1833333    38.37   0.000      6.67419    7.393067
------------------------------------------------------------------------------

结论:模型整体显著,但解释力较弱(R² 很低),说明还有很多未被纳入的因素影响工作满意度。

变量 系数 标准误 t 值 p 值 是否显著? 解释
已婚/同居 0.155 0.116 1.34 0.181 ❌ 不显著 相比未婚者,工作满意度平均高出 0.155 分,但不显著
离婚/丧偶 0.052 0.183 0.28 0.777 ❌ 不显著 相比未婚者,工作满意度几乎无差异
变量 系数 标准误 t 值 p 值 是否显著? 解释
年龄 0.000486 0.00347 0.14 0.889 ❌ 不显著 每增加一岁,工作满意度仅上升 0.0005 分,不显著
变量 系数 标准误 t 值 p 值 是否显著? 解释
性别 0.272 0.069 3.94 0.000 ✅ 显著(p < 0.001) 男性比女性平均高 0.272 分
变量 系数 解释
_cons 7.034 当所有自变量取 0 时(即未婚、女性、年龄=0),预期工作满意度为 7.03 分

在控制婚姻状况和年龄后,性别对工作满意度有显著影响(男性高于女性),但婚姻状况和年龄本身对工作满意度没有显著影响;模型整体显著,但解释力较低(R² = 0.49%),说明还有更多未被测量的重要因素。

逻辑回归(logistic)

逻辑回归是一种广义线性模型(Generalized Linear Model, GLM) ,用来预测某个事件发生的概率 ,并估计自变量对这个概率的影响。

不同于线性回归输出的是连续值,逻辑回归输出的是一个介于 0 和 1 之间的发生概率

逻辑回归适用于因变量为二分类变量 (binary outcome)的情况,例如:

  • 是否购买产品(是/否)
  • 是否患病(是/否)
  • 是否离职(是/否)

基本用法: logistic 因变量 自变量1 自变量2 ..., [选项]

输出指标:

指标 含义
Number of obs 样本数量(这里是 3900)
LR chi2(4) 似然比卡方检验统计量,判断模型整体是否显著
Prob > chi2 p 值 < 0.05 表示模型显著
Pseudo R2 拟似决定系数(伪 R²),衡量模型拟合优度

OR 值(Odds Ratio):

  • OR > 1:该变量增加时,结果为“1”(满意)的可能性更大
  • OR < 1:该变量增加时,结果为“1”的可能性更小
  • OR = 1:无影响

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

. logistic  满意度分组 i.婚姻状况  年龄  性别   // 基础模型  

Logistic regression                                     Number of obs =  3,900
                                                        LR chi2(4)    =  18.76
                                                        Prob > chi2   = 0.0009
Log likelihood = -2617.3811                             Pseudo R2     = 0.0036

------------------------------------------------------------------------------
  满意度分组 | Odds ratio   Std. err.      z    P>|z|     [95% conf. interval]
-------------+----------------------------------------------------------------
    婚姻状况 |
  已婚/同居  |   1.318581   .1460659     2.50   0.013     1.061243     1.63832
  离婚/丧偶  |   1.483392   .2649203     2.21   0.027     1.045295      2.1051
             |
        年龄 |   1.000803   .0033622     0.24   0.811     .9942343    1.007414
        性别 |   1.194392   .0799448     2.65   0.008     1.047546    1.361824
       _cons |   .8684218   .1532879    -0.80   0.424     .6144442     1.22738
------------------------------------------------------------------------------
Note: _cons estimates baseline odds.
变量 OR 值 标准误 z 值 p 值 是否显著? 解释
已婚/同居 1.319 0.146 2.50 0.013 ✅ 显著 相比未婚者,已婚/同居者的满意度更高(高出约 31.9%)
离婚/丧偶 1.483 0.265 2.21 0.027 ✅ 显著 离婚/丧偶者满意度最高,比未婚者高出约 48.3%
变量 OR 值 标准误 z 值 p 值 是否显著? 解释
年龄 1.0008 0.0034 0.24 0.811 ❌ 不显著 年龄对满意度几乎没有影响
变量 OR 值 标准误 z 值 p 值 是否显著? 解释
性别 1.194 0.0799 2.65 0.008 ✅ 显著 男性比女性满意度高约 19.4%
变量 OR 值 解释
_cons 0.868 表示在所有自变量取 0(即未婚、女性、年龄=0)时,满意 vs 不满意的基线优势比

结论: 在控制其他变量后,婚姻状况和性别对满意度有显著影响 :已婚/同居和离婚/丧偶的人满意度高于未婚者,且男性的满意度显著高于女性;而年龄对满意度没有显著影响。