带你了解Stata中的矩阵
本文作者:邱 沣,河南大学经济学院
本文编辑:温和铭
技术总编:李婷婷
Stata&Python云端课程来啦!
为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程、Stata基础课程、Stata进阶课程、Stata文本分析、正则表达式、网络爬虫、基本字符串课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~
矩阵是高等代数学中的常见工具,在数理统计方面更是作用甚广。今天我们主要介绍一下Stata中矩阵的使用,包括矩阵的读入、矩阵的命名、矩阵之间的运算等。
在Stata中,矩阵matrix,可以简写为mat。输入一个新的矩阵一般有两种方法:第一种是直接使用matrix
,另一种是使用matrix input
。
matrix
:矩阵读入命令,后面加矩阵名和具体行列数值。矩阵的每行数值用“ \ ”隔开,每列数值用“,”分隔。比如我们读入一个新的矩阵 A ,矩阵A的第一行的第一、二列数值分别为1,2;第二行的第一、二列数值分别为3,4。读入矩阵的命令就如下所示:
matrix A= (1,2\3,4)
matrix input
:矩阵读入命令,和 matrix
两者的差异在于,matrix
可以读入元素是带有运算符号的矩阵,而matrix input
仅限于数字。例如:matrix A = (6+1, 2*2/5 \ 6/4, 3-6\4,8)
matrix input B = (1,2 \ 3,4 \5,6)
下边再介绍一些简单的矩阵显示、矩阵删除、矩阵重命名的命令。
mat dir
:列出内存中所有矩阵。
mat list
:显示矩阵。
mat drop
:删除矩阵。
mat drop_all
:删除全部矩阵。
mat rename
:矩阵重命名。
我们可以通过下边的综合案例来看一下这几个命令的用法~
matrix A = (1,2.3,4.5) //首先读入一个矩阵A
matrix input B = (1,2.3,4.5) //读入矩阵B
mat list A //列出矩阵A
mat list B //列出矩阵B
mat dir //显示内存中的所有矩阵
mat rename A C //将矩阵A命名为C
mat drop C //删除矩阵C
我们在Stata中使用矩阵时,有时需要给它们一个自定义的名称,这时我们在命令matrix
后面分别添加命令rownames
和colnames
就能完成对矩阵行和列的命名。在Stata中对于任意一个新读入的矩阵,系统会自动赋予行名和列名,分别为r1,r2,…;c1,c2,…。
首先读入矩阵A并且展示一下矩阵A,可以看到矩阵A的行名称和列名称分别为r1,r2,r3,c1,c2,c3。我们可以将矩阵A的行名称分别命名为a、b、c,将矩阵A的列名称分别命名为obs1、obs2、obs3。程序如下所示:
mat A = (9,8,7\6,5,4\3,2,1)
mat list A
matrix rownames A =a b c
matrix colnames A=obs1 obs2 obs3
mat list A
命名后的矩阵A如下图所示:
接下来我们来看一下如何提取矩阵中的单个元素。
首先我们要明确元素所在的行数和列数,如A[i,j]表示矩阵A的第i行第j列元素,或者用行和列的名称来指代,如A[“ri”,“rj”],表示矩阵A中行名为“ri”,列名为“rj”的元素,不过这样一来得到的是一个矩阵。我们通过例子来看一下提取矩阵中单个元素的方法:
clear
mat A=(1,1,1\2,2,2\3,3,3)
disp A[2,2] //返回A矩阵2行2列的元素为2
mat B=A/A[2,2] //生成B矩阵等于A矩阵除以二行二列的元素
mat l B //展示B矩阵
mat a=A["r2","c3"] //生成a矩阵等于A矩阵二行三列的元素
mat l a
mat b=B[2,"c3"]
mat l b
提取矩阵的多个元素可以用符号“ .. ”实现,比如A[1..3,2..3]表示,矩阵A的第1至第3行,第2至第3列元素;A[.,2...]表示矩阵A的所有行,第2列至最后一列元素,当然也可以用行名和列名进行提取。
clear
mat A=(1,1,1,1\2,2,2,2\3,3,3,3\4,4,4,4)
mat C=A[1..4,2..4]
mat l C
mat D=A[1...,2...]
mat l D
mat E=A["r1",1...]
mat l E
mat F=A[1,3...]\A[4,3...]
mat l F
前面介绍了一些矩阵的简单基础的命令,下面介绍一下矩阵之间的简单运算,首先我们先了解一些矩阵的运算符。
符号 | 说明 |
, | 将行数相同的两个或者多个矩阵横向连接 |
\ | 将列数相同的两个或者多个矩阵纵向连接 |
+, - | 矩阵的加法(减法),注意矩阵的行数和列数需都相同 |
* | 矩阵相乘,左边矩阵的列数要等于右边矩阵的行数 |
/ | 矩阵与某个数相除 |
' | 矩阵的转置 |
举例介绍矩阵之间的运算:
clear all
mat A=(1,2,3\4,5,6\7,8,9)
mat B=(2,6,4\6,4,6\1,5,3)
mat C=A,B //将A B矩阵横向拼接
mat D=A-B
mat E=A\B //将A B矩阵纵向拼接
mat F=A*B
mat G=B/2
mat H=A'
mat I=A#B //矩阵之间的Kronecker积
Stata中还有类型丰富的矩阵函数,使用好它们将大大提升我们数据处理的能力。
(1)返回行列数:
colnumb(X,name)
:返回矩阵X中列名为name的所在列数。
rownumb(X,name)
:返回矩阵X中行名为name的所在行数。
colsof(X)
:返回矩阵X的列数。
rowsof(X)
:返回矩阵X的行数。
clear all
mat A=(1,1,1\2,2,2\3,3,3)
mat rownames A =a b c
mat colnames A=obs1 obs2 obs3
disp rownumb(A,"b")
disp colnumb(A,"obs3")
disp colsof(A)
disp rowsof(A)
首先读入一个矩阵A,并对它的行列分别进行命名,接着就是返回矩阵A中行名为b的所在行数和列名为obs3的所在列数,最后返回矩阵A的列数和行数。运行结果如下:
diag0cnt(X)
:返回矩阵X的对角线上零元素的个数。
el(X,n,m)
:返回矩阵X中n行m列的数值。
det(X)
:返回矩阵X的行列式值。
trace(X)
:返回X的迹,即矩阵X的对角元素的和。
matmissing(X)
:如果矩阵X中有缺失值,返回1;否则返回0。
issymmetric(X)
:如果矩阵X是对称的,返回1;否则返回0。
clear all
mat A=(1,1,1\2,0,2\3,3,0)
disp diag0cnt(A)
disp el(A,2,2)
disp det(A)
disp trace(A)
disp matmissing(A)
disp issymmetric(A)
Stata中变量和矩阵的转化,由命令mkmat
和svmat
完成,分别如下:
mkmat
:将数值型变量中的观测值转变为矩阵。
svmat
:将矩阵转变成变量。
案例介绍:
sysuse auto,clear
mkmat mpg
matrix list mpg
mkmat price foreign mpg, matrix(A)
matrix list A
clear all
mat B=(1,2,3\4,5,6\7,8,9)
svmat B,names(var)
list
以上就是本次推文对Stata矩阵的简单介绍啦,大家对于矩阵有哪些想要补充以及详细了解的内容,欢迎留言哦。
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。
腾讯课堂课程二维码
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐
Seminar|总统的朋友:政治关联与企业价值 爬虫实战 | 爬取中国天气网
爬虫实战 | 爬取东方财富网经济数据——以居民消费价格指数(CPI)为例
Seminar|媒体关联董事对融资和外部治理的影响 神奇的组内交叉合并 PDF分章节转TXT并实现可视化——以胡景北知青日记1971至1978年为例万物皆可开——shellout妙用
无处不在的系列配置项|从零开始的Pyecharts(三)
使用Python制作自动聊天机器人
fillin一下,平衡回来~
order命令——快速改变变量顺序的利器 Ajax应用场景——以获取雪球网港股代码及公司名称为例播放列表中的歌单排行
在Stata中轻松运用program编写命令
Meta Analysis in Stata17芒果TV视频弹幕爬取之《我在他乡挺好的》
Stata中的判断神器——confirm命令
cngdf——名义GDP与实际GDP之间的摆渡船最近《扫黑风暴》有点火爆!我从豆瓣评论中发现了这些……
随机森林-Random Forest
复原之神--preserve&restore
合并,“纵”享新丝滑:frameappend & xframeappend什么是全局配置项?|从零开始的Pyecharts(二)帮你拿下数据可视化|从零开始的Pyecharts
Stata助力疫情打卡管理——是谁没有接龙呢?
这十年,《金融研究》的编委和读者偏爱哪些研究话题和文章?【案例展示】Python与数据库交互
学好这一手,英语词典常在手玩转Stata中的数学函数
用spmap看中国空气质量戳穿围城面具:安利&劝退一个专业
走进图文并茂的攻略世界
关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。