У меня есть файл данных, в котором есть N = 428 предметов, каждый из которых отвечает на те же 8 вопросов. Это выглядит следующим образом:MATLAB: Эффективный способ вычисления матрицы ковариации по этим данным
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.
н выбрать к уникальных ковариации должны быть вычислены, которые я работаю, чтобы быть 91378 тотальным.
Как я могу эффективно достичь этого?
EDIT: Использование кода из @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) = ковариация (j, i) – macroland
Вы предлагаете взять среднее значение всех 8 × 428 = 3424 баллов, что составляет 32,64. Затем я беру для строки один 42-32,64 и квадрат, и делаю то же самое для всех строк. Как я могу исходить из этой точки? – user1205197
Я немного смущен, почему бы не использовать функцию ковариантности Matlab (cov (A, B)) для ковариации для каждого предмета? – GameOfThrows