创建 "concord" 个结果的矩阵
Creating matrix of "concord" results
我有 400 行和 40 列的矩阵。
我想根据这些数据创建一个新矩阵,在其中计算 2 个变量之间的一致性,即 concord [A1,B1]=number1;协和 [A1,B2]=数字 2; [A1,B39]=数字 39。因此,number1 现在应该是新矩阵第一行的第一个数字;数字 2 是第一行中的第二个数字....
最终结果是一个新矩阵,显示原始数据矩阵中每对数字的 rho_c。
原始矩阵有很多空单元格。我还可以创建索引计算子部分的多个矩阵,这无关紧要。不过我不太明白这个命令在mata里怎么写。
我在这里搜索过:http://jasoneichorst.com/wp-content/uploads/2012/01/BeginMatrix.pdf
编辑:数据看起来像这样(变量 "Score1" 是评分者)。并非所有评分者都对同一项目进行评分。
enter image description here
假设我完全理解这个问题,有一些方法可以做到这一点。想到的一个涉及使用 SSC (ssc install concord
) 提供的 concord
以及一些本地宏和循环。
/* Clear and set up sample data */
clear *
set obs 60
forvalues i = 1/6 {
gen A`i' = runiform()
}
replace A2 = . in 10/L
replace A3 = . in 1/5
replace A3 = . in 20/L
replace A4 = . in 1/20
replace A4 = . in 30/L
replace A5 = . in 1/15
replace A5 = . in 40/L
replace A6 = . in 1/40
/* End data set-up */
* describe, varlist will allow you to store your variables in a local macro
qui describe, varlist
local vars `r(varlist)'
* get number of variables in local macro vars
local varcount : word count `vars'
* Create a matrix to hold rho_c
mat rho = J(6,6,.)
mat rownames rho = `vars'
mat colnames rho = `vars'
* Loop through vars to run concord on all unique combinations of A1-A6
* using the position of each variable in local vars to assign the var name
* to local x and local y
* concord is executed only for j >= i so that you don't end up with two sets
* of the same variables being ran (eg., A1,A2 and A2,A1)
forvalues i = 1/`varcount' {
local y `: word `i' of `vars''
forvalues j = 1/`varcount' {
local x `: word `j' of `vars''
if `j' >= `i' {
capture noisily concord `y' `x'
mat rho[`i',`j'] = r(rho_c)
}
}
}
* Display the results stored in the matrix, rho.
mat list rho
上面的代码应该可以帮助您入门,但可能需要根据您想要执行的操作进行更改。
您会注意到在循环内部,我在 concord
之前包含了 capture noisily
。这样做的原因是因为在您链接到的图像中,您的变量在整个观察部分都缺少值。这可能会导致抛出错误消息(具体来说,r(2000): no observations)。如果出现错误,capture
部分会强制 Stata 继续执行循环。 noisily
部分告诉 Stata 显示 concord
的输出,即使指定了 capture
也是如此。
此外,如果您在 Stata 中搜索 help concord
,您将被引导至帮助页面,该页面表明相关系数存储在 r(rho_c)
中。您可以将它们作为单独的标量存储在循环内,或者像示例中那样创建一个 kxk 值矩阵。
我有 400 行和 40 列的矩阵。
我想根据这些数据创建一个新矩阵,在其中计算 2 个变量之间的一致性,即 concord [A1,B1]=number1;协和 [A1,B2]=数字 2; [A1,B39]=数字 39。因此,number1 现在应该是新矩阵第一行的第一个数字;数字 2 是第一行中的第二个数字....
最终结果是一个新矩阵,显示原始数据矩阵中每对数字的 rho_c。
原始矩阵有很多空单元格。我还可以创建索引计算子部分的多个矩阵,这无关紧要。不过我不太明白这个命令在mata里怎么写。
我在这里搜索过:http://jasoneichorst.com/wp-content/uploads/2012/01/BeginMatrix.pdf
编辑:数据看起来像这样(变量 "Score1" 是评分者)。并非所有评分者都对同一项目进行评分。 enter image description here
假设我完全理解这个问题,有一些方法可以做到这一点。想到的一个涉及使用 SSC (ssc install concord
) 提供的 concord
以及一些本地宏和循环。
/* Clear and set up sample data */
clear *
set obs 60
forvalues i = 1/6 {
gen A`i' = runiform()
}
replace A2 = . in 10/L
replace A3 = . in 1/5
replace A3 = . in 20/L
replace A4 = . in 1/20
replace A4 = . in 30/L
replace A5 = . in 1/15
replace A5 = . in 40/L
replace A6 = . in 1/40
/* End data set-up */
* describe, varlist will allow you to store your variables in a local macro
qui describe, varlist
local vars `r(varlist)'
* get number of variables in local macro vars
local varcount : word count `vars'
* Create a matrix to hold rho_c
mat rho = J(6,6,.)
mat rownames rho = `vars'
mat colnames rho = `vars'
* Loop through vars to run concord on all unique combinations of A1-A6
* using the position of each variable in local vars to assign the var name
* to local x and local y
* concord is executed only for j >= i so that you don't end up with two sets
* of the same variables being ran (eg., A1,A2 and A2,A1)
forvalues i = 1/`varcount' {
local y `: word `i' of `vars''
forvalues j = 1/`varcount' {
local x `: word `j' of `vars''
if `j' >= `i' {
capture noisily concord `y' `x'
mat rho[`i',`j'] = r(rho_c)
}
}
}
* Display the results stored in the matrix, rho.
mat list rho
上面的代码应该可以帮助您入门,但可能需要根据您想要执行的操作进行更改。
您会注意到在循环内部,我在 concord
之前包含了 capture noisily
。这样做的原因是因为在您链接到的图像中,您的变量在整个观察部分都缺少值。这可能会导致抛出错误消息(具体来说,r(2000): no observations)。如果出现错误,capture
部分会强制 Stata 继续执行循环。 noisily
部分告诉 Stata 显示 concord
的输出,即使指定了 capture
也是如此。
此外,如果您在 Stata 中搜索 help concord
,您将被引导至帮助页面,该页面表明相关系数存储在 r(rho_c)
中。您可以将它们作为单独的标量存储在循环内,或者像示例中那样创建一个 kxk 值矩阵。