创建“一致”结果矩阵

时间:2015-12-22 17:59:16

标签: matrix stata matrix-multiplication

我有400行40列的矩阵。

我想从这个数据创建一个新矩阵,我计算2个变量之间的一致性,即concord [A1,B1] = number1; concord [A1,B2] = number2; [A1,B39] = number39。所以,number1现在应该是新矩阵第一行的第一个数字;数字2是第一行中的第二个数字....

最终结果是一个新矩阵,显示原始数据矩阵中每对数字的rho_c。

原始矩阵有很多空单元格。我还可以创建多个一致性计算子矩阵,这没关系。但是,我不太明白如何在mata中编写这个命令。

我在这里搜索过:http://jasoneichorst.com/wp-content/uploads/2012/01/BeginMatrix.pdf

编辑:数据看起来像这样(变量“Score1”是评价者)。并非所有评估者对同一项目评分。 enter image description here

1 个答案:

答案 0 :(得分:1)

假设我完全理解这个问题,有一些方法可以做到这一点。想到的一个问题涉及使用SSC(concord)提供的ssc install 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

上面的代码可以帮助您入门,但可能需要根据您的具体操作进行更改。

您会注意到,在循环内部,我在capture noisily之前添加了concord。这样做的原因是因为在您链接的图像中,您的变量在整个观察部分中都缺少值。这可能会导致抛出错误消息(具体来说,r(2000):没有观察)。如果在那里发生错误,capture块会强制Stata继续执行循环。 noisily部分告诉Stata显示concord的输出,即使指定了capture

此外,如果您在Stata中搜索help concord,您将被引导至帮助页面,该页面指示一致性相关系数存储在r(rho_c)中。您可以将它们作为单个标量存储在循环中,或者像在示例中那样存储,并创建一个kxk值矩阵。