Comment calculer la moyenne, la variance, la médiane, l'écart type et le modus à partir de la distribution? Si je génère aléatoirement des nombres qui forment la distribution normale, j'ai spécifié la moyenne comme m=24.2
écart type sd=2.2
:
> dist = rnorm(n=1000, m=24.2, sd=2.2)
Ensuite, je peux faire ce qui suit:
Signifier:
> mean(dist)
[1] 24.17485
Variance:
> var(dist)
[1] 4.863573
Médian:
> median(dist)
[1] 24.12578
Écart-type:
> sqrt(var(dist))
[1] 2.205351
Mode alias Modus (tiré d' ici ):
> names(sort(-table(dist)))[1]
[1] "17.5788181686221"
- Est-ce là toute la magie, ou y a-t-il autre chose que je n'ai pas réalisé?
- Puis-je en quelque sorte visualiser ma distribution normale en forme de cloche avec des lignes verticales représentant (moyenne, médiane ...)?
- Que disent ces attributs sur la distribution?
PS: le code est en R
r
distributions
mean
Wakan Tanka
la source
la source
Réponses:
D'abord un commentaire général sur le mode:
Vous ne devez pas utiliser cette approche pour obtenir le mode de données (au moins théoriquement) distribuées en continu; il est peu probable que vous ayez des valeurs répétées (sauf si vous avez des échantillons vraiment énormes, ce serait un miracle mineur, et même alors, divers problèmes numériques pourraient le faire se comporter de manière quelque peu inattendue), et vous obtiendrez généralement la valeur minimale qui façon. Ce serait une façon de trouver l'un des modes globaux dans des données discrètes ou catégoriques, mais je ne le ferais probablement pas de cette façon même alors. Voici plusieurs autres approches pour obtenir le mode de données discrètes ou catégorielles:
Si vous voulez juste la valeur et non le nombre ou la position,
names()
l'obtiendrez de ceuxPour identifier les modes (il peut y avoir plus d'un mode local) pour les données continues de manière basique, vous pouvez regrouper les données (comme avec un histogramme) ou les lisser (en utilisant
density
par exemple) et essayer de trouver un ou plusieurs modes de cette façon.Moins de cases d'histogramme rendront votre estimation d'un mode moins sujet au bruit, mais l'emplacement ne sera pas plus précis que la largeur de la case (c'est-à-dire que vous n'obtiendrez qu'un intervalle). Plus de bacs peuvent permettre plus de précision dans un bac, mais le bruit peut le faire sauter à travers plusieurs de ces bacs; un petit changement dans l'origine du bac ou la largeur du bac peut produire des changements de mode relativement importants. (Il y a le même compromis biais-variance dans toutes les statistiques.)
Notez que
summary
cela vous donnera plusieurs statistiques de base.[Vous devez utiliser
sd(x)
plutôt quesqrt(var(x))
; c'est plus clair pour une chose]-
Pour q.2 oui; vous pouvez certainement afficher la moyenne et la médiane des données sur un écran tel qu'un histogramme ou un diagramme à boîte. Voir ici pour quelques exemples et du code que vous devriez pouvoir généraliser à tous les cas dont vous avez besoin.
la source
Quelques statistiques descriptives supplémentaires et peu connues.
Je suis sûr que vous pouvez en trouver beaucoup d'autres dans l'un de ces
R
manuels disponibles gratuitement .la source
Comme l'a décrit @Glen_b, le mode d'une distribution continue n'est pas aussi simple que pour un vecteur d'entiers.
Ce code R obtiendra le mode pour une distribution continue, en utilisant la
hist()
fonction incroyablement utile de la base R. Comme @Glen_b l'a décrit, cela implique de mettre des observations dans des bacs - des catégories discrètes où si l'observation tombe dans l'intervalle de bac, elle est comptée comme une instance de ce bac, qui contourne le problème de ce qu'il est hautement improbable dans une distribution continue d'observer exactement la même valeur deux fois.Maintenant, nous traitons le milieu de l'intervalle de bac qui contient le nombre maximal en tant que mode
Voila! La mode.
ps vous pouvez également traiter le début de l'intervalle comme le mode via
h$breaks[which.max(h$counts)]
. Comme nous l'avons vu, les modes de distribution continue ne sont pas simples et nécessitent des décisions, d'où pourquoi il n'y a pas de fonction simple pour eux comme il y a avecmean()
etmedian()
la source