楼主: hiderm
2349 5

[编程问题求助] [已解决] 如何引用e-class return(向量)中的各个元素? [推广有奖]

已卖:5227份资源

院士

59%

还不是VIP/贵宾

-

威望
1
论坛币
59505 个
通用积分
4044.5148
学术水平
253 点
热心指数
332 点
信用等级
219 点
经验
76220 点
帖子
2202
精华
1
在线时间
2767 小时
注册时间
2006-6-3
最后登录
2025-9-20

楼主
hiderm 发表于 2019-7-20 00:10:58 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
问题背景:在因子分析的估计结果(参见图01)中, 第二列是各个因子的特征值(Eigenvalue),这一列的数值被保存在e级返回值矩阵中 e(Ev) :  1 x 12

问题目标:想利用局部暂元local和forvalues循环语句将所有因子的特征值加总求和

问题关键:如何在定义局部暂元时以及循环语句中引用 e(Ev)  中的元素

补充说明:我知道返回值中有 e(evsum),只是想自己编程计算一下。

命令如下:
. use https://stats.idre.ucla.edu/stat/stata/output/m255, clear

.   factor item13-item24, ipf factor(3)
    //ipf: iterated principal factor 采用迭代的主因子分析法
    //factor(3): 要保留的因子的最大个数


*图01:因子分析结果
因子分析结果.png

. matrix list  e(Ev)  //显示特征值向量
*图02:特征值向量
特征值向量.png


* 目标:利用e(Ev) 进行特征值加总求和
* 以下命令不成功,主要原因是自己不知如何引用e(Ev)中的元素
* 标红之处就是错误的引用,也是向各位老师和坛友求助之处

. local SEV _b[Factor1:Eignvalue]
. forvalues i = 2/12 {
     local SEV `SEV' + _b[Factor`i':Eignvalue]
  }
. scalar define Ev_sum = `SEV'
. dis "sum(Ev) = " Ev_sum

解决方法01:参见三楼(藤椅)坛友 @heric221 利用mata语言的方案;


解决方法02:参见四楼(板凳)我查阅 factor.ado 文件中的代码所模仿的方案;




二维码

扫码加我 拉你入群

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

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


回帖推荐

heric221 发表于3楼  查看完整内容

[b][color=Red]提请应助者注意:请不要上传draft或者wp版本,谢谢!因为这些版本我自己用谷歌搜索就可以搜到并免费下载

沙发
hiderm 发表于 2019-7-20 00:16:25
希望坛友们能够不吝赐教!
在这里先谢谢大家!
[b][color=Red]提请应助者注意:请不要上传draft或者wp版本,谢谢!因为这些版本我自己用谷歌搜索就可以搜到并免费下载

藤椅
heric221 在职认证  发表于 2019-7-20 08:53:46
  1. // 加总求和:返回最终值
  2. matrix coef=e(Ev)
  3. mata : st_matrix("C", rowsum(st_matrix("coef")))
  4. matrix list C
  5. // 加总求和:返回每次求和结果
  6. mata : st_matrix("B",runningsum(st_matrix("coef")))
  7. matrix list B
复制代码

已有 1 人评分学术水平 热心指数 收起 理由
hiderm + 5 + 5 非常感谢您的热情帮助!

总评分: 学术水平 + 5  热心指数 + 5   查看全部评分

板凳
hiderm 发表于 2019-7-20 21:14:25
通过查阅 "factor.ado" 文件的内容,还可以直接指定矩阵中的元素 X[i, j]方式来引用特征值向量e(Ev)中的元素,
完整的命令如下:
  1.   clear *  //清空内存
  2.   use https://stats.idre.ucla.edu/stat/stata/output/m255, clear  //调用数据
  3.   
  4.   factor item13-item24, ipf factor(3)
  5.   //因子分析
  6.   //ipf: iterated principal factor 迭代的主因子分析法
  7.   //factor(3): 要保留的因子的最大个数
  8.   
  9.   ereturn list  //显示返回值列表
  10.   display "e(evsum) = "e(evsum)   //显示Stata计算的特征值之和
  11.   matrix list e(Ev)                            //显示Stata计算的特征值向量
  12.   
  13.   matrix EV = e(Ev)   //新生成矩阵EV, 其内容 = e(Ev)
  14.   scalar ev_sum = 0  //令单值 ev_sum 的初始值为 0
  15.   forvalues j = 1 / `=colsof(EV)' {
  16.           scalar ev_sum = ev_sum + EV[1,`j']
  17.   }
  18.   dis "sum(eigenvalue) = " ev_sum
复制代码

   显示结果与Stata的计算结果 evsum 的取值相同sum(eigenvalue) = 7.019784

  可以发现,坛友 @heric221 的mata方案更为简捷。
  

[b][color=Red]提请应助者注意:请不要上传draft或者wp版本,谢谢!因为这些版本我自己用谷歌搜索就可以搜到并免费下载

报纸
heric221 在职认证  发表于 2019-7-21 08:15:30
hiderm 发表于 2019-7-20 21:14
通过查阅 "factor.ado" 文件的内容,还可以直接指定矩阵中的元素 X方式来引用特征值向量e(Ev)中的元素,
完 ...
你这思路更有一般性

地板
hiderm 发表于 2019-7-21 09:30:42
heric221 发表于 2019-7-21 08:15
你这思路更有一般性
呵呵,我是相当于翻标准答案抄的高仿版。

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-1 12:49