Excel: решить стандартное отклонение разницы между массивами (средние значения по нескольким столбцам) - PullRequest
0 голосов
/ 19 января 2019

У меня есть матрица:

A   B   C   D   E   F
4   10  2   2   1   1
            3   7   9
2   6   6           
2       10  2   0   4
2   0   1       6   5

2   6   4   5   0   6
3               8   
5   1   10  2   2   8

Я хочу найти стандартное отклонение (STDEV.S) построчных различий между средними значениями столбцов A: C и D: F.Критически, я хочу рассчитать это только для строк, которые имеют полные записи в столбцах A: C и D: F (например, без пробелов).

В этом примере стандартное отклонение будет равно 1,9.Давайте разберемся с этим.Сначала мы определяем среднечисленное значение для столбцов A: C и D: F (см. Столбцы G и H ниже).Обратите внимание, что это было рассчитано только для строк 1, 7 и 9, потому что они являются единственными строками, которые содержат полные данные в столбцах A: F:

A   B   C   D   E   F   G   H
4   10  2   2   1   1   5.3 1.3
            3   7   9       
2   6   6                   
2       10  2   0   4       
2   0   1       6   5       

2   6   4   5   0   6   4   3.7
3               8           
5   1   10  2   2   8   5.3 4

Затем мы берем разность строк между столбцами.G и H (см. Столбец I):

A   B   C   D   E   F   G   H   I
4   10  2   2   1   1   5.3 1.3 4
            3   7   9           
2   6   6                       
2       10  2   0   4           
2   0   1       6   5           

2   6   4   5   0   6   4   3.7 0.3
3               8               
5   1   10  2   2   8   5.3 4   1.3

И, наконец, вычислите стандартное отклонение столбца I, которое составляет 1,9.

Я стремлюсь достичь этого в формуле одного массива.Я уже пытался выполнить следующее, но не смог:

Попытка 1:

{=STDEV.S(AVERAGE(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:A1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))))))-(AVERAGE(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))))))}

Результат # DIV / 0!предупреждение после ввода с помощью Ctrl + Shift + Enter

Попытка 2:

Я успешно вычислил стандартное отклонение разницы между двумя столбцами (а не двумя усредненными столбцами), используя следующую формулу (в этомв этом случае нас интересует SD разницы между столбцами A и B):

{=STDEV(IF(A1:A9<>"",IF(B1:B9<>"",A1:A9-B1:B9)))}

Я сам не смог адаптировать этот код, но, возможно, кто-то может найти его полезным.

Любые предложения будут с благодарностью.

1 Ответ

0 голосов
/ 20 января 2019

Основная проблема заключается в том, что вы используете SUBTOTAL (1 ..., чтобы получить среднее значение для столбцов AC и отдельно для столбцов DF, но затем также используете AVERAGE, чтобы получить среднее значение для средних значений - слишком далеко. Результат это то, что вы пытаетесь взять stdev одного числа, которое дает вам # DIV / 0!

Если вы достанете их и сделаете пару небольших корректировок, вы получите

=STDEV.S(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))))-IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1))))))

с результатом 1.3. Почему это неправильный ответ? К сожалению, когда вы получаете пустую ячейку в полях AC или DF, ваши операторы If оцениваются как FALSE, и в некоторых случаях вы получаете FALSE-FALSE, который оценивается как 0 и дает числовое значение, которое включено в STDEV и дает неправильное значение. результат.

Вы можете решить эту проблему, переформулировав формулу словами

If first block is complete
    If second block is complete
        Calculate and subtract means
Take Stdev of result

, что дает

=STDEV.S(
IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),
     IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),
          SUBTOTAL(1,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))-SUBTOTAL(1,OFFSET(D1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(D1:F1)))))
)
...