请选择 进入手机版 | 继续访问电脑版
楼主: thomashyb
1845 5

[Stata高级班] 返回值的混乱 [推广有奖]

  • 0关注
  • 1粉丝

博士生

4%

还不是VIP/贵宾

-

威望
0
论坛币
968 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
49859 点
帖子
76
精华
0
在线时间
289 小时
注册时间
2013-6-14
最后登录
2018-5-8

thomashyb 学生认证  发表于 2013-12-17 00:24:34 |显示全部楼层 |坛友微信交流群

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
连老师:
您好!
Stata 学术论文专题
Cleary, S., 1999,
*   The Relationship between Firm Investment and Financial Status,
*   Journal of Finance, 54(2):673-692.
do文件
第629-689行
问题:
1. 第649行
global cflow_diff0 = D0[1,2]  // cflow 的真实系数差异
cflow_diff0 究竟是什么?矩阵、变量、向量等,如何在屏幕上显示?
2. 第658行
dis _c "."
_c 又是什么?矩阵、变量、向量等,它又是怎么来的?是stata中的命令吗?
视频中您说,它的作用是每估计一轮就打个点,这个点与第655行
mat D = J(`reps', `c', .)    // 存储结果的矩阵
矩阵中的点是否是同一个点?我理解不是,这个点是每循环一次打一个点,如果这样,难道这两条命令相互不会干扰吗?
视频中您又说,在行上打点,否则在列上打点,这个功能又是由什么命令来执行的?_c 吗?_c 究竟有多少个意思?
3. 第678行
qui count if (diff`j'>=`diff0_`j'')&(diff`j'!= .)
这条命令中有两个暂元`j',它们代表的意思相同吗?
我理解不同:
diff`j'表示随机抽样100次产生的100个系数差异值;而diff0_`j'则表示真实的系数差异,只有1个值。它们难道不相互干扰吗?
第677行
local diff0_`j' = D0[1,`j']
第670行
mat D[`j',1] = diff
暂元`j',一会儿是矩阵D的行,一会儿又是矩阵D0的列,而且这两个矩阵D和D0的行和列又不相等,这不知如何解释?
4.  第674行
* diff1-diff2 对应 tobin, cflow 的系数差异
diff1代表什么?矩阵的第一行、第一列?还是变量、向量的什么?diff1-diff2又是什么意思?两公司同一变量相减cf1-cf2?还是同一家公司两变量相减TQ1-cf1?为什么打星号?
谢谢连老师!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:返回值 relationship Investment relations financial Investment Journal between 论文 如何

arlionn 在职认证  发表于 2013-12-18 09:01:39 |显示全部楼层 |坛友微信交流群
这些内容在 Stata 初级视频中有详细讲解。

1. 第649行
global cflow_diff0 = D0[1,2]  // cflow 的真实系数差异
cflow_diff0 究竟是什么?矩阵、变量、向量等,如何在屏幕上显示?
A:  是全局暂元,内容为 D0 矩阵第 1 行第二列上的元素。
详情参见 help macro ;  help matrix

2. 第658行
dis _c "."
_c 又是什么?矩阵、变量、向量等,它又是怎么来的?是stata中的命令吗?
A:  help display

视频中您说,它的作用是每估计一轮就打个点,这个点与第655行
mat D = J(`reps', `c', .)    // 存储结果的矩阵
矩阵中的点是否是同一个点?我理解不是,这个点是每循环一次打一个点,如果这样,难道这两条命令相互不会干扰吗?
视频中您又说,在行上打点,否则在列上打点,这个功能又是由什么命令来执行的?_c 吗?_c 究竟有多少个意思?
A:  help matrix function. J(a,b,c) 是 Stata 中的矩阵函数,用于定义个常数矩阵,a 表示行数,b 表示列数,c 表示每个单元格的元素取值。在上例中,c = . ,也就是说生成的 D 矩阵是一个空白矩阵,随后要往里面记录数值。

3. 第678行
qui count if (diff`j'>=`diff0_`j'')&(diff`j'!= .)
这条命令中有两个暂元`j',它们代表的意思相同吗?
我理解不同:
diff`j'表示随机抽样100次产生的100个系数差异值;而diff0_`j'则表示真实的系数差异,只有1个值。它们难道不相互干扰吗?
A:  diff 和 diff0 分别表示 BS 得到的系数差异和真是差异。j 表示第 j 个变量。模型中包含多个解释变量,我们需要依次检验每个变量的组间系数差异。

第677行
local diff0_`j' = D0[1,`j']
第670行
mat D[`j',1] = diff
暂元`j',一会儿是矩阵D的行,一会儿又是矩阵D0的列,而且这两个矩阵D和D0的行和列又不相等,这不知如何解释?
A:  help local。local 称为暂元,只在某个循环中才起作用。就好像山东省的省长和广东省的省长在当地都叫省长,但并不会导致混淆,因为都是在特定的省份内称呼的。
这也是 stata 初级视频中的内容。

4.  第674行
* diff1-diff2 对应 tobin, cflow 的系数差异
diff1代表什么?矩阵的第一行、第一列?还是变量、向量的什么?diff1-diff2又是什么意思?两公司同一变量相减cf1-cf2?还是同一家公司两变量相减TQ1-cf1?为什么打星号?
A:  星号开头的行都是注释语句,stata 初级视频中讲过。
diff1 和 diff2 都是变量名称,是从矩阵转换而来的。help svmat。

最后,我建议你好好补一下 stata 基础知识,尤其是 Stata 初级视频的内容,否则会事倍功半,欲速不达。



谢谢连老师!

使用道具

thomashyb 学生认证  发表于 2013-12-18 23:06:57 |显示全部楼层 |坛友微信交流群
连老师:
您好!
我代表基础差的学生给您说一声:辛苦了!基础差反应慢的学生时常让老师很揪心。但,希望您不要放弃。
初级、高级、论文我都看过了,初级看了3次,可能是我智商有限,也可能是表述有问题。
1.
全局暂元global;暂元local;
在问问题之前我看过 help macro ;  help matrix,
global assigns strings to specified global macro names (mnames).  local
    assigns strings to local macro names (lclnames).  Both double quotes ("
    and ") and compound double quotes (`" and "') are allowed; see quotes.
    If the string has embedded quotes, compound double quotes are needed.
还是有些疑问:
这二者怎么区别?
观察您的课件视频,似乎可以这样理解:
global xx "tobin cflow"
local gFC "g_FC"  
global可以定义很多变量;local只能定义一个。
而global cflow_diff0 = D0[1,2]  // cflow 的真实系数差异
说明global还可定义矩阵里的一个元素。
我只是这样经验地去理解,想得到您的验证。
2.
我看了 help display
_asis
        _skip(#)
        _column(#)
        _newline[(#)]
        _continue
        _dup(#)
        _request(macname)
        _char(#)
        ,
        ,,

而且我还看了例子,没有dis_c,只有dis_col的例子
      7. di _col(10) "myvar[1] = " myvar[1] _skip(10) "myvar[2] = " myvar[2]
      _c = _cotinue (对吗?)
_continue                         suppresses automatic newline at end of
                                        display command
这段英文怎么理解?

您解释的常数矩阵的基本知识我知道,我问的是
常数矩阵中的点和dis _c ".",即每估计一轮打点,这两个点会干扰吗?毕竟655行和658行很近。
3.
A:  diff 和 diff0 分别表示 BS 得到的系数差异和真是差异。j 表示第 j 个变量。模型中包含多个解释变量,我们需要依次检验每个变量的组间系数差异。
j 表示第 j 个变量。我理解 j 表示第 j 个观测值,因为第678行
qui count if (diff`j'>=`diff0_`j'')&(diff`j'!= .)
数一下BS 得到的系数差异大于真实差异的观测值的个数。
第二种理解:就是您说的,j 表示第 j 个变量
diff`j'>=`diff0_`j''
表示BS组第 j 个变量(如cflow)与真实组对应的第 j 个变量(如cflow)进行比较,数出这个变量 j 中的大于真实的观测值的个数。
A:  help local。local 称为暂元,只在某个循环中才起作用。就好像山东省的省长和广东省的省长在当地都叫省长,但并不会导致混淆,因为都是在特定的省份内称呼的。
这个您解释得很通俗,我想这也正是暂元的“暂”字的含义。
只是“local 称为暂元,只在某个循环中才起作用。” 暂元真的只在某个循环中才起作用吗?没有别的用途?
4.
星号的作用我明白,我的意思是
注释您习惯放在同一行,用//隔开,如661行
bysort year: gen gg = group(3) // 将样本随机等分为三组
又或者675行
mat P = J(2,2,.)  /*记录系数真实差异和实证P值的矩阵*/
当您用星号时,意思是备选方案,可以把星号去掉,改为另一种情况得到另一种结果,如第638、639行
*local gFC "qsize" // 采用公司规模分组,年度 FC 状态可变
*local gFC "gsize" // 采用公司规模分组,年度 FC 状态不可变
所以,我理解去掉星号,即去掉第674行的星号,那会得到一个什么结果?

help svmat 我看过,
svmat takes a matrix and stores its columns as new variables.  It is the
    reverse of the mkmat command, which creates a matrix from existing
    variables.
我的问题是
第670行 mat D[`j',1] = diff 和第673行 svmat D, names(diff)
这两个矩阵D是同一个矩阵吗?
我现在才明白
第670行 mat D[`j',1] = diff 和第672行mat list D
两个D矩阵不同,
第670行 mat D[`j',1] = diff 只有一列;而第672行mat list D却有12列,
这就解释了
diff1指后一个矩阵的第一列变成的向量(Tobin);diff2指后一个矩阵的第二列变成的向量(Cflow)。
上次问问题时,我把D矩阵当成前一个矩阵,只有一列,怎么会变成2列的向量diff1、diff2呢?
谢谢连老师!

使用道具

arlionn 在职认证  发表于 2013-12-19 20:21:10 |显示全部楼层 |坛友微信交流群
1.
全局暂元global;暂元local;
在问问题之前我看过 help macro ;  help matrix,
global assigns strings to specified global macro names (mnames).  local
    assigns strings to local macro names (lclnames).  Both double quotes ("
    and ") and compound double quotes (`" and "') are allowed; see quotes.
    If the string has embedded quotes, compound double quotes are needed.
还是有些疑问:
这二者怎么区别?
观察您的课件视频,似乎可以这样理解:
global xx "tobin cflow"
local gFC "g_FC"  
global可以定义很多变量;local只能定义一个。
而global cflow_diff0 = D0[1,2]  // cflow 的真实系数差异
说明global还可定义矩阵里的一个元素。
我只是这样经验地去理解,想得到您的验证。
     A: 中国银行总行的行长和广东分行的行长都叫行长,前者在各个分行中下的命令都有用,但后者只在广东省内有用。
     global 相当于前者,local 相当于后者。二者都可以放很多东西,比如变量名称,数字,文字,矩阵的元素(其实就是一个常数),差别仅在于作用范围不同。
     我在初级视频 A5_prog 中对此问题进行了非常细致的讲解,建议你再看看视频。

2.
我看了 help display
_asis
        _skip(#)
        _column(#)
        _newline[(#)]
        _continue
        _dup(#)
        _request(macname)
        _char(#)
        ,
        ,,

而且我还看了例子,没有dis_c,只有dis_col的例子
      7. di _col(10) "myvar[1] = " myvar[1] _skip(10) "myvar[2] = " myvar[2]
      _c = _cotinue (对吗?)
_continue                         suppresses automatic newline at end of  display command
这段英文怎么理解?
     A: 不断行。也就是说后续的文字接着上一行的末尾呈现。就好像你在 word 里写东西从来不打回车一样。

您解释的常数矩阵的基本知识我知道,我问的是
常数矩阵中的点和dis _c ".",即每估计一轮打点,这两个点会干扰吗?毕竟655行和658行很近。
     A: 不会互相干扰。dis _c "." 中的点只在这一行起作用。矩阵定义中的点也只影响矩阵中的元素。比如,你家里放一台电脑,办公室放一台同样的电脑,这两个电脑会互相影响吗?

3.
A:  diff 和 diff0 分别表示 BS 得到的系数差异和真是差异。j 表示第 j 个变量。模型中包含多个解释变量,我们需要依次检验每个变量的组间系数差异。
j 表示第 j 个变量。我理解 j 表示第 j 个观测值,因为第678行
qui count if (diff`j'>=`diff0_`j'')&(diff`j'!= .)
数一下BS 得到的系数差异大于真实差异的观测值的个数。
第二种理解:就是您说的,j 表示第 j 个变量
diff`j'>=`diff0_`j''
表示BS组第 j 个变量(如cflow)与真实组对应的第 j 个变量(如cflow)进行比较,数出这个变量 j 中的大于真实的观测值的个数。
     A: 第二种理解对。

A:  help local。local 称为暂元,只在某个循环中才起作用。就好像山东省的省长和广东省的省长在当地都叫省长,但并不会导致混淆,因为都是在特定的省份内称呼的。
这个您解释得很通俗,我想这也正是暂元的“暂”字的含义。
只是“local 称为暂元,只在某个循环中才起作用。” 暂元真的只在某个循环中才起作用吗?没有别的用途?
     A: 只是说了一种情况,其他的一些应用都在 Stata 初级 A5_prog 中有详细讲解。

4.
星号的作用我明白,我的意思是
注释您习惯放在同一行,用//隔开,如661行
bysort year: gen gg = group(3) // 将样本随机等分为三组
又或者675行
mat P = J(2,2,.)  /*记录系数真实差异和实证P值的矩阵*/
当您用星号时,意思是备选方案,可以把星号去掉,改为另一种情况得到另一种结果,如第638、639行
*local gFC "qsize" // 采用公司规模分组,年度 FC 状态可变
*local gFC "gsize" // 采用公司规模分组,年度 FC 状态不可变
所以,我理解去掉星号,即去掉第674行的星号,那会得到一个什么结果?
     A: 注释语句有三种标注方式: /* */, *, //。
    视频里我会经常用 * 提供多种备选方案,因为它最简洁。
    我在初级视频中也讲解过三者的区别。

help svmat 我看过,
svmat takes a matrix and stores its columns as new variables.  It is the
    reverse of the mkmat command, which creates a matrix from existing
    variables.
我的问题是
第670行 mat D[`j',1] = diff 和第673行 svmat D, names(diff)
这两个矩阵D是同一个矩阵吗?
     A: 是同一个矩阵。前面在定义矩阵中的元素,后面那一句把矩阵 D 转成了变量。

我现在才明白
第670行 mat D[`j',1] = diff 和第672行mat list D
两个D矩阵不同,
第670行 mat D[`j',1] = diff 只有一列;而第672行mat list D却有12列,
这就解释了
diff1指后一个矩阵的第一列变成的向量(Tobin);diff2指后一个矩阵的第二列变成的向量(Cflow)。
上次问问题时,我把D矩阵当成前一个矩阵,只有一列,怎么会变成2列的向量diff1、diff2呢
     A: mat D[`j', 1] = diff 的含义是,在矩阵 D 的第 j 行第 1 列处插入一个行向量 diff,diff 可以是 1*1 矩阵,也可以是 1*10 矩阵,没有关系。就好像你把光标放到一个 Excel 表格的第 1 行第 1 列处,可以贴入任何形状的长条矩阵。[`j', 1]  只是用来标明插入的位置而已。
     这些内容在 Stata 初级视频 A3_matrix 中有详细讲解。

使用道具

thomashyb 学生认证  发表于 2013-12-19 21:24:34 |显示全部楼层 |坛友微信交流群
问题总是在相互纠结中慢慢厘清,谢谢连老师!

使用道具

arlionn 在职认证  发表于 2013-12-22 10:10:01 |显示全部楼层 |坛友微信交流群
罗马非一日建成……呵呵,fighting

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 08:12