Stata:mtab2-将二维统计表存储为矩阵

发布时间:2021-08-05 阅读 2085

Stata连享会   主页 || 视频 || 推文 || 知乎 || Bilibili 站

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

New! lianxh 命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc, ihelp, rdbalance, gitee, installpkg

课程详情 https://gitee.com/lianxh/Course

课程主页 https://gitee.com/lianxh/Course

⛳ Stata 系列推文:

PDF下载 - 推文合集

作者:屠西伟 (北京师范大学)
邮箱txwbnu@163.com


目录


1. 引言

矩阵代数是多元统计分析的重要工具,Stata 不但提供了多元统计分析中所需的基本矩阵运算,如矩阵的加、积、逆、Cholesky 分解、Kronecker 内积等,还提供了一些高级运算,如特征根、特征向量、奇异值分解等。在执行完某些统计分析命令后,还提供了一些系统矩阵,如估计系数向量、估计系数的协方差矩阵等。Stata 9.0 以后版本完美地整合了执行矩阵计算的矩阵编程语言 Mata,可进行强大的矩阵运算 (廉启国,2015)。在此基础上,本文将对二维统计表存储为矩阵的相关命令进行介绍。

2. mtab2 命令

mtab2 是一个创建二维统计表并将结果 (频数和百分比) 存储在矩阵中的命令。

*命令安装
ssc install mtab2, replace
*命令语法
mtab2 varlist [if] [in] [, options ]

options     Description
---------------------------------------------------------------------
nolabel     display numeric codes rather than value labels
missing     treat missing values like other values
row         report relative frequency within its row of each cell
col         report relative frequency within its column of each cell
---------------------------------------------------------------------
  • varlist:表示变量名;
  • nolabel:显示数字代码而不是值标签;
  • missing:像对待其他值一样对待缺失值;
  • row:在二维表中显示其行中每个单元格的相对频率;
  • col:在二维表中显示其列内每个单元的相对频率。

3. Stata 范例

3.1 数据介绍

在本文中,我们使用 Stata 软件自带的数据文件 nlsw88.dta。该数据包含了 1988 年采集的 2246 个美国妇女的资料,主要变量包括:小时工资 wage、每周工作时数 hours、种族 race、职业 occupation、年龄 age、是否大学毕业 collgrad、当前职业的工作年限 tenure、是否结婚 married、是否居住在南部地区 south、合计工作年限 ttl_exp 等变量。

其中,小时工资 wage、每周工作时数 hours、年龄 age、当前职业的工作年限 tenure、合计工作年限 ttl_exp 为连续型变量;种族 race 为类别变量 (1 代表白种人 white,2 代表黑种人 black,3 代表其他人种 other)、职业 occupation 为类别变量 (13 个职业类别);是否大学毕业 collgrad、是否结婚 married、是否居住在南部地区 south 为虚拟变量。

该数据变量的基本统计特征如下:

. sysuse "nlsw88.dta", clear //导入数据
. tabstat *,stat(mean sd  min max) col(stat) f(%10.4f)

    variable |      mean        sd       min       max
-------------+----------------------------------------
      idcode | 2612.6545 1480.8638    1.0000 5159.0000
         age |   39.1532    3.0600   34.0000   46.0000
        race |    1.2827    0.4754    1.0000    3.0000
     married |    0.6420    0.4795    0.0000    1.0000
never_marr~d |    0.1042    0.3056    0.0000    1.0000
       grade |   13.0989    2.5212    0.0000   18.0000
    collgrad |    0.2369    0.4253    0.0000    1.0000
       south |    0.4194    0.4936    0.0000    1.0000
        smsa |    0.7039    0.4566    0.0000    1.0000
      c_city |    0.2916    0.4546    0.0000    1.0000
    industry |    8.1895    3.0109    1.0000   12.0000
  occupation |    4.6428    3.4089    1.0000   13.0000
       union |    0.2455    0.4305    0.0000    1.0000
        wage |    7.7669    5.7555    1.0050   40.7466
       hours |   37.2181   10.5091    1.0000   80.0000
     ttl_exp |   12.5350    4.6102    0.1154   28.8846
      tenure |    5.9778    5.5103    0.0000   25.9167
------------------------------------------------------

3.2 基本结果

接下来,利用 mtab2 命令对大学毕业和婚姻状态 2×2 列联表进行分析。

. mtab2 collgrad married

                 |        married
college graduate |    single    married |     Total
-----------------+----------------------+----------
not college grad |       616      1,098 |     1,714 
    college grad |       188        344 |       532 
-----------------+----------------------+----------
           Total |       804      1,442 |     2,246 

这里的 616 是指单身 (single) 且没有大学毕业 (not college grad) 的样本有 616 个,以此类推,大学毕业 (college grad) 且已婚的样本有 344 个,Total 是行或列的总和。例如,第 1 行没有大学毕业的总人数为 1,714,第 1 列单身总人数为 804。

我们获得两行两列的频数矩阵 F[2, 2],结果如下:

F[2,2]
      c1    c2
r1   616  1098
r2   188   344

该矩阵汇报了没有大学毕业且单身 (616)、没有大学毕业已婚 (1098)、大学毕业单身 (188) 和大学毕业已婚 (344) 共 4 种状态下的频数分布。

同时得到行百分比矩阵 rowP[2, 2]:

rowP[2,2]
           c1         c2
r1  35.939323  64.060677
r2  35.338346  64.661654

行百分比矩阵是以行总数为分母,各单元频数为分子计算得到。例如,35.939323 是由第 1 行第 1 列频数 616 与第一行总数 1714 之比得到 (结果以百分比形式呈现)。

列百分比矩阵如下 colP[2, 2]:

colP[2,2]
           c1         c2
r1  76.616915  76.144244
r2  23.383085  23.855756

列百分比矩阵是以列总数为分母,各单元频数为分子计算得到。例如,76.616915 是由第 1 行第 1 列频数 616 与第一列总数 804 之比得到 (结果以百分比形式呈现)。

mtab2 除了提供以上结果外,还报告 Pearson 卡方检验和 Fisher 精确检验的 p 值,结果如下:

Pv[2,2]
              Chi2Pvalue  FisherPvalue
RoundedPva         .8006          .836
  ExactPva     .80058623     .83600063

在介绍检验结果前,我们首先介绍一下 Pearson 卡方检验和 Fisher 精确检验的概念以及计算方法。

3.3 卡方检验

卡方检验是检验两个或者多个分类变量相关性的常用方法。卡方检验的基本思想是:首先假设 H0 成立,在这个基础上计算出卡方值,以此表示观测值与理论值之间的偏离程度。根据卡方分布及其自由度确定在 H0 原假设成立下获得的统计量以及概率 p。如果 p 值很小,说明观测值与理论值相差太大,应当拒绝原假设,表示实际情况与理论假设之间存在显著的差异,否则就不拒绝原假设,因此尚不能认为样本所代表的实际情况与理论假设有差别 (龚秀芳等,2015)。具体来看:

H0:大学是否毕业与结不结婚没有关系。

(1) 计算各单元格的期望值

其中 i 表示第 i 行,j 表示第 j 列,Eij 表示第 i 行,第 j 列单元格的期望值。

(2) 大学毕业与婚姻数据的期望值与观测值

                 |        married
college graduate |     single          married      |     Total
-----------------+----------------------+----------------------
not college grad | 616(613.5601)   1,098(1100.4399) |     1,714
    college grad | 188(190.4399)   344(341.5601)    |       532
-----------------+----------------------+----------------------
           Total |       804             1,442      |     2,246

(3) 卡方统计量计算公式

其中 Oij 为实际观测值,χ2 为卡方统计量,根据卡方统计量公式,计算得出本例卡方统计值为:

对于一个简单的卡方检验,自由度是 (r1)×(c1),即行数减 1 乘以列数减 1,这里的自由度为 1,查表可知当 α=0.05 时临界值为 3.841,而本例计算得到的卡方值远小于临界值,故不拒绝原假设 “大学毕业与结婚是相互独立的”。mtab2 命令提供的卡方检验 p 值为 0.80058623,因此不拒绝原假设。

3.4 费希尔精确检验

H0:单身的可能性在没有大学毕业和大学毕业的群体中是一样的 (实际上还是在检验大学毕业与结婚两变量的独立性)。

相比于卡方检验,此检验可以用在不满足卡方检验的分布要求的小的或者数据稀疏的数据集上。费希尔检验基于超几何分布,计算列联表中的分布或者比列联表中的分布更加极端的分布出现的精确概率,它不是渐进检验,因此不需要满足卡方检验中那些对稀疏性的要求 (Boslaugh, 2016)。

(1) 表格中的符号表示

以本文结果为例,两种检验方法的原假设 H0 是种族和婚姻状态是独立的。若原假设被拒绝,则说明这两个变量是相关的。

  a          b             r1
  c          d             r2
 c1         c2              n

(2) 精确概率计算公式

其中,! 表示阶乘 (4!=4×3×2×1),这里计算量过大,就不手算精确检验的 p 值。mtab2 提供了 Fisher 检验的 p 值,结果表明精确估计的值为 0.83600063,大约 0.836,在 5% 的显著性水平下,不能拒绝原假设 “单身的可能性在没有大学毕业和大学毕业的群体中是一样的”,说明大学毕业与结婚两变量相互独立。

4. 相关命令

进一步,在介绍 rcolp2mattab2mattablemattabstatmatstatmat 五种相关命令的基础上,我们简要对比本推文中涉及的 6 个命令。

4.1 rcolp2mat

*命令安装
cnssc install rcolp2mat, replace
*命令语法
rcolp2mat varname1 varname2 [if] [in] [weight] , matrix(matname) row
                  col [options]

options             Description
-------------------------------------------------------------------------
required
  matrix(matname)   indicate name of matrix for saved results
  row col           create row or column percentages. Only one selection
                      allowed
optional
  total             add row with total % (cannot be used with detail)
  detail            add row and column Ns (cannot be used with total)
  missing           treat missing values like other values
-------------------------------------------------------------------------
  • matrix(matname):指定保存结果的矩阵名称;
  • row col:创建行或列百分比,只允许选择其中一个;
  • total:添加总百分比的行;
  • detail:添加行和列总数;
  • missing:像其他值一样对待缺失值。
 *具体示例
. rcolp2mat collgrad married, matrix(A) row //得到行百分比矩阵 A[2,2]

A[2,2]
                     single    married
not_college_grad  .35939323  .64060677
    college_grad  .35338346  .64661654

. rcolp2mat collgrad married, matrix(B)  col detail //得到列百分比矩阵B[3,3]

B[3,3]
                     single    married    Total N
not_college_grad  .76616915  .76144244       1714
    college_grad  .23383085  .23855756        532
         Total N        804       1442       2246

相比于 mtab2rcolp2mat 命令并未提供频数矩阵和变量相关性检验。

4.2 tab2mat

*命令安装
cnssc install tab2mat, replace
*命令语法
tab2mat varname [if] [in] [weight] , matrix(matname) [options]

options             Description
---------------------------------------------------------------
required
  matrix(matname)   indicate name of matrix for saved results

optional
  nomiss            exclude missing values
  nofreq            exclude frequency column
  noperc            exclude percent column
  total             add row with total
----------------------------------------------------------------
  • nomiss:排除缺失值;
  • nofreq:排除频数列;
  • noperc:排除百分比列;
  • total:添加总计行。
. *具体示例
. tab2mat collgrad, matrix(C) //大学毕业和大学没毕业的样本频数和百分比矩阵 C[2, 2]

C[2,2]
                       Freq    Percent
not college grad       1714  76.313446
    college grad        532  23.686554

. tab2mat married, matrix(D) //单身和已婚样本的频数和百分比矩阵 D[2, 2]

D[2,2]
              Freq    Percent
 single        804  35.796974
married       1442  64.203026

相比于 mtab2rcolp2mattab2mat 命令只能统计一个变量的频数分布和百分比矩阵,无法完成多个变量的同时分析。

4.3 tablemat

*命令安装
cnssc install tablemat, replace
*命令语法
tablemat varlist [if] [in] [weight] , stat(varname) 
  [bygroup(varlist) clean(string) format(format) 
  name(string) output(file name) short trim(real)]
  • stat:由 tabstat 计算,比如常见的均值、最大值和最小值等,但是一次只提供一个统计特征的描述;
  • bygroup:分组变量,可以指定两个以上变量,由逗号隔开;
  • clean:用户指定要删除的字符;
  • format:指定格式类型;
  • name:指定结果保存矩阵的名称 (默认为 M);
  • output:导出结果的选项;
  • trim:分配给值标签的长度;
  • short:将修整尺寸应用于所有标签。

tablemattabstat 命令的扩展,通过使用 tabstat 提供的统计结果进而生成矩阵。

. *具体示例
. tablemat collgrad married, st(mean) f(%9.4f)  name(E) //给出两变量均值统计特征

            Final output:
             All
collgrad  0.2369
 married  0.6420

. tablemat collgrad married, st(mean) f(%9.4f)  name(F) byg(south) 
//根据是否住在南方 (south) 进一步细分

            Final output:
              All  south_0  south_1
collgrad   0.2369   0.2408   0.2314
 married   0.6420   0.6442   0.6391

相比于 mtab2rcolp2mattab2mattablemat 命令主要作用在于将变量的统计特征 (均值、中位数、最小值和最大值等) 生成矩阵,而非统计各单元的频数和频率,也不涉及变量间的相关性检验。

4.4 tabstatmat

*命令安装
cnssc install tabstatmat, replace
*命令语法
tabstatmat matname [ , nototal safe ]
  • tabstatmattabstat 统计结果保存为矩阵格式,将这些矩阵组合起来,并将它们放在单个命名的矩阵 matname 中。如果 matname 已经存在,除非指定安全选项,否则它将被覆盖;否则,它将被覆盖。在这种情况下,将发出错误消息。
. *具体示例
. *具体示例
. tabstat collgrad married, s(n mean sd min max) save col(stat)

    variable |         N      mean        sd       min       max
-------------+--------------------------------------------------
    collgrad |      2246  .2368655  .4252538         0         1
     married |      2246  .6420303  .4795099         0         1
----------------------------------------------------------------

. tabstatmat collgradstat, nototal //将上表转为矩阵形式 G[5, 2]

collgradstat[5,2]
       collgrad    married
   N       2246       2246
mean  .23686554  .64203028
  sd  .42525377  .47950993
 min          0          0
 max          1          1

tabstatmat 命令相较于 tablemat 而言,可以一次提供多个统计特征值的描述。

5. 总结建议

如果用户关心变量的行、列百分比矩阵,mtab2rcolp2mattab2mat 可以满足需要,若进一步想看变量间的相关性,建议使用 mtab2 命令。如果用户关心统计变量的基本特征,例如均值、标准差、最小值和最大值可以使用 tabstatmattablemat 命令。tabstatmat 命令相较于 tablemat 而言,可以一次提供多个统计特征值的结果。

下表具体展示了各个命令的主要功能,其中 √ 表示有此项功能, × 则表示没有此项功能。

mtab2 rcolp2mat tab2mat tablemat tabstatmat
频数矩阵 × × × ×
行百分比矩阵 × ×
列百分比矩阵 × ×
相关性检验统计特征 × × × ×
统计特征 × × ×

6. 参考资料

  • 廉启国. Stata 数据统计分析教程[M]. 机械工业出版社, 2015.
  • 龚秀芳, 宁同科, 朱敏. 统计学[M]. 华东理工大学出版社, 2015.
  • Boslaugh, S. 统计学及其应用[M]. 机械工业出版社, 2016.

7. 相关推文

Note:产生如下推文列表的 Stata 命令为:
lianxh 结果输出 毕业论文 因子变量
安装最新版 lianxh 命令:
ssc install lianxh, replace

相关课程

免费公开课

最新课程-直播课

专题 嘉宾 直播/回看视频
最新专题 文本分析、机器学习、效率专题、生存分析等
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]
  • Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。

课程主页

课程主页

关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • 连享会-主页知乎专栏,400+ 推文,实证分析不再抓狂。直播间 有很多视频课程,可以随时观看。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会-常见问题解答:
https://gitee.com/lianxh/Course/wikis

New! lianxh 命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh