查找特定列中的最小值和矩阵中相应的行号
Posted
技术标签:
【中文标题】查找特定列中的最小值和矩阵中相应的行号【英文标题】:Find minimum in specific column and the corresponding row number in a matrix 【发布时间】:2015-11-03 09:49:18 【问题描述】:我正在尝试找到一种方法来查找 Stata 中矩阵的特定(始终相同)列中的最小值,然后让它给我相应元素的行号。
【问题讨论】:
你尝试了什么代码?这是暗示的,Stata 矩阵而不是数据集吗? 是的,它是Stata矩阵。我使用varsoc
命令,然后使用matrix list r(stats)
以矩阵形式获取结果。我不确定如何从那里继续。
【参考方案1】:
这里有一些技巧。请注意,通常一列中的最小值或最大值可能出现在一行或多行中。
. webuse lutkepohl2
(Quarterly SA West German macro data, Bil DM, from Lutkepohl 1993 Table E.1)
. varsoc dln_inv dln_inc dln_consump
Selection-order criteria
Sample: 1961q2 - 1982q4 Number of obs = 87
+---------------------------------------------------------------------------+
|lag | LL LR df p FPE AIC HQIC SBIC |
|----+----------------------------------------------------------------------|
| 0 | 696.398 2.4e-11 -15.9402 -15.9059 -15.8552* |
| 1 | 711.682 30.568 9 0.000 2.1e-11 -16.0846 -15.9477* -15.7445 |
| 2 | 724.696 26.028 9 0.002 1.9e-11* -16.1769* -15.9372 -15.5817 |
| 3 | 729.124 8.8557 9 0.451 2.1e-11 -16.0718 -15.7294 -15.2215 |
| 4 | 738.353 18.458* 9 0.030 2.1e-11 -16.0771 -15.632 -14.9717 |
+---------------------------------------------------------------------------+
Endogenous: dln_inv dln_inc dln_consump
Exogenous: _cons
. matrix li r(stats)
r(stats)[5,9]
lag LL LR df p FPE
r1 0 696.39806 .b .b .b 2.398e-11
r2 1 711.68216 30.568191 9 .00035098 2.076e-11
r3 2 724.69624 26.02817 9 .00202142 1.894e-11
r4 3 729.12407 8.8556522 9 .45070419 2.109e-11
r1 4 738.35331 18.458484 9 .03021188 2.105e-11
AIC HQIC SBIC
r1 -15.940185 -15.905946 -15.855154
r2 -16.084647 -15.947689 -15.744522
r3 -16.176925 -15.937249 -15.581706
r4 -16.071818 -15.729423 -15.221505
r1 -16.077088 -15.631974 -14.971681
. mata
------------------------------------------------- mata (type end to exit) -----
: stats = st_matrix("r(stats)")
: select((1::rows(stats)), (stats[,7] :== colmax(stats[,7])))
1
: select((1::rows(stats)), (stats[,9] :== colmax(stats[,9])))
5
【讨论】:
首先非常感谢您!但是我从来没有让它以我需要的方式工作。我现在找到了一种方法来编写我需要做的事情,但它不会循环工作。我想知道你是否可以给我一些改变的建议?【参考方案2】:她是我目前所拥有的。我知道可能有更好的编码方式,但我现在能做的就是这些。
foreach c of local gracauseloop
varsoc rppi_chst `c' , maxlag(5)
matrix A = r(stats)
svmat A, name(col)
drop lag LL LR df p FPE AIC HQIC
egen minSB = min (SBIC)
egen lags = fill(0 1 2 3 4 5)
gen varlag = lags if minSB == SBIC
egen lag = total(varlag)
local vlag "lag"
var rppi_chst `c' , lags(1/`vlag')
vargranger
clear matrix
drop SBIC minSB lags varlag lag
【讨论】:
不是独立的或可重现的。请看***.com/help/mcve以上是关于查找特定列中的最小值和矩阵中相应的行号的主要内容,如果未能解决你的问题,请参考以下文章