Рассчитать совокупное среднее (среднее)

Я хотел бы знать, как рассчитать совокупное среднее для некоторых чисел. Я приведу простой пример, чтобы описать то, что я ищу.

У меня есть следующие номера

vec <- c(1, 2, 3, 4, 5)

Если я сделаю среднее из этих чисел, я получу 3 в результате.

Теперь, как сделать кумулятивное среднее из этих чисел.

 ArtemStorozhuk17 июн. 2012 г., 23:18
Нет, вы не правы - прочитайте еще раз формулу.
 MR BIG17 июн. 2012 г., 23:26
Если вы имеете в виду это, Y2 (1) = Y (1) .......... Y2 (2) = (Y (1) + Y (2)) / 2 ........ . Y2 (3) = (Y (1) + Y (2) + Y (3)) / 3 ........ это даст нам обычное среднее или среднее значение.
 MR BIG17 июн. 2012 г., 23:14
Извините, дорогой, но то, что я только что понял, это то, что в ЭТОМ СЛУЧАЕ накопленное среднее равно обычному. Я прав ??

Ответы на вопрос(7)

cumsum(mynum)/seq(from=1, to=5)

[1] 1.0 1.5 2.0 2.5 3.0

#include <iostream>

using namespace std;

class Average {

public:
    Average(const double initVal=0.0){accumVal=initVal;}
    double getAverage(const double newVal) {

        accumVal += newVal;
        return accumVal / ++numAccumVal;
    }
    void clear(const double clearedVal=0.0) {

        accumVal = clearedVal;
        numAccumVal = 0;
    }
private:
    double accumVal;
    unsigned int numAccumVal=0;
};

int main(int argc, const char * argv[]) {

    Average avg;

    for (size_t i=1; i<=5; ++i) { //feed in 1 to 5

        double result = avg.getAverage(i);
        cout << "Result : " << result << endl; //print the result
    }
    return 0;
}

И если вы запустите код, вы получите результат, как показано ниже.

Result : 1
Result : 1.5
Result : 2
Result : 2.5
Result : 3
Program ended with exit code: 0

Ans: Этот ответ предоставил Джим Холтман [email protected] Он используетcumsum() функция иseq_along() Функция так что читайте на тех. Но предоставленный код проясняет ситуацию. 6, 6 + 16, 6 + 16 + 8 и т. Д.

   x <- sample(1:20)
    x
 # [1]  6 16  8  1 17 11  2 19 18  5 15 13  3 20  9 14  7 10 12  4

    cumsum(x) / seq_along(x)
 # [1]  6.000000 11.000000 10.000000  7.750000  9.600000  9.833333  8.714286
 #10.000000 10.888889 10.300000
 #[11] 10.727273 10.916667 10.307692 11.000000 10.866667 11.062500 10.823529
 #10.777778 10.842105 10.500000

и с тех пор произошло много изменений. Я просто думал обновить его сdplyr ответ.dplyr имеетcummean функция, которая непосредственно дает совокупное среднее значение вектора.

vec <- c(1, 2, 3, 4, 5)
library(dplyr)
cummean(vec)

#[1] 1.0 1.5 2.0 2.5 3.0

Накопительное среднееavg вектораx будет содержать средние от 1-й позиции до позицииi.

Один из методов - просто вычислить среднее значение для каждой позиции путем суммирования всех предыдущих значений и деления на их число.

Переписав определениесреднее арифметическое какrecursive формула. Один получает

avg(1) = x(1)

а также

avg(i) = (i-1)/i*avg(i-1) + x(i)/i;    (i > 1)

Оценка этого выражения для каждого элемента вашего вектора (или списка, одномерного массива или как вы его называете) дает вам совокупное среднее значение.

Этот рекурсивный метод удобен, если вам нужно вычислить среднее значение для очень большого или очень большого числа целых чисел, и вы столкнетесь с переполнением, если вам придется хранить их накопленную сумму.

Example

В вашем примере

1, 2, 3, 4, 5

мы получаем

1, 1.5, 2, 2.5, 3

но у меня еще недостаточно репутации, чтобы проголосовать за него. Если я правильно понимаю вопрос, то желательноcumulative moving average.

Википедия описывает накопительную скользящую среднюю очень четко. Мне не разрешено публиковать изображение здесь, но перейдите по этой ссылке для получения простой формулы (средневзвешенное значение предыдущего среднего и нового значения).

Среднее значение - это просто сумма за счет.

 MR BIG17 июн. 2012 г., 23:09
Извините, я хотел бы знать, как сделать кумулятивное среднее значение, а не обычное среднее.
 18 июн. 2012 г., 03:57
@MRBIG: скользящее среднее значение составляет 1/1, 3/2, 6/3, 10/4, 15/5 и т. Д., Если я полностью не понимаю, что вы имеете в виду под «кумулятивным средним»
 MR BIG17 июн. 2012 г., 23:22
Означает ли это, что в этом случае совокупное среднее значение должно быть 1? который прибыл из бегущей суммы чисел = 15, и бегущий счет также 15 ??
 17 июн. 2012 г., 23:16
Перечитайте ответ внимательно - @Mike D уже объяснил, как это сделатьcumulative средний.
 18 июн. 2012 г., 10:18
@ Майк Д: да, это все, что является совокупным средним значением, то есть это просто среднее значение, которое вы обновляете каждый раз, когда получаете новую точку данных.

Ваш ответ на вопрос