Comment calculer la moyenne cumulative pour certains nombres?

Compte de vote: 5

Je voudrais savoir comment calculer la moyenne cumulative pour certains nombres. Je vais donner un exemple simple pour décrire ce que je recherche.

J'ai les numéros suivants

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

Si je fais la moyenne de ces chiffres, j'en obtiendrai 3.

Maintenant, comment faire la moyenne cumulée de ces nombres.

édité le 26 juin 17 à 13:36
Ronak Shah
demandé le 17 juin 12 à 20:46
M. Big

7 réponses

Compte de vote: 14

Par analogie avec la somme cumulative d'une liste, je propose ceci:La moyenne cumulative avg d'un vecteur X contiendrait les moyennes de la 1ère position jusqu'à la position je.

Une méthode consiste simplement à calculer la moyenne de chaque position en faisant la somme de toutes les valeurs précédentes et en divisant par leur nombre.

En réécrivant la définition de la moyenne arithmétique en tant que récursif formule. On obtient

avg (1) = x (1)

et

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

L'évaluation de cette expression pour chaque élément de votre vecteur (ou liste, tableau à une dimension ou comme vous l'appelez) vous donne la moyenne cumulative.

Cette méthode récursive est utile si vous devez calculer une moyenne sur des entiers très grands ou très nombreux et que cela se produirait si vous deviez stocker leur somme cumulée.

Exemple

Dans ton exemple

1, 2, 3, 4, 5

on a

1, 1.5, 2, 2.5, 3
édité le 29 juillet 13 à 8:28
26 juillet 13 à 13:33
Marius

Compte de vote: 7

Il suffit de garder une somme cumulée des nombres et de les compter.La moyenne est juste la somme sur le compte.

répondu 17 juin 12 à 20:48
Mike Dunlavey

Compte de vote: 6

Comment créer une moyenne cumulative en R?Ans:Cette réponse a été fournie par Jim Holtman jholtman@gmail.comIl utilise le cumsum () la fonction et la seq_along () fonction donc lire sur ceux-ci. Mais le code fourni le rend clair. 6, 6 + 16, 6 + 16 + 8 et ainsi de suite

 x <- échantillon (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
8 août 14 à 19h35
dxander

Compte de vote: 4

La question indique un grave manque de recherche mais je n'ai pas encore assez de réputation pour voter la question. Si je comprends la question correctement, ce qui est désiré est le moyenne mobile cumulative.

Wikipedia décrit très clairement la moyenne mobile cumulative. Je ne suis pas autorisé à poster une image ici mais à suivre ce lien pour une formule simple (une moyenne pondérée de la moyenne précédente et de la nouvelle valeur).

répondu le 13 décembre 12 à 14:57
Jam560

Compte de vote: 1

C'est une vieille question et il y a eu beaucoup de changements depuis. Je viens de penser à le mettre à jour avec un dplyr répondre. dplyr a un Cummean fonction qui donne directement la moyenne cumulative du vecteur.

vec <- c (1, 2, 3, 4, 5)bibliothèque (dplyr)Cummean (vec)# [1] 1.0 1.5 2.0 2.5 3.0
répondu le 26 juin 17 à 13h34
Ronak Shah

Compte de vote: 0

mynum [1] 1 2 3 4 5

cumsum (mynum) / seq (de = 1 à = 5)

[1] 1.0 1.5 2.0 2.5 3.0

répondu le 22 mars 16 à 14:00
Ulysse Ithaca

Compte de vote: 0

J'ai fait une simple classe C ++.

#include <iostream>utiliser un espace de noms std;classe moyenne {Publique: Average (const double initVal = 0.0) {accumVal = initVal;} double getAverage (const double newVal) { accumVal + = newVal; retourne accumVal / ++ numAccumVal; } void clear (const double clearedVal = 0.0) { accumVal = clearedVal; numAccumVal = 0; }privé: double accumVal; unsigned int numAccumVal = 0;};int main (int argc, const char * argv []) { Moyenne avg; for (size_t i = 1; i <= 5; ++ i) {// alimenter 1 à 5 double résultat = avg.getAverage (i); cout << "Résultat:" << résultat << endl; // affiche le résultat } retourne 0;}

Et si vous exécutez le code, vous obtiendrez le résultat ci-dessous.

Résultat: 1Résultat: 1,5Résultat: 2Résultat: 2,5Résultat: 3Programme terminé avec le code de sortie: 0
répondu le 10 juillet 17 à 12:56
Zack Lee
4.5
Note utilisateur: 22
5
14
4
5
3
2
2
1
1
1