本文将快速指导你如何快速入门 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.您的户籍性质:
- 农业户口 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 define
与 label values
经常被组合使用
label variable
换言之,给变量添加描述,描述内容通常对应问卷设问
示例
原始试题:
Q6.您的户籍性质:
- 农业户口 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
6Gender | 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
的取值只有 1
和 2
。
示例 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 检验,应该使用 unequal
或 welch
选项
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(#)
只显示相关系数大于 # 或小于 -# 的值(用于筛选强相关)pw
或listwise
使用 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
结论:
- 工作满意度 与 月收入 之间存在 :
- 微弱正相关(r = 0.1095)
- 统计显著(p < 0.05)
- 工作满意度 与 年龄 之间 :
- 几乎没有相关性(r = 0.0070)
- 不显著(p > 0.05)
- 月收入 与 年龄 之间存在 :
- 微弱负相关(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 不满意的基线优势比 |
结论: 在控制其他变量后,婚姻状况和性别对满意度有显著影响 :已婚/同居和离婚/丧偶的人满意度高于未婚者,且男性的满意度显著高于女性;而年龄对满意度没有显著影响。