创建 "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 值矩阵。