Mobile wallpaper 1
6016 字
30 分钟
笔记·Stata选修课快速入门
2025-06-02

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

开始之前#

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

问卷组成#

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

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

NoQ1Q2Q3Q4_1Q4_2Q4_3Q4_4Q4_5Q4_6Q4_7Q4_8Q4_9Q4_10Q5Q6Q7Q8Q9Q10Q11
24121996022
31105111989600022

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

Q6.您的户籍性质:

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

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

导入数据#

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

clear#

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

import#

导入外部数据

导入 Excel 文件#

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

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

导入 CSV 文件 & 纯文本文件#

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

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

批量导入#

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. 其他(请注明):_______

数据文件组成:

NoQ6
11
23

Stata 语句:

label variable Q6 "户籍性质"

说明 Q6 变量表示的是户籍

label define#

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

Stata 语句:

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

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

label values#

应用标签集合到变量中

Stata 语句:

label values Q6 户籍性质标签

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


最终效果

. 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 生成单变量频数表

    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 生成双变量交叉表

    | 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

示例:

. 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 只显示可能有问题的变量(如异常值、缺失值过多等)

示例:

. 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年,您的年税后/可支配收入大约是()元。

数据文件组成:

NoQ9
121100
220000

Stata 语句及运行结果:

. 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:将年龄分成年龄段(生成新变量)

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

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

原始值范围新值
18 - 251
26 - 352
36 - 503

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


示例 2:合并类别变量

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

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

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

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

这样 gender_new 的取值只有 12


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

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

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

使用前需要安装:

ssc install esttab

一般用法:

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 个字符宽度对齐

示例:

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

示例:

. 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.标准差
tt 统计量
Degrees of freedom (df)自由度
**p-value (Pr >t
Confidence interval [95% Conf. Interval]95% 置信区间

单样本 T 检验#

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

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

示例:

. 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 值含义
平均收入 < 55000.0000极其显著
平均收入 ≠ 5500(双尾)0.0000极其显著
平均收入 > 55001.0000完全不支持

结论:

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

独立样本 t 检验#

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

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

示例:

. 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 选项

ttest 月收入, by(性别) unequal

示例:

. 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(分组变量)

示例:

. 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 检验显著后,用于确定具体哪些组之间存在差异

使用前需要安装:

ssc install dunntest

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

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

示例:

. 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.720.0000
高中 vs 小学-13.90.0000
高中 vs 初中-6.870.0000
大专 vs 小学-24.20.0000
大专 vs 初中-19.00.0000
大专 vs 高中-10.40.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)

示例:

. 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 > FF 检验的 p 值,小于 0.05 表示模型整体显著
R-squared决定系数,表示模型能解释因变量变异的比例
Adj R-squared调整后的决定系数R^2(考虑了变量个数)
Root MSE模型的标准误,越小越好

示例:

. 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.1550.1161.340.181❌ 不显著相比未婚者,工作满意度平均高出 0.155 分,但不显著
离婚/丧偶0.0520.1830.280.777❌ 不显著相比未婚者,工作满意度几乎无差异
变量系数标准误t 值p 值是否显著?解释
年龄0.0004860.003470.140.889❌ 不显著每增加一岁,工作满意度仅上升 0.0005 分,不显著
变量系数标准误t 值p 值是否显著?解释
性别0.2720.0693.940.000✅ 显著(p < 0.001)男性比女性平均高 0.272 分
变量系数解释
_cons7.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 > chi2p 值 < 0.05 表示模型显著
Pseudo R2拟似决定系数(伪 R²),衡量模型拟合优度

OR 值(Odds Ratio):

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

示例:

. 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.3190.1462.500.013✅ 显著相比未婚者,已婚/同居者的满意度更高(高出约 31.9%)
离婚/丧偶1.4830.2652.210.027✅ 显著离婚/丧偶者满意度最高,比未婚者高出约 48.3%
变量OR 值标准误z 值p 值是否显著?解释
年龄1.00080.00340.240.811❌ 不显著年龄对满意度几乎没有影响
变量OR 值标准误z 值p 值是否显著?解释
性别1.1940.07992.650.008✅ 显著男性比女性满意度高约 19.4%
变量OR 值解释
_cons0.868表示在所有自变量取 0(即未婚、女性、年龄=0)时,满意 vs 不满意的基线优势比

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

笔记·Stata选修课快速入门
https://blog.snowy.moe/posts/65087/
作者
Muika
发布于
2025-06-02
许可协议
CC BY-NC-SA 4.0