【发布时间】:2015-10-19 21:00:58
【问题描述】:
我有一个数据文件,其中有 N=428 个受试者,每个受试者回答相同的 8 个问题。它看起来像这样:
question subject score
1 1 42
2 1 12
3 1 13
4 1 43
5 1 22
6 1 43
7 1 54
8 1 66
1 2 41
2 2 11
... ... ...
我想计算并存储一个反映每个科目分数的协方差矩阵。
所以单元格 (1,1) 具有主题 1 的方差。那么单元格 (1,2) 和 (2,1) 将具有相同的值,即主题 1 和主题 2 之间的协方差。虽然在上表中您看不到主题 2 的所有数据,但看起来它们与主题 1 会有一些正协方差。
n 选择 k 必须计算唯一的协方差,我算出总共是 91378。
我怎样才能有效地做到这一点?
编辑:使用来自@GameOfThrows 的代码,我能够使用循环获得工作版本:
crowd_cov = NaN(428,428);
for i = 1:length(allpairs)
Z = cov(score(indexSub1(i,1):indexSub1(i,2)),score(indexSub2(i,1):indexSub2(i,2)));
first = allpairs(i,1);
second = allpairs(i,2);
crowd_cov(first,first) = Z(1,1);
crowd_cov(second,second) = Z(2,2);
crowd_cov(first,second) = Z(1,2);
crowd_cov(second,first) = Z(2,1);
end
对此我很满意,尽管我仍然欢迎解释如何更有效地编码。
【问题讨论】:
-
查找并存储每列的平均值,然后取每个条目与相应列平均值之间的平方差。还要记住,在你的协方差矩阵中,协方差 (i,j) = covariance(j,i)
-
你建议我取所有 8×428 = 3424 分数的平均值,也就是 32.64。然后我取第一行 42-32.64 并将其平方,并对所有行执行相同操作。我该如何从那一点开始?
-
我有点迷茫,为什么不用Matlab协方差函数(cov(A,B))对每个科目做协方差?
-
我打算这样做,但我想知道在我的数据矩阵设置下如何最好地应用该函数。
标签: matlab covariance